From 05e63cb01e767226267dfa32706ceefb20f7f2d9 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 25 Nov 2023 18:45:06 +0100 Subject: [PATCH] Make the columns in the viewer panel resizeable --- novelwriter/core/options.py | 3 +++ novelwriter/gui/docviewerpanel.py | 39 +++++++++++++++++++++++++++++-- novelwriter/guimain.py | 2 ++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/novelwriter/core/options.py b/novelwriter/core/options.py index 48a0c594..8019dee1 100644 --- a/novelwriter/core/options.py +++ b/novelwriter/core/options.py @@ -69,6 +69,9 @@ VALID_MAP = { "GuiManuscriptBuild": { "winWidth", "winHeight", "fmtWidth", "sumWidth", }, + "GuiDocViewerPanel": { + "colWidths", + } } diff --git a/novelwriter/gui/docviewerpanel.py b/novelwriter/gui/docviewerpanel.py index e45820e8..c8f56fd6 100644 --- a/novelwriter/gui/docviewerpanel.py +++ b/novelwriter/gui/docviewerpanel.py @@ -34,9 +34,10 @@ from PyQt5.QtWidgets import ( ) from novelwriter import CONFIG, SHARED +from novelwriter.enum import nwDocMode, nwItemClass +from novelwriter.common import checkInt from novelwriter.constants import nwHeaders, nwLabels, nwLists, trConst from novelwriter.core.index import IndexHeading, IndexItem -from novelwriter.enum import nwDocMode, nwItemClass logger = logging.getLogger(__name__) @@ -103,6 +104,23 @@ class GuiDocViewerPanel(QWidget): return + def openProjectTasks(self) -> None: + """Run open project tasks.""" + widths = SHARED.project.options.getValue("GuiDocViewerPanel", "colWidths", {}) + if isinstance(widths, dict): + for key, value in widths.items(): + if key in self.kwTabs and isinstance(value, list): + self.kwTabs[key].setColumnWidths(value) + return + + def closeProjectTasks(self) -> None: + """Run close project tasks.""" + widths = {} + for key, tab in self.kwTabs.items(): + widths[key] = tab.getColumnWidths() + SHARED.project.options.setValue("GuiDocViewerPanel", "colWidths", widths) + return + ## # Public Slots ## @@ -313,9 +331,11 @@ class _ViewPanelKeyWords(QTreeWidget): self.tr("Heading"), self.tr("Brief") ]) self.setIndentation(0) - self.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection) self.setIconSize(QSize(iPx, iPx)) self.setFrameStyle(QFrame.Shape.NoFrame) + self.setSelectionMode(QAbstractItemView.SelectionMode.NoSelection) + self.setExpandsOnDoubleClick(False) + self.setDragEnabled(False) self.setSortingEnabled(True) self.sortByColumn(self.C_NAME, Qt.SortOrder.AscendingOrder) @@ -327,6 +347,7 @@ class _ViewPanelKeyWords(QTreeWidget): treeHeader.setSectionResizeMode(self.C_VIEW, QHeaderView.ResizeMode.Fixed) treeHeader.resizeSection(self.C_EDIT, iPx + cMg) treeHeader.resizeSection(self.C_VIEW, iPx + cMg) + treeHeader.setSectionsMovable(False) # Cache Icons Locally self._classIcon = SHARED.theme.getIcon(nwLabels.CLASS_ICON[itemClass]) @@ -387,6 +408,20 @@ class _ViewPanelKeyWords(QTreeWidget): return True return False + def setColumnWidths(self, widths: list[int]) -> None: + """Set the column widths.""" + if isinstance(widths, list) and len(widths) >= 2: + self.setColumnWidth(self.C_DOC, CONFIG.pxInt(checkInt(widths[0], 100))) + self.setColumnWidth(self.C_TITLE, CONFIG.pxInt(checkInt(widths[1], 100))) + return + + def getColumnWidths(self) -> list[int]: + """Get the widths of the user-adjustable columns.""" + return [ + CONFIG.rpxInt(self.columnWidth(self.C_DOC)), + CONFIG.rpxInt(self.columnWidth(self.C_TITLE)), + ] + ## # Private Slots ## diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 2006213e..54857de8 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -454,6 +454,7 @@ class GuiMain(QMainWindow): self.docViewer.clearNavHistory() self.closeDocViewer(byUser=False) + self.docViewerPanel.closeProjectTasks() self.outlineView.closeProjectTasks() self.novelView.closeProjectTasks() self.projView.clearProjectView() @@ -527,6 +528,7 @@ class GuiMain(QMainWindow): self.projView.openProjectTasks() self.novelView.openProjectTasks() self.outlineView.openProjectTasks() + self.docViewerPanel.openProjectTasks() self._updateStatusWordCount() # Restore previously open documents, if any