From eb3b2252a277526fdab2abb432fb5fdba22e060d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 12 Dec 2016 01:57:10 +0100 Subject: [PATCH] refs #830, use settings in views also avoid changing style when not needed --- src/blackgui/guiapplication.cpp | 2 +- src/blackgui/views/viewbase.cpp | 33 ++++++++++++++++++++++++++++++--- src/blackgui/views/viewbase.h | 14 ++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index ad397349e..ea2d88706 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -75,9 +75,9 @@ namespace BlackGui CGuiApplication::registerMetadata(); CApplication::init(false); // base class without metadata this->setWindowIcon(icon); + this->settingsChanged(); sGui = this; connect(&this->m_styleSheetUtility, &CStyleSheetUtility::styleSheetsChanged, this, &CGuiApplication::styleSheetsChanged); - reloadWidgetStyleFromSettings(); } } diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 8dfa889da..14a101231 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -89,6 +89,7 @@ using namespace BlackGui; using namespace BlackGui::Menus; using namespace BlackGui::Models; using namespace BlackGui::Filters; +using namespace BlackGui::Settings; namespace BlackGui { @@ -262,6 +263,19 @@ namespace BlackGui return ma; } + void CViewBaseNonTemplate::settingsChanged() + { + if (this->allowsMultipleSelectedRows()) + { + const CGeneralGuiSettings settings = this->m_guiSettings.getThreadLocal(); + this->m_originalSelectionMode = settings.getPreferredSelection(); + if (this->isCurrentlyAllowingMultipleRowSelections()) + { + this->setSelectionMode(settings.getPreferredSelection()); + } + } + } + void CViewBaseNonTemplate::customMenu(CMenuActions &menuActions) { // delegate? @@ -405,6 +419,17 @@ namespace BlackGui return this->selectedRowCount() > 1; } + bool CViewBaseNonTemplate::allowsMultipleSelectedRows() const + { + return this->m_originalSelectionMode == ExtendedSelection || this->m_originalSelectionMode == MultiSelection; + } + + bool CViewBaseNonTemplate::isCurrentlyAllowingMultipleRowSelections() const + { + QAbstractItemView::SelectionMode m = this->selectionMode(); + return m == QAbstractItemView::MultiSelection || m == QAbstractItemView::ExtendedSelection; + } + void CViewBaseNonTemplate::init() { const int fh = qRound(1.5 * this->getHorizontalHeaderFontHeight()); @@ -421,6 +446,8 @@ namespace BlackGui Q_ASSERT_X(false, Q_FUNC_INFO, "wrong resize mode"); break; } + + this->settingsChanged(); } QString CViewBaseNonTemplate::getDefaultFilename(bool load) const @@ -652,7 +679,7 @@ namespace BlackGui void CViewBaseNonTemplate::ps_setSingleSelection() { - if (this->m_originalSelectionMode == ExtendedSelection || this->m_originalSelectionMode == MultiSelection) + if (this->allowsMultipleSelectedRows()) { this->setSelectionMode(SingleSelection); } @@ -660,7 +687,7 @@ namespace BlackGui void CViewBaseNonTemplate::ps_setExtendedSelection() { - if (this->m_originalSelectionMode == ExtendedSelection || this->m_originalSelectionMode == MultiSelection) + if (this->allowsMultipleSelectedRows()) { this->setSelectionMode(ExtendedSelection); } @@ -668,7 +695,7 @@ namespace BlackGui void CViewBaseNonTemplate::ps_setMultiSelection() { - if (this->m_originalSelectionMode == ExtendedSelection || this->m_originalSelectionMode == MultiSelection) + if (this->allowsMultipleSelectedRows()) { this->setSelectionMode(MultiSelection); } diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index f4d88c6b5..fe13c1a10 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -12,11 +12,11 @@ #ifndef BLACKGUI_VIEWBASE_H #define BLACKGUI_VIEWBASE_H -#include "blackgui/blackguiexport.h" #include "blackgui/components/enablefordockwidgetinfoarea.h" #include "blackgui/menus/menuaction.h" #include "blackgui/models/modelfilter.h" -#include "blackmisc/namevariantpair.h" +#include "blackgui/settings/guisettings.h" +#include "blackgui/blackguiexport.h" #include "blackmisc/namevariantpairlist.h" #include "blackmisc/propertyindex.h" #include "blackmisc/propertyindexvariantmap.h" @@ -197,6 +197,12 @@ namespace BlackGui //! Multiple selected rows bool hasMultipleSelectedRows() const; + //! Allows to select multiple rows + bool allowsMultipleSelectedRows() const; + + //! Is the current selection mode allow multiple selection + bool isCurrentlyAllowingMultipleRowSelections() const; + //! Filter dialog void setFilterDialog(BlackGui::Filters::CFilterDialog *filterDialog); @@ -376,6 +382,9 @@ namespace BlackGui //! Draw drop indicator virtual void drawDropIndicator(bool indicator) = 0; + //! Settings have been changed + void settingsChanged(); + QString m_saveFileName; //!< save file name (JSON) ResizeMode m_resizeMode = PresizeSubset; //!< mode RowsResizeMode m_rowResizeMode = Interactive; //!< row resize mode for row height @@ -397,6 +406,7 @@ namespace BlackGui BlackGui::Menus::IMenuDelegate *m_menu = nullptr; //!< custom menu if any BlackGui::CLoadIndicator *m_loadIndicator = nullptr; //!< load indicator if needed QMap m_menuFlagActions; //!< initialized actions + BlackMisc::CSettingReadOnly m_guiSettings { this, &CViewBaseNonTemplate::settingsChanged }; //!< general GUI settings protected slots: //! Helper method with template free signature serving as callback from threaded worker