Connect main progress bar to potential bulky operations in the project tree

This commit is contained in:
Veronica Berglyd Olsen
2025-07-17 18:06:02 +02:00
parent 1223e6da84
commit e77b71bbbc
4 changed files with 30 additions and 10 deletions
+7
View File
@@ -160,6 +160,10 @@ class DocSplitter:
return return
def __len__(self) -> int:
"""The length of the split job."""
return len(self._rawData)
## ##
# Methods # Methods
## ##
@@ -270,7 +274,9 @@ class DocDuplicator:
after = True after = True
if items: if items:
hMap: dict[str, str | None] = {t: None for t in items} hMap: dict[str, str | None] = {t: None for t in items}
SHARED.initMainProgress(len(items))
for tHandle in items: for tHandle in items:
SHARED.incMainProgress()
if oldItem := self._project.tree[tHandle]: if oldItem := self._project.tree[tHandle]:
pHandle = hMap.get(oldItem.itemParent or "") or oldItem.itemParent pHandle = hMap.get(oldItem.itemParent or "") or oldItem.itemParent
if newItem := self._project.tree.duplicate(tHandle, pHandle, after): if newItem := self._project.tree.duplicate(tHandle, pHandle, after):
@@ -282,6 +288,7 @@ class DocDuplicator:
after = False after = False
else: else:
break break
SHARED.clearMainProgress()
return result return result
+1 -1
View File
@@ -147,7 +147,7 @@ class Index:
def rebuild(self) -> None: def rebuild(self) -> None:
"""Rebuild the entire index from scratch.""" """Rebuild the entire index from scratch."""
self.clear() self.clear()
SHARED.initMainProgress(len(self._project.tree) - 1) SHARED.initMainProgress(len(self._project.tree))
for nwItem in self._project.tree: for nwItem in self._project.tree:
if nwItem.isFileType(): if nwItem.isFileType():
text = self._project.storage.getDocumentText(nwItem.itemHandle) text = self._project.storage.getDocumentText(nwItem.itemHandle)
+20
View File
@@ -718,9 +718,15 @@ class GuiProjectTree(QTreeView):
else: else:
return False return False
SHARED.initMainProgress(len(items))
self.setEnabled(False)
for sHandle in items: for sHandle in items:
SHARED.incMainProgress()
docMerger.appendText(sHandle, True, mLabel) docMerger.appendText(sHandle, True, mLabel)
self.setEnabled(True)
SHARED.clearMainProgress()
if not docMerger.writeTargetDoc(): if not docMerger.writeTargetDoc():
SHARED.error( SHARED.error(
self.tr("Could not write document content."), self.tr("Could not write document content."),
@@ -764,7 +770,10 @@ class GuiProjectTree(QTreeView):
docSplit.setParentItem(tItem.itemParent) docSplit.setParentItem(tItem.itemParent)
docSplit.splitDocument(headerList, text) docSplit.splitDocument(headerList, text)
SHARED.initMainProgress(len(docSplit))
self.setEnabled(False)
for writeOk in docSplit.writeDocuments(docHierarchy): for writeOk in docSplit.writeDocuments(docHierarchy):
SHARED.incMainProgress()
if not writeOk: if not writeOk:
SHARED.error( SHARED.error(
self.tr("Could not write document content."), self.tr("Could not write document content."),
@@ -774,6 +783,9 @@ class GuiProjectTree(QTreeView):
if data.get("moveToTrash", False): if data.get("moveToTrash", False):
self.processDeleteRequest([tHandle], False) self.processDeleteRequest([tHandle], False)
self.setEnabled(True)
SHARED.clearMainProgress()
return True return True
def duplicateFromHandle(self, tHandle: str) -> None: def duplicateFromHandle(self, tHandle: str) -> None:
@@ -786,10 +798,12 @@ class GuiProjectTree(QTreeView):
else: else:
question = self.tr("Do you want to duplicate this item and all child items?") question = self.tr("Do you want to duplicate this item and all child items?")
if SHARED.question(question): if SHARED.question(question):
self.setEnabled(False)
docDup = DocDuplicator(SHARED.project) docDup = DocDuplicator(SHARED.project)
dHandles = docDup.duplicate(itemTree) dHandles = docDup.duplicate(itemTree)
if len(dHandles) != len(itemTree): if len(dHandles) != len(itemTree):
SHARED.warn(self.tr("Could not duplicate all items.")) SHARED.warn(self.tr("Could not duplicate all items."))
self.setEnabled(True)
self.restoreExpandedState() self.restoreExpandedState()
return return
@@ -912,17 +926,23 @@ class GuiProjectTree(QTreeView):
if not SHARED.question(self.tr("Permanently delete selected item(s)?")): if not SHARED.question(self.tr("Permanently delete selected item(s)?")):
logger.info("Action cancelled by user") logger.info("Action cancelled by user")
return return
self.setEnabled(False)
for index in indices: for index in indices:
if node := model.node(index): if node := model.node(index):
for child in reversed(node.allChildren()): for child in reversed(node.allChildren()):
SHARED.project.removeItem(child.item.itemHandle) SHARED.project.removeItem(child.item.itemHandle)
SHARED.project.removeItem(node.item.itemHandle) SHARED.project.removeItem(node.item.itemHandle)
self.setEnabled(True)
elif trashNode := SHARED.project.tree.trash: elif trashNode := SHARED.project.tree.trash:
if askFirst and not SHARED.question(self.tr("Move selected item(s) to Trash?")): if askFirst and not SHARED.question(self.tr("Move selected item(s) to Trash?")):
logger.info("Action cancelled by user") logger.info("Action cancelled by user")
return return
self.setEnabled(False)
model.multiMove(indices, model.indexFromNode(trashNode)) model.multiMove(indices, model.indexFromNode(trashNode))
self.setEnabled(True)
return return
+2 -9
View File
@@ -269,20 +269,13 @@ class SharedData(QObject):
self._idleRefTime = currTime self._idleRefTime = currTime
return return
def initMainProgress(self, maximum: int) -> None: def initMainProgress(self, maximum: int, inclusive: bool = False) -> None:
"""Start a session for the main progress bar.""" """Start a session for the main progress bar."""
if gui := self._gui: if gui := self._gui:
gui.mainProgress.setMaximum(maximum) gui.mainProgress.setMaximum(maximum - (1 if inclusive else 0))
gui.mainProgress.setValue(0) gui.mainProgress.setValue(0)
return return
def updateMainProgress(self, value: int) -> None:
"""Update the value for the main progress bar."""
if gui := self._gui:
gui.mainProgress.setValue(value)
QApplication.processEvents()
return
def incMainProgress(self) -> None: def incMainProgress(self) -> None:
"""Increment the value for the main progress bar.""" """Increment the value for the main progress bar."""
if gui := self._gui: if gui := self._gui: