Re-implement project item duplication

This commit is contained in:
Veronica Berglyd Olsen
2024-11-20 18:48:14 +01:00
parent 072be78991
commit bbe8683d59
7 changed files with 58 additions and 147 deletions
+22 -39
View File
@@ -41,7 +41,7 @@ from PyQt5.QtWidgets import (
from novelwriter import CONFIG, SHARED
from novelwriter.common import qtLambda
from novelwriter.constants import nwLabels, nwStyles, nwUnicode, trConst
from novelwriter.core.coretools import DocMerger, DocSplitter
from novelwriter.core.coretools import DocDuplicator, DocMerger, DocSplitter
from novelwriter.core.item import NWItem
from novelwriter.core.itemmodel import ProjectModel, ProjectNode
from novelwriter.dialogs.docmerge import GuiDocMerge
@@ -594,11 +594,11 @@ class GuiProjectTree(QTreeView):
def loadModel(self) -> None:
"""Load and prepare a new project model."""
selModel = self.selectionModel()
# selModel = self.selectionModel()
self.setModel(SHARED.project.tree.model)
if selModel:
selModel.deleteLater()
del selModel
# if selModel:
# selModel.deleteLater()
# del selModel
# Lock the column sizes
iPx = SHARED.theme.baseIconHeight
@@ -814,6 +814,22 @@ class GuiProjectTree(QTreeView):
return True
def duplicateFromHandle(self, tHandle: str) -> None:
"""Duplicate the item hierarchy from a given item."""
itemTree = [tHandle]
itemTree.extend(SHARED.project.tree.subTree(tHandle))
if itemTree:
if len(itemTree) == 1:
question = self.tr("Do you want to duplicate this document?")
else:
question = self.tr("Do you want to duplicate this item and all child items?")
if SHARED.question(question):
docDup = DocDuplicator(SHARED.project)
dHandles = docDup.duplicate(itemTree)
if len(dHandles) != len(itemTree):
SHARED.warn(self.tr("Could not duplicate all items."))
return
##
# Events
##
@@ -1159,39 +1175,6 @@ class GuiProjectTree(QTreeView):
# self._scrollTimer.stop()
return
##
# Internal Functions
##
def _duplicateFromHandle(self, tHandle: str) -> bool:
"""Duplicate the item hierarchy from a given item."""
# itemTree = self.getTreeFromHandle(tHandle)
# nItems = len(itemTree)
# if nItems == 0:
# return False
# elif nItems == 1:
# question = self.tr("Do you want to duplicate this document?")
# else:
# question = self.tr("Do you want to duplicate this item and all child items?")
# if not SHARED.question(question):
# return False
# docDup = DocDuplicator(SHARED.project)
# dupCount = 0
# for dHandle, nHandle in docDup.duplicate(itemTree):
# SHARED.project.index.reIndexHandle(dHandle)
# self.revealNewTreeItem(dHandle, nHandle=nHandle, wordCount=True)
# self._alertTreeChange(dHandle, flush=False)
# dupCount += 1
# if dupCount != nItems:
# SHARED.warn(self.tr("Could not duplicate all items."))
# self.saveTreeOrder()
return True
class _UpdatableMenu(QMenu):
@@ -1324,7 +1307,7 @@ class _TreeContextMenu(QMenu):
self._expandCollapse()
if isFile:
action = self.addAction(self.tr("Duplicate"))
action.triggered.connect(qtLambda(self._tree._duplicateFromHandle, self._handle))
action.triggered.connect(qtLambda(self._tree.duplicateFromHandle, self._handle))
self._deleteOrTrash()
return