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"),
"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 = {
nwKeyWords.TAG_KEY: QT_TRANSLATE_NOOP("Constant", "Tag"),
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 novelwriter import SHARED
from novelwriter.common import (
checkInt, isHandle, isItemClass, isItemLayout, isItemType, simplified,
yesNo
@@ -330,6 +331,13 @@ class NWItem:
entry = self._project.data.itemImport[self._import]
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
##
+4 -8
View File
@@ -113,18 +113,14 @@ class ProjectNode:
self._cache[C_COUNT_ALIGN] = QtAlignRight
# Active
if self._item.isFileType():
if self._item.isActive:
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("checked")
else:
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("unchecked")
else:
self._cache[C_ACTIVE_ICON] = SHARED.theme.getIcon("noncheckable")
aText, aIcon = self._item.getActiveStatus()
self._cache[C_ACTIVE_TIP] = aText
self._cache[C_ACTIVE_ICON] = aIcon
# Status
sText, sIcon = self._item.getImportStatus()
self._cache[C_STATUS_ICON] = sIcon
self._cache[C_STATUS_TIP] = sText
self._cache[C_STATUS_ICON] = sIcon
self.updateCount()
+20 -20
View File
@@ -515,22 +515,8 @@ class GuiProjectTree(QTreeView):
self.projView = projView
# Internal Variables
# self._treeMap: dict[str, QTreeWidgetItem] = {}
# self._popAlert = 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
iPx = SHARED.theme.baseIconHeight
@@ -551,19 +537,19 @@ class GuiProjectTree(QTreeView):
# releases (see #1561) and instead use our own implementation
# 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
self.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection)
self.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
# Context Menu
# self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
# self.customContextMenuRequested.connect(self.openContextMenu)
# Connect signals
self.clicked.connect(self._onSingleClick)
self.doubleClicked.connect(self._onDoubleClick)
self.collapsed.connect(self._onNodeCollapsed)
self.expanded.connect(self._onNodeExpanded)
# Auto Scroll
# self._scrollMargin = SHARED.theme.baseIconHeight
@@ -865,6 +851,20 @@ class GuiProjectTree(QTreeView):
self.setExpanded(index, not self.isExpanded(index))
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
##
+15 -3
View File
@@ -44,7 +44,7 @@ from novelwriter.dialogs.about import GuiAbout
from novelwriter.dialogs.preferences import GuiPreferences
from novelwriter.dialogs.projectsettings import GuiProjectSettings
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.docviewer import GuiDocViewer
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.welcome import GuiWelcome
from novelwriter.tools.writingstats import GuiWritingStats
from novelwriter.types import QtModShift
logger = logging.getLogger(__name__)
@@ -298,10 +299,18 @@ class GuiMain(QMainWindow):
self.keyReturn.setKey("Return")
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.setKey("Enter")
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.setKey("Esc")
self.keyEscape.activated.connect(self._keyPressEscape)
@@ -719,8 +728,11 @@ class GuiMain(QMainWindow):
logger.warning("No item selected")
return
if tHandle:
self.openDocument(tHandle, sTitle=sTitle, changeFocus=False, doScroll=False)
if tHandle and SHARED.project.tree.checkType(tHandle, nwItemType.FILE):
if QApplication.keyboardModifiers() == QtModShift:
self.viewDocument(tHandle)
else:
self.openDocument(tHandle, sTitle=sTitle, changeFocus=False, doScroll=False)
return