From 939f2187291ccc6c69767ffa74472d054c3dde2f Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Fri, 20 May 2022 20:44:57 +0200 Subject: [PATCH 1/3] Allow to paste Tasks into multiple assets at the same time --- .../project_manager/project_manager/model.py | 26 ++++++++++++++----- .../project_manager/project_manager/view.py | 4 +-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/model.py b/openpype/tools/project_manager/project_manager/model.py index b7cb0ec9ed..2721297578 100644 --- a/openpype/tools/project_manager/project_manager/model.py +++ b/openpype/tools/project_manager/project_manager/model.py @@ -1476,12 +1476,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 @@ -1515,6 +1510,25 @@ class HierarchyModel(QtCore.QAbstractItemModel): task_item = TaskItem(task_data, True) self.add_item(task_item, parent) + def paste(self, indices, mime_data): + + # Get the selected Assets uniquely + items = set() + for index in indices: + 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. diff --git a/openpype/tools/project_manager/project_manager/view.py b/openpype/tools/project_manager/project_manager/view.py index 25174232bc..4279cb7468 100644 --- a/openpype/tools/project_manager/project_manager/view.py +++ b/openpype/tools/project_manager/project_manager/view.py @@ -376,9 +376,9 @@ class HierarchyView(QtWidgets.QTreeView): 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: From 8177a44b5d0261f7bdd683a190796ccbd52d57f0 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 23 May 2022 10:57:56 +0200 Subject: [PATCH 2/3] set empty mime data on failed copy --- openpype/tools/project_manager/project_manager/view.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openpype/tools/project_manager/project_manager/view.py b/openpype/tools/project_manager/project_manager/view.py index 4279cb7468..7d9f1a7323 100644 --- a/openpype/tools/project_manager/project_manager/view.py +++ b/openpype/tools/project_manager/project_manager/view.py @@ -365,14 +365,18 @@ 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): From 8079654f38dfa3644357dbcc6ea44554eef48ade Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Mon, 23 May 2022 12:33:40 +0200 Subject: [PATCH 3/3] Code cosmetics from code review Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- openpype/tools/project_manager/project_manager/model.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openpype/tools/project_manager/project_manager/model.py b/openpype/tools/project_manager/project_manager/model.py index 2721297578..a69ef4a232 100644 --- a/openpype/tools/project_manager/project_manager/model.py +++ b/openpype/tools/project_manager/project_manager/model.py @@ -1476,7 +1476,7 @@ class HierarchyModel(QtCore.QAbstractItemModel): mimedata.setData("application/copy_task", encoded_data) return mimedata - def paste_mime_data(self, item, mime_data): + def _paste_mime_data(self, item, mime_data): if not isinstance(item, (AssetItem, TaskItem)): return @@ -1510,11 +1510,11 @@ class HierarchyModel(QtCore.QAbstractItemModel): task_item = TaskItem(task_data, True) self.add_item(task_item, parent) - def paste(self, indices, mime_data): + def paste(self, indexes, mime_data): # Get the selected Assets uniquely items = set() - for index in indices: + for index in indexes: if not index.isValid(): return item_id = index.data(IDENTIFIER_ROLE) @@ -1527,7 +1527,7 @@ class HierarchyModel(QtCore.QAbstractItemModel): items.add(item) for item in items: - self.paste_mime_data(item, mime_data) + self._paste_mime_data(item, mime_data) class BaseItem: