From b4817f70a6b2058aff705ebc5dcae67ff2965c15 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 24 Jun 2022 19:11:21 +0200 Subject: [PATCH 1/4] show what is allowed to drop in the files widget --- openpype/style/style.css | 3 + .../widgets/attribute_defs/files_widget.py | 125 ++++++++++++++++-- 2 files changed, 117 insertions(+), 11 deletions(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index d76d833be14..72d12a92309 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -1418,3 +1418,6 @@ InViewButton, InViewButton:disabled { InViewButton:hover { background: rgba(255, 255, 255, 37); } +SupportLabel { + color: {color:font-disabled}; +} diff --git a/openpype/widgets/attribute_defs/files_widget.py b/openpype/widgets/attribute_defs/files_widget.py index 23cf8342b16..24e3f4bb251 100644 --- a/openpype/widgets/attribute_defs/files_widget.py +++ b/openpype/widgets/attribute_defs/files_widget.py @@ -26,26 +26,122 @@ EXT_ROLE = QtCore.Qt.UserRole + 8 +class SupportLabel(QtWidgets.QLabel): + pass + + class DropEmpty(QtWidgets.QWidget): - _drop_enabled_text = "Drag & Drop\n(drop files here)" + _empty_extensions = "Any file" - def __init__(self, parent): + def __init__(self, single_item, allow_sequences, parent): super(DropEmpty, self).__init__(parent) - label_widget = QtWidgets.QLabel(self._drop_enabled_text, self) - label_widget.setAlignment(QtCore.Qt.AlignCenter) - label_widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) + drop_label_widget = QtWidgets.QLabel("Drag & Drop files here", self) - layout = QtWidgets.QHBoxLayout(self) + detail_widget = QtWidgets.QWidget(self) + items_label_widget = SupportLabel(detail_widget) + extensions_label_widget = SupportLabel(detail_widget) + extensions_label_widget.setWordWrap(True) + + detail_layout = QtWidgets.QVBoxLayout(detail_widget) + detail_layout.setContentsMargins(0, 0, 0, 0) + detail_layout.addStretch(1) + detail_layout.addWidget( + items_label_widget, 0, alignment=QtCore.Qt.AlignCenter + ) + detail_layout.addWidget( + extensions_label_widget, 0, alignment=QtCore.Qt.AlignCenter + ) + + layout = QtWidgets.QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addSpacing(10) layout.addWidget( - label_widget, - alignment=QtCore.Qt.AlignCenter + drop_label_widget, 0, alignment=QtCore.Qt.AlignCenter ) + layout.addWidget(detail_widget, 1) layout.addSpacing(10) - self._label_widget = label_widget + for widget in ( + detail_widget, + drop_label_widget, + items_label_widget, + extensions_label_widget, + ): + if isinstance(widget, QtWidgets.QLabel): + widget.setAlignment(QtCore.Qt.AlignCenter) + widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) + + self._single_item = single_item + self._allow_sequences = allow_sequences + self._allowed_extensions = set() + self._allow_folders = None + + self._drop_label_widget = drop_label_widget + self._items_label_widget = items_label_widget + self._extensions_label_widget = extensions_label_widget + + self.set_allow_folders(False) + + def set_extensions(self, extensions): + if extensions: + extensions = { + ext.replace(".", "") + for ext in extensions + } + if extensions == self._allowed_extensions: + return + self._allowed_extensions = extensions + + self._update_items_label() + + def set_allow_folders(self, allowed): + if self._allow_folders == allowed: + return + + self._allow_folders = allowed + self._update_items_label() + + def _update_items_label(self): + extensions_label = "" + if self._allowed_extensions: + extensions_label = ", ".join(sorted(self._allowed_extensions)) + + allowed_items = [] + if self._allow_folders: + allowed_items.append("folder") + + if extensions_label: + allowed_items.append("file") + if self._allow_sequences: + allowed_items.append("sequence") + + num_label = "Single" + if not self._single_item: + num_label = "Multiple" + allowed_items = [item + "s" for item in allowed_items] + + if not allowed_items: + allowed_items_label = "" + elif len(allowed_items) == 1: + allowed_items_label = allowed_items[0] + elif len(allowed_items) == 2: + allowed_items_label = " or ".join(allowed_items) + else: + last_item = allowed_items.pop(-1) + new_last_item = " or ".join(last_item, allowed_items.pop(-1)) + allowed_items.append(new_last_item) + allowed_items_label = ", ".join(allowed_items) + + if allowed_items_label: + items_label = "{} {}".format(num_label, allowed_items_label) + if extensions_label: + items_label += " of" + else: + items_label = "It is not allowed to add anything here!" + + self._items_label_widget.setText(items_label) + self._extensions_label_widget.setText(extensions_label) def paintEvent(self, event): super(DropEmpty, self).paintEvent(event) @@ -188,7 +284,12 @@ def set_allow_folders(self, allow=None): def set_allowed_extensions(self, extensions=None): if extensions is not None: - extensions = set(extensions) + _extensions = set() + for ext in set(extensions): + if not ext.startswith("."): + ext = ".{}".format(ext) + _extensions.add(ext.lower()) + extensions = _extensions if self._allowed_extensions != extensions: self._allowed_extensions = extensions @@ -444,7 +545,7 @@ def __init__(self, single_item, allow_sequences, parent): super(FilesWidget, self).__init__(parent) self.setAcceptDrops(True) - empty_widget = DropEmpty(self) + empty_widget = DropEmpty(single_item, allow_sequences, self) files_model = FilesModel(single_item, allow_sequences) files_proxy_model = FilesProxyModel() @@ -519,6 +620,8 @@ def current_value(self): def set_filters(self, folders_allowed, exts_filter): self._files_proxy_model.set_allow_folders(folders_allowed) self._files_proxy_model.set_allowed_extensions(exts_filter) + self._empty_widget.set_extensions(exts_filter) + self._empty_widget.set_allow_folders(folders_allowed) def _on_rows_inserted(self, parent_index, start_row, end_row): for row in range(start_row, end_row + 1): From 462807c2726b0cff2e351db8edc759114fb52cc3 Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Fri, 24 Jun 2022 19:19:25 +0200 Subject: [PATCH 2/4] removed unnecessary widgets --- .../widgets/attribute_defs/files_widget.py | 59 ++++++++----------- 1 file changed, 23 insertions(+), 36 deletions(-) diff --git a/openpype/widgets/attribute_defs/files_widget.py b/openpype/widgets/attribute_defs/files_widget.py index 24e3f4bb251..af5a1d130b2 100644 --- a/openpype/widgets/attribute_defs/files_widget.py +++ b/openpype/widgets/attribute_defs/files_widget.py @@ -38,20 +38,8 @@ def __init__(self, single_item, allow_sequences, parent): drop_label_widget = QtWidgets.QLabel("Drag & Drop files here", self) - detail_widget = QtWidgets.QWidget(self) - items_label_widget = SupportLabel(detail_widget) - extensions_label_widget = SupportLabel(detail_widget) - extensions_label_widget.setWordWrap(True) - - detail_layout = QtWidgets.QVBoxLayout(detail_widget) - detail_layout.setContentsMargins(0, 0, 0, 0) - detail_layout.addStretch(1) - detail_layout.addWidget( - items_label_widget, 0, alignment=QtCore.Qt.AlignCenter - ) - detail_layout.addWidget( - extensions_label_widget, 0, alignment=QtCore.Qt.AlignCenter - ) + items_label_widget = SupportLabel(self) + items_label_widget.setWordWrap(True) layout = QtWidgets.QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) @@ -59,17 +47,17 @@ def __init__(self, single_item, allow_sequences, parent): layout.addWidget( drop_label_widget, 0, alignment=QtCore.Qt.AlignCenter ) - layout.addWidget(detail_widget, 1) + layout.addStretch(1) + layout.addWidget( + items_label_widget, 0, alignment=QtCore.Qt.AlignCenter + ) layout.addSpacing(10) for widget in ( - detail_widget, drop_label_widget, items_label_widget, - extensions_label_widget, ): - if isinstance(widget, QtWidgets.QLabel): - widget.setAlignment(QtCore.Qt.AlignCenter) + widget.setAlignment(QtCore.Qt.AlignCenter) widget.setAttribute(QtCore.Qt.WA_TranslucentBackground) self._single_item = single_item @@ -79,7 +67,6 @@ def __init__(self, single_item, allow_sequences, parent): self._drop_label_widget = drop_label_widget self._items_label_widget = items_label_widget - self._extensions_label_widget = extensions_label_widget self.set_allow_folders(False) @@ -103,27 +90,29 @@ def set_allow_folders(self, allowed): self._update_items_label() def _update_items_label(self): - extensions_label = "" - if self._allowed_extensions: - extensions_label = ", ".join(sorted(self._allowed_extensions)) - allowed_items = [] if self._allow_folders: allowed_items.append("folder") - if extensions_label: + if self._allowed_extensions: allowed_items.append("file") if self._allow_sequences: allowed_items.append("sequence") - num_label = "Single" if not self._single_item: - num_label = "Multiple" allowed_items = [item + "s" for item in allowed_items] if not allowed_items: - allowed_items_label = "" - elif len(allowed_items) == 1: + self._items_label_widget.setText( + "It is not allowed to add anything here!" + ) + return + + items_label = "Multiple " + if self._single_item: + items_label = "Single " + + if len(allowed_items) == 1: allowed_items_label = allowed_items[0] elif len(allowed_items) == 2: allowed_items_label = " or ".join(allowed_items) @@ -133,15 +122,13 @@ def _update_items_label(self): allowed_items.append(new_last_item) allowed_items_label = ", ".join(allowed_items) - if allowed_items_label: - items_label = "{} {}".format(num_label, allowed_items_label) - if extensions_label: - items_label += " of" - else: - items_label = "It is not allowed to add anything here!" + items_label += allowed_items_label + if self._allowed_extensions: + items_label += " of\n{}".format( + ", ".join(sorted(self._allowed_extensions)) + ) self._items_label_widget.setText(items_label) - self._extensions_label_widget.setText(extensions_label) def paintEvent(self, event): super(DropEmpty, self).paintEvent(event) From 37c98c045e7047a6e35ee807ba476a916c04a84b Mon Sep 17 00:00:00 2001 From: Jakub Trllo Date: Mon, 27 Jun 2022 10:14:43 +0200 Subject: [PATCH 3/4] added spacing --- openpype/widgets/attribute_defs/files_widget.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openpype/widgets/attribute_defs/files_widget.py b/openpype/widgets/attribute_defs/files_widget.py index af5a1d130b2..3135da66917 100644 --- a/openpype/widgets/attribute_defs/files_widget.py +++ b/openpype/widgets/attribute_defs/files_widget.py @@ -47,6 +47,7 @@ def __init__(self, single_item, allow_sequences, parent): layout.addWidget( drop_label_widget, 0, alignment=QtCore.Qt.AlignCenter ) + layout.addSpacing(10) layout.addStretch(1) layout.addWidget( items_label_widget, 0, alignment=QtCore.Qt.AlignCenter From 0c674fcc61a636ebfc5e888e0f0f782dffa366f1 Mon Sep 17 00:00:00 2001 From: Milan Kolar Date: Tue, 28 Jun 2022 09:15:09 +0200 Subject: [PATCH 4/4] expand spacing of the drop zone --- openpype/widgets/attribute_defs/files_widget.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/widgets/attribute_defs/files_widget.py b/openpype/widgets/attribute_defs/files_widget.py index 3135da66917..698a91a1a57 100644 --- a/openpype/widgets/attribute_defs/files_widget.py +++ b/openpype/widgets/attribute_defs/files_widget.py @@ -43,11 +43,11 @@ def __init__(self, single_item, allow_sequences, parent): layout = QtWidgets.QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) - layout.addSpacing(10) + layout.addSpacing(20) layout.addWidget( drop_label_widget, 0, alignment=QtCore.Qt.AlignCenter ) - layout.addSpacing(10) + layout.addSpacing(30) layout.addStretch(1) layout.addWidget( items_label_widget, 0, alignment=QtCore.Qt.AlignCenter