diff --git a/nw/gui/configeditor.py b/nw/gui/configeditor.py index e6851b22..69376a78 100644 --- a/nw/gui/configeditor.py +++ b/nw/gui/configeditor.py @@ -113,6 +113,7 @@ class GuiConfigEditGeneral(QWidget): self.mainConf = nw.CONFIG self.theParent = theParent + self.theTheme = theParent.theTheme self.outerBox = QGridLayout() # User Interface @@ -122,7 +123,7 @@ class GuiConfigEditGeneral(QWidget): self.guiLookTheme = QComboBox() self.guiLookTheme.setMinimumWidth(200) - self.theThemes = self.theParent.theTheme.listThemes() + self.theThemes = self.theTheme.listThemes() for themeDir, themeName in self.theThemes: self.guiLookTheme.addItem(themeName, themeDir) themeIdx = self.guiLookTheme.findData(self.mainConf.guiTheme) @@ -131,7 +132,7 @@ class GuiConfigEditGeneral(QWidget): self.guiLookSyntax = QComboBox() self.guiLookSyntax.setMinimumWidth(200) - self.theSyntaxes = self.theParent.theTheme.listSyntax() + self.theSyntaxes = self.theTheme.listSyntax() for syntaxFile, syntaxName in self.theSyntaxes: self.guiLookSyntax.addItem(syntaxName, syntaxFile) syntaxIdx = self.guiLookSyntax.findData(self.mainConf.guiSyntax) @@ -192,7 +193,7 @@ class GuiConfigEditGeneral(QWidget): if path.isdir(self.mainConf.backupPath): self.projBackupPath.setText(self.mainConf.backupPath) - self.projBackupGetPath = QPushButton(QIcon.fromTheme("folder"),"") + self.projBackupGetPath = QPushButton(self.theTheme.getIcon("folder"),"") self.projBackupGetPath.clicked.connect(self._backupFolder) self.projBackupClose = QCheckBox(self) diff --git a/nw/gui/doctree.py b/nw/gui/doctree.py index 07002b2c..48898952 100644 --- a/nw/gui/doctree.py +++ b/nw/gui/doctree.py @@ -37,6 +37,7 @@ class GuiDocTree(QTreeWidget): self.mainConf = nw.CONFIG self.debugGUI = self.mainConf.debugGUI self.theParent = theParent + self.theTheme = theParent.theTheme self.theProject = theProject # Tree Settings @@ -382,13 +383,13 @@ class GuiDocTree(QTreeWidget): newItem.setExpanded(nwItem.isExpanded) if nwItem.itemType == nwItemType.ROOT: - newItem.setIcon(self.C_NAME, QIcon.fromTheme("drive-harddisk")) + newItem.setIcon(self.C_NAME, self.theTheme.getIcon("root")) elif nwItem.itemType == nwItemType.FOLDER: - newItem.setIcon(self.C_NAME, QIcon.fromTheme("folder")) + newItem.setIcon(self.C_NAME, self.theTheme.getIcon("folder")) elif nwItem.itemType == nwItemType.FILE: - newItem.setIcon(self.C_NAME, QIcon.fromTheme("x-office-document")) + newItem.setIcon(self.C_NAME, self.theTheme.getIcon("document")) elif nwItem.itemType == nwItemType.TRASH: - newItem.setIcon(self.C_NAME, QIcon.fromTheme("user-trash")) + newItem.setIcon(self.C_NAME, self.theTheme.getIcon("trash")) return newItem @@ -413,7 +414,7 @@ class GuiDocTree(QTreeWidget): self.addTopLevelItem(newItem) self.orphRoot = newItem newItem.setExpanded(True) - newItem.setIcon(self.C_NAME, QIcon.fromTheme("dialog-warning")) + newItem.setIcon(self.C_NAME, self.theTheme.getIcon("orphan")) return def _cleanOrphanedRoot(self): diff --git a/nw/gui/projecteditor.py b/nw/gui/projecteditor.py index 5ba2e558..7bcc4d62 100644 --- a/nw/gui/projecteditor.py +++ b/nw/gui/projecteditor.py @@ -322,6 +322,7 @@ class GuiProjectEditReplace(QWidget): QWidget.__init__(self, theParent) self.theParent = theParent + self.theTheme = theParent.theTheme self.theProject = theProject self.arChanged = False @@ -341,9 +342,9 @@ class GuiProjectEditReplace(QWidget): self.editKey = QLineEdit() self.editValue = QLineEdit() - self.saveButton = QPushButton(QIcon.fromTheme("document-save"),"") - self.addButton = QPushButton(QIcon.fromTheme("list-add"),"") - self.delButton = QPushButton(QIcon.fromTheme("list-remove"),"") + self.saveButton = QPushButton(self.theTheme.getIcon("save"),"") + self.addButton = QPushButton(self.theTheme.getIcon("add"),"") + self.delButton = QPushButton(self.theTheme.getIcon("remove"),"") self.editKey.setEnabled(False) self.editValue.setEnabled(False) diff --git a/nw/gui/searchbar.py b/nw/gui/searchbar.py index 479ca9dd..53a5883b 100644 --- a/nw/gui/searchbar.py +++ b/nw/gui/searchbar.py @@ -30,6 +30,7 @@ class GuiSearchBar(QFrame): self.mainConf = nw.CONFIG self.theParent = theParent + self.theTheme = theParent.theTheme self.repVisible = False self.setContentsMargins(0,0,0,0) @@ -41,9 +42,9 @@ class GuiSearchBar(QFrame): self.replaceBox = QLineEdit() self.searchLabel = QLabel("Search") self.replaceLabel = QLabel("Replace") - self.closeButton = QPushButton(QIcon.fromTheme("edit-delete"),"") - self.searchButton = QPushButton(QIcon.fromTheme("edit-find"),"") - self.replaceButton = QPushButton(QIcon.fromTheme("edit-find-replace"),"") + self.closeButton = QPushButton(self.theTheme.getIcon("close"),"") + self.searchButton = QPushButton(self.theTheme.getIcon("search"),"") + self.replaceButton = QPushButton(self.theTheme.getIcon("replace"),"") self.closeButton.clicked.connect(self._doClose) self.searchButton.clicked.connect(self._doSearch) diff --git a/nw/theme.py b/nw/theme.py index 24f42d41..906d0e9f 100644 --- a/nw/theme.py +++ b/nw/theme.py @@ -17,7 +17,7 @@ import nw from os import path, listdir from PyQt5.QtWidgets import qApp -from PyQt5.QtGui import QPalette, QColor +from PyQt5.QtGui import QPalette, QColor, QIcon from nw.enum import nwAlert @@ -25,12 +25,27 @@ logger = logging.getLogger(__name__) class Theme: + ICON_MAP = { + "root" : "drive-harddisk", + "folder" : "folder", + "document" : "x-office-document", + "trash" : "user-trash", + "orphan" : "dialog-warning", + "save" : "document-save", + "add" : "list-add", + "remove" : "list-remove", + "close" : "edit-delete", + "search" : "edit-find", + "replace" : "edit-find-replace", + } + def __init__(self, theParent): self.mainConf = nw.CONFIG self.theParent = theParent self.guiPalette = QPalette() self.guiPath = "gui" + self.iconPath = "icons" self.syntaxPath = "syntax" self.cssName = "style.qss" self.confName = "theme.conf" @@ -76,10 +91,16 @@ class Theme: self.colTagErr = [ 0, 0, 0] self.colRepTag = [ 0, 0, 0] + ## Icons + self.themeIcons = {} + # Changeable Settings self.guiTheme = None self.guiSyntax = None self.themeRoot = None + self.themePath = None + self.syntaxFile = None + self.confFile = None self.cssFile = None self.updateTheme() @@ -95,11 +116,14 @@ class Theme: self.guiTheme = self.mainConf.guiTheme self.guiSyntax = self.mainConf.guiSyntax self.themeRoot = self.mainConf.themeRoot - self.themePath = path.join(self.mainConf.themeRoot, self.guiPath, self.guiTheme) + self.themePath = path.join(self.mainConf.themeRoot,self.guiPath,self.guiTheme) self.syntaxFile = path.join(self.themeRoot,self.syntaxPath,self.guiSyntax+".conf") self.confFile = path.join(self.themePath,self.confName) self.cssFile = path.join(self.themePath,self.cssName) + for iconName in self.ICON_MAP: + self.themeIcons[iconName] = QIcon.fromTheme(self.ICON_MAP[iconName]) + self.loadTheme() self.loadSyntax() @@ -262,6 +286,11 @@ class Theme: return self.syntaxList + def getIcon(self, iconName, iconSize=None): + if iconName in self.themeIcons: + return self.themeIcons[iconName] + return QIcon() + ## # Internal Functions ##