diff --git a/novelwriter/constants.py b/novelwriter/constants.py index 954f21ed5..25326f641 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -301,6 +301,7 @@ class nwLabels: nwOutline.LEVEL: QT_TRANSLATE_NOOP("Constant", "Level"), nwOutline.LABEL: QT_TRANSLATE_NOOP("Constant", "Document"), nwOutline.LINE: QT_TRANSLATE_NOOP("Constant", "Line"), + nwOutline.STATUS: QT_TRANSLATE_NOOP("Constant", "Status"), nwOutline.CCOUNT: QT_TRANSLATE_NOOP("Constant", "Chars"), nwOutline.WCOUNT: QT_TRANSLATE_NOOP("Constant", "Words"), nwOutline.PCOUNT: QT_TRANSLATE_NOOP("Constant", "Pars"), diff --git a/novelwriter/enum.py b/novelwriter/enum.py index b61353447..7441bc9b4 100644 --- a/novelwriter/enum.py +++ b/novelwriter/enum.py @@ -162,21 +162,22 @@ class nwOutline(Enum): LEVEL = 1 LABEL = 2 LINE = 3 - CCOUNT = 4 - WCOUNT = 5 - PCOUNT = 6 - POV = 7 - FOCUS = 8 - CHAR = 9 - PLOT = 10 - TIME = 11 - WORLD = 12 - OBJECT = 13 - ENTITY = 14 - CUSTOM = 15 - STORY = 16 - MENTION = 17 - SYNOP = 18 + STATUS = 4 + CCOUNT = 5 + WCOUNT = 6 + PCOUNT = 7 + POV = 8 + FOCUS = 9 + CHAR = 10 + PLOT = 11 + TIME = 12 + WORLD = 13 + OBJECT = 14 + ENTITY = 15 + CUSTOM = 16 + STORY = 17 + MENTION = 18 + SYNOP = 19 class nwBuildFmt(Enum): diff --git a/novelwriter/gui/outline.py b/novelwriter/gui/outline.py index ee0e1c9fb..cae1cec3c 100644 --- a/novelwriter/gui/outline.py +++ b/novelwriter/gui/outline.py @@ -318,6 +318,7 @@ class GuiOutlineTree(QTreeWidget): nwOutline.LEVEL: 40, nwOutline.LABEL: 150, nwOutline.LINE: 40, + nwOutline.STATUS: 100, nwOutline.CCOUNT: 50, nwOutline.WCOUNT: 50, nwOutline.PCOUNT: 50, @@ -340,6 +341,7 @@ class GuiOutlineTree(QTreeWidget): nwOutline.LEVEL: True, nwOutline.LABEL: False, nwOutline.LINE: True, + nwOutline.STATUS: True, nwOutline.CCOUNT: True, nwOutline.WCOUNT: False, nwOutline.PCOUNT: False, @@ -471,8 +473,10 @@ def clearContent(self) -> None: return - def refreshTree(self, rootHandle: str | None = None, - overRide: bool = False, novelChanged: bool = False) -> None: + def refreshTree( + self, rootHandle: str | None = None, + overRide: bool = False, novelChanged: bool = False + ) -> None: """Called whenever the Outline tab is activated and controls what data to load, and if necessary, force a rebuild of the tree. @@ -659,6 +663,7 @@ def _populateTree(self, rootHandle: str | None) -> None: is fast and doesn't require a rebuild of the tree. """ logger.debug("Rebuilding Outline tree") + tStart = time() self.clear() if self._firstView: @@ -691,6 +696,7 @@ def _populateTree(self, rootHandle: str | None) -> None: nwItem = SHARED.project.tree[tHandle] if iLevel == 0 or nwItem is None: continue + sLabel, sIcon = nwItem.getImportStatus() item = QTreeWidgetItem() hDec = SHARED.theme.getHeaderDecoration(iLevel) @@ -704,6 +710,8 @@ def _populateTree(self, rootHandle: str | None) -> None: item.setIcon(self._colIdx[nwOutline.LABEL], self._dIcon[nwItem.mainHeading]) item.setText(self._colIdx[nwOutline.LABEL], nwItem.itemName) item.setText(self._colIdx[nwOutline.LINE], f"{novIdx.line:n}") + item.setText(self._colIdx[nwOutline.STATUS], sLabel) + item.setIcon(self._colIdx[nwOutline.STATUS], sIcon) item.setText(self._colIdx[nwOutline.SYNOP], novIdx.synopsis) item.setText(self._colIdx[nwOutline.CCOUNT], f"{novIdx.charCount:n}") item.setText(self._colIdx[nwOutline.WCOUNT], f"{novIdx.wordCount:n}") @@ -728,6 +736,7 @@ def _populateTree(self, rootHandle: str | None) -> None: self.addTopLevelItem(item) self._lastBuild = time() + logger.debug("Project outline built in %.3f ms", 1000.0*(time() - tStart)) return diff --git a/tests/test_gui/test_gui_outline.py b/tests/test_gui/test_gui_outline.py index dabd9cf04..be762fc52 100644 --- a/tests/test_gui/test_gui_outline.py +++ b/tests/test_gui/test_gui_outline.py @@ -166,12 +166,12 @@ def testGuiOutline_Main(qtbot, monkeypatch, nwGUI, projPath): # Current Order order = [outlineTree._colIdx[col] for col in outlineTree._treeOrder] - assert order == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + assert order == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] # Move 3 to 0 outlineTree._columnMoved(0, 3, 0) order = [outlineTree._colIdx[col] for col in outlineTree._treeOrder] - assert order == [3, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + assert order == [3, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] # qtbot.stop()