Add a combo box to novel tree

This commit is contained in:
Veronica Berglyd Olsen
2022-11-18 01:03:44 +01:00
parent 11b6ed87d4
commit 5c7c820fef
3 changed files with 25 additions and 37 deletions
+8 -6
View File
@@ -31,6 +31,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QAbstractButton, QComboBox from PyQt5.QtWidgets import QAbstractButton, QComboBox
from novelwriter.enum import nwItemClass from novelwriter.enum import nwItemClass
from novelwriter.constants import nwLabels
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -39,14 +40,12 @@ class NovelSelector(QComboBox):
novelSelectionChanged = pyqtSignal(str) novelSelectionChanged = pyqtSignal(str)
def __init__(self, parent, project, icon): def __init__(self, parent, project, theme):
super().__init__(parent=parent) super().__init__(parent=parent)
self._project = project self._project = project
self._icon = icon self._theme = theme
self._blockSignal = False self._blockSignal = False
self.currentIndexChanged.connect(self._indexChanged) self.currentIndexChanged.connect(self._indexChanged)
return return
@@ -73,10 +72,13 @@ class NovelSelector(QComboBox):
""" """
self._blockSignal = True self._blockSignal = True
self.clear() self.clear()
icon = self._theme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
handle = self.currentData()
for tHandle, nwItem in self._project.tree.iterRoots(nwItemClass.NOVEL): 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.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 self._blockSignal = False
return return
+15 -29
View File
@@ -41,6 +41,7 @@ from PyQt5.QtWidgets import (
from novelwriter.enum import nwDocMode, nwItemClass, nwOutline from novelwriter.enum import nwDocMode, nwItemClass, nwOutline
from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst from novelwriter.constants import nwHeaders, nwKeyWords, nwLabels, trConst
from novelwriter.gui.components import NovelSelector
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -204,23 +205,20 @@ class GuiNovelToolBar(QWidget):
self.viewLabel.setContentsMargins(0, 0, 0, 0) self.viewLabel.setContentsMargins(0, 0, 0, 0)
self.viewLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) 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 # Refresh Button
self.tbRefresh = QToolButton(self) self.tbRefresh = QToolButton(self)
self.tbRefresh.setToolTip(self.tr("Refresh")) self.tbRefresh.setToolTip(self.tr("Refresh"))
self.tbRefresh.setIconSize(QSize(iPx, iPx)) self.tbRefresh.setIconSize(QSize(iPx, iPx))
self.tbRefresh.clicked.connect(self._refreshNovelTree) 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 # More Options Menu
self.mMore = QMenu() self.mMore = QMenu()
@@ -241,8 +239,8 @@ class GuiNovelToolBar(QWidget):
# Assemble # Assemble
self.outerBox = QHBoxLayout() self.outerBox = QHBoxLayout()
self.outerBox.addWidget(self.viewLabel) self.outerBox.addWidget(self.viewLabel)
self.outerBox.addWidget(self.novelValue)
self.outerBox.addWidget(self.tbRefresh) self.outerBox.addWidget(self.tbRefresh)
self.outerBox.addWidget(self.tbRoot)
self.outerBox.addWidget(self.tbMore) self.outerBox.addWidget(self.tbMore)
self.outerBox.setContentsMargins(mPx, mPx, 0, mPx) self.outerBox.setContentsMargins(mPx, mPx, 0, mPx)
self.outerBox.setSpacing(0) self.outerBox.setSpacing(0)
@@ -264,7 +262,6 @@ class GuiNovelToolBar(QWidget):
""" """
# Icons # Icons
self.tbRefresh.setIcon(self.mainTheme.getIcon("refresh")) 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")) self.tbMore.setIcon(self.mainTheme.getIcon("menu"))
qPalette = self.palette() qPalette = self.palette()
@@ -278,8 +275,8 @@ class GuiNovelToolBar(QWidget):
"QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}" "QToolButton:hover {{border: none; background: rgba({1},{2},{3},0.2);}}"
).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue()) ).format(self.mainConf.pxInt(2), fadeCol.red(), fadeCol.green(), fadeCol.blue())
self.novelValue.updateList()
self.tbRefresh.setStyleSheet(buttonStyle) self.tbRefresh.setStyleSheet(buttonStyle)
self.tbRoot.setStyleSheet(buttonStyle)
self.tbMore.setStyleSheet(buttonStyle) self.tbMore.setStyleSheet(buttonStyle)
return return
@@ -287,31 +284,20 @@ class GuiNovelToolBar(QWidget):
def clearContent(self): def clearContent(self):
"""Run clearing project tasks. """Run clearing project tasks.
""" """
self.mRoot.clear() self.novelValue.clear()
self.aRoot = {}
return return
def buildNovelRootMenu(self): def buildNovelRootMenu(self):
"""Build the novel root menu. """Build the novel root menu.
""" """
self.mRoot.clear() self.novelValue.updateList()
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
return return
def setCurrentRoot(self, rootHandle): def setCurrentRoot(self, rootHandle):
"""Set the current active root handle. """Set the current active root handle.
""" """
if rootHandle in self.aRoot: self.novelValue.setHandle(rootHandle)
self.aRoot[rootHandle].setChecked(True) self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True)
self.novelView.novelTree.refreshTree(rootHandle=rootHandle, overRide=True)
return return
def setLastColType(self, colType, doRefresh=True): def setLastColType(self, colType, doRefresh=True):
+2 -2
View File
@@ -234,8 +234,7 @@ class GuiOutlineToolBar(QToolBar):
self.novelLabel = QLabel(self.tr("Outline of")) self.novelLabel = QLabel(self.tr("Outline of"))
self.novelLabel.setContentsMargins(0, 0, mPx, 0) self.novelLabel.setContentsMargins(0, 0, mPx, 0)
tIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL]) self.novelValue = NovelSelector(self, self.theProject, self.mainTheme)
self.novelValue = NovelSelector(self, self.theProject, tIcon)
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200)) self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
self.novelValue.novelSelectionChanged.connect(self._novelValueChanged) self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
@@ -276,6 +275,7 @@ class GuiOutlineToolBar(QToolBar):
""" """
self.setStyleSheet("QToolBar {border: 0px;}") self.setStyleSheet("QToolBar {border: 0px;}")
self.novelValue.updateList()
self.aRefresh.setIcon(self.mainTheme.getIcon("refresh")) self.aRefresh.setIcon(self.mainTheme.getIcon("refresh"))
self.tbColumns.setIcon(self.mainTheme.getIcon("menu")) self.tbColumns.setIcon(self.mainTheme.getIcon("menu"))