Force a max width of extra column in novel view (#1238)
This commit is contained in:
@@ -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 "", ""
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
# =========
|
||||
|
||||
|
||||
Reference in New Issue
Block a user