Connect main progress bar to potential bulky operations in the project tree
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user