diff --git a/src/blackgui/components/dbownmodelsetcomponent.cpp b/src/blackgui/components/dbownmodelsetcomponent.cpp index 55ad55dea..9e976c19d 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.cpp +++ b/src/blackgui/components/dbownmodelsetcomponent.cpp @@ -87,10 +87,10 @@ namespace BlackGui { ui->comp_SimulatorSelector->setValue(simulator); ui->le_Simulator->setText(simulator.toQString(true)); - const QPointer guard(this); + const QPointer myself(this); QTimer::singleShot(500, [ = ]() { - if (guard.isNull() || !sApp || sApp->isShuttingDown()) { return; } + if (myself.isNull() || !sApp || sApp->isShuttingDown()) { return; } this->updateViewToCurrentModels(); }); } @@ -274,7 +274,8 @@ namespace BlackGui void CDbOwnModelSetComponent::viewModelChanged() { - ui->pb_SaveAsSetForSimulator->setEnabled(true); + const bool hasData = ui->tvp_OwnModelSet->rowCount() > 0; + ui->pb_SaveAsSetForSimulator->setEnabled(hasData); } void CDbOwnModelSetComponent::setSaveFileName(const CSimulatorInfo &simulator) diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index d6f6a92a4..9ad5d217d 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -51,7 +51,9 @@ namespace BlackGui this->standardInit(new CAircraftModelListModel(CAircraftModelListModel::OwnAircraftModelClient, this)); // shortcut - new QShortcut(CShortcut::keyStash(), this, SLOT(ps_requestStash()), nullptr, Qt::WidgetShortcut); + QShortcut *stashShortcut = new QShortcut(CShortcut::keyStash(), this); + stashShortcut->setContext(Qt::WidgetShortcut); + connect(stashShortcut, &QShortcut::activated, this, &CAircraftModelView::requestedStash); // default mode CAircraftModelListModel::AircraftModelMode mode = derivedModel()->getModelMode(); @@ -205,7 +207,7 @@ namespace BlackGui if (CGuiUtility::hasSwiftVariantMimeType(mime)) { - CVariant valueVariant(CGuiUtility::fromSwiftDragAndDropData(mime)); + const CVariant valueVariant(CGuiUtility::fromSwiftDragAndDropData(mime)); if (valueVariant.isValid()) { if (valueVariant.canConvert()) @@ -294,8 +296,8 @@ namespace BlackGui if (!m_menuFlagActions.contains(MenuCanStashModels)) { CMenuActions ma; - ma.addAction(CIcons::appDbStash16(), "Stash selected", CMenuAction::pathStash(), { this, &CAircraftModelView::ps_requestStash }); - QAction *added = ma.addAction(CIcons::appDbStash16(), "Stashing clears selection (on/off)", CMenuAction::pathStash(), { this, &CAircraftModelView::ps_stashingClearsSelection }); + ma.addAction(CIcons::appDbStash16(), "Stash selected", CMenuAction::pathStash(), { this, &CAircraftModelView::requestedStash }); + QAction *added = ma.addAction(CIcons::appDbStash16(), "Stashing clears selection (on/off)", CMenuAction::pathStash(), { this, &CAircraftModelView::stashingClearsSelection }); added->setCheckable(true); m_menuFlagActions.insert(MenuCanStashModels, ma); } @@ -316,7 +318,7 @@ namespace BlackGui if (!m_menuFlagActions.contains(MenuHighlightStashed)) { CMenuActions ma; - QAction *added = ma.addAction(CIcons::appDbStash16(), "Highlight stashed (on/off)", CMenuAction::pathStash(), { this, &CAircraftModelView::ps_toggleHighlightStashedModels }); + QAction *added = ma.addAction(CIcons::appDbStash16(), "Highlight stashed (on/off)", CMenuAction::pathStash(), { this, &CAircraftModelView::toggleHighlightStashedModels }); added->setCheckable(true); m_menuFlagActions.insert(MenuHighlightStashed, ma); } @@ -354,33 +356,33 @@ namespace BlackGui { if (models.isEmpty()) { - emit jsonModelsForSimulatorLoaded(CSimulatorInfo()); + emit this->jsonModelsForSimulatorLoaded(CSimulatorInfo()); } else { - emit jsonModelsForSimulatorLoaded(models.simulatorsWithMaxEntries()); + emit this->jsonModelsForSimulatorLoaded(models.simulatorsWithMaxEntries()); } } - void CAircraftModelView::ps_toggleHighlightStashedModels() + void CAircraftModelView::toggleHighlightStashedModels() { bool h = derivedModel()->highlightModelStrings(); derivedModel()->setHighlightModelStrings(!h); emit toggledHighlightStashedModels(); } - void CAircraftModelView::ps_toogleHighlightInvalidModels() + void CAircraftModelView::toggleHighlightInvalidModels() { bool h = this->highlightModelStrings(); this->setHighlightModelStrings(!h); } - void CAircraftModelView::ps_stashingClearsSelection() + void CAircraftModelView::stashingClearsSelection() { m_stashingClearsSelection = !m_stashingClearsSelection; } - void CAircraftModelView::ps_requestStash() + void CAircraftModelView::requestedStash() { if (!m_menus.testFlag(MenuCanStashModels)) { return; } if (!this->hasSelection()) { return; } diff --git a/src/blackgui/views/aircraftmodelview.h b/src/blackgui/views/aircraftmodelview.h index 0c77a9ce5..bacf3ab74 100644 --- a/src/blackgui/views/aircraftmodelview.h +++ b/src/blackgui/views/aircraftmodelview.h @@ -134,20 +134,19 @@ namespace BlackGui virtual void jsonLoadedAndModelUpdated(const BlackMisc::Simulation::CAircraftModelList &models) override; //! @} - private slots: - //! Highlight stashed models - void ps_toggleHighlightStashedModels(); - + private: //! Toggle highlight invalid models - void ps_toogleHighlightInvalidModels(); + void toggleHighlightInvalidModels(); //! Toggle if stashing unselects - void ps_stashingClearsSelection(); + void stashingClearsSelection(); + + //! Highlight stashed models + void toggleHighlightStashedModels(); //! Stash shortcut pressed - void ps_requestStash(); + void requestedStash(); - private: bool m_stashingClearsSelection = true; //!< stashing unselects BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading }; diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 00d3da42b..cc04c9efa 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -88,16 +88,30 @@ namespace BlackGui this->setTextElideMode(Qt::ElideMiddle); // shortcuts - QShortcut *filter = new QShortcut(CShortcut::keyDisplayFilter(), this, SLOT(ps_displayFilterDialog()), nullptr, Qt::WidgetShortcut); + QShortcut *filter = new QShortcut(CShortcut::keyDisplayFilter(), this); + connect(filter, &QShortcut::activated, this, &CViewBaseNonTemplate::displayFilterDialog); filter->setObjectName("Filter shortcut for " + this->objectName()); - QShortcut *clearSelection = new QShortcut(CShortcut::keyClearSelection(), this, SLOT(clearSelection()), nullptr, Qt::WidgetShortcut); + filter->setContext(Qt::WidgetShortcut); + + QShortcut *clearSelection = new QShortcut(CShortcut::keyClearSelection(), this); + connect(clearSelection, &QShortcut::activated, this, &CViewBaseNonTemplate::clearSelection); clearSelection->setObjectName("Clear selection shortcut for " + this->objectName()); - QShortcut *saveJson = new QShortcut(CShortcut::keySaveViews(), this, SLOT(ps_saveJsonAction()), nullptr, Qt::WidgetShortcut); + clearSelection->setContext(Qt::WidgetShortcut); + + QShortcut *saveJson = new QShortcut(CShortcut::keySaveViews(), this); + connect(saveJson, &QShortcut::activated, this, &CViewBaseNonTemplate::saveJsonAction); saveJson->setObjectName("Save JSON for " + this->objectName()); - QShortcut *deleteRow = new QShortcut(CShortcut::keyDelete(), this, SLOT(ps_removeSelectedRows()), nullptr, Qt::WidgetShortcut); - deleteRow->setObjectName("Delete selected rows for " + this->objectName()); - QShortcut *copy = new QShortcut(CShortcut::keyCopy(), this, SLOT(ps_copy()), nullptr, Qt::WidgetShortcut); - copy->setObjectName("Copy rows for " + this->objectName()); + saveJson->setContext(Qt::WidgetShortcut); + + QShortcut *deleteRow = new QShortcut(CShortcut::keyDelete(), this); + connect(deleteRow, &QShortcut::activated, this, &CViewBaseNonTemplate::ps_removeSelectedRows); + deleteRow->setObjectName("Remove selected rows for " + this->objectName()); + deleteRow->setContext(Qt::WidgetShortcut); + + QShortcut *copy = new QShortcut(CShortcut::keyCopy(), this); + connect(copy, &QShortcut::activated, this, &CViewBaseNonTemplate::ps_copy); + copy->setObjectName("Copy selection shortcut for " + this->objectName()); + copy->setContext(Qt::WidgetShortcut); } CViewBaseNonTemplate::~CViewBaseNonTemplate() @@ -251,14 +265,14 @@ namespace BlackGui if (m_filterWidget) { const bool dialog = qobject_cast(m_filterWidget); - if (dialog) ma.addAction(CIcons::filter16(), "Show filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::ps_displayFilterDialog }, CShortcut::keyDisplayFilter()); + if (dialog) ma.addAction(CIcons::filter16(), "Show filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::displayFilterDialog }, CShortcut::keyDisplayFilter()); ma.addAction(CIcons::filter16(), "Remove Filter", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::ps_removeFilter }); } break; } case MenuMaterializeFilter: { ma.addAction(CIcons::tableRelationship16(), "Materialize filtered data", CMenuAction::pathViewFilter(), { this, &CViewBaseNonTemplate::materializeFilter }); break; } case MenuLoad: { ma.addAction(CIcons::disk16(), "Load from file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_loadJsonAction }); break; } - case MenuSave: { ma.addAction(CIcons::disk16(), "Save data in file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::ps_saveJsonAction }, CShortcut::keySaveViews()); break; } + case MenuSave: { ma.addAction(CIcons::disk16(), "Save data in file", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::saveJsonAction }, CShortcut::keySaveViews()); break; } case MenuCut: { if (!QApplication::clipboard()) break; @@ -565,7 +579,7 @@ namespace BlackGui return this->performUpdateContainer(variant, sort, resize); } - void CViewBaseNonTemplate::ps_displayFilterDialog() + void CViewBaseNonTemplate::displayFilterDialog() { if (!m_menus.testFlag(MenuFilter)) { return; } if (!m_filterWidget) { return; } @@ -582,7 +596,7 @@ namespace BlackGui } } - void CViewBaseNonTemplate::ps_saveJsonAction() + void CViewBaseNonTemplate::saveJsonAction() { if (this->isEmpty()) { return; } if (!m_menus.testFlag(MenuSave)) { return; } diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 44d836291..e05941b03 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -429,6 +429,12 @@ namespace BlackGui //! Draw drop indicator virtual void drawDropIndicator(bool indicator) = 0; + //! Save JSON for action/menu, no return signatur + void saveJsonAction(); + + //! Display the filter dialog + void displayFilterDialog(); + //! Settings have been changed void settingsChanged(); @@ -463,9 +469,6 @@ namespace BlackGui //! Helper method with template free signature serving as callback from threaded worker int ps_updateContainer(const BlackMisc::CVariant &variant, bool sort, bool resize); - //! Display the filter dialog - void ps_displayFilterDialog(); - //! Remove filter virtual void ps_removeFilter() = 0; @@ -493,9 +496,6 @@ namespace BlackGui //! Save JSON virtual BlackMisc::CStatusMessage ps_saveJson() = 0; - //! Save JSON for action/menu, no return signatur - void ps_saveJsonAction(); - //! Trigger reload from backend by signal requestUpdate(); void ps_triggerReload(); @@ -517,10 +517,6 @@ namespace BlackGui //! Highlight DB data virtual void ps_toggleHighlightDbData() {} - private slots: - //! Remove selected rows - void ps_removeSelectedRows(); - private: //! \name Change selection modes @{ void setMultiSelection(); @@ -528,6 +524,9 @@ namespace BlackGui void setSingleSelection(); //! @} + //! Remove selected rows + void ps_removeSelectedRows(); + //! Toggle auto display flag void toggleAutoDisplay();