def _create_mapper(self, section, sources, targets):

        section_box = QtWidgets.QGroupBox(section.title())
        section_box.setObjectName(section)

        layout = QtWidgets.QVBoxLayout()
        for source in sources:

            picker_hlayout = QtWidgets.QHBoxLayout()
            source_label = QtWidgets.QLabel(source)

            # Create lookup
            target_picker = SearchComboBox(placeholder="None")
            target_picker.populate(targets)

            picker_hlayout.addWidget(source_label)
            picker_hlayout.addWidget(target_picker)

            layout.addLayout(picker_hlayout)
            self.mapping_data[source] = target_picker

        section_box.setLayout(layout)

        return section_box
    def setup_ui(self):
        """Build the initial UI"""

        MULTI_SELECT = QtWidgets.QAbstractItemView.ExtendedSelection

        layout = QtWidgets.QVBoxLayout(self)

        publish = QtWidgets.QCheckBox("Suspend Publish Job")
        extend_frames = QtWidgets.QCheckBox("Extend Frames")
        override_frames = QtWidgets.QCheckBox("Override Frames")
        override_frames.setEnabled(False)
        defaultlayer = QtWidgets.QCheckBox("Include Default Render Layer")
        maya_batch_checkbox = QtWidgets.QCheckBox("Use MayaBatch")
        maya_batch_checkbox.setChecked(True)
        maya_batch_checkbox.setToolTip(
            'This uses the MayaBatch plugin. It keeps the scenes loaded '
            'between frames, which reduces the overhead of rendering the '
            'job.\nIt is however easier to debug a render when turning this '
            'off and render using MayaCmd')

        # region Priority
        priority_grp = QtWidgets.QGroupBox("Priority")
        priority_hlayout = QtWidgets.QHBoxLayout()

        priority_value = QtWidgets.QSpinBox()
        priority_value.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        priority_value.setEnabled(False)
        priority_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        priority_slider.setMinimum(0)
        priority_slider.setMaximum(99)

        priority_hlayout.addWidget(priority_value)
        priority_hlayout.addWidget(priority_slider)
        priority_grp.setLayout(priority_hlayout)
        # endregion Priority

        # region ChunkSize
        chunksize_grp = QtWidgets.QGroupBox("Frames Per Task")
        chunksize_hlayout = QtWidgets.QHBoxLayout()

        chunksize_value = QtWidgets.QSpinBox()
        chunksize_value.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
        chunksize_value.setEnabled(False)
        chunksize_value.setValue(1)  # default value
        chunksize_value.setMinimum(1)
        chunksize_value.setMaximum(99)
        chunksize_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
        chunksize_slider.setMinimum(1)
        chunksize_slider.setMaximum(99)

        chunksize_hlayout.addWidget(chunksize_value)
        chunksize_hlayout.addWidget(chunksize_slider)
        chunksize_grp.setLayout(chunksize_hlayout)
        # endregion

        # region pools
        pools_grp = QtWidgets.QGroupBox("Pools")
        pools_vlayout = QtWidgets.QVBoxLayout()

        primary_hlayout = QtWidgets.QHBoxLayout()
        primary_label = QtWidgets.QLabel("Primary")
        primary_pool = QtWidgets.QComboBox()
        primary_hlayout.addWidget(primary_label)
        primary_hlayout.addWidget(primary_pool)

        secondary_hlayout = QtWidgets.QHBoxLayout()
        secondary_label = QtWidgets.QLabel("Secondary")
        secondary_pool = QtWidgets.QComboBox()
        secondary_hlayout.addWidget(secondary_label)
        secondary_hlayout.addWidget(secondary_pool)

        pools_vlayout.addLayout(primary_hlayout)
        pools_vlayout.addLayout(secondary_hlayout)

        pools_grp.setLayout(pools_vlayout)
        # endregion pools

        # Group box for type of machine list
        list_type_grp = QtWidgets.QGroupBox("Machine List Type")
        list_type_hlayout = QtWidgets.QHBoxLayout()

        black_list = QtWidgets.QRadioButton("Blacklist")
        black_list.setChecked(True)
        black_list.setToolTip("List machines which the job WILL NOT use")

        white_list = QtWidgets.QRadioButton("Whitelist")
        white_list.setToolTip("List machines which the job WILL use")

        list_type_hlayout.addWidget(black_list)
        list_type_hlayout.addWidget(white_list)
        list_type_grp.setLayout(list_type_hlayout)

        # region Machine selection
        machines_hlayout = QtWidgets.QHBoxLayout()
        machines_hlayout.setSpacing(2)
        machine_list = QtWidgets.QListWidget()
        listed_machines = QtWidgets.QListWidget()

        # Buttons
        button_vlayout = QtWidgets.QVBoxLayout()
        button_vlayout.setAlignment(QtCore.Qt.AlignCenter)
        button_vlayout.setSpacing(4)

        add_machine_btn = QtWidgets.QPushButton(">")
        add_machine_btn.setFixedWidth(25)

        remove_machine_btn = QtWidgets.QPushButton("<")
        remove_machine_btn.setFixedWidth(25)

        button_vlayout.addWidget(add_machine_btn)
        button_vlayout.addWidget(remove_machine_btn)

        machines_hlayout.addWidget(machine_list)
        machines_hlayout.addLayout(button_vlayout)
        machines_hlayout.addWidget(listed_machines)

        # Machine selection widget settings
        machine_list.setSelectionMode(MULTI_SELECT)
        listed_machines.setSelectionMode(MULTI_SELECT)

        # endregion
        accept_btn = QtWidgets.QPushButton("Use Settings")

        layout.addWidget(defaultlayer)
        layout.addWidget(publish)
        layout.addWidget(extend_frames)
        layout.addWidget(override_frames)
        layout.addWidget(maya_batch_checkbox)
        layout.addWidget(priority_grp)
        layout.addWidget(chunksize_grp)
        layout.addWidget(pools_grp)
        layout.addWidget(list_type_grp)
        layout.addLayout(machines_hlayout)
        layout.addWidget(accept_btn)

        # Enable access for all methods
        self.publish = publish
        self.extend_frames = extend_frames
        self.override_frames = override_frames
        self.defaultlayer = defaultlayer

        self.priority_value = priority_value
        self.priority_slider = priority_slider

        self.chunksize_value = chunksize_value
        self.chunksize_slider = chunksize_slider

        self.primary_pool = primary_pool
        self.secondary_pool = secondary_pool

        self.black_list = black_list
        self.white_list = white_list
        self.machine_list = machine_list

        self.listed_machines = listed_machines
        self.add_machine_btn = add_machine_btn
        self.remove_machine_btn = remove_machine_btn

        self.use_maya_batch = maya_batch_checkbox
        self.accept = accept_btn

        self.setLayout(layout)
Esempio n. 3
0
    def setup_ui(self):
        """Build the initial UI"""
        layout = QtWidgets.QVBoxLayout(self)

        # region executable
        executable_grp = QtWidgets.QGroupBox("Executable")
        executable_vlayout = QtWidgets.QVBoxLayout()

        executable_hlayout = QtWidgets.QHBoxLayout()
        executable_filename = QtWidgets.QLineEdit()
        executable_button = QtWidgets.QPushButton()
        executable_button.setIcon(self.style().standardIcon(
            getattr(QtWidgets.QStyle, 'SP_DialogOpenButton')))
        executable_hlayout.addWidget(executable_filename)
        executable_hlayout.addWidget(executable_button)

        executable_vlayout.addLayout(executable_hlayout)
        executable_grp.setLayout(executable_vlayout)
        # endregion executable

        # region options
        options_grp = QtWidgets.QGroupBox("Options")
        options_vlayout = QtWidgets.QVBoxLayout()

        postfix_hlayout = QtWidgets.QHBoxLayout()
        postfix_label = QtWidgets.QLabel("Postfix")
        postfix_value = QtWidgets.QLineEdit()
        postfix_hlayout.addWidget(postfix_label)
        postfix_hlayout.addWidget(postfix_value)

        compression_hlayout = QtWidgets.QHBoxLayout()
        compression_label = QtWidgets.QLabel("Compression")
        compression_value = QtWidgets.QComboBox()
        compression_hlayout.addWidget(compression_label)
        compression_hlayout.addWidget(compression_value)

        linear_hlayout = QtWidgets.QHBoxLayout()
        linear_label = QtWidgets.QLabel("Linear Conversion")
        linear_value = QtWidgets.QComboBox()
        linear_hlayout.addWidget(linear_label)
        linear_hlayout.addWidget(linear_value)

        tilesize_hlayout = QtWidgets.QHBoxLayout()
        tilesize_label = QtWidgets.QLabel("Tile Size")
        tilesize_value = QtWidgets.QSpinBox()
        tilesize_value.setValue(64)
        tilesize_hlayout.addWidget(tilesize_label)
        tilesize_hlayout.addWidget(tilesize_value)

        overwrite_hlayout = QtWidgets.QHBoxLayout()
        overwrite_label = QtWidgets.QLabel("Overwrite")
        overwrite_value = QtWidgets.QCheckBox()
        overwrite_value.setChecked(False)
        overwrite_hlayout.addWidget(overwrite_label)
        overwrite_hlayout.addWidget(overwrite_value)

        preserve_hlayout = QtWidgets.QHBoxLayout()
        preserve_label = QtWidgets.QLabel("Preserve Color Space ")
        preserve_value = QtWidgets.QCheckBox()
        preserve_value.setChecked(True)
        preserve_hlayout.addWidget(preserve_label)
        preserve_hlayout.addWidget(preserve_value)

        preserve_filter_hlayout = QtWidgets.QHBoxLayout()
        preserve_filter_label = QtWidgets.QLabel("Preserver Filter")
        preserve_filter_value = QtWidgets.QLineEdit()
        preserve_filter_hlayout.addWidget(preserve_filter_label)
        preserve_filter_hlayout.addWidget(preserve_filter_value)

        options_vlayout.addLayout(postfix_hlayout)
        options_vlayout.addLayout(compression_hlayout)
        options_vlayout.addLayout(linear_hlayout)
        options_vlayout.addLayout(tilesize_hlayout)
        options_vlayout.addLayout(overwrite_hlayout)
        options_vlayout.addLayout(preserve_hlayout)
        options_vlayout.addLayout(preserve_filter_hlayout)

        options_grp.setLayout(options_vlayout)
        # endregion options

        # Group box for type of machine list
        list_type_grp = QtWidgets.QGroupBox("File Texture Nodes")
        list_type_hlayout = QtWidgets.QVBoxLayout()

        refresh_button = QtWidgets.QPushButton("Refresh")
        refresh_button.setToolTip("Refresh texture lists")
        refresh_button.setIcon(self.style().standardIcon(
            getattr(QtWidgets.QStyle, 'SP_BrowserReload')))

        # region file node list
        file_node_hlayout = QtWidgets.QVBoxLayout()
        file_node_hlayout.setSpacing(2)
        file_node_list = QtWidgets.QListView()
        file_node_list.setAlternatingRowColors(True)
        file_node_list.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        file_node_list.setSelectionMode(
            QtWidgets.QAbstractItemView.MultiSelection)
        # endregion

        # conversion buttons
        button_vlayout = QtWidgets.QHBoxLayout()
        button_vlayout.setAlignment(QtCore.Qt.AlignCenter)
        button_vlayout.setSpacing(4)

        convert_button = QtWidgets.QPushButton("Convert")
        exr_button = QtWidgets.QPushButton("Show EXR")
        source_button = QtWidgets.QPushButton("Show Source")
        set_source_button = QtWidgets.QPushButton("Set new source")
        set_source_button.setDisabled(True)

        button_vlayout.addWidget(convert_button)
        button_vlayout.addWidget(exr_button)
        button_vlayout.addWidget(source_button)
        button_vlayout.addWidget(set_source_button)

        file_node_hlayout.addWidget(file_node_list)
        file_node_hlayout.addLayout(button_vlayout)

        list_type_hlayout.addWidget(refresh_button)
        list_type_hlayout.addLayout(file_node_hlayout)
        list_type_grp.setLayout(list_type_hlayout)

        layout.addWidget(executable_grp)
        layout.addWidget(options_grp)
        layout.addWidget(list_type_grp)
        layout.addLayout(file_node_hlayout)

        # Enable access for all methods
        self.file_node_list = file_node_list
        self.postfix_value = postfix_value
        self.compression_value = compression_value
        self.linear_value = linear_value
        self.tilesize_value = tilesize_value
        self.executable_filename = executable_filename
        self.exr_button = exr_button
        self.source_button = source_button
        self.convert_button = convert_button
        self.refresh_button = refresh_button
        self.overwritevalue = overwrite_value
        self.preserve_value = preserve_value
        self.preserve_filter_value = preserve_filter_value

        self.setLayout(layout)
Esempio n. 4
0
    def __init__(self, parent=None):
        QtWidgets.QDialog.__init__(self, parent)

        self.resize(640, 360)
        project = api.Session["AVALON_PROJECT"]
        self.setWindowTitle("Context Manager 1.0 - {}".format(project))
        self.setObjectName("contextManager")

        splitter = QtWidgets.QSplitter(self)
        main_layout = QtWidgets.QVBoxLayout()
        column_layout = QtWidgets.QHBoxLayout()

        accept_btn = QtWidgets.QPushButton("Accept")

        # Asset picker
        assets = AssetWidget()

        # Task picker
        tasks_widgets = QtWidgets.QWidget()
        tasks_widgets.setContentsMargins(0, 0, 0, 0)
        tasks_layout = QtWidgets.QVBoxLayout(tasks_widgets)
        task_view = QtWidgets.QTreeView()
        task_view.setIndentation(0)
        task_model = TasksModel()
        task_view.setModel(task_model)
        tasks_layout.addWidget(task_view)
        tasks_layout.addWidget(accept_btn)
        task_view.setColumnHidden(1, True)

        # region results
        result_widget = QtWidgets.QGroupBox("Current Context")
        result_layout = QtWidgets.QVBoxLayout()
        result_widget.setLayout(result_layout)

        project_label = QtWidgets.QLabel("Project: {}".format(project))
        asset_label = QtWidgets.QLabel()
        task_label = QtWidgets.QLabel()

        result_layout.addWidget(project_label)
        result_layout.addWidget(asset_label)
        result_layout.addWidget(task_label)
        result_layout.addStretch()
        # endregion results

        context_widget = QtWidgets.QWidget()
        column_layout.addWidget(assets)
        column_layout.addWidget(tasks_widgets)
        context_widget.setLayout(column_layout)

        splitter.addWidget(context_widget)
        splitter.addWidget(result_widget)
        splitter.setSizes([1, 0])

        main_layout.addWidget(splitter)

        # Enable for other functions
        self._last_selected_task = None
        self._task_view = task_view
        self._task_model = task_model
        self._assets = assets

        self._context_asset = asset_label
        self._context_task = task_label

        assets.selection_changed.connect(self.on_asset_changed)
        accept_btn.clicked.connect(self.on_accept_clicked)
        assets.refresh()

        self.select_asset(api.Session["AVALON_ASSET"])
        self.select_task(api.Session["AVALON_TASK"])

        self.setLayout(main_layout)

        # Enforce current context to be up-to-date
        self.refresh_context_view()
Esempio n. 5
0
    def __init__(self, parent=None):
        super(FocusComparing, self).__init__(parent=parent)

        widget = pindict.to_pindict({
            "overallDiff": {
                "main": QtWidgets.QGroupBox("Compare Features"),
                "name": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Hierarchy"),
                    "status": QtWidgets.QLabel("--"),
                },
                "id": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Avalon Id"),
                    "status": QtWidgets.QLabel("--"),
                },
                "mesh": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("Mesh"),
                    "status": QtWidgets.QLabel("--"),
                },
                "uv": {
                    "main": QtWidgets.QWidget(),
                    "icon": QtWidgets.QLabel(),
                    "label": QtWidgets.QLabel("UV"),
                    "status": QtWidgets.QLabel("--"),
                },
            },
            "featureMenu": {
                "main": QtWidgets.QWidget(),
                "label": QtWidgets.QLabel("Focus On"),
                "list": QtWidgets.QComboBox(),
            },
            "focus": {
                "view": QtWidgets.QTreeView(),
                "model": models.FocusModel(),
                "pathDelegate": delegates.PathTextDelegate(),
            }
        })

        with widget.pin("overallDiff") as diff:
            layout = QtWidgets.QVBoxLayout(diff["main"])

            for key in ["name", "id", "mesh", "uv"]:
                with widget.pin("overallDiff." + key) as feature:
                    lay = QtWidgets.QHBoxLayout(feature["main"])
                    lay.addWidget(feature["label"])
                    lay.addSpacing(8)
                    lay.addWidget(feature["icon"])
                    lay.addSpacing(12)
                    lay.addWidget(feature["status"], stretch=True)

                    feature["label"].setFixedWidth(60)
                    feature["label"].setAlignment(QtCore.Qt.AlignRight)

                    icon = delegates.FEATURE_ICONS[key]
                    pixmap = lib.icon(icon, models.COLOR_DARK).pixmap(16, 16)
                    feature["icon"].setPixmap(pixmap)

                layout.addWidget(feature["main"])
                layout.addSpacing(-16)
            layout.addSpacing(16)
            layout.setContentsMargins(0, 0, 0, 0)

        with widget.pin("featureMenu") as menu:
            layout = QtWidgets.QHBoxLayout(menu["main"])
            layout.addWidget(menu["label"])
            layout.addWidget(menu["list"])
            layout.addStretch()

        layout = QtWidgets.QVBoxLayout(self)
        layout.addSpacing(-16)
        layout.addWidget(widget["overallDiff"]["main"])
        layout.addSpacing(-8)
        layout.addWidget(widget["featureMenu"]["main"])
        layout.addSpacing(-8)
        layout.addWidget(widget["focus"]["view"])

        # Init
        with widget.pin("featureMenu") as menu:
            menu["list"].addItem(" Hierarchy", "longName")
            menu["list"].addItem(" Avalon Id", "avalonId")
            menu["list"].addItem(" Full Path", "fullPath")
            menu["list"].addItem(" Mesh", "points")
            menu["list"].addItem(" UV", "uvmap")

        with widget.pin("focus") as focus:
            focus["view"].setModel(focus["model"])
            focus["view"].setItemDelegateForColumn(1, focus["pathDelegate"])
            focus["view"].setHeaderHidden(True)
            focus["view"].setUniformRowHeights(True)
            focus["view"].setAlternatingRowColors(False)
            focus["view"].setIndentation(6)
            focus["view"].setStyleSheet("""
                QTreeView::item{
                    padding: 2px 1px;
                    border: 0px;
                }
            """)
            focus["view"].setSelectionMode(focus["view"].NoSelection)
            height = focus["view"].sizeHintForRow(0) * 2 + 4  # MagicNum
            focus["view"].setFixedHeight(height)
            focus["view"].setColumnWidth(0, 28)

        self.widget = widget
        self._focusing = False

        # Connect
        with widget.pin("featureMenu") as menu:
            menu["list"].currentIndexChanged.connect(self.on_feature_changed)
        self.focus_enabled.connect(self.on_focus_enabled)
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)

        self.setWindowTitle("Replicate Houdini Asset (particles)")
        self.setWindowFlags(QtCore.Qt.Window)
        self.setParent(parent)
        self.resize(280, 280)

        layout = QtWidgets.QVBoxLayout()

        input_box = QtWidgets.QGroupBox("Input")
        input_box.setStyleSheet("{color: red}")
        input_vboxlayout = QtWidgets.QVBoxLayout()
        from_selection = QtWidgets.QCheckBox("Selected")
        from_selection.setChecked(True)

        name_hlayout = QtWidgets.QHBoxLayout()
        name_label = QtWidgets.QLabel("Name")
        name_field = QtWidgets.QLineEdit()
        name_hlayout.addWidget(name_label)
        name_hlayout.addWidget(name_field)

        input_box.setLayout(input_vboxlayout)
        input_vboxlayout.addWidget(from_selection)
        input_vboxlayout.addLayout(name_hlayout)

        time_box = QtWidgets.QGroupBox("Time")
        time_hlayout = QtWidgets.QHBoxLayout()
        time_start_vbox = QtWidgets.QVBoxLayout()
        time_start_label = QtWidgets.QLabel("Start")
        time_start = QtWidgets.QSpinBox()
        time_start_vbox.addWidget(time_start_label)
        time_start_vbox.addWidget(time_start)

        time_end_vbox = QtWidgets.QVBoxLayout()
        time_end_label = QtWidgets.QLabel("End")
        time_end = QtWidgets.QSpinBox()
        time_end_vbox.addWidget(time_end_label)
        time_end_vbox.addWidget(time_end)

        time_hlayout.addLayout(time_start_vbox)
        time_hlayout.addLayout(time_end_vbox)
        time_box.setLayout(time_hlayout)

        mapping_box = QtWidgets.QGroupBox("Attribute mapping")
        mapping_layout = QtWidgets.QVBoxLayout()
        mapping_box.setLayout(mapping_layout)

        button_vlayout = QtWidgets.QVBoxLayout()
        replicate = QtWidgets.QPushButton("Replicate")
        update_hlayout = QtWidgets.QHBoxLayout()
        update_all_button = QtWidgets.QPushButton("Update All")
        update_selected_button = QtWidgets.QPushButton("Update Selected")
        update_hlayout.addWidget(update_all_button)
        update_hlayout.addWidget(update_selected_button)

        refresh_button = QtWidgets.QPushButton("Refresh")

        button_vlayout.addWidget(replicate)
        button_vlayout.addLayout(update_hlayout)
        button_vlayout.addWidget(refresh_button)

        layout.addWidget(input_box)
        # layout.addWidget(time_box)
        layout.addWidget(mapping_box)
        layout.addLayout(button_vlayout)

        # Open up items for code
        self._selection = []
        self.mapping_data = {}

        self.from_selection = from_selection
        self.name_field = name_field

        self.time_start = time_start
        self.time_end = time_end

        self.mapping_layout = mapping_layout
        self.replicate_button = replicate
        self.update_all_button = update_all_button
        self.update_selected_button = update_selected_button
        self.refesh_button = refresh_button

        self.setLayout(layout)

        layout.addStretch(True)

        self.get_settings()

        self.connections()