diff --git a/novelwriter/gui/components.py b/novelwriter/gui/components.py index c8152f83..35234d40 100644 --- a/novelwriter/gui/components.py +++ b/novelwriter/gui/components.py @@ -67,19 +67,33 @@ class NovelSelector(QComboBox): self._blockSignal = False return - def updateList(self): + def updateList(self, includeAll=False, prefix=None): """Rebuild the list of novel items. """ self._blockSignal = True self.clear() + icon = self._theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL]) handle = self.currentData() for tHandle, nwItem in self._project.tree.iterRoots(nwItemClass.NOVEL): - self.addItem(icon, nwItem.itemName, tHandle) - self.insertSeparator(self.count()) - self.addItem(icon, self.tr("All Novel Folders"), "") + if prefix: + name = prefix.format(nwItem.itemName) + self.addItem(name, tHandle) + else: + name = nwItem.itemName + self.addItem(icon, nwItem.itemName, tHandle) + + if includeAll: + self.insertSeparator(self.count()) + if prefix: + self.addItem(prefix.format(self.tr("All Novel Folders")), "") + else: + self.addItem(icon, self.tr("All Novel Folders"), "") + self.setHandle(handle) + self.setEnabled(self.count() > 1) self._blockSignal = False + return ## diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index fed4f10d..429e9851 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -31,11 +31,11 @@ import novelwriter from enum import Enum from time import time -from PyQt5.QtGui import QPalette +from PyQt5.QtGui import QFont, QPalette from PyQt5.QtCore import Qt, QSize, pyqtSlot, pyqtSignal from PyQt5.QtWidgets import ( - QAbstractItemView, QActionGroup, QFrame, QHBoxLayout, QHeaderView, QLabel, - QMenu, QSizePolicy, QToolButton, QToolTip, QTreeWidget, QTreeWidgetItem, + QAbstractItemView, QActionGroup, QFrame, QHBoxLayout, QHeaderView, QMenu, + QSizePolicy, QToolButton, QToolTip, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget ) @@ -200,17 +200,15 @@ class GuiNovelToolBar(QWidget): self.setContentsMargins(0, 0, 0, 0) self.setAutoFillBackground(True) - # Widget Label - self.viewLabel = QLabel("%s" % self.tr("Novel Outline")) - self.viewLabel.setContentsMargins(0, 0, 0, 0) - self.viewLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - # Novel Selector selFont = self.font() - selFont.setPointSize(int(0.9 * selFont.pointSize())) + selFont.setWeight(QFont.Bold) + self.novelPrefix = self.tr("Outline of {0}") self.novelValue = NovelSelector(self, self.theProject, self.mainTheme) - self.novelValue.setMinimumWidth(self.mainConf.pxInt(150)) self.novelValue.setFont(selFont) + self.novelValue.setMinimumWidth(self.mainConf.pxInt(150)) + self.novelValue.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + self.novelValue.setToolTip(self.tr("Click to change root folder")) self.novelValue.novelSelectionChanged.connect(self.setCurrentRoot) # Refresh Button @@ -238,7 +236,6 @@ class GuiNovelToolBar(QWidget): # Assemble self.outerBox = QHBoxLayout() - self.outerBox.addWidget(self.viewLabel) self.outerBox.addWidget(self.novelValue) self.outerBox.addWidget(self.tbRefresh) self.outerBox.addWidget(self.tbMore) @@ -275,10 +272,15 @@ class GuiNovelToolBar(QWidget): "QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}" ).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue()) - self.novelValue.updateList() self.tbRefresh.setStyleSheet(buttonStyle) self.tbMore.setStyleSheet(buttonStyle) + self.novelValue.setStyleSheet( + "QComboBox {border-style: none; padding-left: 0;} " + "QComboBox::drop-down {border-style: none}" + ) + self.novelValue.updateList(prefix=self.novelPrefix) + return def clearContent(self): @@ -290,7 +292,7 @@ class GuiNovelToolBar(QWidget): def buildNovelRootMenu(self): """Build the novel root menu. """ - self.novelValue.updateList() + self.novelValue.updateList(prefix=self.novelPrefix) return def setCurrentRoot(self, rootHandle): diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index 355abe33..9cfd3d86 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -275,7 +275,7 @@ class GuiOutlineToolBar(QToolBar): """ self.setStyleSheet("QToolBar {border: 0px;}") - self.novelValue.updateList() + self.novelValue.updateList(includeAll=True) self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) self.tbColumns.setIcon(self.mainTheme.getIcon("menu")) @@ -284,7 +284,7 @@ class GuiOutlineToolBar(QToolBar): def populateNovelList(self): """Relaod the content of the novel list. """ - self.novelValue.updateList() + self.novelValue.updateList(includeAll=True) return def setCurrentRoot(self, rootHandle):