Let the novel selector replace the novel tree label

This commit is contained in:
Veronica Berglyd Olsen
2022-11-18 02:01:55 +01:00
parent 5c7c820fef
commit 039b2095f0
3 changed files with 35 additions and 19 deletions
+18 -4
View File
@@ -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
##
+15 -13
View File
@@ -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("<b>%s</b>" % 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):
+2 -2
View File
@@ -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):