Add option to use internal icons in details dialog

* On Windows and MacOS, no idea how themes work so only allow Linux to use their theme icons
* Internal icons are used by default on non-Linux platforms
This commit is contained in:
glubsy 2020-07-21 03:52:15 +02:00
parent 298f659f6e
commit cf64565012
3 changed files with 35 additions and 6 deletions

View File

@ -49,7 +49,9 @@ class ViewerToolBar(QToolBar):
(
"actionZoomIn",
QKeySequence.ZoomIn,
QIcon.fromTheme("zoom-in") if ISLINUX
QIcon.fromTheme("zoom-in")
if ISLINUX
and not self.parent.app.prefs.details_dialog_override_theme_icons
else QIcon(QPixmap(":/" + "zoom_in")),
tr("Increase zoom"),
controller.zoomIn,
@ -57,7 +59,9 @@ class ViewerToolBar(QToolBar):
(
"actionZoomOut",
QKeySequence.ZoomOut,
QIcon.fromTheme("zoom-out") if ISLINUX
QIcon.fromTheme("zoom-out")
if ISLINUX
and not self.parent.app.prefs.details_dialog_override_theme_icons
else QIcon(QPixmap(":/" + "zoom_out")),
tr("Decrease zoom"),
controller.zoomOut,
@ -65,7 +69,9 @@ class ViewerToolBar(QToolBar):
(
"actionNormalSize",
tr("Ctrl+/"),
QIcon.fromTheme("zoom-original") if ISLINUX
QIcon.fromTheme("zoom-original")
if ISLINUX
and not self.parent.app.prefs.details_dialog_override_theme_icons
else QIcon(QPixmap(":/" + "zoom_original")),
tr("Normal size"),
controller.zoomNormalSize,
@ -73,7 +79,9 @@ class ViewerToolBar(QToolBar):
(
"actionBestFit",
tr("Ctrl+*"),
QIcon.fromTheme("zoom-best-fit") if ISLINUX
QIcon.fromTheme("zoom-best-fit")
if ISLINUX
and not self.parent.app.prefs.details_dialog_override_theme_icons
else QIcon(QPixmap(":/" + "zoom_best_fit")),
tr("Best fit"),
controller.zoomBestFit,
@ -90,6 +98,7 @@ class ViewerToolBar(QToolBar):
QIcon.fromTheme('view-refresh',
self.style().standardIcon(QStyle.SP_BrowserReload))
if ISLINUX
and not self.parent.app.prefs.details_dialog_override_theme_icons
else QIcon(QPixmap(":/" + "exchange")))
self.buttonImgSwap.setText('Swap images')
self.buttonImgSwap.setToolTip('Swap images')

View File

@ -7,6 +7,7 @@
from PyQt5.QtWidgets import QApplication
from hscommon import trans
from hscommon.plat import ISLINUX
from core.app import AppMode
from core.scanner import ScanType
from qtlib.preferences import Preferences as PreferencesBase
@ -31,8 +32,14 @@ class Preferences(PreferencesBase):
self.tableFontSize = get("TableFontSize", self.tableFontSize)
self.reference_bold_font = get('ReferenceBoldFont', self.reference_bold_font)
self.details_dialog_titlebar_enabled = get('DetailsDialogTitleBarEnabled', self.details_dialog_titlebar_enabled)
self.details_dialog_vertical_titlebar = get('DetailsDialogVerticalTitleBar', self.details_dialog_vertical_titlebar)
self.details_dialog_titlebar_enabled = get('DetailsDialogTitleBarEnabled',
self.details_dialog_titlebar_enabled)
self.details_dialog_vertical_titlebar = get('DetailsDialogVerticalTitleBar',
self.details_dialog_vertical_titlebar)
# On Windows and MacOS, use internal icons by default
self.details_dialog_override_theme_icons =\
get('DetailsDialogOverrideThemeIcons',
self.details_dialog_override_theme_icons) if ISLINUX else True
self.resultWindowIsMaximized = get(
"ResultWindowIsMaximized", self.resultWindowIsMaximized
)
@ -71,6 +78,8 @@ class Preferences(PreferencesBase):
self.reference_bold_font = True
self.details_dialog_titlebar_enabled = True
self.details_dialog_vertical_titlebar = True
# By default use internal icons on platforms other than Linux for now
self.details_dialog_override_theme_icons = False if not ISLINUX else True
self.resultWindowIsMaximized = False
self.resultWindowRect = None
self.directoriesWindowRect = None
@ -106,6 +115,7 @@ class Preferences(PreferencesBase):
set_('ReferenceBoldFont', self.reference_bold_font)
set_('DetailsDialogTitleBarEnabled', self.details_dialog_titlebar_enabled)
set_('DetailsDialogVerticalTitleBar', self.details_dialog_vertical_titlebar)
set_('DetailsDialogOverrideThemeIcons', self.details_dialog_override_theme_icons)
set_("ResultWindowIsMaximized", self.resultWindowIsMaximized)
self.set_rect("ResultWindowRect", self.resultWindowRect)
self.set_rect("DirectoriesWindowRect", self.directoriesWindowRect)

View File

@ -25,6 +25,7 @@ from PyQt5.QtWidgets import (
)
from hscommon.trans import trget
from hscommon.plat import ISLINUX
from qtlib.util import horizontalWrap
from qtlib.preferences import get_langnames
from enum import Flag, auto
@ -163,6 +164,13 @@ class PreferencesDialogBase(QDialog):
self.details_dialog_titlebar_enabled.isChecked())
self.details_dialog_titlebar_enabled.stateChanged.connect(
self.details_dialog_vertical_titlebar.setEnabled)
self._setupAddCheckbox("details_dialog_override_theme_icons",
tr("Override theme icons"))
self.details_dialog_override_theme_icons.setToolTip(
tr("Use our own internal icons instead of those provided by theme engine"))
# Prevent changing this on platforms where themes are unpredictable
self.details_dialog_override_theme_icons.setEnabled(False if not ISLINUX else True)
self.displayVLayout.addWidget(self.details_dialog_override_theme_icons)
self.languageLabel = QLabel(tr("Language:"), self)
self.languageComboBox = QComboBox(self)
@ -237,6 +245,7 @@ class PreferencesDialogBase(QDialog):
setchecked(self.details_dialog_titlebar_enabled , prefs.details_dialog_titlebar_enabled)
setchecked(self.details_dialog_vertical_titlebar, prefs.details_dialog_vertical_titlebar)
self.fontSizeSpinBox.setValue(prefs.tableFontSize)
setchecked(self.details_dialog_override_theme_icons, prefs.details_dialog_override_theme_icons)
try:
langindex = self.supportedLanguages.index(self.app.prefs.language)
except ValueError:
@ -256,6 +265,7 @@ class PreferencesDialogBase(QDialog):
prefs.reference_bold_font = ischecked(self.reference_bold_font)
prefs.details_dialog_titlebar_enabled = ischecked(self.details_dialog_titlebar_enabled)
prefs.details_dialog_vertical_titlebar = ischecked(self.details_dialog_vertical_titlebar)
prefs.details_dialog_override_theme_icons = ischecked(self.details_dialog_override_theme_icons)
prefs.destination_type = self.copyMoveDestinationComboBox.currentIndex()
prefs.custom_command = str(self.customCommandEdit.text())
prefs.tableFontSize = self.fontSizeSpinBox.value()