Force a max width of extra column in novel view (#1238)

This commit is contained in:
Veronica Berglyd Olsen
2022-11-15 23:27:54 +01:00
parent a15d25370e
commit 1e2920641d
4 changed files with 47 additions and 15 deletions
+33 -9
View File
@@ -605,6 +605,22 @@ class GuiNovelTree(QTreeWidget):
self.clearSelection() self.clearSelection()
return 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 # Private Slots
## ##
@@ -686,10 +702,12 @@ class GuiNovelTree(QTreeWidget):
trItem.setData(self.C_MORE, Qt.DecorationRole, self._pMore) trItem.setData(self.C_MORE, Qt.DecorationRole, self._pMore)
# Custom column # Custom column
mW = int(0.25 * self.viewport().width())
lastText, toolTip = self._getLastColumnText(tHandle, sTitle) lastText, toolTip = self._getLastColumnText(tHandle, sTitle)
trItem.setText(self.C_EXTRA, lastText) elideText = self.fontMetrics().elidedText(lastText, Qt.ElideRight, mW)
if lastText: trItem.setText(self.C_EXTRA, elideText)
trItem.setToolTip(self.C_EXTRA, toolTip) trItem.setData(self.C_EXTRA, Qt.UserRole, lastText)
trItem.setToolTip(self.C_EXTRA, toolTip)
return return
@@ -699,18 +717,24 @@ class GuiNovelTree(QTreeWidget):
if self._lastCol == NovelTreeColumn.HIDDEN: if self._lastCol == NovelTreeColumn.HIDDEN:
return "", "" return "", ""
refData = []
refName = ""
theRefs = self.theProject.index.getReferences(tHandle, sTitle) theRefs = self.theProject.index.getReferences(tHandle, sTitle)
if self._lastCol == NovelTreeColumn.POV: if self._lastCol == NovelTreeColumn.POV:
newText = ", ".join(theRefs[nwKeyWords.POV_KEY]) refData = theRefs[nwKeyWords.POV_KEY]
return newText, f"{self._povLabel}: {newText}" refName = self._povLabel
elif self._lastCol == NovelTreeColumn.FOCUS: elif self._lastCol == NovelTreeColumn.FOCUS:
newText = ", ".join(theRefs[nwKeyWords.FOCUS_KEY]) refData = theRefs[nwKeyWords.FOCUS_KEY]
return newText, f"{self._focLabel}: {newText}" refName = self._focLabel
elif self._lastCol == NovelTreeColumn.PLOT: elif self._lastCol == NovelTreeColumn.PLOT:
newText = ", ".join(theRefs[nwKeyWords.PLOT_KEY]) refData = theRefs[nwKeyWords.PLOT_KEY]
return newText, f"{self._pltLabel}: {newText}" refName = self._pltLabel
if refData:
toolText = ", ".join(refData)
return refData[0], f"{refName}: {toolText}"
return "", "" return "", ""
+1
View File
@@ -73,6 +73,7 @@ class GuiOutlineView(QWidget):
self.splitOutline = QSplitter(Qt.Vertical) self.splitOutline = QSplitter(Qt.Vertical)
self.splitOutline.addWidget(self.outlineTree) self.splitOutline.addWidget(self.outlineTree)
self.splitOutline.addWidget(self.outlineData) self.splitOutline.addWidget(self.outlineData)
self.splitOutline.setOpaqueResize(False)
self.splitOutline.setSizes(self.mainConf.outlinePanePos) self.splitOutline.setSizes(self.mainConf.outlinePanePos)
# Assemble # Assemble
+3
View File
@@ -140,12 +140,14 @@ class GuiMain(QMainWindow):
self.splitView.addWidget(self.docViewer) self.splitView.addWidget(self.docViewer)
self.splitView.addWidget(self.viewMeta) self.splitView.addWidget(self.viewMeta)
self.splitView.setHandleWidth(hWd) self.splitView.setHandleWidth(hWd)
self.splitView.setOpaqueResize(False)
self.splitView.setSizes(self.mainConf.viewPanePos) self.splitView.setSizes(self.mainConf.viewPanePos)
# Splitter : Document Editor / Document Viewer # Splitter : Document Editor / Document Viewer
self.splitDocs = QSplitter(Qt.Horizontal) self.splitDocs = QSplitter(Qt.Horizontal)
self.splitDocs.addWidget(self.docEditor) self.splitDocs.addWidget(self.docEditor)
self.splitDocs.addWidget(self.splitView) self.splitDocs.addWidget(self.splitView)
self.splitDocs.setOpaqueResize(False)
self.splitDocs.setHandleWidth(hWd) self.splitDocs.setHandleWidth(hWd)
# Splitter : Project Tree / Main Tabs # Splitter : Project Tree / Main Tabs
@@ -153,6 +155,7 @@ class GuiMain(QMainWindow):
self.splitMain.setContentsMargins(0, 0, 0, 0) self.splitMain.setContentsMargins(0, 0, 0, 0)
self.splitMain.addWidget(self.treePane) self.splitMain.addWidget(self.treePane)
self.splitMain.addWidget(self.splitDocs) self.splitMain.addWidget(self.splitDocs)
self.splitMain.setOpaqueResize(False)
self.splitMain.setHandleWidth(hWd) self.splitMain.setHandleWidth(hWd)
self.splitMain.setSizes(self.mainConf.mainPanePos) self.splitMain.setSizes(self.mainConf.mainPanePos)
+10 -6
View File
@@ -144,11 +144,11 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
assert novelTree.lastColType == NovelTreeColumn.HIDDEN assert novelTree.lastColType == NovelTreeColumn.HIDDEN
assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ("", "") assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ("", "")
novelBar.setLastColType(NovelTreeColumn.POV) novelBar.setLastColType(NovelTreeColumn.PLOT)
assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False
assert novelTree.lastColType == NovelTreeColumn.POV assert novelTree.lastColType == NovelTreeColumn.PLOT
assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ( assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == (
"Jane", "Point of View: Jane" "", ""
) )
novelBar.setLastColType(NovelTreeColumn.FOCUS) novelBar.setLastColType(NovelTreeColumn.FOCUS)
@@ -158,16 +158,20 @@ def testGuiNovelTree_TreeItems(qtbot, monkeypatch, nwGUI, projPath, mockRnd):
"Jane", "Focus: Jane" "Jane", "Focus: Jane"
) )
novelBar.setLastColType(NovelTreeColumn.PLOT) novelBar.setLastColType(NovelTreeColumn.POV)
assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False assert novelTree.isColumnHidden(novelTree.C_EXTRA) is False
assert novelTree.lastColType == NovelTreeColumn.PLOT assert novelTree.lastColType == NovelTreeColumn.POV
assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == ( assert novelTree._getLastColumnText(C.hSceneDoc, "T0001") == (
"", "Plot: " "Jane", "Point of View: Jane"
) )
novelTree._lastCol = None novelTree._lastCol = None
assert novelTree._getLastColumnText("0000000000000", "T0000") == ("", "") 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 # Item Meta
# ========= # =========