diff -r e3d7e0cc0e6a -r e26fa3b06f4f src/eric7/EricWidgets/EricToolBarManager.py --- a/src/eric7/EricWidgets/EricToolBarManager.py Thu Nov 02 16:01:14 2023 +0100 +++ b/src/eric7/EricWidgets/EricToolBarManager.py Thu Nov 02 16:43:22 2023 +0100 @@ -7,10 +7,20 @@ Module implementing a toolbar manager class. """ -from PyQt6.QtCore import QByteArray, QDataStream, QIODevice, QObject -from PyQt6.QtWidgets import QToolBar +import contextlib -from eric7 import Utilities +from PyQt6.QtCore import ( + QByteArray, + QCoreApplication, + QDataStream, + QIODevice, + QObject, + QSize, + pyqtSlot, +) +from PyQt6.QtWidgets import QStyle, QToolBar + +from eric7 import Preferences, Utilities class EricToolBarManager(QObject): @@ -22,6 +32,27 @@ ToolBarMarker = 0xFEFE CustomToolBarMarker = 0xFDFD + IconSizes = { + # tuples with (icon size, translated size string) + "": ( + 0, + QCoreApplication.translate( + "EricToolBarManager", "default (style dependent)" + ), + ), + "xs": ( + 16, + QCoreApplication.translate("EricToolBarManager", "extra small (16 px)"), + ), + "sm": (22, QCoreApplication.translate("EricToolBarManager", "small (22 px)")), + "md": (32, QCoreApplication.translate("EricToolBarManager", "medium (32 px)")), + "lg": (48, QCoreApplication.translate("EricToolBarManager", "large (48 px)")), + "xl": ( + 64, + QCoreApplication.translate("EricToolBarManager", "extra large (64 px)"), + ), + } + def __init__(self, ui=None, parent=None): """ Constructor @@ -145,6 +176,12 @@ if toolBar is None: return + iconSizeStr = Preferences.getIcons("IconSize") + if iconSizeStr: + with contextlib.suppress(KeyError): + iconSize = EricToolBarManager.IconSizes[iconSizeStr][0] + toolBar.setIconSize(QSize(iconSize, iconSize)) + newActions = [] newActionsWithSeparators = [] actions = toolBar.actions() @@ -717,3 +754,30 @@ if tbID not in self.__defaultToolBars: return [] return self.__defaultToolBars[tbID][:] + + @pyqtSlot() + def preferencesChanged(self): + """ + Public slot to handle a change of preferences. + """ + iconSizeStr = Preferences.getIcons("IconSize") + if iconSizeStr: + try: + iconSize = EricToolBarManager.IconSizes[iconSizeStr][0] + except KeyError: + # determine icon size through the style + iconSize = ( + list(self.__allToolBars.items()[0]) + .style() + .pixelMetric(QStyle.PixelMetric.PM_ToolBarIconSize) + ) + else: + # determine icon size through the style + iconSize = ( + list(self.__allToolBars.values())[0] + .style() + .pixelMetric(QStyle.PixelMetric.PM_ToolBarIconSize) + ) + + for tbID in self.__allToolBars: + self.__allToolBars[tbID].setIconSize(QSize(iconSize, iconSize))