From 30e83a397400ffec456f2cae19983404d0d94459 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 17 Aug 2021 12:00:42 +0200 Subject: [PATCH] added view for families and subset names --- openpype/style/style.css | 5 ++ openpype/tools/new_publisher/widgets.py | 87 ++++++++++++++++++++----- 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/openpype/style/style.css b/openpype/style/style.css index 1fd9110a59..d912e79c91 100644 --- a/openpype/style/style.css +++ b/openpype/style/style.css @@ -641,6 +641,11 @@ QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical { border-color: #4E76BB; } +#MultipleItemView:item { + background: {color:bg-view-selection}; + border-radius: 0.4em; +} + #InstanceListView::item { border-radius: 0.3em; margin: 1px; diff --git a/openpype/tools/new_publisher/widgets.py b/openpype/tools/new_publisher/widgets.py index 1976e2a903..348c1bbd21 100644 --- a/openpype/tools/new_publisher/widgets.py +++ b/openpype/tools/new_publisher/widgets.py @@ -386,6 +386,58 @@ class VariantInputWidget(QtWidgets.QLineEdit): self._ignore_value_change = False +class MultipleItemWidget(QtWidgets.QWidget): + def __init__(self, parent): + super(MultipleItemWidget, self).__init__(parent) + + model = QtGui.QStandardItemModel() + + view = QtWidgets.QListView(self) + view.setObjectName("MultipleItemView") + view.setLayoutMode(QtWidgets.QListView.Batched) + view.setViewMode(QtWidgets.QListView.IconMode) + view.setResizeMode(QtWidgets.QListView.Adjust) + view.setWrapping(False) + view.setSpacing(2) + view.setModel(model) + view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + layout = QtWidgets.QHBoxLayout(self) + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(view) + + self._view = view + self._model = model + + self._value = [] + + def showEvent(self, event): + super(MultipleItemWidget, self).showEvent(event) + tmp_item = None + if not self._value: + tmp_item = QtGui.QStandardItem("tmp") + self._model.appendRow(tmp_item) + + height = self._view.sizeHintForRow(0) + self.setMaximumHeight(height + (2 * self._view.spacing())) + + if tmp_item is not None: + self._model.clear() + + def set_value(self, value=None): + if value is None: + value = [] + self._value = value + + self._model.clear() + for item_text in value: + item = QtGui.QStandardItem(item_text) + item.setEditable(False) + item.setSelectable(False) + self._model.appendRow(item) + + class GlobalAttrsWidget(QtWidgets.QWidget): def __init__(self, controller, parent): super(GlobalAttrsWidget, self).__init__(parent) @@ -395,14 +447,14 @@ class GlobalAttrsWidget(QtWidgets.QWidget): variant_input = VariantInputWidget(self) asset_value_widget = AssetsTreeComboBox(controller, self) task_value_widget = TasksCombobox(controller, self) - family_value_widget = QtWidgets.QLabel(self) - subset_value_widget = QtWidgets.QLabel(self) + family_value_widget = MultipleItemWidget(self) + subset_value_widget = MultipleItemWidget(self) variant_input.set_value() - subset_value_widget.setText("") - family_value_widget.setText("") asset_value_widget.set_selected_items() task_value_widget.set_selected_items() + family_value_widget.set_value() + subset_value_widget.set_value() main_layout = QtWidgets.QFormLayout(self) main_layout.addRow("Name", variant_input) @@ -414,9 +466,9 @@ class GlobalAttrsWidget(QtWidgets.QWidget): asset_value_widget.selection_changed.connect(self._on_asset_change) self.variant_input = variant_input - self.family_value_widget = family_value_widget self.asset_value_widget = asset_value_widget self.task_value_widget = task_value_widget + self.family_value_widget = family_value_widget self.subset_value_widget = subset_value_widget def _on_asset_change(self): @@ -430,9 +482,10 @@ class GlobalAttrsWidget(QtWidgets.QWidget): asset_names = set() task_names = set() variants = set() + families = set() + subset_names = set() if len(instances) == 0: - family = "" - subset_name = "" + pass elif len(instances) == 1: instance = instances[0] @@ -440,26 +493,23 @@ class GlobalAttrsWidget(QtWidgets.QWidget): editable = True variants.add(instance.data.get("variant") or unknown) - family = instance.data.get("family") or unknown + families.add(instance.data.get("family") or unknown) asset_names.add(instance.data.get("asset") or unknown) task_names.add(instance.data.get("task") or unknown) - subset_name = instance.data.get("subset") or unknown + subset_names.add(instance.data.get("subset") or unknown) else: - families = set() + for instance in instances: variants.add(instance.data.get("variant") or unknown) families.add(instance.data.get("family") or unknown) asset_names.add(instance.data.get("asset") or unknown) task_names.add(instance.data.get("task") or unknown) + subset_names.add(instance.data.get("subset") or unknown) - family = multiselection_text - subset_name = multiselection_text - if len(families) < 4: - family = " / ".join(families) - - self.variant_input.set_value(variants, multiselection_text) - self.family_value_widget.setText(family) + self.variant_input.set_value( + variants, multiselection_text + ) # Set context of asset widget self.asset_value_widget.set_selected_items( asset_names, multiselection_text @@ -469,7 +519,8 @@ class GlobalAttrsWidget(QtWidgets.QWidget): self.task_value_widget.set_selected_items( task_names, multiselection_text ) - self.subset_value_widget.setText(subset_name) + self.family_value_widget.set_value(families) + self.subset_value_widget.set_value(subset_names) class FamilyAttrsWidget(QtWidgets.QWidget):