From e89f00453294a9ff16cc044a6553d5ed3713dba4 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 25 Oct 2022 12:20:18 +0200 Subject: [PATCH] Add a manage labels option to project tree context menu (#1203) --- novelwriter/custom.py | 6 ++++++ novelwriter/dialogs/projsettings.py | 23 ++++++++++++++++++++++- novelwriter/gui/projtree.py | 15 ++++++++++++++- novelwriter/guimain.py | 6 ++++-- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/novelwriter/custom.py b/novelwriter/custom.py index d516e2dd..5d9d8122 100644 --- a/novelwriter/custom.py +++ b/novelwriter/custom.py @@ -421,6 +421,12 @@ class PagedDialog(QDialog): self._buttonBox.addWidget(buttonBar) return + def setCurrentWidget(self, widget): + """Forward the changing of tab to the QTabWidget. + """ + self._tabBox.setCurrentWidget(widget) + return + # END Class PagedDialog diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index 86c268d6..5760d982 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -43,7 +43,12 @@ logger = logging.getLogger(__name__) class GuiProjectSettings(PagedDialog): - def __init__(self, mainGui): + TAB_MAIN = 0 + TAB_STATUS = 1 + TAB_IMPORT = 2 + TAB_REPLACE = 3 + + def __init__(self, mainGui, focusTab=TAB_MAIN): super().__init__(parent=mainGui) logger.debug("Initialising GuiProjectSettings ...") @@ -85,6 +90,9 @@ class GuiProjectSettings(PagedDialog): # Flags self.spellChanged = False + # Focus Tab + self._focusTab(focusTab) + logger.debug("GuiProjectSettings initialisation complete") return @@ -141,6 +149,19 @@ class GuiProjectSettings(PagedDialog): # Internal Functions ## + def _focusTab(self, tab): + """Change which is the focused tab. + """ + if tab == self.TAB_MAIN: + self.setCurrentWidget(self.tabMain) + elif tab == self.TAB_STATUS: + self.setCurrentWidget(self.tabStatus) + elif tab == self.TAB_IMPORT: + self.setCurrentWidget(self.tabImport) + elif tab == self.TAB_REPLACE: + self.setCurrentWidget(self.tabReplace) + return + def _saveGuiSettings(self): """Save GUI settings. """ diff --git a/novelwriter/gui/projtree.py b/novelwriter/gui/projtree.py index 202efee0..f4b60161 100644 --- a/novelwriter/gui/projtree.py +++ b/novelwriter/gui/projtree.py @@ -41,7 +41,7 @@ from PyQt5.QtWidgets import ( from novelwriter.core import DocMerger, DocSplitter from novelwriter.enum import nwDocMode, nwItemType, nwItemClass, nwItemLayout, nwAlert -from novelwriter.dialogs import GuiDocMerge, GuiDocSplit, GuiEditLabel +from novelwriter.dialogs import GuiDocMerge, GuiDocSplit, GuiEditLabel, GuiProjectSettings from novelwriter.constants import nwHeaders, trConst, nwLabels logger = logging.getLogger(__name__) @@ -62,6 +62,9 @@ class GuiProjectView(QWidget): selectedItemChanged = pyqtSignal(str) openDocumentRequest = pyqtSignal(str, Enum, int, str) + # Requests for the main GUI + projectSettingsRequest = pyqtSignal(int) + def __init__(self, mainGui): super().__init__(parent=mainGui) @@ -1169,6 +1172,11 @@ class GuiProjectTree(QTreeWidget): aStatus.triggered.connect( lambda n, key=key: self._changeItemStatus(tHandle, key) ) + mStatus.addSeparator() + aManage1 = mStatus.addAction("Manage Labels ...") + aManage1.triggered.connect( + lambda: self.projView.projectSettingsRequest.emit(GuiProjectSettings.TAB_STATUS) + ) else: mImport = ctxMenu.addMenu(self.tr("Set Importance to ...")) for n, (key, entry) in enumerate(self.theProject.importItems.items()): @@ -1176,6 +1184,11 @@ class GuiProjectTree(QTreeWidget): aImport.triggered.connect( lambda n, key=key: self._changeItemImport(tHandle, key) ) + mImport.addSeparator() + aManage2 = mImport.addAction("Manage Labels ...") + aManage2.triggered.connect( + lambda: self.projView.projectSettingsRequest.emit(GuiProjectSettings.TAB_IMPORT) + ) # Transform Item # ============== diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index fee7c7d6..4025dd05 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -208,6 +208,7 @@ class GuiMain(QMainWindow): self.projView.rootFolderChanged.connect(self.outlineView.updateRootItem) self.projView.rootFolderChanged.connect(self.novelView.updateRootItem) self.projView.rootFolderChanged.connect(self.projView.updateRootItem) + self.projView.projectSettingsRequest.connect(self.showProjectSettingsDialog) self.novelView.selectedItemChanged.connect(self.itemDetails.updateViewBox) self.novelView.openDocumentRequest.connect(self._openDocument) @@ -921,14 +922,15 @@ class GuiMain(QMainWindow): return - def showProjectSettingsDialog(self): + @pyqtSlot(int) + def showProjectSettingsDialog(self, focusTab=GuiProjectSettings.TAB_MAIN): """Open the project settings dialog. """ if not self.hasProject: logger.error("No project open") return False - dlgProj = GuiProjectSettings(self) + dlgProj = GuiProjectSettings(self, focusTab=focusTab) dlgProj.exec_() if dlgProj.result() == QDialog.Accepted: