Fix active status icon and tooltip

This commit is contained in:
Veronica Berglyd Olsen
2024-11-20 13:06:49 +01:00
parent 5dcfe5c874
commit ec01336c21
5 changed files with 52 additions and 31 deletions
+5
View File
@@ -274,6 +274,11 @@ class nwLabels:
"doc_h4": QT_TRANSLATE_NOOP("Constant", "Novel Section"), "doc_h4": QT_TRANSLATE_NOOP("Constant", "Novel Section"),
"note": QT_TRANSLATE_NOOP("Constant", "Project Note"), "note": QT_TRANSLATE_NOOP("Constant", "Project Note"),
} }
ACTIVE_NAME = {
"checked": QT_TRANSLATE_NOOP("Constant", "Active"),
"unchecked": QT_TRANSLATE_NOOP("Constant", "Inactive"),
"noncheckable": QT_TRANSLATE_NOOP("Constant", "Not Available"),
}
KEY_NAME = { KEY_NAME = {
nwKeyWords.TAG_KEY: QT_TRANSLATE_NOOP("Constant", "Tag"), nwKeyWords.TAG_KEY: QT_TRANSLATE_NOOP("Constant", "Tag"),
nwKeyWords.POV_KEY: QT_TRANSLATE_NOOP("Constant", "Point of View"), nwKeyWords.POV_KEY: QT_TRANSLATE_NOOP("Constant", "Point of View"),
+8
View File
@@ -29,6 +29,7 @@ from typing import TYPE_CHECKING, Any
from PyQt5.QtGui import QIcon from PyQt5.QtGui import QIcon
from novelwriter import SHARED
from novelwriter.common import ( from novelwriter.common import (
checkInt, isHandle, isItemClass, isItemLayout, isItemType, simplified, checkInt, isHandle, isItemClass, isItemLayout, isItemType, simplified,
yesNo yesNo
@@ -330,6 +331,13 @@ class NWItem:
entry = self._project.data.itemImport[self._import] entry = self._project.data.itemImport[self._import]
return entry.name, entry.icon return entry.name, entry.icon
def getActiveStatus(self) -> tuple[str, QIcon]:
"""Return the relevant active status label and icon for
the current item based on its type.
"""
key = ("checked" if self._active else "unchecked") if self.isFileType() else "noncheckable"
return trConst(nwLabels.ACTIVE_NAME[key]), SHARED.theme.getIcon(key)
## ##
# Checker Methods # Checker Methods
## ##
+4 -8
View File
@@ -113,18 +113,14 @@ class ProjectNode:
self._cache[C_COUNT_ALIGN] = QtAlignRight self._cache[C_COUNT_ALIGN] = QtAlignRight
# Active # Active
if self._item.isFileType(): aText, aIcon = self._item.getActiveStatus()
if self._item.isActive: self._cache[C_ACTIVE_TIP] = aText
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("checked") self._cache[C_ACTIVE_ICON] = aIcon
else:
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("unchecked")
else:
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("noncheckable")
# Status # Status
sText, sIcon = self._item.getImportStatus() sText, sIcon = self._item.getImportStatus()
self._cache[C_STATUS_ICON] = sIcon
self._cache[C_STATUS_TIP] = sText self._cache[C_STATUS_TIP] = sText
self._cache[C_STATUS_ICON] = sIcon
self.updateCount() self.updateCount()
+20 -20
View File
@@ -515,22 +515,8 @@ class GuiProjectTree(QTreeView):
self.projView = projView self.projView = projView
# Internal Variables # Internal Variables
# self._treeMap: dict[str, QTreeWidgetItem] = {}
# self._popAlert = None
# self._actHandle = None # self._actHandle = None
# Cached Translations
self.trActive = self.tr("Active")
self.trInactive = self.tr("Inactive")
self.trPermDelete = self.tr("Permanently delete {0} file(s) from Trash?")
# Build GUI
# =========
# Context Menu
# self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
# self.customContextMenuRequested.connect(self.openContextMenu)
# Tree Settings # Tree Settings
iPx = SHARED.theme.baseIconHeight iPx = SHARED.theme.baseIconHeight
@@ -551,19 +537,19 @@ class GuiProjectTree(QTreeView):
# releases (see #1561) and instead use our own implementation # releases (see #1561) and instead use our own implementation
# self.setAutoScroll(False) # self.setAutoScroll(False)
# But don't allow drop on root level
# Due to a bug, this stops working somewhere between Qt 5.15.3
# and 5.15.8, so this is also blocked in dropEvent (see #1569)
# trRoot = self.invisibleRootItem()
# trRoot.setFlags(trRoot.flags() ^ Qt.ItemFlag.ItemIsDropEnabled)
# Set selection options # Set selection options
self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
# Context Menu
# self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
# self.customContextMenuRequested.connect(self.openContextMenu)
# Connect signals # Connect signals
self.clicked.connect(self._onSingleClick) self.clicked.connect(self._onSingleClick)
self.doubleClicked.connect(self._onDoubleClick) self.doubleClicked.connect(self._onDoubleClick)
self.collapsed.connect(self._onNodeCollapsed)
self.expanded.connect(self._onNodeExpanded)
# Auto Scroll # Auto Scroll
# self._scrollMargin = SHARED.theme.baseIconHeight # self._scrollMargin = SHARED.theme.baseIconHeight
@@ -865,6 +851,20 @@ class GuiProjectTree(QTreeView):
self.setExpanded(index, not self.isExpanded(index)) self.setExpanded(index, not self.isExpanded(index))
return return
@pyqtSlot(QModelIndex)
def _onNodeCollapsed(self, index: QModelIndex) -> None:
"""Capture a node collapse, and pass it to the model."""
if node := self._getNode(index):
node.item.setExpanded(False)
return
@pyqtSlot(QModelIndex)
def _onNodeExpanded(self, index: QModelIndex) -> None:
"""Capture a node expand, and pass it to the model."""
if node := self._getNode(index):
node.item.setExpanded(True)
return
## ##
# Internal Functions # Internal Functions
## ##
+15 -3
View File
@@ -44,7 +44,7 @@ from novelwriter.dialogs.about import GuiAbout
from novelwriter.dialogs.preferences import GuiPreferences from novelwriter.dialogs.preferences import GuiPreferences
from novelwriter.dialogs.projectsettings import GuiProjectSettings from novelwriter.dialogs.projectsettings import GuiProjectSettings
from novelwriter.dialogs.wordlist import GuiWordList from novelwriter.dialogs.wordlist import GuiWordList
from novelwriter.enum import nwDocAction, nwDocInsert, nwDocMode, nwFocus, nwView from novelwriter.enum import nwDocAction, nwDocInsert, nwDocMode, nwFocus, nwItemType, nwView
from novelwriter.gui.doceditor import GuiDocEditor from novelwriter.gui.doceditor import GuiDocEditor
from novelwriter.gui.docviewer import GuiDocViewer from novelwriter.gui.docviewer import GuiDocViewer
from novelwriter.gui.docviewerpanel import GuiDocViewerPanel from novelwriter.gui.docviewerpanel import GuiDocViewerPanel
@@ -62,6 +62,7 @@ from novelwriter.tools.manuscript import GuiManuscript
from novelwriter.tools.noveldetails import GuiNovelDetails from novelwriter.tools.noveldetails import GuiNovelDetails
from novelwriter.tools.welcome import GuiWelcome from novelwriter.tools.welcome import GuiWelcome
from novelwriter.tools.writingstats import GuiWritingStats from novelwriter.tools.writingstats import GuiWritingStats
from novelwriter.types import QtModShift
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -298,10 +299,18 @@ class GuiMain(QMainWindow):
self.keyReturn.setKey("Return") self.keyReturn.setKey("Return")
self.keyReturn.activated.connect(self._keyPressReturn) self.keyReturn.activated.connect(self._keyPressReturn)
self.keyShiftReturn = QShortcut(self)
self.keyShiftReturn.setKey("Shift+Return")
self.keyShiftReturn.activated.connect(self._keyPressReturn)
self.keyEnter = QShortcut(self) self.keyEnter = QShortcut(self)
self.keyEnter.setKey("Enter") self.keyEnter.setKey("Enter")
self.keyEnter.activated.connect(self._keyPressReturn) self.keyEnter.activated.connect(self._keyPressReturn)
self.keyShiftEnter = QShortcut(self)
self.keyShiftEnter.setKey("Shift+Enter")
self.keyShiftEnter.activated.connect(self._keyPressReturn)
self.keyEscape = QShortcut(self) self.keyEscape = QShortcut(self)
self.keyEscape.setKey("Esc") self.keyEscape.setKey("Esc")
self.keyEscape.activated.connect(self._keyPressEscape) self.keyEscape.activated.connect(self._keyPressEscape)
@@ -719,8 +728,11 @@ class GuiMain(QMainWindow):
logger.warning("No item selected") logger.warning("No item selected")
return return
if tHandle: if tHandle and SHARED.project.tree.checkType(tHandle, nwItemType.FILE):
self.openDocument(tHandle, sTitle=sTitle, changeFocus=False, doScroll=False) if QApplication.keyboardModifiers() == QtModShift:
self.viewDocument(tHandle)
else:
self.openDocument(tHandle, sTitle=sTitle, changeFocus=False, doScroll=False)
return return