From cad54f2ceac6ec89def951df9f4653a9ca117cef Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 7 Aug 2017 01:33:18 +1000 Subject: [PATCH] Fix incorrect icon sizes in Python console Console was not respecting application icon size setting --- python/console/console.py | 4 +- python/gui/qgisinterface.sip | 7 +++ .../processing/gui/ScriptEditorDialog.py | 3 +- .../processing/modeler/ModelerDialog.py | 2 + src/app/qgisapp.cpp | 45 +++++++++++++------ src/app/qgisapp.h | 11 +++++ src/app/qgisappinterface.cpp | 5 +++ src/app/qgisappinterface.h | 2 + src/gui/qgisinterface.h | 6 +++ 9 files changed, 68 insertions(+), 17 deletions(-) diff --git a/python/console/console.py b/python/console/console.py index e84cf73a8e1..477d51fb145 100644 --- a/python/console/console.py +++ b/python/console/console.py @@ -351,7 +351,7 @@ class PythonConsoleWidget(QWidget): self.toolBar.setFocusPolicy(Qt.NoFocus) self.toolBar.setContextMenuPolicy(Qt.DefaultContextMenu) self.toolBar.setLayoutDirection(Qt.LeftToRight) - self.toolBar.setIconSize(QSize(16, 16)) + self.toolBar.setIconSize(iface.iconSize(dockedToolbar=True)) self.toolBar.setMovable(False) self.toolBar.setFloatable(False) self.toolBar.addAction(self.clearButton) @@ -367,7 +367,7 @@ class PythonConsoleWidget(QWidget): self.toolBarEditor.setFocusPolicy(Qt.NoFocus) self.toolBarEditor.setContextMenuPolicy(Qt.DefaultContextMenu) self.toolBarEditor.setLayoutDirection(Qt.LeftToRight) - self.toolBarEditor.setIconSize(QSize(16, 16)) + self.toolBarEditor.setIconSize(iface.iconSize(dockedToolbar=True)) self.toolBarEditor.setMovable(False) self.toolBarEditor.setFloatable(False) self.toolBarEditor.addAction(self.openFileButton) diff --git a/python/gui/qgisinterface.sip b/python/gui/qgisinterface.sip index 71fedc05af6..4ab99eee6dc 100644 --- a/python/gui/qgisinterface.sip +++ b/python/gui/qgisinterface.sip @@ -99,6 +99,13 @@ Constructor .. seealso:: createNewMapCanvas() %End + virtual QSize iconSize( bool dockedToolbar = false ) const = 0; +%Docstring + Returns the toolbar icon size. If ``dockedToolbar`` is true, the icon size + for toolbars contained within docks is returned. + :rtype: QSize +%End + public slots: // TODO: do these functions really need to be slots? diff --git a/python/plugins/processing/gui/ScriptEditorDialog.py b/python/plugins/processing/gui/ScriptEditorDialog.py index da2f8d70e5d..0e0202ad63e 100644 --- a/python/plugins/processing/gui/ScriptEditorDialog.py +++ b/python/plugins/processing/gui/ScriptEditorDialog.py @@ -68,8 +68,7 @@ class ScriptEditorDialog(BASE, WIDGET): self.restoreState(settings.value("/Processing/stateScriptEditor", QByteArray())) self.restoreGeometry(settings.value("/Processing/geometryScriptEditor", QByteArray())) - iconSize = int(settings.value("IconSize", 24)) - self.toolBar.setIconSize(QSize(iconSize, iconSize)) + self.toolBar.setIconSize(iface.iconSize()) self.actionOpenScript.setIcon( QgsApplication.getThemeIcon('/mActionFileOpen.svg')) diff --git a/python/plugins/processing/modeler/ModelerDialog.py b/python/plugins/processing/modeler/ModelerDialog.py index 867b79a5d40..4e571f9c957 100644 --- a/python/plugins/processing/modeler/ModelerDialog.py +++ b/python/plugins/processing/modeler/ModelerDialog.py @@ -52,6 +52,8 @@ from processing.modeler.ModelerParameterDefinitionDialog import ModelerParameter from processing.modeler.ModelerParametersDialog import ModelerParametersDialog from processing.modeler.ModelerUtils import ModelerUtils from processing.modeler.ModelerScene import ModelerScene +from qgis.utils import iface + from processing.modeler.WrongModelException import WrongModelException from qgis.PyQt.QtXml import QDomDocument diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 8ff143c7e2f..c004d2c4408 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -1786,6 +1786,24 @@ int QgisApp::chooseReasonableDefaultIconSize() const } +int QgisApp::dockedToolbarIconSize( int standardToolbarIconSize ) const +{ + int dockSize; + if ( standardToolbarIconSize > 32 ) + { + dockSize = standardToolbarIconSize - 16; + } + else if ( standardToolbarIconSize == 32 ) + { + dockSize = 24; + } + else + { + dockSize = 16; + } + return dockSize; +} + void QgisApp::readSettings() { QgsSettings settings; @@ -2831,19 +2849,7 @@ void QgisApp::createStatusBar() void QgisApp::setIconSizes( int size ) { - int dockSize; - if ( size > 32 ) - { - dockSize = size - 16; - } - else if ( size == 32 ) - { - dockSize = 24; - } - else - { - dockSize = 16; - } + int dockSize = dockedToolbarIconSize( size ); //Set the icon size of for all the toolbars created in the future. setIconSize( QSize( size, size ) ); @@ -9736,6 +9742,19 @@ QgsMapLayer *QgisApp::activeLayer() return mLayerTreeView ? mLayerTreeView->currentLayer() : nullptr; } +QSize QgisApp::iconSize( bool dockedToolbar ) const +{ + QgsSettings s; + int size = s.value( QStringLiteral( "/IconSize" ), 32 ).toInt(); + + if ( dockedToolbar ) + { + size = dockedToolbarIconSize( size ); + } + + return QSize( size, size ); +} + bool QgisApp::setActiveLayer( QgsMapLayer *layer ) { if ( !layer ) diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index 38f7138114e..62f87cca313 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -621,6 +621,12 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow //! Returns the active map layer. QgsMapLayer *activeLayer(); + /** + * Returns the toolbar icon size. If \a dockedToolbar is true, the icon size + * for toolbars contained within docks is returned. + */ + QSize iconSize( bool dockedToolbar = false ) const; + public slots: //! Process the list of URIs that have been dropped in QGIS void handleDropUriList( const QgsMimeDataUtils::UriList &lst ); @@ -1715,6 +1721,11 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow //! Attempts to choose a reasonable default icon size based on the window's screen DPI int chooseReasonableDefaultIconSize() const; + /** + * Returns the size of docked toolbars for a given standard (non-docked) toolbar icon size. + */ + int dockedToolbarIconSize( int standardToolbarIconSize ) const; + QgisAppStyleSheet *mStyleSheetBuilder = nullptr; // actions for menus and toolbars ----------------- diff --git a/src/app/qgisappinterface.cpp b/src/app/qgisappinterface.cpp index 8582c468fe2..6dcd1ca2779 100644 --- a/src/app/qgisappinterface.cpp +++ b/src/app/qgisappinterface.cpp @@ -352,6 +352,11 @@ void QgisAppInterface::closeMapCanvas( const QString &name ) qgis->closeMapCanvas( name ); } +QSize QgisAppInterface::iconSize( bool dockedToolbar ) const +{ + return qgis->iconSize( dockedToolbar ); +} + QgsLayerTreeMapCanvasBridge *QgisAppInterface::layerTreeCanvasBridge() { return qgis->layerTreeCanvasBridge(); diff --git a/src/app/qgisappinterface.h b/src/app/qgisappinterface.h index d659533d50c..c23e6ac3586 100644 --- a/src/app/qgisappinterface.h +++ b/src/app/qgisappinterface.h @@ -183,6 +183,8 @@ class APP_EXPORT QgisAppInterface : public QgisInterface QgsMapCanvas *createNewMapCanvas( const QString &name ) override; virtual void closeMapCanvas( const QString &name ) override; + virtual QSize iconSize( bool dockedToolbar = false ) const override; + /** * Returns a pointer to the layer tree canvas bridge * diff --git a/src/gui/qgisinterface.h b/src/gui/qgisinterface.h index d46abe7c343..a18edb0ab7b 100644 --- a/src/gui/qgisinterface.h +++ b/src/gui/qgisinterface.h @@ -128,6 +128,12 @@ class GUI_EXPORT QgisInterface : public QObject */ virtual void closeMapCanvas( const QString &name ) = 0; + /** + * Returns the toolbar icon size. If \a dockedToolbar is true, the icon size + * for toolbars contained within docks is returned. + */ + virtual QSize iconSize( bool dockedToolbar = false ) const = 0; + public slots: // TODO: do these functions really need to be slots? /* Exposed functions */