From edf765f91ff977d058dc6adcfbceb6fc36eca6cc Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sat, 22 Mar 2025 16:51:10 +0100 Subject: [PATCH] Allow novel model refresh --- novelwriter/core/index.py | 28 +++++++++++++++++++++------- novelwriter/gui/noveltree.py | 4 +++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/novelwriter/core/index.py b/novelwriter/core/index.py index 59899c6b..be8df2ed 100644 --- a/novelwriter/core/index.py +++ b/novelwriter/core/index.py @@ -120,20 +120,34 @@ class Index: self._generateNovelModel(tHandle) return self._novelModels.get(tHandle) + def refreshNovelModel(self, tHandle: str) -> None: + """Refresh a novel model.""" + if model := self.getNovelModel(tHandle): + model.beginResetModel() + model.clear() + self._appendSubTreeToModel(tHandle, model) + model.endResetModel() + return + def _generateNovelModel(self, tHandle: str) -> None: """Generate a novel model for a specific handle.""" if (item := SHARED.project.tree[tHandle]) and item.isRootType() and item.isNovelLike(): model = NovelModel() - for handle in SHARED.project.tree.subTree(tHandle): - if ( - (node := self._itemIndex[handle]) - and node.item.isDocumentLayout() - and node.item.isActive - ): - model.append(node) + self._appendSubTreeToModel(tHandle, model) self._novelModels[tHandle] = model return + def _appendSubTreeToModel(self, tHandle: str, model: NovelModel) -> None: + """Append all active novel documents to a novel model.""" + for handle in SHARED.project.tree.subTree(tHandle): + if ( + (node := self._itemIndex[handle]) + and node.item.isDocumentLayout() + and node.item.isActive + ): + model.append(node) + return + ## # Public Methods ## diff --git a/novelwriter/gui/noveltree.py b/novelwriter/gui/noveltree.py index c6a53ad6..b512ab51 100644 --- a/novelwriter/gui/noveltree.py +++ b/novelwriter/gui/noveltree.py @@ -323,7 +323,9 @@ class GuiNovelToolBar(QWidget): @pyqtSlot() def _refreshNovelTree(self) -> None: """Rebuild the current tree.""" - self.novelView.setCurrentNovel(SHARED.project.data.getLastHandle("novelTree")) + if rootHandle := self.novelValue.handle: + SHARED.project.index.refreshNovelModel(rootHandle) + # self.novelView.setCurrentNovel(SHARED.project.data.getLastHandle("novelTree")) return @pyqtSlot()