diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index 12ff53ad..cc809e17 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -605,6 +605,22 @@ class GuiNovelTree(QTreeWidget): self.clearSelection() return + def resizeEvent(self, event): + """Elide labels in the extra column. + """ + super().resizeEvent(event) + newW = event.size().width() + oldW = event.oldSize().width() + if newW != oldW: + eliW = int(0.25 * newW) + fMetric = self.fontMetrics() + for i in range(self.topLevelItemCount()): + trItem = self.topLevelItem(i) + if isinstance(trItem, QTreeWidgetItem): + lastText = trItem.data(self.C_EXTRA, Qt.UserRole) + trItem.setText(self.C_EXTRA, fMetric.elidedText(lastText, Qt.ElideRight, eliW)) + return + ## # Private Slots ## @@ -686,10 +702,12 @@ class GuiNovelTree(QTreeWidget): trItem.setData(self.C_MORE, Qt.DecorationRole, self._pMore) # Custom column + mW = int(0.25 * self.viewport().width()) lastText, toolTip = self._getLastColumnText(tHandle, sTitle) - trItem.setText(self.C_EXTRA, lastText) - if lastText: - trItem.setToolTip(self.C_EXTRA, toolTip) + elideText = self.fontMetrics().elidedText(lastText, Qt.ElideRight, mW) + trItem.setText(self.C_EXTRA, elideText) + trItem.setData(self.C_EXTRA, Qt.UserRole, lastText) + trItem.setToolTip(self.C_EXTRA, toolTip) return @@ -699,18 +717,24 @@ class GuiNovelTree(QTreeWidget): if self._lastCol == NovelTreeColumn.HIDDEN: return "", "" + refData = [] + refName = "" theRefs = self.theProject.index.getReferences(tHandle, sTitle) if self._lastCol == NovelTreeColumn.POV: - newText = ", ".join(theRefs[nwKeyWords.POV_KEY]) - return newText, f"{self._povLabel}: {newText}" + refData = theRefs[nwKeyWords.POV_KEY] + refName = self._povLabel elif self._lastCol == NovelTreeColumn.FOCUS: - newText = ", ".join(theRefs[nwKeyWords.FOCUS_KEY]) - return newText, f"{self._focLabel}: {newText}" + refData = theRefs[nwKeyWords.FOCUS_KEY] + refName = self._focLabel elif self._lastCol == NovelTreeColumn.PLOT: - newText = ", ".join(theRefs[nwKeyWords.PLOT_KEY]) - return newText, f"{self._pltLabel}: {newText}" + refData = theRefs[nwKeyWords.PLOT_KEY] + refName = self._pltLabel + + if refData: + toolText = ", ".join(refData) + return refData[0], f"{refName}: {toolText}" return "", "" diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index 98d3b36e..ef898237 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -73,6 +73,7 @@ class GuiOutlineView(QWidget): self.splitOutline = QSplitter(Qt.Vertical) self.splitOutline.addWidget(self.outlineTree) self.splitOutline.addWidget(self.outlineData) + self.splitOutline.setOpaqueResize(False) self.splitOutline.setSizes(self.mainConf.outlinePanePos) # Assemble diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 9409c270..7e55ecf4 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -140,12 +140,14 @@ class GuiMain(QMainWindow): self.splitView.addWidget(self.docViewer) self.splitView.addWidget(self.viewMeta) self.splitView.setHandleWidth(hWd) + self.splitView.setOpaqueResize(False) self.splitView.setSizes(self.mainConf.viewPanePos) # Splitter : Document Editor / Document Viewer self.splitDocs = QSplitter(Qt.Horizontal) self.splitDocs.addWidget(self.docEditor) self.splitDocs.addWidget(self.splitView) + self.splitDocs.setOpaqueResize(False) self.splitDocs.setHandleWidth(hWd) # Splitter : Project Tree / Main Tabs @@ -153,6 +155,7 @@ class GuiMain(QMainWindow): self.splitMain.setContentsMargins(0, 0, 0, 0) self.splitMain.addWidget(self.treePane) self.splitMain.addWidget(self.splitDocs) + self.splitMain.setOpaqueResize(False) self.splitMain.setHandleWidth(hWd) self.splitMain.setSizes(self.mainConf.mainPanePos) diff --git a/tests/test_gui/test_gui_noveltree.py b/tests/test_gui/test_gui_noveltree.py index 15101972..c75a29f3 100644 --- a/tests/test_gui/test_gui_noveltree.py +++ b/tests/test_gui/test_gui_noveltree.py @@ -144,11 +144,11 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd): assert novelTree.lastColType == NovelTreeColumn.HIDDEN assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ("", "") - novelBar.setLastColType(NovelTreeColumn.POV) + novelBar.setLastColType(NovelTreeColumn.PLOT) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False - assert novelTree.lastColType == NovelTreeColumn.POV + assert novelTree.lastColType == NovelTreeColumn.PLOT assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ( - "Jane", "Point of View: Jane" + "", "" ) novelBar.setLastColType(NovelTreeColumn.FOCUS) @@ -158,16 +158,20 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd): "Jane", "Focus: Jane" ) - novelBar.setLastColType(NovelTreeColumn.PLOT) + novelBar.setLastColType(NovelTreeColumn.POV) assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False - assert novelTree.lastColType == NovelTreeColumn.PLOT + assert novelTree.lastColType == NovelTreeColumn.POV assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ( - "", "Plot: " + "Jane", "Point of View: Jane" ) novelTree._lastCol = None assert novelTree._getLastColumnText("0000000000000", "T0000") == ("", "") + # This forces the resizeEvent function to process labels + spSize = nwGUI.splitMain.sizes() + nwGUI.splitMain.setSizes([spSize[0] + 10, spSize[1] - 10]) + # Item Meta # =========