From 5c7c820fef4090c7fb8516e61075b17ed3132a28 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Fri, 18 Nov 2022 01:03:44 +0100 Subject: [PATCH] Add a combo box to novel tree --- novelwriter/gui/components.py | 14 ++++++----- novelwriter/gui/noveltree.py | 44 ++++++++++++----------------------- novelwriter/gui/outline.py | 4 ++-- 3 files changed, 25 insertions(+), 37 deletions(-) diff --git a/novelwriter/gui/components.py b/novelwriter/gui/components.py index 201469d5..c8152f83 100644 --- a/novelwriter/gui/components.py +++ b/novelwriter/gui/components.py @@ -31,6 +31,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot from PyQt5.QtWidgets import QAbstractButton, QComboBox from novelwriter.enum import nwItemClass +from novelwriter.constants import nwLabels logger = logging.getLogger(__name__) @@ -39,14 +40,12 @@ class NovelSelector(QComboBox): novelSelectionChanged = pyqtSignal(str) - def __init__(self, parent, project, icon): + def __init__(self, parent, project, theme): super().__init__(parent=parent) self._project = project - self._icon = icon - + self._theme = theme self._blockSignal = False - self.currentIndexChanged.connect(self._indexChanged) return @@ -73,10 +72,13 @@ class NovelSelector(QComboBox): """ 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(self._icon, nwItem.itemName, tHandle) + self.addItem(icon, nwItem.itemName, tHandle) self.insertSeparator(self.count()) - self.addItem(self._icon, self.tr("All Novel Folders"), "") + self.addItem(icon, self.tr("All Novel Folders"), "") + self.setHandle(handle) self._blockSignal = False return diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index cc809e17..fed4f10d 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -41,6 +41,7 @@ from PyQt5.QtWidgets import ( from novelwriter.enum import nwDocMode, nwItemClass, nwOutline from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst +from novelwriter.gui.components import NovelSelector logger = logging.getLogger(__name__) @@ -204,23 +205,20 @@ class GuiNovelToolBar(QWidget): 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())) + self.novelValue = NovelSelector(self, self.theProject, self.mainTheme) + self.novelValue.setMinimumWidth(self.mainConf.pxInt(150)) + self.novelValue.setFont(selFont) + self.novelValue.novelSelectionChanged.connect(self.setCurrentRoot) + # Refresh Button self.tbRefresh = QToolButton(self) self.tbRefresh.setToolTip(self.tr("Refresh")) self.tbRefresh.setIconSize(QSize(iPx, iPx)) self.tbRefresh.clicked.connect(self._refreshNovelTree) - # Novel Root Menu - self.mRoot = QMenu() - self.gRoot = QActionGroup(self.mRoot) - self.aRoot = {} - - self.tbRoot = QToolButton(self) - self.tbRoot.setToolTip(self.tr("Novel Root")) - self.tbRoot.setIconSize(QSize(iPx, iPx)) - self.tbRoot.setMenu(self.mRoot) - self.tbRoot.setPopupMode(QToolButton.InstantPopup) - # More Options Menu self.mMore = QMenu() @@ -241,8 +239,8 @@ 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.tbRoot) self.outerBox.addWidget(self.tbMore) self.outerBox.setContentsMargins(mPx, mPx, 0, mPx) self.outerBox.setSpacing(0) @@ -264,7 +262,6 @@ class GuiNovelToolBar(QWidget): """ # Icons self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh")) - self.tbRoot.setIcon(self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])) self.tbMore.setIcon(self.mainTheme.getIcon("menu")) qPalette = self.palette() @@ -278,8 +275,8 @@ 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.tbRoot.setStyleSheet(buttonStyle) self.tbMore.setStyleSheet(buttonStyle) return @@ -287,31 +284,20 @@ class GuiNovelToolBar(QWidget): def clearContent(self): """Run clearing project tasks. """ - self.mRoot.clear() - self.aRoot = {} + self.novelValue.clear() return def buildNovelRootMenu(self): """Build the novel root menu. """ - self.mRoot.clear() - self.aRoot = {} - for n, (tHandle, nwItem) in enumerate(self.theProject.tree.iterRoots(nwItemClass.NOVEL)): - aRoot = self.mRoot.addAction(nwItem.itemName) - aRoot.setData(tHandle) - aRoot.setCheckable(True) - aRoot.triggered.connect(lambda n, tHandle=tHandle: self.setCurrentRoot(tHandle)) - self.gRoot.addAction(aRoot) - self.aRoot[tHandle] = aRoot - + self.novelValue.updateList() return def setCurrentRoot(self, rootHandle): """Set the current active root handle. """ - if rootHandle in self.aRoot: - self.aRoot[rootHandle].setChecked(True) - self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True) + self.novelValue.setHandle(rootHandle) + self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True) return def setLastColType(self, colType, doRefresh=True): diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index e142ecd3..355abe33 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -234,8 +234,7 @@ class GuiOutlineToolBar(QToolBar): self.novelLabel = QLabel(self.tr("Outline of")) self.novelLabel.setContentsMargins(0, 0, mPx, 0) - tIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL]) - self.novelValue = NovelSelector(self, self.theProject, tIcon) + self.novelValue = NovelSelector(self, self.theProject, self.mainTheme) self.novelValue.setMinimumWidth(self.mainConf.pxInt(200)) self.novelValue.novelSelectionChanged.connect(self._novelValueChanged) @@ -276,6 +275,7 @@ class GuiOutlineToolBar(QToolBar): """ self.setStyleSheet("QToolBar {border: 0px;}") + self.novelValue.updateList() self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) self.tbColumns.setIcon(self.mainTheme.getIcon("menu"))