Add indentation of viewer menu, and move location

This commit is contained in:
Veronica Berglyd Olsen
2024-03-17 16:57:28 +01:00
parent 6bb9ec0dc1
commit 8133e374d1
3 changed files with 50 additions and 33 deletions
+13 -13
View File
@@ -2837,15 +2837,6 @@ class GuiDocEditHeader(QWidget):
self.tbButton.setToolTip(self.tr("Toggle Tool Bar")) self.tbButton.setToolTip(self.tr("Toggle Tool Bar"))
self.tbButton.clicked.connect(lambda: self.toggleToolBarRequest.emit()) self.tbButton.clicked.connect(lambda: self.toggleToolBarRequest.emit())
self.searchButton = QToolButton(self)
self.searchButton.setContentsMargins(0, 0, 0, 0)
self.searchButton.setIconSize(iconSize)
self.searchButton.setFixedSize(fPx, fPx)
self.searchButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
self.searchButton.setVisible(False)
self.searchButton.setToolTip(self.tr("Search"))
self.searchButton.clicked.connect(self.docEditor.toggleSearch)
self.outlineButton = QToolButton(self) self.outlineButton = QToolButton(self)
self.outlineButton.setContentsMargins(0, 0, 0, 0) self.outlineButton.setContentsMargins(0, 0, 0, 0)
self.outlineButton.setIconSize(iconSize) self.outlineButton.setIconSize(iconSize)
@@ -2856,6 +2847,15 @@ class GuiDocEditHeader(QWidget):
self.outlineButton.setMenu(self.outlineMenu) self.outlineButton.setMenu(self.outlineMenu)
self.outlineButton.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup) self.outlineButton.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
self.searchButton = QToolButton(self)
self.searchButton.setContentsMargins(0, 0, 0, 0)
self.searchButton.setIconSize(iconSize)
self.searchButton.setFixedSize(fPx, fPx)
self.searchButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
self.searchButton.setVisible(False)
self.searchButton.setToolTip(self.tr("Search"))
self.searchButton.clicked.connect(self.docEditor.toggleSearch)
self.minmaxButton = QToolButton(self) self.minmaxButton = QToolButton(self)
self.minmaxButton.setContentsMargins(0, 0, 0, 0) self.minmaxButton.setContentsMargins(0, 0, 0, 0)
self.minmaxButton.setIconSize(iconSize) self.minmaxButton.setIconSize(iconSize)
@@ -2878,8 +2878,8 @@ class GuiDocEditHeader(QWidget):
self.outerBox = QHBoxLayout() self.outerBox = QHBoxLayout()
self.outerBox.setSpacing(hSp) self.outerBox.setSpacing(hSp)
self.outerBox.addWidget(self.tbButton, 0) self.outerBox.addWidget(self.tbButton, 0)
self.outerBox.addWidget(self.searchButton, 0)
self.outerBox.addWidget(self.outlineButton, 0) self.outerBox.addWidget(self.outlineButton, 0)
self.outerBox.addWidget(self.searchButton, 0)
self.outerBox.addWidget(self.itemTitle, 1) self.outerBox.addWidget(self.itemTitle, 1)
self.outerBox.addSpacing(fPx + hSp) self.outerBox.addSpacing(fPx + hSp)
self.outerBox.addWidget(self.minmaxButton, 0) self.outerBox.addWidget(self.minmaxButton, 0)
@@ -2914,8 +2914,8 @@ class GuiDocEditHeader(QWidget):
self.itemTitle.setText("") self.itemTitle.setText("")
self.outlineMenu.clear() self.outlineMenu.clear()
self.tbButton.setVisible(False) self.tbButton.setVisible(False)
self.searchButton.setVisible(False)
self.outlineButton.setVisible(False) self.outlineButton.setVisible(False)
self.searchButton.setVisible(False)
self.closeButton.setVisible(False) self.closeButton.setVisible(False)
self.minmaxButton.setVisible(False) self.minmaxButton.setVisible(False)
return return
@@ -2937,8 +2937,8 @@ class GuiDocEditHeader(QWidget):
def updateTheme(self) -> None: def updateTheme(self) -> None:
"""Update theme elements.""" """Update theme elements."""
self.tbButton.setIcon(SHARED.theme.getIcon("menu")) self.tbButton.setIcon(SHARED.theme.getIcon("menu"))
self.searchButton.setIcon(SHARED.theme.getIcon("search"))
self.outlineButton.setIcon(SHARED.theme.getIcon("list")) self.outlineButton.setIcon(SHARED.theme.getIcon("list"))
self.searchButton.setIcon(SHARED.theme.getIcon("search"))
self.minmaxButton.setIcon(SHARED.theme.getIcon("maximise")) self.minmaxButton.setIcon(SHARED.theme.getIcon("maximise"))
self.closeButton.setIcon(SHARED.theme.getIcon("close")) self.closeButton.setIcon(SHARED.theme.getIcon("close"))
@@ -2950,8 +2950,8 @@ class GuiDocEditHeader(QWidget):
buttonStyleMenu = f"{buttonStyle} QToolButton::menu-indicator {{image: none;}}" buttonStyleMenu = f"{buttonStyle} QToolButton::menu-indicator {{image: none;}}"
self.tbButton.setStyleSheet(buttonStyle) self.tbButton.setStyleSheet(buttonStyle)
self.searchButton.setStyleSheet(buttonStyle)
self.outlineButton.setStyleSheet(buttonStyleMenu) self.outlineButton.setStyleSheet(buttonStyleMenu)
self.searchButton.setStyleSheet(buttonStyle)
self.minmaxButton.setStyleSheet(buttonStyle) self.minmaxButton.setStyleSheet(buttonStyle)
self.closeButton.setStyleSheet(buttonStyle) self.closeButton.setStyleSheet(buttonStyle)
+27 -20
View File
@@ -43,7 +43,7 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED from novelwriter import CONFIG, SHARED
from novelwriter.enum import nwItemType, nwDocAction, nwDocMode from novelwriter.enum import nwItemType, nwDocAction, nwDocMode
from novelwriter.error import logException from novelwriter.error import logException
from novelwriter.constants import nwUnicode from novelwriter.constants import nwHeaders, nwUnicode
from novelwriter.core.tohtml import ToHtml from novelwriter.core.tohtml import ToHtml
from novelwriter.extensions.eventfilters import WheelEventFilter from novelwriter.extensions.eventfilters import WheelEventFilter
@@ -235,7 +235,7 @@ class GuiDocViewer(QTextBrowser):
SHARED.project.data.setLastHandle(tHandle, "viewer") SHARED.project.data.setLastHandle(tHandle, "viewer")
self.docHeader.setHandle(tHandle) self.docHeader.setHandle(tHandle)
self.docHeader.setOutline({ self.docHeader.setOutline({
sTitle: hItem.title sTitle: (hItem.title, nwHeaders.H_LEVEL.get(hItem.level, 0))
for sTitle, hItem in SHARED.project.index.iterItemHeadings(tHandle) for sTitle, hItem in SHARED.project.index.iterItemHeadings(tHandle)
}) })
self.updateDocMargins() self.updateDocMargins()
@@ -628,7 +628,7 @@ class GuiDocViewHeader(QWidget):
# Internal Variables # Internal Variables
self._docHandle = None self._docHandle = None
self._docOutline: dict[int, str] = {} self._docOutline: dict[int, tuple[str, int]] = {}
fPx = int(0.9*SHARED.theme.fontPixelSize) fPx = int(0.9*SHARED.theme.fontPixelSize)
hSp = CONFIG.pxInt(6) hSp = CONFIG.pxInt(6)
@@ -656,6 +656,16 @@ class GuiDocViewHeader(QWidget):
self.outlineMenu = QMenu(self) self.outlineMenu = QMenu(self)
# Buttons # Buttons
self.outlineButton = QToolButton(self)
self.outlineButton.setContentsMargins(0, 0, 0, 0)
self.outlineButton.setIconSize(iconSize)
self.outlineButton.setFixedSize(fPx, fPx)
self.outlineButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
self.outlineButton.setVisible(False)
self.outlineButton.setToolTip(self.tr("Outline"))
self.outlineButton.setMenu(self.outlineMenu)
self.outlineButton.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
self.backButton = QToolButton(self) self.backButton = QToolButton(self)
self.backButton.setContentsMargins(0, 0, 0, 0) self.backButton.setContentsMargins(0, 0, 0, 0)
self.backButton.setIconSize(iconSize) self.backButton.setIconSize(iconSize)
@@ -674,16 +684,6 @@ class GuiDocViewHeader(QWidget):
self.forwardButton.setToolTip(self.tr("Go Forward")) self.forwardButton.setToolTip(self.tr("Go Forward"))
self.forwardButton.clicked.connect(self.docViewer.navForward) self.forwardButton.clicked.connect(self.docViewer.navForward)
self.outlineButton = QToolButton(self)
self.outlineButton.setContentsMargins(0, 0, 0, 0)
self.outlineButton.setIconSize(iconSize)
self.outlineButton.setFixedSize(fPx, fPx)
self.outlineButton.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
self.outlineButton.setVisible(False)
self.outlineButton.setToolTip(self.tr("Outline"))
self.outlineButton.setMenu(self.outlineMenu)
self.outlineButton.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
self.refreshButton = QToolButton(self) self.refreshButton = QToolButton(self)
self.refreshButton.setContentsMargins(0, 0, 0, 0) self.refreshButton.setContentsMargins(0, 0, 0, 0)
self.refreshButton.setIconSize(iconSize) self.refreshButton.setIconSize(iconSize)
@@ -705,9 +705,9 @@ class GuiDocViewHeader(QWidget):
# Assemble Layout # Assemble Layout
self.outerBox = QHBoxLayout() self.outerBox = QHBoxLayout()
self.outerBox.setSpacing(hSp) self.outerBox.setSpacing(hSp)
self.outerBox.addWidget(self.outlineButton, 0)
self.outerBox.addWidget(self.backButton, 0) self.outerBox.addWidget(self.backButton, 0)
self.outerBox.addWidget(self.forwardButton, 0) self.outerBox.addWidget(self.forwardButton, 0)
self.outerBox.addWidget(self.outlineButton, 0)
self.outerBox.addWidget(self.itemTitle, 1) self.outerBox.addWidget(self.itemTitle, 1)
self.outerBox.addSpacing(fPx + hSp) self.outerBox.addSpacing(fPx + hSp)
self.outerBox.addWidget(self.refreshButton, 0) self.outerBox.addWidget(self.refreshButton, 0)
@@ -739,19 +739,26 @@ class GuiDocViewHeader(QWidget):
self.itemTitle.setText("") self.itemTitle.setText("")
self.outlineMenu.clear() self.outlineMenu.clear()
self.outlineButton.setVisible(False)
self.backButton.setVisible(False) self.backButton.setVisible(False)
self.forwardButton.setVisible(False) self.forwardButton.setVisible(False)
self.outlineButton.setVisible(False)
self.closeButton.setVisible(False) self.closeButton.setVisible(False)
self.refreshButton.setVisible(False) self.refreshButton.setVisible(False)
return return
def setOutline(self, data: dict[int, str]) -> None: def setOutline(self, data: dict[int, tuple[str, int]]) -> None:
"""Set the document outline dataset.""" """Set the document outline dataset."""
if data != self._docOutline: if data != self._docOutline:
self.outlineMenu.clear() self.outlineMenu.clear()
for title, text in data.items(): entries = []
action = self.outlineMenu.addAction(text) minLevel = 5
for title, (text, level) in data.items():
if title != "T0000":
entries.append((title, text, level))
minLevel = min(minLevel, level)
for title, text, level in entries:
indent = " "*(level - minLevel)
action = self.outlineMenu.addAction(f"{indent}{text}")
action.triggered.connect( action.triggered.connect(
lambda _, title=title: self.docViewer.navigateTo(f"#{title}") lambda _, title=title: self.docViewer.navigateTo(f"#{title}")
) )
@@ -760,9 +767,9 @@ class GuiDocViewHeader(QWidget):
def updateTheme(self) -> None: def updateTheme(self) -> None:
"""Update theme elements.""" """Update theme elements."""
self.outlineButton.setIcon(SHARED.theme.getIcon("list"))
self.backButton.setIcon(SHARED.theme.getIcon("backward")) self.backButton.setIcon(SHARED.theme.getIcon("backward"))
self.forwardButton.setIcon(SHARED.theme.getIcon("forward")) self.forwardButton.setIcon(SHARED.theme.getIcon("forward"))
self.outlineButton.setIcon(SHARED.theme.getIcon("list"))
self.refreshButton.setIcon(SHARED.theme.getIcon("refresh")) self.refreshButton.setIcon(SHARED.theme.getIcon("refresh"))
self.closeButton.setIcon(SHARED.theme.getIcon("close")) self.closeButton.setIcon(SHARED.theme.getIcon("close"))
@@ -773,9 +780,9 @@ class GuiDocViewHeader(QWidget):
).format(colText.red(), colText.green(), colText.blue()) ).format(colText.red(), colText.green(), colText.blue())
buttonStyleMenu = f"{buttonStyle} QToolButton::menu-indicator {{image: none;}}" buttonStyleMenu = f"{buttonStyle} QToolButton::menu-indicator {{image: none;}}"
self.outlineButton.setStyleSheet(buttonStyleMenu)
self.backButton.setStyleSheet(buttonStyle) self.backButton.setStyleSheet(buttonStyle)
self.forwardButton.setStyleSheet(buttonStyle) self.forwardButton.setStyleSheet(buttonStyle)
self.outlineButton.setStyleSheet(buttonStyleMenu)
self.refreshButton.setStyleSheet(buttonStyle) self.refreshButton.setStyleSheet(buttonStyle)
self.closeButton.setStyleSheet(buttonStyle) self.closeButton.setStyleSheet(buttonStyle)
+10
View File
@@ -705,6 +705,16 @@ def testCoreIndex_ExtractData(mockGUI, fncPath, mockRnd):
index.getItemHeading(dHandle, "T0001") index.getItemHeading(dHandle, "T0001")
)] )]
# getItemHeading
# ==============
assert list(index.iterItemHeadings(cHandle)) == [
("T0001", index.getItemHeading(cHandle, "T0001"))
]
assert list(index.iterItemHeadings(dHandle)) == [
("T0001", index.getItemHeading(dHandle, "T0001"))
]
assert list(index.iterItemHeadings(C.hInvalid)) == []
# getSingleTag # getSingleTag
# ============ # ============
assert index.getSingleTag("jane") == ( assert index.getSingleTag("jane") == (