From 93cf349a044b256ac3743a8f8cbce09aaaec45c3 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 23 Dec 2018 23:06:00 +0100 Subject: [PATCH] Ref T451, context menu in views (simulated aircraft/model) to disable model --- src/blackgui/components/mappingcomponent.cpp | 15 ++++++++++++- src/blackgui/components/mappingcomponent.h | 3 +++ src/blackgui/menus/menuaction.h | 3 +++ src/blackgui/views/aircraftmodelview.cpp | 22 +++++++++++++++++++ src/blackgui/views/aircraftmodelview.h | 12 +++++++--- src/blackgui/views/simulatedaircraftview.cpp | 13 +++++++++++ src/blackgui/views/simulatedaircraftview.h | 6 +++++ src/blackgui/views/viewbase.h | 3 ++- .../simulation/simulatedaircraftlist.cpp | 5 +++++ .../simulation/simulatedaircraftlist.h | 3 +++ 10 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/blackgui/components/mappingcomponent.cpp b/src/blackgui/components/mappingcomponent.cpp index 0ddef7590..c3ba56e68 100644 --- a/src/blackgui/components/mappingcomponent.cpp +++ b/src/blackgui/components/mappingcomponent.cpp @@ -78,21 +78,25 @@ namespace BlackGui ui->tvp_AircraftModels->setAircraftModelMode(CAircraftModelListModel::OwnAircraftModelClient); ui->tvp_AircraftModels->setResizeMode(CAircraftModelView::ResizingOff); ui->tvp_AircraftModels->addFilterDialog(); - ui->tvp_AircraftModels->menuRemoveItems(CViewBaseNonTemplate::MenuBackend); + ui->tvp_AircraftModels->menuRemoveItems(CAircraftModelView::MenuBackend); + ui->tvp_AircraftModels->menuAddItems(CAircraftModelView::MenuDisableModelsTemp); ui->tvp_RenderedAircraft->setAircraftMode(CSimulatedAircraftListModel::RenderedMode); ui->tvp_RenderedAircraft->setResizeMode(CAircraftModelView::ResizingOnce); + ui->tvp_RenderedAircraft->menuAddItems(CAircraftModelView::MenuDisableModelsTemp); connect(sGui->getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CMappingComponent::onNetworkConnectionStatusChanged); connect(ui->tvp_AircraftModels, &CAircraftModelView::requestUpdate, this, &CMappingComponent::onModelsUpdateRequested); connect(ui->tvp_AircraftModels, &CAircraftModelView::modelDataChanged, this, &CMappingComponent::onRowCountChanged); connect(ui->tvp_AircraftModels, &CAircraftModelView::clicked, this, &CMappingComponent::onModelSelectedInView); + connect(ui->tvp_AircraftModels, &CAircraftModelView::requestTempDisableModelsForMatching, this, &CMappingComponent::onTempDisableModelsForMatchingRequested); connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::modelDataChanged, this, &CMappingComponent::onRowCountChanged); connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::clicked, this, &CMappingComponent::onAircraftSelectedInView); connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestUpdate, this, &CMappingComponent::tokenBucketUpdate); connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestTextMessageWidget, this, &CMappingComponent::requestTextMessageWidget); + connect(ui->tvp_RenderedAircraft, &CSimulatedAircraftView::requestTempDisableModelsForMatching, this, &CMappingComponent::onTempDisableModelsForMatchingRequested); connect(ui->pb_SaveAircraft, &QPushButton::clicked, this, &CMappingComponent::onSaveAircraft); connect(ui->pb_ResetAircraft, &QPushButton::clicked, this, &CMappingComponent::onResetAircraft); @@ -413,6 +417,15 @@ namespace BlackGui ui->tw_SpecializedViews->setCurrentIndex(TabAircraftModels); } + void CMappingComponent::onTempDisableModelsForMatchingRequested(const CAircraftModelList &models) + { + if (models.isEmpty()) { return; } + if (sGui && sGui->getIContextSimulator()) + { + sGui->getIContextSimulator()->disableModelsForMatching(models, true); + } + } + void CMappingComponent::onRemoteAircraftModelChanged(const CSimulatedAircraft &aircraft, const CIdentifier &originator) { if (CIdentifiable::isMyIdentifier(originator)) { return; } diff --git a/src/blackgui/components/mappingcomponent.h b/src/blackgui/components/mappingcomponent.h index b2ce68e44..2078eb1ba 100644 --- a/src/blackgui/components/mappingcomponent.h +++ b/src/blackgui/components/mappingcomponent.h @@ -119,6 +119,9 @@ namespace BlackGui //! Request update for models from backend void onModelsUpdateRequested(); + //! Request temp.disablng of models (for matching) + void onTempDisableModelsForMatchingRequested(const BlackMisc::Simulation::CAircraftModelList &models); + //! Rendered aircraft changed in backend void onRemoteAircraftModelChanged(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const BlackMisc::CIdentifier &originator); diff --git a/src/blackgui/menus/menuaction.h b/src/blackgui/menus/menuaction.h index 9a97217ff..8aaa38cca 100644 --- a/src/blackgui/menus/menuaction.h +++ b/src/blackgui/menus/menuaction.h @@ -169,6 +169,9 @@ namespace BlackGui //! Client simulation/display related static const QString &pathClientSimulationTransfer() { static const QString p("ClientSimulation.Transfer/Transfer"); return p; } + //! Client model set related + static const QString &pathClientModelSet() { static const QString p("Client.Model set"); return p; } + // ---- standard view paths -------- //! Database diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index a89f1ebdd..1da28ab34 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -332,6 +332,19 @@ namespace BlackGui a->setChecked(this->derivedModel()->highlightModelStrings()); addStashMenu = true; } + + // client specific + if (m_menus.testFlag(MenuDisableModelsTemp) && this->hasSelection()) + { + if (!m_menuFlagActions.contains(MenuDisableModelsTemp)) + { + CMenuActions ma; + ma.addAction(CIcons::delete16(), "Temp.disable model", CMenuAction::pathModel(), { this, &CAircraftModelView::requestTempDisable }); + m_menuFlagActions.insert(MenuDisableModelsTemp, ma); + } + menuActions.addActions(initMenuActions(CViewBaseNonTemplate::MenuDisableModelsTemp)); + } + if (addStashMenu) { menuActions.addMenuStash(); } // base class menus @@ -403,6 +416,15 @@ namespace BlackGui sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, "Stashed " + models.getModelStringList(true).join(" "))); } + void CAircraftModelView::requestTempDisable() + { + if (!m_menus.testFlag(MenuCanStashModels)) { return; } + if (!this->hasSelection()) { return; } + const CAircraftModelList models(this->selectedObjects()); + emit this->requestTempDisableModelsForMatching(models); + sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, "Temp.disabled " + models.getModelStringList(true).join(" "))); + } + void CAircraftModelView::displayModelStatisticsDialog() { if (!m_statisticsDialog) diff --git a/src/blackgui/views/aircraftmodelview.h b/src/blackgui/views/aircraftmodelview.h index 6fe7d0056..418926a86 100644 --- a/src/blackgui/views/aircraftmodelview.h +++ b/src/blackgui/views/aircraftmodelview.h @@ -113,12 +113,15 @@ namespace BlackGui //! Request to stash if applicable void requestStash(const BlackMisc::Simulation::CAircraftModelList &models); - //! Highlight stashed models has been toggled - void toggledHighlightStashedModels(); - //! Request further handling of drops I cannot handle on my own void requestHandlingOfStashDrop(const BlackMisc::Aviation::CAirlineIcaoCode &airlineIcao); + //! Temp.disable model + void requestTempDisableModelsForMatching(const BlackMisc::Simulation::CAircraftModelList &models); + + //! Highlight stashed models has been toggled + void toggledHighlightStashedModels(); + //! Models for simulator loaded (JSON) void jsonModelsForSimulatorLoaded(const BlackMisc::Simulation::CSimulatorInfo &simulator); @@ -148,6 +151,9 @@ namespace BlackGui //! Stash shortcut pressed void requestedStash(); + //! Requested a temporary disabled model + void requestTempDisable(); + //! Dialog about model statistics void displayModelStatisticsDialog(); diff --git a/src/blackgui/views/simulatedaircraftview.cpp b/src/blackgui/views/simulatedaircraftview.cpp index 1866db0b7..c67783b5a 100644 --- a/src/blackgui/views/simulatedaircraftview.cpp +++ b/src/blackgui/views/simulatedaircraftview.cpp @@ -72,6 +72,10 @@ namespace BlackGui menuActions.addAction(CIcons::appAircraft16(), "Enable all aircraft", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::enableAllDisabledAircraft }); menuActions.addAction(CIcons::appAircraft16(), "Disable all aircraft", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::disableAllEnabledAircraft }); menuActions.addAction(CIcons::appAircraft16(), "Re-enable unrendered aircraft", CMenuAction::pathClientSimulationDisplay(), { this, &CSimulatedAircraftView::reEnableAllUnrenderedAircraft }); + if (m_menus.testFlag(MenuDisableModelsTemp) && this->hasSelection()) + { + menuActions.addAction(CIcons::delete16(), "Temp.disable model", CMenuAction::pathModel(), { this, &CSimulatedAircraftView::requestTempDisable }); + } } if (this->hasSelection()) @@ -156,6 +160,15 @@ namespace BlackGui this->followAircraftInSimulator(aircraft); } + void CSimulatedAircraftView::requestTempDisable() + { + if (!m_menus.testFlag(MenuCanStashModels)) { return; } + if (!this->hasSelection()) { return; } + const CAircraftModelList models(this->selectedObjects().getModels()); + emit this->requestTempDisableModelsForMatching(models); + sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, "Temp.disabled " + models.getModelStringList(true).join(" "))); + } + void CSimulatedAircraftView::showPositionLogInSimulator() { IContextSimulator *simContext = simulatorContext(); diff --git a/src/blackgui/views/simulatedaircraftview.h b/src/blackgui/views/simulatedaircraftview.h index cb24b5274..410c52ef2 100644 --- a/src/blackgui/views/simulatedaircraftview.h +++ b/src/blackgui/views/simulatedaircraftview.h @@ -60,6 +60,9 @@ namespace BlackGui //! Request a text message void requestTextMessageWidget(const BlackMisc::Aviation::CCallsign &callsign); + //! Disable for matching + void requestTempDisableModelsForMatching(const BlackMisc::Simulation::CAircraftModelList &models); + protected: //! \copydoc CViewBase::customMenu virtual void customMenu(Menus::CMenuActions &menuActions) override; @@ -83,6 +86,9 @@ namespace BlackGui //! Follow in simulator void requestFollowInSimulator(); + //! Request temp disabling of matching models + void requestTempDisable(); + //! Show position log for selected aircraft void showPositionLogInSimulator(); diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index b7aadba01..fba211568 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -141,6 +141,7 @@ namespace BlackGui // maybe shifted in the future to elsewhere MenuHighlightStashed = 1 << 15, //!< highlight stashed models MenuCanStashModels = 1 << 16, //!< stash models + MenuDisableModelsTemp = 1 << 17, //!< temp. disable model MenuStashing = MenuHighlightStashed | MenuCanStashModels, }; Q_DECLARE_FLAGS(Menu, MenuFlag) @@ -540,7 +541,7 @@ namespace BlackGui Menus::CFontMenu *m_fontMenu = nullptr; //!< font menu if applicable CLoadIndicator *m_loadIndicator = nullptr; //!< load indicator if needed Components::CTextEditDialog *m_textEditDialog = nullptr; //!< text edit dialog - QMap m_menuFlagActions; //!< initialized actions + QMap m_menuFlagActions; //!< initialized actions for menu flag (enum) QString m_saveFileName; //!< save file name (JSON) BlackMisc::CDirectories::ColumnIndex m_dirSettingsIndex = BlackMisc::CDirectories::IndexDirLastViewJsonOrDefault; //!< allows to set more specialized directories //!< remember last JSON directory, having this member allows to have specific dir BlackMisc::CSetting m_dirSettings { this }; //!< directory for load/save diff --git a/src/blackmisc/simulation/simulatedaircraftlist.cpp b/src/blackmisc/simulation/simulatedaircraftlist.cpp index 4fc043f17..6013eef9e 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.cpp +++ b/src/blackmisc/simulation/simulatedaircraftlist.cpp @@ -40,6 +40,11 @@ namespace BlackMisc return this->findBy(Predicates::MemberValid(&CSimulatedAircraft::getPilot)).transform(Predicates::MemberTransform(&CSimulatedAircraft::getPilot)); } + CAircraftModelList CSimulatedAircraftList::getModels() const + { + return this->transform(Predicates::MemberTransform(&CSimulatedAircraft::getModel)); + } + CSimulatedAircraftList CSimulatedAircraftList::findByEnabled(bool enabled) const { return this->findBy(&CSimulatedAircraft::isEnabled, enabled); diff --git a/src/blackmisc/simulation/simulatedaircraftlist.h b/src/blackmisc/simulation/simulatedaircraftlist.h index b5540579d..886e5b873 100644 --- a/src/blackmisc/simulation/simulatedaircraftlist.h +++ b/src/blackmisc/simulation/simulatedaircraftlist.h @@ -56,6 +56,9 @@ namespace BlackMisc //! All pilots (with valid data) Network::CUserList getPilots() const; + //! Get all models + CAircraftModelList getModels() const; + //! Enabled / disabled aircraft CSimulatedAircraftList findByEnabled(bool enabled) const;