From 92deb1957258facbce8877073ba58ee4ccfc9f4b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 8 Aug 2018 01:12:31 +0200 Subject: [PATCH] Also allow to use SHIFT + button for models, aircraft * added setTab functions * shift can be used to reset to first tab --- src/blackgui/components/aircraftcomponent.cpp | 6 +++++ src/blackgui/components/aircraftcomponent.h | 15 +++++++++--- .../components/maininfoareacomponent.cpp | 23 +++++++++++++------ .../components/maininfoareacomponent.h | 2 +- .../components/mainkeypadareacomponent.cpp | 12 +++++----- .../components/mainkeypadareacomponent.h | 7 +++--- src/blackgui/components/mappingcomponent.cpp | 6 +++++ src/blackgui/components/mappingcomponent.h | 10 +++++--- src/blackgui/components/settingscomponent.cpp | 4 ++-- src/blackgui/components/settingscomponent.h | 4 ++-- src/swiftguistandard/swiftguistdinit.cpp | 2 +- 11 files changed, 62 insertions(+), 29 deletions(-) diff --git a/src/blackgui/components/aircraftcomponent.cpp b/src/blackgui/components/aircraftcomponent.cpp index 2f455c1e7..24fe6324d 100644 --- a/src/blackgui/components/aircraftcomponent.cpp +++ b/src/blackgui/components/aircraftcomponent.cpp @@ -116,6 +116,12 @@ namespace BlackGui m_updateCounter++; } + void CAircraftComponent::setTab(CAircraftComponent::AircraftTab tab) + { + const int tabIndex = static_cast(tab); + this->setCurrentIndex(tabIndex); + } + void CAircraftComponent::onInfoAreaTabBarChanged(int index) { // ignore in those cases diff --git a/src/blackgui/components/aircraftcomponent.h b/src/blackgui/components/aircraftcomponent.h index 4698310ca..e82e008ec 100644 --- a/src/blackgui/components/aircraftcomponent.h +++ b/src/blackgui/components/aircraftcomponent.h @@ -23,8 +23,6 @@ #include #include -class QWidget; - namespace BlackMisc { namespace Aviation { class CCallsign; } @@ -44,11 +42,19 @@ namespace BlackGui Q_OBJECT public: + //! Tab + //! \remark needs to be in sync with tab order + enum AircraftTab + { + TabAircraftInRange = 0, + TabAirportsInRange + }; + //! Constructor explicit CAircraftComponent(QWidget *parent = nullptr); //! Destructor - virtual ~CAircraftComponent(); + virtual ~CAircraftComponent() override; //! Aircraft in range int countAircraftInView() const; @@ -62,6 +68,9 @@ namespace BlackGui //! Update aircraft/airport view void update(); + //! Set tab + void setTab(AircraftTab tab); + signals: //! Request a text message void requestTextMessageWidget(const BlackMisc::Aviation::CCallsign &callsign); diff --git a/src/blackgui/components/maininfoareacomponent.cpp b/src/blackgui/components/maininfoareacomponent.cpp index 92ec54aff..eaf8e789f 100644 --- a/src/blackgui/components/maininfoareacomponent.cpp +++ b/src/blackgui/components/maininfoareacomponent.cpp @@ -112,14 +112,23 @@ namespace BlackGui void CMainInfoAreaComponent::selectArea(CMainInfoAreaComponent::InfoArea infoArea) { CInfoArea::selectArea(static_cast(infoArea)); + + const Qt::KeyboardModifiers km = QGuiApplication::queryKeyboardModifiers(); + const bool shift = km.testFlag(Qt::ShiftModifier); + if (!shift) { return; } + + // pressing shift will go to overview if (infoArea == InfoAreaSettings) { - // pressing shift will go to overview - const Qt::KeyboardModifiers km = QGuiApplication::queryKeyboardModifiers(); - if (km.testFlag(Qt::ShiftModifier)) - { - ui->comp_Settings->setSettingsOverviewTab(); - } + ui->comp_Settings->setSettingsOverviewTab(); + } + else if (infoArea == InfoAreaAircraft) + { + ui->comp_Aircraft->setTab(CAircraftComponent::TabAircraftInRange); + } + else if (infoArea == InfoAreaMapping) + { + ui->comp_Mappings->setTab(CMappingComponent::TabRenderedAircraft); } } @@ -156,7 +165,7 @@ namespace BlackGui void CMainInfoAreaComponent::selectSettingsTab(int index) { this->selectArea(InfoAreaSettings); - ui->comp_Settings->setSettingsTab(static_cast(index)); + ui->comp_Settings->setTab(static_cast(index)); } void CMainInfoAreaComponent::selectAudioTab() diff --git a/src/blackgui/components/maininfoareacomponent.h b/src/blackgui/components/maininfoareacomponent.h index cc561ca3f..042dfd385 100644 --- a/src/blackgui/components/maininfoareacomponent.h +++ b/src/blackgui/components/maininfoareacomponent.h @@ -50,7 +50,7 @@ namespace BlackGui explicit CMainInfoAreaComponent(QWidget *parent = nullptr); //! Destructor - virtual ~CMainInfoAreaComponent(); + virtual ~CMainInfoAreaComponent() override; //! Info areas enum InfoArea diff --git a/src/blackgui/components/mainkeypadareacomponent.cpp b/src/blackgui/components/mainkeypadareacomponent.cpp index 3a2f4ec22..e5171b0b8 100644 --- a/src/blackgui/components/mainkeypadareacomponent.cpp +++ b/src/blackgui/components/mainkeypadareacomponent.cpp @@ -104,13 +104,13 @@ namespace BlackGui { QPushButton *senderButton = static_cast(QObject::sender()); Q_ASSERT_X(senderButton, Q_FUNC_INFO, "No sender button"); - Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui"); + if (!sGui || sGui->isShuttingDown()) { return; } if (!senderButton) { return; } - const CMainInfoAreaComponent::InfoArea ia = buttonToMainInfoArea(senderButton); - if (ia != CMainInfoAreaComponent::InfoAreaNone) + const CMainInfoAreaComponent::InfoArea infoArea = buttonToMainInfoArea(senderButton); + if (infoArea != CMainInfoAreaComponent::InfoAreaNone) { Q_ASSERT(senderButton->isCheckable()); - emit this->selectedMainInfoAreaDockWidget(ia); + emit this->selectedMainInfoAreaDockWidget(infoArea); senderButton->setChecked(true); // re-check if got unchecked, we use checked buttons like normal buttons return; } @@ -137,11 +137,11 @@ namespace BlackGui } else if (senderButton == ui->pb_Connect) { - emit connectPressed(); + emit this->connectPressed(); } else if (senderButton == ui->pb_Audio) { - emit audioPressed(); + emit this->audioPressed(); } } diff --git a/src/blackgui/components/mainkeypadareacomponent.h b/src/blackgui/components/mainkeypadareacomponent.h index ec18be4f3..9f2c734f2 100644 --- a/src/blackgui/components/mainkeypadareacomponent.h +++ b/src/blackgui/components/mainkeypadareacomponent.h @@ -45,6 +45,9 @@ namespace BlackGui //! Destructor virtual ~CMainKeypadAreaComponent(); + //! Main info area changed + void onMainInfoAreaChanged(int currentTabIndex, QList dockedIndexes, QList floatingIndexes); + signals: //! Button to select main info area has been pressed //! \sa CMainInfoAreaComponent @@ -68,10 +71,6 @@ namespace BlackGui //! Request audio void audioPressed(); - public slots: - //! Main info area changed - void onMainInfoAreaChanged(int currentTabIndex, QList dockedIndexes, QList floatingIndexes); - private: //! Button was clicked void buttonSelected(); diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index e103a6654..7d219a440 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -176,6 +176,12 @@ namespace BlackGui return ui->tvp_AircraftModels->rowCount(); } + void CMappingComponent::setTab(CMappingComponent::TabWidget tab) + { + const int tabIndex = static_cast(tab); + ui->tw_SpecializedViews->setCurrentIndex(tabIndex); + } + CAircraftModelList CMappingComponent::findModelsStartingWith(const QString modelName, Qt::CaseSensitivity cs) { Q_ASSERT(ui->tvp_AircraftModels); diff --git a/src/blackgui/components/mappingcomponent.h b/src/blackgui/components/mappingcomponent.h index 116461916..60395aa87 100644 --- a/src/blackgui/components/mappingcomponent.h +++ b/src/blackgui/components/mappingcomponent.h @@ -55,6 +55,7 @@ namespace BlackGui public: //! Tab widget + //! \remark needs to be in sync with tab order enum TabWidget { TabRenderedAircraft = 0, @@ -65,21 +66,24 @@ namespace BlackGui TabPartsLog }; + //! Log categories + static const BlackMisc::CLogCategoryList &getLogCategories(); + //! Constructor explicit CMappingComponent(QWidget *parent = nullptr); //! Destructor virtual ~CMappingComponent(); - //! Log categories - static const BlackMisc::CLogCategoryList &getLogCategories(); - //! Number of current mappings int countCurrentMappings() const; //! Numer of models int countAircraftModels() const; + //! Set tab + void setTab(TabWidget tab); + //! Find models starting with BlackMisc::Simulation::CAircraftModelList findModelsStartingWith(const QString modelName, Qt::CaseSensitivity cs); diff --git a/src/blackgui/components/settingscomponent.cpp b/src/blackgui/components/settingscomponent.cpp index 395c87fba..eded69c69 100644 --- a/src/blackgui/components/settingscomponent.cpp +++ b/src/blackgui/components/settingscomponent.cpp @@ -141,14 +141,14 @@ namespace BlackGui return ui->comp_SettingsSimulatorBasics->getSimulatorSettings(simulator); } - void CSettingsComponent::setSettingsTab(CSettingsComponent::SettingTab tab) + void CSettingsComponent::setTab(CSettingsComponent::SettingTab tab) { this->setCurrentIndex(static_cast(tab)); } void CSettingsComponent::setSettingsOverviewTab() { - this->setSettingsTab(SettingTabOverview); + this->setTab(SettingTabOverview); } void CSettingsComponent::setGuiOpacity(double value) diff --git a/src/blackgui/components/settingscomponent.h b/src/blackgui/components/settingscomponent.h index 8126fcdad..62abf830d 100644 --- a/src/blackgui/components/settingscomponent.h +++ b/src/blackgui/components/settingscomponent.h @@ -63,7 +63,7 @@ namespace BlackGui BlackMisc::Simulation::Settings::CSpecializedSimulatorSettings getSimulatorSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; //! Set the tab - void setSettingsTab(SettingTab tab); + void setTab(SettingTab tab); //! Set the overview tab void setSettingsOverviewTab(); @@ -96,7 +96,7 @@ namespace BlackGui QScopedPointer ui; }; - } + } // namespace } // namespace #endif // guard diff --git a/src/swiftguistandard/swiftguistdinit.cpp b/src/swiftguistandard/swiftguistdinit.cpp index 47e755649..49eca9368 100644 --- a/src/swiftguistandard/swiftguistdinit.cpp +++ b/src/swiftguistandard/swiftguistdinit.cpp @@ -244,7 +244,7 @@ void SwiftGuiStd::initGuiSignals() connect(ui->comp_Login, &CLoginComponent::requestNetworkSettings, [ this ]() { this->setMainPageInfoArea(CMainInfoAreaComponent::InfoAreaSettings); - ui->comp_MainInfoArea->getSettingsComponent()->setSettingsTab(CSettingsComponent::SettingTabServers); + ui->comp_MainInfoArea->getSettingsComponent()->setTab(CSettingsComponent::SettingTabServers); }); connect(this, &SwiftGuiStd::currentMainInfoAreaChanged, ui->comp_Login, &CLoginComponent::mainInfoAreaChanged);