diff --git a/samples/blackgui/mainwindow.h b/samples/blackgui/mainwindow.h index 19161c986..1a31e68f0 100644 --- a/samples/blackgui/mainwindow.h +++ b/samples/blackgui/mainwindow.h @@ -118,8 +118,6 @@ private: BlackCore::IContextVoice *m_contextVoice; BlackCore::IContextSettings *m_contextSettings; BlackMisc::Aviation::CAircraft m_ownAircraft; /*!< own aircraft's state */ - BlackMisc::Voice::CVoiceRoom m_voiceRoomCom1; - BlackMisc::Voice::CVoiceRoom m_voiceRoomCom2; QTimer *m_timerUpdateAtcStationsOnline; /*!< timer for update of stations */ QTimer *m_timerUpdateAircraftsInRange; /*!< timer for update of aircrafts */ QTimer *m_timerUpdateUsers; /*!< timer dor update of users */ @@ -450,9 +448,10 @@ private slots: void resetTransponderMode(); /*! - * \brief Override voice room (allows to set an arbitrary voice room for testing purposes) + * Set voice rooms, also + * allows to set an arbitrary voice room for testing purposes */ - void voiceRoomOverride(); + void setAudioVoiceRooms(); /*! * \brief Audio volume handling and mute diff --git a/samples/blackgui/mainwindow_aircraft.cpp b/samples/blackgui/mainwindow_aircraft.cpp index e6cab5e49..dfd6019f5 100644 --- a/samples/blackgui/mainwindow_aircraft.cpp +++ b/samples/blackgui/mainwindow_aircraft.cpp @@ -32,32 +32,17 @@ bool MainWindow::reloadOwnAircraft() { if (!this->isContextNetworkAvailableCheck()) return false; if (this->isCockpitUpdatePending()) return false; + + // check for changed aircraft + bool changed = false; CAircraft loadedAircraft = this->m_contextNetwork->getOwnAircraft(); - - // changed aircraft - if (loadedAircraft == this->m_ownAircraft) return false; - this->m_ownAircraft = loadedAircraft; - - // update voice rooms - if (this->m_contextVoiceAvailable) + if (loadedAircraft != this->m_ownAircraft) { - CVoiceRoomList selectedRooms = this->m_contextNetwork->getSelectedVoiceRooms(); - if (selectedRooms.size() == 2) - { - this->m_voiceRoomCom1 = this->ui->cb_CockpitVoiceRoom1Override->isChecked() ? - CVoiceRoom(this->ui->le_CockpitVoiceRoomCom1->text().trimmed()) : - selectedRooms[0]; - this->m_voiceRoomCom2 = this->ui->cb_CockpitVoiceRoom2Override->isChecked() ? - CVoiceRoom(this->ui->le_CockpitVoiceRoomCom2->text().trimmed()) : - selectedRooms[1]; - } + this->m_ownAircraft = loadedAircraft; + this->updateCockpitFromContext(); + changed = true; } - - // - this->updateCockpitFromContext(); - - // something has changed - return true; + return changed; } /* diff --git a/samples/blackgui/mainwindow_atc.cpp b/samples/blackgui/mainwindow_atc.cpp index d4d82561b..5bd372be0 100644 --- a/samples/blackgui/mainwindow_atc.cpp +++ b/samples/blackgui/mainwindow_atc.cpp @@ -34,6 +34,15 @@ void MainWindow::reloadAtcStationsOnline() this->m_atcListOnline->update(this->m_contextNetwork->getAtcStationsOnline()); this->ui->tv_AtcStationsOnline->resizeColumnsToContents(); this->ui->tv_AtcStationsOnline->resizeRowsToContents(); + + if (!this->m_contextNetwork->isConnected()) + { + // clear metar/ATIS + this->ui->te_AtcStationsOnlineInfo->clear(); + } + + // after reloading, update cockpit based on better information + this->updateCockpitFromContext(); } /* diff --git a/samples/blackgui/mainwindow_cockpit.cpp b/samples/blackgui/mainwindow_cockpit.cpp index 9e6baf1fc..cbfa32a6a 100644 --- a/samples/blackgui/mainwindow_cockpit.cpp +++ b/samples/blackgui/mainwindow_cockpit.cpp @@ -111,15 +111,19 @@ void MainWindow::updateCockpitFromContext() // if (this->m_contextVoiceAvailable) { - bool com1Connected = this->m_voiceRoomCom1.isConnected(); - bool com2Connected = this->m_voiceRoomCom2.isConnected(); + // get all rooms, it is important to get the rooms from voice context here + // these are the ones featuring the real audio status + CVoiceRoomList rooms = this->m_contextVoice->getComVoiceRoomsWithAudioStatus(); + Q_ASSERT(rooms.size() == 2); Q_ASSERT(this->m_usersVoiceCom1); Q_ASSERT(this->m_usersVoiceCom2); + bool com1Connected = rooms[0].isConnected(); + bool com2Connected = rooms[1].isConnected(); + // update views this->m_usersVoiceCom1->update(this->m_contextVoice->getCom1RoomUsers()); this->ui->tv_CockpitVoiceRoom1->resizeColumnsToContents(); this->ui->tv_CockpitVoiceRoom1->resizeRowsToContents(); - this->m_usersVoiceCom2->update(this->m_contextVoice->getCom2RoomUsers()); this->ui->tv_CockpitVoiceRoom2->resizeColumnsToContents(); this->ui->tv_CockpitVoiceRoom2->resizeRowsToContents(); @@ -129,7 +133,7 @@ void MainWindow::updateCockpitFromContext() { // no override QString s = com1Connected ? - QString("*%1").arg(this->m_voiceRoomCom1.getVoiceRoomUrl()) : + QString("*%1").arg(rooms[0].getVoiceRoomUrl()) : ""; this->ui->le_CockpitVoiceRoomCom1->setText(s); } @@ -139,7 +143,7 @@ void MainWindow::updateCockpitFromContext() { // no overrride QString s = com2Connected ? - QString("*%1").arg(this->m_voiceRoomCom2.getVoiceRoomUrl()) : + QString("*%1").arg(rooms[0].getVoiceRoomUrl()) : ""; this->ui->le_CockpitVoiceRoomCom2->setText(s); } @@ -256,28 +260,44 @@ void MainWindow::sendCockpitUpdates() // Now with the new voice room data, really set the // voice rooms in the context // - if (changedCockpit && this->m_contextVoiceAvailable) - { - // set voice rooms here, this allows to use local/remote - // voice context - this->m_contextVoice->setComVoiceRooms(this->m_voiceRoomCom1, this->m_voiceRoomCom2); - } + if (changedCockpit) this->setAudioVoiceRooms(); } /* * Voice room override */ -void MainWindow::voiceRoomOverride() +void MainWindow::setAudioVoiceRooms() { + if (!this->m_contextVoiceAvailable) return; + if (!this->m_contextNetworkAvailable) return; + + // make fields readonly if not overriding this->ui->le_CockpitVoiceRoomCom1->setReadOnly(!this->ui->cb_CockpitVoiceRoom1Override->isChecked()); this->ui->le_CockpitVoiceRoomCom2->setReadOnly(!this->ui->cb_CockpitVoiceRoom2Override->isChecked()); + + CVoiceRoom room1; + CVoiceRoom room2; + CVoiceRoomList selectedVoiceRooms = this->m_contextNetwork->getSelectedVoiceRooms(); + Q_ASSERT(selectedVoiceRooms.size() == 2); + if (this->ui->cb_CockpitVoiceRoom1Override->isChecked()) + room1 = CVoiceRoom(this->ui->le_CockpitVoiceRoomCom1->text().trimmed()); + else { - this->m_voiceRoomCom1 = CVoiceRoom(this->ui->cb_CockpitVoiceRoom1Override->text().trimmed()); + room1 = selectedVoiceRooms[0]; + room1.setAudioPlaying(true); + this->ui->le_CockpitVoiceRoomCom1->setText(room1.getVoiceRoomUrl()); } if (this->ui->cb_CockpitVoiceRoom2Override->isChecked()) + room2 = CVoiceRoom(this->ui->le_CockpitVoiceRoomCom1->text().trimmed()); + else { - this->m_voiceRoomCom2 = CVoiceRoom(this->ui->cb_CockpitVoiceRoom2Override->text().trimmed()); + room2 = selectedVoiceRooms[1]; + room2.setAudioPlaying(true); + this->ui->le_CockpitVoiceRoomCom2->setText(room2.getVoiceRoomUrl()); } + + // set the real voice rooms for audio output + this->m_contextVoice->setComVoiceRooms(room1, room2); } diff --git a/samples/blackgui/mainwindow_init.cpp b/samples/blackgui/mainwindow_init.cpp index b1de8fe51..8192e9786 100644 --- a/samples/blackgui/mainwindow_init.cpp +++ b/samples/blackgui/mainwindow_init.cpp @@ -255,10 +255,10 @@ void MainWindow::initGuiSignals() this->connect(this->ui->ds_CockpitCom2Standby, &QDoubleSpinBox::editingFinished, this, &MainWindow::cockpitValuesChanged); this->connect(this->ui->ds_CockpitTransponder, &QDoubleSpinBox::editingFinished, this, &MainWindow::cockpitValuesChanged); - this->connect(this->ui->cb_CockpitVoiceRoom1Override, &QCheckBox::clicked, this, &MainWindow::voiceRoomOverride); - this->connect(this->ui->cb_CockpitVoiceRoom2Override, &QCheckBox::clicked, this, &MainWindow::voiceRoomOverride); - this->connect(this->ui->le_CockpitVoiceRoomCom1, &QLineEdit::returnPressed, this, &MainWindow::voiceRoomOverride); - this->connect(this->ui->le_CockpitVoiceRoomCom2, &QLineEdit::returnPressed, this, &MainWindow::voiceRoomOverride); + this->connect(this->ui->cb_CockpitVoiceRoom1Override, &QCheckBox::clicked, this, &MainWindow::setAudioVoiceRooms); + this->connect(this->ui->cb_CockpitVoiceRoom2Override, &QCheckBox::clicked, this, &MainWindow::setAudioVoiceRooms); + this->connect(this->ui->le_CockpitVoiceRoomCom1, &QLineEdit::returnPressed, this, &MainWindow::setAudioVoiceRooms); + this->connect(this->ui->le_CockpitVoiceRoomCom2, &QLineEdit::returnPressed, this, &MainWindow::setAudioVoiceRooms); this->connect(this->ui->pb_CockpitToggleCom1, &QPushButton::clicked, this, &MainWindow::cockpitValuesChanged); this->connect(this->ui->pb_CockpitToggleCom2, &QPushButton::clicked, this, &MainWindow::cockpitValuesChanged); this->connect(this->ui->pb_CockpitIdent, &QPushButton::clicked, this, &MainWindow::cockpitValuesChanged); diff --git a/samples/blackgui/mainwindow_voice.cpp b/samples/blackgui/mainwindow_voice.cpp index c6b6cd22b..a6140f0a3 100644 --- a/samples/blackgui/mainwindow_voice.cpp +++ b/samples/blackgui/mainwindow_voice.cpp @@ -142,6 +142,6 @@ void MainWindow::audioVolumes() // update own aircraft, also set volume/mute in voice this->m_ownAircraft.setCom1System(com1); - this->m_ownAircraft.setCom1System(com2); - this->m_contextVoice->setVolumes(this->m_ownAircraft.getCom1System(), this->m_ownAircraft.getCom1System()); + this->m_ownAircraft.setCom2System(com2); + this->m_contextVoice->setVolumes(this->m_ownAircraft.getCom1System(), this->m_ownAircraft.getCom2System()); }