From 250a41a84a04499dbeb883e98946c87abe42674c Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Fri, 18 Nov 2022 00:19:15 +0100
Subject: [PATCH 1/5] Move StatusLED class to new components module
---
novelwriter/gui/components.py | 87 +++++++++++++++++++++++++++++++++++
novelwriter/gui/statusbar.py | 61 ++----------------------
2 files changed, 90 insertions(+), 58 deletions(-)
create mode 100644 novelwriter/gui/components.py
diff --git a/novelwriter/gui/components.py b/novelwriter/gui/components.py
new file mode 100644
index 00000000..dac50d28
--- /dev/null
+++ b/novelwriter/gui/components.py
@@ -0,0 +1,87 @@
+"""
+novelWriter – GUI Components Module
+===================================
+A module of various small GUI components
+
+File History:
+Created: 2020-05-17 [0.5.1] StatusLED
+
+This file is a part of novelWriter
+Copyright 2018–2022, Veronica Berglyd Olsen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+"""
+
+import logging
+
+from PyQt5.QtGui import QPainter
+from PyQt5.QtWidgets import QAbstractButton
+
+logger = logging.getLogger(__name__)
+
+
+class StatusLED(QAbstractButton):
+
+ S_NONE = 0
+ S_BAD = 1
+ S_GOOD = 2
+
+ def __init__(self, colNone, colGood, colBad, sW, sH, parent=None):
+ super().__init__(parent=parent)
+
+ self._colNone = colNone
+ self._colGood = colGood
+ self._colBad = colBad
+ self._theCol = colNone
+
+ self.setFixedWidth(sW)
+ self.setFixedHeight(sH)
+
+ return
+
+ ##
+ # Setters
+ ##
+
+ def setState(self, theState):
+ """Set the colour state.
+ """
+ if theState == self.S_GOOD:
+ self._theCol = self._colGood
+ elif theState == self.S_BAD:
+ self._theCol = self._colBad
+ else:
+ self._theCol = self._colNone
+
+ self.update()
+
+ return
+
+ ##
+ # Events
+ ##
+
+ def paintEvent(self, _):
+ """Drawing the LED.
+ """
+ qPalette = self.palette()
+ qPaint = QPainter(self)
+ qPaint.setRenderHint(QPainter.Antialiasing, True)
+ qPaint.setPen(qPalette.dark().color())
+ qPaint.setBrush(self._theCol)
+ qPaint.setOpacity(1.0)
+ qPaint.drawEllipse(1, 1, self.width() - 2, self.height() - 2)
+ return
+
+# END Class StatusLED
diff --git a/novelwriter/gui/statusbar.py b/novelwriter/gui/statusbar.py
index 9dcb97af..a5824214 100644
--- a/novelwriter/gui/statusbar.py
+++ b/novelwriter/gui/statusbar.py
@@ -30,10 +30,11 @@ import novelwriter
from time import time
from PyQt5.QtCore import pyqtSlot, QLocale
-from PyQt5.QtGui import QColor, QPainter
-from PyQt5.QtWidgets import qApp, QStatusBar, QLabel, QAbstractButton
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import qApp, QStatusBar, QLabel
from novelwriter.common import formatTime
+from novelwriter.gui.components import StatusLED
logger = logging.getLogger(__name__)
@@ -246,59 +247,3 @@ class GuiMainStatus(QStatusBar):
return
# END Class GuiMainStatus
-
-
-class StatusLED(QAbstractButton):
-
- S_NONE = 0
- S_BAD = 1
- S_GOOD = 2
-
- def __init__(self, colNone, colGood, colBad, sW, sH, parent=None):
- super().__init__(parent=parent)
-
- self._colNone = colNone
- self._colGood = colGood
- self._colBad = colBad
- self._theCol = colNone
-
- self.setFixedWidth(sW)
- self.setFixedHeight(sH)
-
- return
-
- ##
- # Setters
- ##
-
- def setState(self, theState):
- """Set the colour state.
- """
- if theState == self.S_GOOD:
- self._theCol = self._colGood
- elif theState == self.S_BAD:
- self._theCol = self._colBad
- else:
- self._theCol = self._colNone
-
- self.update()
-
- return
-
- ##
- # Events
- ##
-
- def paintEvent(self, _):
- """Drawing the LED.
- """
- qPalette = self.palette()
- qPaint = QPainter(self)
- qPaint.setRenderHint(QPainter.Antialiasing, True)
- qPaint.setPen(qPalette.dark().color())
- qPaint.setBrush(self._theCol)
- qPaint.setOpacity(1.0)
- qPaint.drawEllipse(1, 1, self.width() - 2, self.height() - 2)
- return
-
-# END Class StatusLED
From 11b6ed87d4cdcb3f017e786b6766535b843a4d29 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Fri, 18 Nov 2022 00:44:58 +0100
Subject: [PATCH 2/5] Add the novel selector widget and use it for the outline
---
novelwriter/gui/components.py | 66 +++++++++++++++++++++++++++++++++--
novelwriter/gui/outline.py | 38 ++++++++------------
2 files changed, 79 insertions(+), 25 deletions(-)
diff --git a/novelwriter/gui/components.py b/novelwriter/gui/components.py
index dac50d28..201469d5 100644
--- a/novelwriter/gui/components.py
+++ b/novelwriter/gui/components.py
@@ -4,7 +4,8 @@ novelWriter – GUI Components Module
A module of various small GUI components
File History:
-Created: 2020-05-17 [0.5.1] StatusLED
+Created: 2020-05-17 [0.5.1] StatusLED
+Created: 2022-11-17 [2.0rc2] NovelSelector
This file is a part of novelWriter
Copyright 2018–2022, Veronica Berglyd Olsen
@@ -26,11 +27,72 @@ along with this program. If not, see .
import logging
from PyQt5.QtGui import QPainter
-from PyQt5.QtWidgets import QAbstractButton
+from PyQt5.QtCore import pyqtSignal, pyqtSlot
+from PyQt5.QtWidgets import QAbstractButton, QComboBox
+
+from novelwriter.enum import nwItemClass
logger = logging.getLogger(__name__)
+class NovelSelector(QComboBox):
+
+ novelSelectionChanged = pyqtSignal(str)
+
+ def __init__(self, parent, project, icon):
+ super().__init__(parent=parent)
+
+ self._project = project
+ self._icon = icon
+
+ self._blockSignal = False
+
+ self.currentIndexChanged.connect(self._indexChanged)
+
+ return
+
+ @property
+ def handle(self):
+ return self.currentData()
+
+ def setHandle(self, tHandle, blockSignal=True):
+ """Set the currently selected handle.
+ """
+ self._blockSignal = blockSignal
+ if tHandle is None:
+ index = self.count() - 1
+ else:
+ index = self.findData(tHandle)
+ if index >= 0:
+ self.setCurrentIndex(index)
+ self._blockSignal = False
+ return
+
+ def updateList(self):
+ """Rebuild the list of novel items.
+ """
+ self._blockSignal = True
+ self.clear()
+ for tHandle, nwItem in self._project.tree.iterRoots(nwItemClass.NOVEL):
+ self.addItem(self._icon, nwItem.itemName, tHandle)
+ self.insertSeparator(self.count())
+ self.addItem(self._icon, self.tr("All Novel Folders"), "")
+ self._blockSignal = False
+ return
+
+ ##
+ # Private Slots
+ ##
+
+ @pyqtSlot(int)
+ def _indexChanged(self, index):
+ if not self._blockSignal:
+ self.novelSelectionChanged.emit(self.currentData())
+ return
+
+# END Class NovelSelector
+
+
class StatusLED(QAbstractButton):
S_NONE = 0
diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py
index ef898237..e142ecd3 100644
--- a/novelwriter/gui/outline.py
+++ b/novelwriter/gui/outline.py
@@ -37,9 +37,9 @@ from PyQt5.QtCore import (
Qt, pyqtSignal, pyqtSlot, QSize, QT_TRANSLATE_NOOP
)
from PyQt5.QtWidgets import (
- QAbstractItemView, QAction, QComboBox, QFrame, QGridLayout, QGroupBox,
- QHBoxLayout, QLabel, QMenu, QScrollArea, QSizePolicy, QSplitter, QToolBar,
- QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
+ QAbstractItemView, QAction, QFrame, QGridLayout, QGroupBox, QHBoxLayout,
+ QLabel, QMenu, QScrollArea, QSizePolicy, QSplitter, QToolBar, QToolButton,
+ QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
)
from novelwriter.enum import (
@@ -47,6 +47,7 @@ from novelwriter.enum import (
)
from novelwriter.common import checkInt
from novelwriter.constants import nwHeaders, trConst, nwKeyWords, nwLabels
+from novelwriter.gui.components import NovelSelector
logger = logging.getLogger(__name__)
@@ -233,9 +234,10 @@ class GuiOutlineToolBar(QToolBar):
self.novelLabel = QLabel(self.tr("Outline of"))
self.novelLabel.setContentsMargins(0, 0, mPx, 0)
- self.novelValue = QComboBox(self)
+ tIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
+ self.novelValue = NovelSelector(self, self.theProject, tIcon)
self.novelValue.setMinimumWidth(self.mainConf.pxInt(200))
- self.novelValue.currentIndexChanged.connect(self._novelValueChanged)
+ self.novelValue.novelSelectionChanged.connect(self._novelValueChanged)
# Actions
self.aRefresh = QAction(self.tr("Refresh"), self)
@@ -280,25 +282,15 @@ class GuiOutlineToolBar(QToolBar):
return
def populateNovelList(self):
- """Fill the novel combo box with a list of all novel folders.
+ """Relaod the content of the novel list.
"""
- self.novelValue.clear()
- tIcon = self.mainTheme.getIcon(nwLabels.CLASS_ICON[nwItemClass.NOVEL])
- for tHandle, nwItem in self.theProject.tree.iterRoots(nwItemClass.NOVEL):
- self.novelValue.addItem(tIcon, nwItem.itemName, tHandle)
- self.novelValue.insertSeparator(self.novelValue.count())
- self.novelValue.addItem(tIcon, self.tr("All Novel Folders"), "")
+ self.novelValue.updateList()
return
def setCurrentRoot(self, rootHandle):
"""Set the current active root handle.
"""
- if rootHandle is None:
- rootIdx = self.novelValue.count() - 1
- else:
- rootIdx = self.novelValue.findData(rootHandle)
- if rootIdx >= 0:
- self.novelValue.setCurrentIndex(rootIdx)
+ self.novelValue.setHandle(rootHandle)
return
def setColumnHiddenState(self, hiddenState):
@@ -311,19 +303,18 @@ class GuiOutlineToolBar(QToolBar):
# Private Slots
##
- @pyqtSlot(int)
- def _novelValueChanged(self, index):
+ @pyqtSlot(str)
+ def _novelValueChanged(self, tHandle):
"""Emit a signal containing the handle of the selected item.
"""
- if index >= 0:
- self.loadNovelRootRequest.emit(self.novelValue.currentData())
+ self.loadNovelRootRequest.emit(tHandle)
return
@pyqtSlot()
def _refreshRequested(self):
"""Emit a signal containing the handle of the selected item.
"""
- self.loadNovelRootRequest.emit(self.novelValue.currentData())
+ self.loadNovelRootRequest.emit(self.novelValue.handle)
return
# END Class GuiOutlineToolBar
@@ -679,6 +670,7 @@ class GuiOutlineTree(QTreeWidget):
if they are hidden. This ensures that showing and hiding columns
is fast and doesn't require a rebuild of the tree.
"""
+ logger.debug("Rebuilding Outline tree")
self.clear()
if self._firstView:
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 3/5] 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"))
From 039b2095f03718bf3cd100bb2209c0e50b9b3143 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Fri, 18 Nov 2022 02:01:55 +0100
Subject: [PATCH 4/5] Let the novel selector replace the novel tree label
---
novelwriter/gui/components.py | 22 ++++++++++++++++++----
novelwriter/gui/noveltree.py | 28 +++++++++++++++-------------
novelwriter/gui/outline.py | 4 ++--
3 files changed, 35 insertions(+), 19 deletions(-)
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):
From 1b7814e8917728cb4157de4ae683a91073754729 Mon Sep 17 00:00:00 2001
From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com>
Date: Fri, 18 Nov 2022 02:07:30 +0100
Subject: [PATCH 5/5] Disable tooltip when novel selector is idsabled
---
novelwriter/gui/noveltree.py | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py
index 429e9851..d7b38a21 100644
--- a/novelwriter/gui/noveltree.py
+++ b/novelwriter/gui/noveltree.py
@@ -208,7 +208,6 @@ class GuiNovelToolBar(QWidget):
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
@@ -280,6 +279,10 @@ class GuiNovelToolBar(QWidget):
"QComboBox::drop-down {border-style: none}"
)
self.novelValue.updateList(prefix=self.novelPrefix)
+ if self.novelValue.count() > 1:
+ self.novelValue.setToolTip(self.tr("Click to change root folder"))
+ else:
+ self.novelValue.setToolTip("")
return
@@ -287,12 +290,17 @@ class GuiNovelToolBar(QWidget):
"""Run clearing project tasks.
"""
self.novelValue.clear()
+ self.novelValue.setToolTip("")
return
def buildNovelRootMenu(self):
"""Build the novel root menu.
"""
self.novelValue.updateList(prefix=self.novelPrefix)
+ if self.novelValue.count() > 1:
+ self.novelValue.setToolTip(self.tr("Click to change root folder"))
+ else:
+ self.novelValue.setToolTip("")
return
def setCurrentRoot(self, rootHandle):