Ref T451, context menu in views (simulated aircraft/model) to disable model

This commit is contained in:
Klaus Basan
2018-12-23 23:06:00 +01:00
committed by Mat Sutcliffe
parent 158ba34936
commit 93cf349a04
10 changed files with 80 additions and 5 deletions

View File

@@ -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; }

View File

@@ -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);

View File

@@ -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

View File

@@ -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)

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();

View File

@@ -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<MenuFlag, Menus::CMenuActions> m_menuFlagActions; //!< initialized actions
QMap<MenuFlag, Menus::CMenuActions> 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<BlackMisc::Settings::TDirectorySettings> m_dirSettings { this }; //!< directory for load/save

View File

@@ -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);

View File

@@ -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;