From 3d76eabac5aa5122598f8f1c2f2924c02f790d84 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 12 Nov 2017 03:38:43 +0100 Subject: [PATCH] Ref T189, context menu "Clear highlighting" only if there are highlighted rows * added customMenu in template * added hasHighlightedRows --- src/blackgui/models/aircraftmodellistmodel.cpp | 4 ++++ src/blackgui/models/aircraftmodellistmodel.h | 5 ++++- src/blackgui/models/listmodelbase.cpp | 6 ++++++ src/blackgui/models/listmodelbase.h | 3 +++ src/blackgui/views/viewbase.cpp | 15 ++++++++++++--- src/blackgui/views/viewbase.h | 3 +++ 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/blackgui/models/aircraftmodellistmodel.cpp b/src/blackgui/models/aircraftmodellistmodel.cpp index 83dae0233..ffaec9616 100644 --- a/src/blackgui/models/aircraftmodellistmodel.cpp +++ b/src/blackgui/models/aircraftmodellistmodel.cpp @@ -221,5 +221,9 @@ namespace BlackGui this->m_highlightStrings.clear(); COrderableListModelDbObjects::clearHighlighting(); } + bool CAircraftModelListModel::hasHighlightedRows() const + { + return !m_highlightStrings.isEmpty(); + } } // namespace } // namespace diff --git a/src/blackgui/models/aircraftmodellistmodel.h b/src/blackgui/models/aircraftmodellistmodel.h index 18fb86d74..7fdd47f28 100644 --- a/src/blackgui/models/aircraftmodellistmodel.h +++ b/src/blackgui/models/aircraftmodellistmodel.h @@ -71,9 +71,12 @@ namespace BlackGui //! The highlight color void setHighlightModelStringsColor(const QBrush &brush) { m_highlightColor = brush; } - //! \copydoc CListModelBase::clearHighlighting + //! \copydoc CListModelBaseNonTemplate::clearHighlighting virtual void clearHighlighting() override; + //! \copydoc CListModelBaseNonTemplate::hasHighlightedRows + virtual bool hasHighlightedRows() const override; + //! Model strings QStringList getModelStrings(bool sort) const; diff --git a/src/blackgui/models/listmodelbase.cpp b/src/blackgui/models/listmodelbase.cpp index 2dfd061d0..79b0fb800 100644 --- a/src/blackgui/models/listmodelbase.cpp +++ b/src/blackgui/models/listmodelbase.cpp @@ -210,6 +210,12 @@ namespace BlackGui // can be overridden to delete highlighting } + bool CListModelBaseNonTemplate::hasHighlightedRows() const + { + return false; + // can be overridden to enable highlighting based operations + } + void CListModelBaseNonTemplate::emitDataChanged(int startRowIndex, int endRowIndex) { BLACK_VERIFY_X(startRowIndex <= endRowIndex, Q_FUNC_INFO, "check rows"); diff --git a/src/blackgui/models/listmodelbase.h b/src/blackgui/models/listmodelbase.h index db96287cd..84c7621da 100644 --- a/src/blackgui/models/listmodelbase.h +++ b/src/blackgui/models/listmodelbase.h @@ -114,6 +114,9 @@ namespace BlackGui //! Remove all highlighting virtual void clearHighlighting(); + //! Has highlighted rows? + virtual bool hasHighlightedRows() const; + //! Drop actions void setDropActions(Qt::DropActions dropActions) { this->m_dropActions = dropActions; } diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 7bec6df67..a53d82e3b 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -430,9 +430,6 @@ namespace BlackGui actionInteractiveResize->setChecked(autoResize); actionInteractiveResize->setEnabled(enabled); connect(actionInteractiveResize, &QAction::toggled, this, &CViewBaseNonTemplate::ps_toggleResizeMode); - - // Clear highlighting - menuActions.addAction(CIcons::refresh16(), "Clear highlighting", CMenuAction::pathViewClearHighlighting(), nullptr , { this, &CViewBaseNonTemplate::clearHighlighting }); } void CViewBaseNonTemplate::resizeEvent(QResizeEvent *event) @@ -1422,6 +1419,18 @@ namespace BlackGui Q_UNUSED(data); } + template + void CViewBase::customMenu(CMenuActions &menuActions) + { + CViewBaseNonTemplate::customMenu(menuActions); + + // Clear highlighting + if (this->derivedModel()->hasHighlightedRows()) + { + menuActions.addAction(CIcons::refresh16(), "Clear highlighting", CMenuAction::pathViewClearHighlighting(), nullptr , { this, &CViewBaseNonTemplate::clearHighlighting }); + } + } + template CStatusMessage CViewBase::ps_loadJson() { diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 149c9a106..775f0ede7 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -706,6 +706,9 @@ namespace BlackGui //! \remark I cannot use a signal with a template parameter, so this functions serves as callback virtual void jsonLoadedAndModelUpdated(const ContainerType &data); + //! \copydoc CViewBaseNonTemplate::customMenu + virtual void customMenu(BlackGui::Menus::CMenuActions &menuActions) override; + // --------------------------------------------- SLOTS start here ----------------------------------------- //! \name Slot overrides from base class