Merge pull request #3226 from BigRoy/project_manager_paste_multiple

This commit is contained in:
Milan Kolar 2022-05-23 13:34:37 +02:00 committed by GitHub
commit ea339f894a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 9 deletions

View file

@ -1472,12 +1472,7 @@ class HierarchyModel(QtCore.QAbstractItemModel):
mimedata.setData("application/copy_task", encoded_data)
return mimedata
def paste_mime_data(self, index, mime_data):
if not index.isValid():
return
item_id = index.data(IDENTIFIER_ROLE)
item = self._items_by_id[item_id]
def _paste_mime_data(self, item, mime_data):
if not isinstance(item, (AssetItem, TaskItem)):
return
@ -1511,6 +1506,25 @@ class HierarchyModel(QtCore.QAbstractItemModel):
task_item = TaskItem(task_data, True)
self.add_item(task_item, parent)
def paste(self, indexes, mime_data):
# Get the selected Assets uniquely
items = set()
for index in indexes:
if not index.isValid():
return
item_id = index.data(IDENTIFIER_ROLE)
item = self._items_by_id[item_id]
# Do not copy into the Task Item so get parent Asset instead
if isinstance(item, TaskItem):
item = item.parent()
items.add(item)
for item in items:
self._paste_mime_data(item, mime_data)
class BaseItem:
"""Base item for HierarchyModel.

View file

@ -365,20 +365,24 @@ class HierarchyView(QtWidgets.QTreeView):
event.accept()
def _copy_items(self, indexes=None):
clipboard = QtWidgets.QApplication.clipboard()
try:
if indexes is None:
indexes = self.selectedIndexes()
mime_data = self._source_model.copy_mime_data(indexes)
QtWidgets.QApplication.clipboard().setMimeData(mime_data)
clipboard.setMimeData(mime_data)
self._show_message("Tasks copied")
except ValueError as exc:
# Change clipboard to contain empty data
empty_mime_data = QtCore.QMimeData()
clipboard.setMimeData(empty_mime_data)
self._show_message(str(exc))
def _paste_items(self):
index = self.currentIndex()
mime_data = QtWidgets.QApplication.clipboard().mimeData()
self._source_model.paste_mime_data(index, mime_data)
rows = self.selectionModel().selectedRows()
self._source_model.paste(rows, mime_data)
def _delete_items(self, indexes=None):
if indexes is None: