diff --git a/openpype/tools/publisher/widgets/create_dialog.py b/openpype/tools/publisher/widgets/create_dialog.py index 05936265bb..f9f8310e09 100644 --- a/openpype/tools/publisher/widgets/create_dialog.py +++ b/openpype/tools/publisher/widgets/create_dialog.py @@ -17,7 +17,7 @@ from openpype.pipeline.create import ( from .widgets import IconValuePixmapLabel from .assets_widget import CreateDialogAssetsWidget from .tasks_widget import CreateDialogTasksWidget -from .precreate_widget import AttributesWidget +from .precreate_widget import PreCreateWidget from ..constants import ( VARIANT_TOOLTIP, CREATOR_IDENTIFIER_ROLE, @@ -216,22 +216,11 @@ class CreateDialog(QtWidgets.QDialog): context_layout.addWidget(assets_widget, 2) context_layout.addWidget(tasks_widget, 1) - pre_create_scroll_area = QtWidgets.QScrollArea(self) - pre_create_contet_widget = QtWidgets.QWidget(pre_create_scroll_area) - pre_create_scroll_area.setWidget(pre_create_contet_widget) - pre_create_scroll_area.setWidgetResizable(True) + # Precreate attributes widgets + pre_create_widget = PreCreateWidget(self) - pre_create_contet_layout = QtWidgets.QVBoxLayout( - pre_create_contet_widget - ) - pre_create_attributes_widget = AttributesWidget( - pre_create_contet_widget - ) - pre_create_contet_layout.addWidget(pre_create_attributes_widget, 0) - pre_create_contet_layout.addStretch(1) - - creator_description_widget = CreatorDescriptionWidget(self) # TODO add HELP button + creator_description_widget = CreatorDescriptionWidget(self) creator_description_widget.setVisible(False) creators_view = QtWidgets.QListView(self) @@ -273,17 +262,11 @@ class CreateDialog(QtWidgets.QDialog): mid_layout.addLayout(form_layout, 0) mid_layout.addWidget(create_btn, 0) - left_layout = QtWidgets.QVBoxLayout() - left_layout.addWidget(QtWidgets.QLabel("Choose family:", self)) - left_layout.addWidget(creators_view, 1) - left_layout.addLayout(form_layout, 0) - left_layout.addWidget(create_btn, 0) - layout = QtWidgets.QHBoxLayout(self) layout.setSpacing(10) layout.addWidget(context_widget, 1) layout.addWidget(mid_widget, 1) - layout.addWidget(pre_create_scroll_area, 1) + layout.addWidget(pre_create_widget, 1) prereq_timer = QtCore.QTimer() prereq_timer.setInterval(50) @@ -306,7 +289,8 @@ class CreateDialog(QtWidgets.QDialog): controller.add_plugins_refresh_callback(self._on_plugins_refresh) - self._pre_create_attributes_widget = pre_create_attributes_widget + self._pre_create_widget = pre_create_widget + self._context_widget = context_widget self._assets_widget = assets_widget self._tasks_widget = tasks_widget @@ -519,10 +503,11 @@ class CreateDialog(QtWidgets.QDialog): creator = self.controller.manual_creators.get(identifier) self.creator_description_widget.set_plugin(creator) + self._pre_create_widget.set_plugin(creator) self._selected_creator = creator + if not creator: - self._pre_create_attributes_widget.set_attr_defs([]) self._set_context_enabled(False) return @@ -533,9 +518,6 @@ class CreateDialog(QtWidgets.QDialog): self._set_context_enabled(creator.create_allow_context_change) self._refresh_asset() - attr_defs = creator.get_pre_create_attr_defs() - self._pre_create_attributes_widget.set_attr_defs(attr_defs) - default_variants = creator.get_default_variants() if not default_variants: default_variants = ["Main"] @@ -682,7 +664,7 @@ class CreateDialog(QtWidgets.QDialog): variant = self.variant_input.text() asset_name = self._get_asset_name() task_name = self._get_task_name() - pre_create_data = self._pre_create_attributes_widget.current_value() + pre_create_data = self._pre_create_widget.current_value() # Where to define these data? # - what data show be stored? instance_data = { diff --git a/openpype/tools/publisher/widgets/precreate_widget.py b/openpype/tools/publisher/widgets/precreate_widget.py index 7f0228946e..c7a215d178 100644 --- a/openpype/tools/publisher/widgets/precreate_widget.py +++ b/openpype/tools/publisher/widgets/precreate_widget.py @@ -1,8 +1,82 @@ -from Qt import QtWidgets +from Qt import QtWidgets, QtCore from openpype.widgets.attribute_defs import create_widget_for_attr_def +class PreCreateWidget(QtWidgets.QWidget): + def __init__(self, parent): + super(PreCreateWidget, self).__init__(parent) + + # Precreate attribute defininitions of Creator + scroll_area = QtWidgets.QScrollArea(self) + contet_widget = QtWidgets.QWidget(scroll_area) + scroll_area.setWidget(contet_widget) + scroll_area.setWidgetResizable(True) + + attributes_widget = AttributesWidget(contet_widget) + contet_layout = QtWidgets.QVBoxLayout(contet_widget) + contet_layout.setContentsMargins(0, 0, 0, 0) + contet_layout.addWidget(attributes_widget, 0) + contet_layout.addStretch(1) + + # Widget showed when there are no attribute definitions from creator + empty_widget = QtWidgets.QWidget(self) + empty_widget.setVisible(False) + + # Label showed when creator is not selected + no_creator_label = QtWidgets.QLabel( + "Creator is not selected", + empty_widget + ) + no_creator_label.setWordWrap(True) + + # Creator does not have precreate attributes + empty_label = QtWidgets.QLabel( + "This creator had no configurable options", + empty_widget + ) + empty_label.setWordWrap(True) + empty_label.setVisible(False) + + empty_layout = QtWidgets.QVBoxLayout(empty_widget) + empty_layout.setContentsMargins(0, 0, 0, 0) + empty_layout.addStretch(1) + empty_layout.addWidget(empty_label, 0, QtCore.Qt.AlignCenter) + empty_layout.addWidget(no_creator_label, 0, QtCore.Qt.AlignCenter) + empty_layout.addStretch(1) + + main_layout = QtWidgets.QHBoxLayout(self) + main_layout.setContentsMargins(0, 0, 0, 0) + main_layout.addWidget(scroll_area, 1) + main_layout.addWidget(empty_widget, 1) + + self._scroll_area = scroll_area + self._empty_widget = empty_widget + + self._empty_label = empty_label + self._no_creator_label = no_creator_label + self._attributes_widget = attributes_widget + + def current_value(self): + return self._attributes_widget.current_value() + + def set_plugin(self, creator): + attr_defs = [] + creator_selected = False + if creator is not None: + creator_selected = True + attr_defs = creator.get_pre_create_attr_defs() + + self._attributes_widget.set_attr_defs(attr_defs) + + attr_defs_available = len(attr_defs) > 0 + self._scroll_area.setVisible(attr_defs_available) + self._empty_widget.setVisible(not attr_defs_available) + + self._empty_label.setVisible(creator_selected) + self._no_creator_label.setVisible(not creator_selected) + + class AttributesWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(AttributesWidget, self).__init__(parent)