From d027f218f882f760eca1228c4a5ac40fe4c766fe Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 17 Jul 2025 16:56:28 +0200 Subject: [PATCH] Add progress bar functions in shared class and use it for index rebuild --- novelwriter/core/index.py | 3 +++ novelwriter/shared.py | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/novelwriter/core/index.py b/novelwriter/core/index.py index 07933690..0165444f 100644 --- a/novelwriter/core/index.py +++ b/novelwriter/core/index.py @@ -147,14 +147,17 @@ class Index: def rebuild(self) -> None: """Rebuild the entire index from scratch.""" self.clear() + SHARED.initMainProgress(len(self._project.tree) - 1) for nwItem in self._project.tree: if nwItem.isFileType(): text = self._project.storage.getDocumentText(nwItem.itemHandle) self.scanText(nwItem.itemHandle, text, blockSignal=True) + SHARED.incMainProgress() self._indexBroken = False SHARED.emitIndexAvailable(self._project) for tHandle in self._novelModels: self.refreshNovelModel(tHandle) + SHARED.clearMainProgress() return def deleteHandle(self, tHandle: str) -> None: diff --git a/novelwriter/shared.py b/novelwriter/shared.py index 6e184ee5..2a2eb277 100644 --- a/novelwriter/shared.py +++ b/novelwriter/shared.py @@ -269,10 +269,11 @@ class SharedData(QObject): self._idleRefTime = currTime return - def startMainProgress(self, maximum: int) -> None: + def initMainProgress(self, maximum: int) -> None: """Start a session for the main progress bar.""" if gui := self._gui: gui.mainProgress.setMaximum(maximum) + gui.mainProgress.setValue(0) return def updateMainProgress(self, value: int) -> None: @@ -281,11 +282,16 @@ class SharedData(QObject): gui.mainProgress.setValue(value) return - def clearMainProgress(self) -> None: + def incMainProgress(self) -> None: + """Increment the value for the main progress bar.""" + if gui := self._gui: + gui.mainProgress.setValue(gui.mainProgress.value() + 1) + return + + def clearMainProgress(self, delay: float = 1.0) -> None: """Clear the main progress bar.""" if gui := self._gui: - gui.mainProgress.setMaximum(100) - gui.mainProgress.setValue(0) + QTimer.singleShot(int(delay*1000), gui.mainProgress.reset) return def newStatusMessage(self, message: str) -> None: