Esempio n. 1
0
    def create_settings_widget(self, parent):
        """
        Creates a Qt widget, for the supplied parent widget (a container widget
        on the right side of the publish UI).

        :param parent: The parent to use for the widget being created
        :return: A :class:`QtGui.QFrame` that displays editable widgets for
                 modifying the plugin's settings.
        """
        # defer Qt-related imports
        from sgtk.platform.qt import QtGui, QtCore

        # Create a QFrame with all our widgets
        settings_frame = QtGui.QFrame(parent)
        # Create our widgets, we add them as properties on the QFrame so we can
        # retrieve them easily. Qt uses camelCase so our xxxx_xxxx names can't
        # clash with existing Qt properties.

        # Show this plugin description
        settings_frame.description_label = QtGui.QLabel(self.description)
        settings_frame.description_label.setWordWrap(True)
        settings_frame.description_label.setOpenExternalLinks(True)
        settings_frame.description_label.setTextFormat(QtCore.Qt.RichText)

        # Unreal setttings
        settings_frame.unreal_render_presets_label = QtGui.QLabel(
            "Render with Movie Pipeline Presets:")
        settings_frame.unreal_render_presets_widget = QtGui.QComboBox()
        settings_frame.unreal_render_presets_widget.addItem("No presets")
        presets_folder = unreal.MovieRenderPipelineProjectSettings(
        ).preset_save_dir
        for preset in unreal.EditorAssetLibrary.list_assets(
                presets_folder.path):
            settings_frame.unreal_render_presets_widget.addItem(
                preset.split(".")[0])

        settings_frame.unreal_publish_folder_label = QtGui.QLabel(
            "Publish folder:")
        storage_roots = self.parent.shotgun.find(
            "LocalStorage", [], ["code", _OS_LOCAL_STORAGE_PATH_FIELD])
        settings_frame.storage_roots_widget = QtGui.QComboBox()
        settings_frame.storage_roots_widget.addItem("Current Unreal Project")
        for storage_root in storage_roots:
            if storage_root[_OS_LOCAL_STORAGE_PATH_FIELD]:
                settings_frame.storage_roots_widget.addItem(
                    "%s (%s)" % (storage_root["code"],
                                 storage_root[_OS_LOCAL_STORAGE_PATH_FIELD]),
                    userData=storage_root,
                )
        # Create the layout to use within the QFrame
        settings_layout = QtGui.QVBoxLayout()
        settings_layout.addWidget(settings_frame.description_label)
        settings_layout.addWidget(settings_frame.unreal_render_presets_label)
        settings_layout.addWidget(settings_frame.unreal_render_presets_widget)
        settings_layout.addWidget(settings_frame.unreal_publish_folder_label)
        settings_layout.addWidget(settings_frame.storage_roots_widget)

        settings_layout.addStretch()
        settings_frame.setLayout(settings_layout)
        return settings_frame
Esempio n. 2
0
    def __init__(self, parent):
        super(EnvImporter, self).__init__(parent)

        self.state = {
            'projects': None,
            'project': None,
            'environments': None,
            'environment': None,
        }

        # Can't get this search widget to work right...
        # search = sgtk.platform.import_framework(
        #     "tk-framework-qtwidgets",
        #     "shotgun_search_widget",
        # )
        # self.project_search = search.GlobalSearchWidget(self)
        # self.project_search.set_searchable_entity_types({'Project': []})
        # self.project_search.set_placeholder_text('Search for Project')
        # self.project_search.entity_activated.connect(self.on_entity_activated)

        # Create widgets
        self.project_search = QtGui.QComboBox()
        self.env_list = QtGui.QComboBox()
        self.engine = QtGui.QLineEdit()
        self.engine.setReadOnly(True)
        self.engine.setFocusPolicy(QtCore.Qt.NoFocus)
        self.req_list = QtGui.QListWidget()
        self.import_button = QtGui.QPushButton('Import')
        self.cancel_button = QtGui.QPushButton('Cancel')

        # Layout widgets
        button_layout = QtGui.QHBoxLayout()
        button_layout.addWidget(self.import_button)
        button_layout.addWidget(self.cancel_button)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(QtGui.QLabel('Project'))
        layout.addWidget(self.project_search)
        layout.addWidget(QtGui.QLabel('Environment'))
        layout.addWidget(self.env_list)
        layout.addWidget(QtGui.QLabel('Engine'))
        layout.addWidget(self.engine)
        layout.addWidget(QtGui.QLabel('Requires'))
        layout.addWidget(self.req_list)
        layout.addLayout(button_layout)
        self.setLayout(layout)

        # Connect widgets
        self.project_search.activated.connect(self.on_project_changed)
        self.env_list.activated.connect(self.on_env_changed)
        self.import_button.clicked.connect(self.on_import_clicked)
        self.cancel_button.clicked.connect(self.on_cancel_clicked)

        self.setWindowTitle('Import Environments')
        self.setWindowIcon(QtGui.QIcon(res.get_path('icon_dark_256.png')))

        self.update_projects()
    def __setup_ui(self):
        """
        Creates and lays out all the Qt widgets
        :return:
        """
        layout = QtGui.QVBoxLayout()
        layout.setAlignment(QtCore.Qt.AlignLeft)
        self.setLayout(layout)

        # Create a check box to hold the state of whether we should set the task in review.
        self.review_cbx = QtGui.QCheckBox("Set task to in review")

        # Create a Combobox to list and chose the reviewers.
        self.reviewer_cmbx = QtGui.QComboBox()
        self.reviewer_cmbx.setAccessibleName("Reviewer selection dropdown")
        self.reviewer_lbl = QtGui.QLabel("Select reviewer")
        self.reviewer_layout = QtGui.QHBoxLayout()
        self.reviewer_layout.addWidget(self.reviewer_cmbx)
        self.reviewer_layout.addWidget(self.reviewer_lbl)

        sp = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
                               QtGui.QSizePolicy.Maximum)
        self.review_cbx.setSizePolicy(sp)
        self.reviewer_cmbx.setSizePolicy(sp)

        layout.addWidget(self.review_cbx)
        layout.setAlignment(self.review_cbx, QtCore.Qt.AlignLeft)
        layout.addLayout(self.reviewer_layout)
Esempio n. 4
0
    def __init__(self, parent=None):
        super(GraphTypeDialog, self).__init__(parent)

        layout = QtGui.QVBoxLayout(self)

        self.graph_lbl = QtGui.QLabel("Graph Type:")
        self.graph_type_cmb = QtGui.QComboBox()
        self.graph_type_cmb.addItems(["Substance", "MDL Material"])
        self.vspc1 = QtGui.QSpacerItem(20, 5, QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Expanding)
        self.graph_name = QtGui.QLabel("Graph Name:")
        self.graph_name_edt = QtGui.QLineEdit("New Graph")
        self.vspc2 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Expanding)

        layout.addWidget(self.graph_lbl)
        layout.addWidget(self.graph_type_cmb)
        layout.addItem(self.vspc1)
        layout.addWidget(self.graph_name)
        layout.addWidget(self.graph_name_edt)
        layout.addItem(self.vspc2)

        # OK and Cancel buttons
        buttons = QtGui.QDialogButtonBox(
            QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel,
            QtCore.Qt.Horizontal,
            self,
        )
        buttons.accepted.connect(self.accept)
        buttons.rejected.connect(self.reject)
        layout.addWidget(buttons)
Esempio n. 5
0
    def __init__(self, parent=None):
        super(versionWidgetCombo, self).__init__(parent)

        self.versionDatas = []
        self.pathToMovie = None

        self.masterLayout = QtGui.QVBoxLayout()
        self.masterLayout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(self.masterLayout)

        self.layout = QtGui.QHBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        titleLabel = QtGui.QLabel("Create Note", parent=self)
        #titleLabel.setStyleSheet("QLabel { background-color : red; color : blue; }");
        font = QtGui.QFont("", 10, QtGui.QFont.Bold)
        titleLabel.setFont(font)

        titleLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.masterLayout.addWidget(titleLabel)
        self.masterLayout.addLayout(self.layout)

        self.pic = loadingWidget(parent=self)
        # ####self.pic.setMaximumWidth(50)

        infoLayout = QtGui.QVBoxLayout()
        infoLayout.setAlignment(QtCore.Qt.AlignTop)
        self.layout.addLayout(infoLayout)
        self.layout.addStretch()
        self.layout.addWidget(self.pic, QtCore.Qt.AlignLeft)

        self.versionQtCombo = QtGui.QComboBox(parent=self)
        self.nameQt = QtGui.QLabel("", parent=self)
        self.userQt = QtGui.QLabel("", parent=self)
        self.dateQt = QtGui.QLabel("", parent=self)
        self.taskQt = QtGui.QLabel("", parent=self)

        comboLayout = QtGui.QHBoxLayout()
        comboLayout.setContentsMargins(0, 0, 0, 0)
        comboLayout.addWidget(QtGui.QLabel("Link to version : ", parent=self))
        comboLayout.addWidget(self.versionQtCombo, QtCore.Qt.AlignLeft)

        infoLayout.addLayout(comboLayout)

        infoLayout.addWidget(self.nameQt)
        infoLayout.addWidget(self.userQt)
        infoLayout.addWidget(self.dateQt)
        infoLayout.addWidget(self.taskQt)
        infoLayout.addSpacing(100)

        #infoLayout.addStretch()
        infoLayout.setContentsMargins(0, 0, 0, 0)
        infoLayout.setSpacing(0)

        self.layout.addSpacing(5)

        self.versionQtCombo.currentIndexChanged.connect(self.setVersionValue)
    def create_settings_widget(self, parent, items=None):
        """
        Creates a Qt widget, for the supplied parent widget (a container widget
        on the right side of the publish UI).

        :param parent: The parent to use for the widget being created.
        :param items: A list of PublishItems the selected publish tasks are parented to.
        :return: A QtGui.QWidget or subclass that displays information about
            the plugin and/or editable widgets for modifying the plugin's
            settings.
        """

        # defer Qt-related imports
        from sgtk.platform.qt import QtCore, QtGui

        # The main widget
        widget = QtGui.QWidget(parent)
        widget_layout = QtGui.QVBoxLayout()

        # create a group box to display the description
        description_group_box = QtGui.QGroupBox(widget)
        description_group_box.setTitle("Description:")

        # Defer setting the description text, this will be updated when
        # the version type combobox value is changed
        description_label = QtGui.QLabel()
        description_label.setWordWrap(True)
        description_label.setOpenExternalLinks(True)
        description_label.setTextFormat(QtCore.Qt.RichText)

        # create the layout to use within the group box
        description_layout = QtGui.QVBoxLayout()
        description_layout.addWidget(description_label)
        description_layout.addStretch()
        description_group_box.setLayout(description_layout)

        # Add a combobox to edit the version type option
        version_type_combobox = QtGui.QComboBox(widget)
        version_type_combobox.setAccessibleName(
            "Version type selection dropdown")
        version_type_combobox.addItems(self.VERSION_TYPE_OPTIONS)
        # Hook up the signal/slot to update the description according to the current version type
        version_type_combobox.currentIndexChanged.connect(
            lambda index: self._on_version_type_changed(
                version_type_combobox.currentText(), description_label))

        # Add all the minor widgets to the main widget
        widget_layout.addWidget(description_group_box)
        widget_layout.addWidget(version_type_combobox)
        widget.setLayout(widget_layout)

        # Set the widget property to store the combobox to access in get_ui_settings and set_ui_settings
        widget.setProperty("description_label", description_label)
        widget.setProperty("version_type_combobox", version_type_combobox)

        return widget
Esempio n. 7
0
    def _build_cut_type_layout(self, properties):
        """
        Returns layout with a Label and QComboBox with a list of cut types.

        :param properties: A dict containing the 'sg_cut_type' preset
        :return: QtGui.QLayout - for the cut type widget
        """
        tooltip = "What to populate in the `Type` field for this Cut in Shotgun"

        # ---- construct the widget

        # populate the list of cut types and default from the site schema
        schema = self.app.shotgun.schema_field_read("Cut", "sg_cut_type")
        cut_types = schema["sg_cut_type"]["properties"]["valid_values"][
            "value"]

        # make sure we have an empty item at the top
        cut_types.insert(0, "")

        # create a combo box for the cut types
        cut_type_widget = QtGui.QComboBox()
        cut_type_widget.setToolTip(tooltip)
        cut_type_widget.addItems(cut_types)

        # make sure the current value is set
        current_value = properties["sg_cut_type"]
        index = cut_type_widget.findText(current_value)
        if index > 0:
            # found a match
            cut_type_widget.setCurrentIndex(index)
        else:
            # empty value
            cut_type_widget.setCurrentIndex(0)

        # a callback to update the property dict when the value changes
        def value_changed(new_value):
            properties["sg_cut_type"] = new_value

        # connect the widget index changed to the callback
        cut_type_widget.currentIndexChanged[str].connect(value_changed)

        # ---- construct the layout with a label

        cut_type_label = QtGui.QLabel("Cut Type:")
        cut_type_label.setToolTip(tooltip)

        cut_type_layout = QtGui.QHBoxLayout()
        cut_type_layout.addWidget(cut_type_label)
        cut_type_layout.addWidget(cut_type_widget)
        cut_type_layout.addStretch()

        return cut_type_layout
Esempio n. 8
0
    def create_item(self, spec_set):
        item = QtGui.QTreeWidgetItem(parent=self)
        item.spec_set = spec_set
        item.setText(Name, spec_set.selection.name)
        item.setText(Version, spec_set.selection.version.string)
        item.setFlags(QtCore.Qt.ItemIsSelectable
                      | QtCore.Qt.ItemIsEnabled
                      | QtCore.Qt.ItemIsDragEnabled)

        # Add versions combobox
        item.combo_box = QtGui.QComboBox(parent=self)
        item.combo_box.setFocusPolicy(QtCore.Qt.NoFocus)
        for spec in item.spec_set.module_specs:
            item.combo_box.addItem(spec.version.string)
        item.combo_box.setCurrentIndex(spec_set.selection_index)
        item.combo_box.currentIndexChanged.connect(
            partial(self.on_version_changed, item))

        return item
Esempio n. 9
0
    def __init__(self, name, data, parent=None):
        """
        Initialize the class.

        :param name: The node name.
        :type name: str
        :param data: The data used to populate this node.
        :type data: dict
        :type parent: QtGui.QWidget
        """
        super(LookFilePublishWidgetItem, self).__init__(parent=None)
        self.__name = name
        layout = QtGui.QHBoxLayout()
        self.setLayout(layout)
        label = QtGui.QLabel(self.__name, parent=self)
        layout.addWidget(label)
        self._combo = QtGui.QComboBox(parent=self)
        layout.addWidget(self._combo)
        self._populate(self._combo, data)
    def setupUi(self, FileSaveForm):
        FileSaveForm.setObjectName("FileSaveForm")
        FileSaveForm.resize(850, 539)
        self.verticalLayout = QtGui.QVBoxLayout(FileSaveForm)
        self.verticalLayout.setSpacing(4)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout_3 = QtGui.QVBoxLayout()
        self.verticalLayout_3.setContentsMargins(12, 12, 12, 4)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.gridLayout_2 = QtGui.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setSpacing(1)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.expand_checkbox = QtGui.QCheckBox(FileSaveForm)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.expand_checkbox.sizePolicy().hasHeightForWidth())
        self.expand_checkbox.setSizePolicy(sizePolicy)
        self.expand_checkbox.setMaximumSize(QtCore.QSize(16777215, 24))
        self.expand_checkbox.setStyleSheet(
            "#expand_checkbox::indicator {\n"
            "width: 24;\n"
            "height: 24;\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::unchecked {\n"
            "    image: url(:/tk-multi-workfiles2/save_expand.png);\n"
            "\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::unchecked::hover {\n"
            "    image: url(:/tk-multi-workfiles2/save_expand_hover.png);\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::unchecked::pressed {\n"
            "    image: url(:/tk-multi-workfiles2/save_expand_pressed.png);\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::checked {\n"
            "    image: url(:/tk-multi-workfiles2/save_collapse.png);\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::checked:hover {\n"
            "    image: url(:/tk-multi-workfiles2/save_collapse_hover.png);\n"
            "}\n"
            "\n"
            "#expand_checkbox::indicator::checked:pressed {\n"
            "    image: url(:/tk-multi-workfiles2/save_collapse_pressed.png);\n"
            "}")
        self.expand_checkbox.setText("")
        self.expand_checkbox.setObjectName("expand_checkbox")
        self.horizontalLayout_3.addWidget(self.expand_checkbox)
        self.gridLayout_2.addLayout(self.horizontalLayout_3, 0, 0, 1, 1)
        self.nav = NavigationWidget(FileSaveForm)
        self.nav.setMinimumSize(QtCore.QSize(80, 30))
        self.nav.setStyleSheet("#nav {\n"
                               "background-color: rgb(255, 128, 0);\n"
                               "}")
        self.nav.setObjectName("nav")
        self.gridLayout_2.addWidget(self.nav, 0, 1, 1, 1)
        self.breadcrumbs = BreadcrumbWidget(FileSaveForm)
        self.breadcrumbs.setMinimumSize(QtCore.QSize(0, 30))
        self.breadcrumbs.setStyleSheet("#breadcrumbs {\n"
                                       "background-color: rgb(255, 128, 0);\n"
                                       "}")
        self.breadcrumbs.setObjectName("breadcrumbs")
        self.gridLayout_2.addWidget(self.breadcrumbs, 0, 2, 1, 1)
        self.gridLayout_2.setColumnStretch(2, 1)
        self.verticalLayout_3.addLayout(self.gridLayout_2)
        self.browser = BrowserForm(FileSaveForm)
        self.browser.setStyleSheet("#browser {\n"
                                   "background-color: rgb(255, 128, 0);\n"
                                   "}")
        self.browser.setObjectName("browser")
        self.verticalLayout_3.addWidget(self.browser)
        self.verticalLayout_3.setStretch(1, 1)
        self.verticalLayout.addLayout(self.verticalLayout_3)
        self.line = QtGui.QFrame(FileSaveForm)
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName("line")
        self.verticalLayout.addWidget(self.line)
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setSpacing(20)
        self.verticalLayout_2.setContentsMargins(12, 4, 12, 4)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.file_controls_grid = QtGui.QGridLayout()
        self.file_controls_grid.setHorizontalSpacing(14)
        self.file_controls_grid.setVerticalSpacing(6)
        self.file_controls_grid.setObjectName("file_controls_grid")
        self.version_label = QtGui.QLabel(FileSaveForm)
        self.version_label.setMinimumSize(QtCore.QSize(0, 0))
        self.version_label.setAlignment(QtCore.Qt.AlignRight
                                        | QtCore.Qt.AlignTrailing
                                        | QtCore.Qt.AlignVCenter)
        self.version_label.setIndent(-1)
        self.version_label.setObjectName("version_label")
        self.file_controls_grid.addWidget(self.version_label, 1, 0, 1, 1)
        self.name_label = QtGui.QLabel(FileSaveForm)
        self.name_label.setMinimumSize(QtCore.QSize(0, 0))
        self.name_label.setAlignment(QtCore.Qt.AlignRight
                                     | QtCore.Qt.AlignTrailing
                                     | QtCore.Qt.AlignVCenter)
        self.name_label.setIndent(-1)
        self.name_label.setObjectName("name_label")
        self.file_controls_grid.addWidget(self.name_label, 0, 0, 1, 1)
        self.file_type_label = QtGui.QLabel(FileSaveForm)
        self.file_type_label.setMinimumSize(QtCore.QSize(0, 0))
        self.file_type_label.setAlignment(QtCore.Qt.AlignRight
                                          | QtCore.Qt.AlignTrailing
                                          | QtCore.Qt.AlignVCenter)
        self.file_type_label.setIndent(-1)
        self.file_type_label.setObjectName("file_type_label")
        self.file_controls_grid.addWidget(self.file_type_label, 2, 0, 1, 1)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(-1)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.version_spinner = QtGui.QSpinBox(FileSaveForm)
        self.version_spinner.setMaximum(9999999)
        self.version_spinner.setObjectName("version_spinner")
        self.horizontalLayout_2.addWidget(self.version_spinner)
        self.use_next_available_cb = QtGui.QCheckBox(FileSaveForm)
        self.use_next_available_cb.setObjectName("use_next_available_cb")
        self.horizontalLayout_2.addWidget(self.use_next_available_cb)
        spacerItem = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                       QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem)
        self.file_controls_grid.addLayout(self.horizontalLayout_2, 1, 1, 1, 1)
        self.horizontalLayout_6 = QtGui.QHBoxLayout()
        self.horizontalLayout_6.setSpacing(0)
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.file_type_menu = QtGui.QComboBox(FileSaveForm)
        self.file_type_menu.setMinimumSize(QtCore.QSize(200, 0))
        self.file_type_menu.setObjectName("file_type_menu")
        self.horizontalLayout_6.addWidget(self.file_type_menu)
        spacerItem1 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_6.addItem(spacerItem1)
        self.file_controls_grid.addLayout(self.horizontalLayout_6, 2, 1, 1, 1)
        self.horizontalLayout_8 = QtGui.QHBoxLayout()
        self.horizontalLayout_8.setSpacing(0)
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.name_edit = QtGui.QLineEdit(FileSaveForm)
        self.name_edit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.name_edit.setFrame(True)
        self.name_edit.setObjectName("name_edit")
        self.horizontalLayout_8.addWidget(self.name_edit)
        spacerItem2 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_8.addItem(spacerItem2)
        self.horizontalLayout_8.setStretch(0, 1)
        self.file_controls_grid.addLayout(self.horizontalLayout_8, 0, 1, 1, 1)
        self.file_controls_grid.setColumnMinimumWidth(0, 80)
        self.file_controls_grid.setColumnStretch(1, 1)
        self.verticalLayout_2.addLayout(self.file_controls_grid)
        self.feedback_stacked_widget = QtGui.QStackedWidget(FileSaveForm)
        self.feedback_stacked_widget.setObjectName("feedback_stacked_widget")
        self.preview_page = QtGui.QWidget()
        self.preview_page.setObjectName("preview_page")
        self.verticalLayout_4 = QtGui.QVBoxLayout(self.preview_page)
        self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.preview_grid = QtGui.QGridLayout()
        self.preview_grid.setHorizontalSpacing(14)
        self.preview_grid.setVerticalSpacing(1)
        self.preview_grid.setObjectName("preview_grid")
        self.preview_label = QtGui.QLabel(self.preview_page)
        self.preview_label.setAlignment(QtCore.Qt.AlignRight
                                        | QtCore.Qt.AlignTop
                                        | QtCore.Qt.AlignTrailing)
        self.preview_label.setIndent(-1)
        self.preview_label.setObjectName("preview_label")
        self.preview_grid.addWidget(self.preview_label, 0, 0, 1, 1)
        self.file_name_preview = QtGui.QLabel(self.preview_page)
        self.file_name_preview.setAlignment(QtCore.Qt.AlignLeading
                                            | QtCore.Qt.AlignLeft
                                            | QtCore.Qt.AlignTop)
        self.file_name_preview.setWordWrap(True)
        self.file_name_preview.setIndent(-1)
        self.file_name_preview.setObjectName("file_name_preview")
        self.preview_grid.addWidget(self.file_name_preview, 0, 1, 1, 1)
        self.work_area_preview = ElidedLabel(self.preview_page)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored,
                                       QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.work_area_preview.sizePolicy().hasHeightForWidth())
        self.work_area_preview.setSizePolicy(sizePolicy)
        self.work_area_preview.setAlignment(QtCore.Qt.AlignLeading
                                            | QtCore.Qt.AlignLeft
                                            | QtCore.Qt.AlignTop)
        self.work_area_preview.setWordWrap(True)
        self.work_area_preview.setIndent(-1)
        self.work_area_preview.setTextInteractionFlags(
            QtCore.Qt.TextSelectableByMouse)
        self.work_area_preview.setObjectName("work_area_preview")
        self.preview_grid.addWidget(self.work_area_preview, 1, 1, 1, 1)
        self.work_area_label = QtGui.QLabel(self.preview_page)
        self.work_area_label.setAlignment(QtCore.Qt.AlignRight
                                          | QtCore.Qt.AlignTop
                                          | QtCore.Qt.AlignTrailing)
        self.work_area_label.setIndent(-1)
        self.work_area_label.setObjectName("work_area_label")
        self.preview_grid.addWidget(self.work_area_label, 1, 0, 1, 1)
        self.preview_grid.setColumnMinimumWidth(0, 80)
        self.preview_grid.setColumnStretch(1, 1)
        self.verticalLayout_4.addLayout(self.preview_grid)
        self.feedback_stacked_widget.addWidget(self.preview_page)
        self.warning_page = QtGui.QWidget()
        self.warning_page.setObjectName("warning_page")
        self.horizontalLayout_7 = QtGui.QHBoxLayout(self.warning_page)
        self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.warning_grid = QtGui.QGridLayout()
        self.warning_grid.setContentsMargins(0, -1, -1, -1)
        self.warning_grid.setHorizontalSpacing(14)
        self.warning_grid.setVerticalSpacing(6)
        self.warning_grid.setObjectName("warning_grid")
        self.warning = QtGui.QLabel(self.warning_page)
        self.warning.setMinimumSize(QtCore.QSize(0, 45))
        self.warning.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft
                                  | QtCore.Qt.AlignTop)
        self.warning.setWordWrap(True)
        self.warning.setMargin(0)
        self.warning.setIndent(-1)
        self.warning.setTextInteractionFlags(
            QtCore.Qt.LinksAccessibleByMouse
            | QtCore.Qt.TextSelectableByKeyboard
            | QtCore.Qt.TextSelectableByMouse)
        self.warning.setObjectName("warning")
        self.warning_grid.addWidget(self.warning, 0, 1, 1, 1)
        self.warning_label = QtGui.QLabel(self.warning_page)
        self.warning_label.setAlignment(QtCore.Qt.AlignRight
                                        | QtCore.Qt.AlignTop
                                        | QtCore.Qt.AlignTrailing)
        self.warning_label.setIndent(-1)
        self.warning_label.setObjectName("warning_label")
        self.warning_grid.addWidget(self.warning_label, 0, 0, 1, 1)
        self.warning_grid.setColumnMinimumWidth(0, 80)
        self.warning_grid.setColumnStretch(1, 1)
        self.horizontalLayout_7.addLayout(self.warning_grid)
        self.feedback_stacked_widget.addWidget(self.warning_page)
        self.verticalLayout_2.addWidget(self.feedback_stacked_widget)
        self.verticalLayout_2.setStretch(1, 1)
        self.verticalLayout.addLayout(self.verticalLayout_2)
        spacerItem3 = QtGui.QSpacerItem(20, 0, QtGui.QSizePolicy.Minimum,
                                        QtGui.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem3)
        self.break_line = QtGui.QFrame(FileSaveForm)
        self.break_line.setFrameShape(QtGui.QFrame.HLine)
        self.break_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.break_line.setObjectName("break_line")
        self.verticalLayout.addWidget(self.break_line)
        self.horizontalLayout_4 = QtGui.QHBoxLayout()
        self.horizontalLayout_4.setContentsMargins(12, 8, 12, 12)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_4.addItem(spacerItem4)
        self.cancel_btn = QtGui.QPushButton(FileSaveForm)
        self.cancel_btn.setObjectName("cancel_btn")
        self.horizontalLayout_4.addWidget(self.cancel_btn)
        self.save_btn = QtGui.QPushButton(FileSaveForm)
        self.save_btn.setDefault(True)
        self.save_btn.setObjectName("save_btn")
        self.horizontalLayout_4.addWidget(self.save_btn)
        self.verticalLayout.addLayout(self.horizontalLayout_4)
        self.verticalLayout.setStretch(0, 1)

        self.retranslateUi(FileSaveForm)
        self.feedback_stacked_widget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(FileSaveForm)
        FileSaveForm.setTabOrder(self.name_edit, self.version_spinner)
        FileSaveForm.setTabOrder(self.version_spinner,
                                 self.use_next_available_cb)
        FileSaveForm.setTabOrder(self.use_next_available_cb,
                                 self.file_type_menu)
        FileSaveForm.setTabOrder(self.file_type_menu, self.cancel_btn)
        FileSaveForm.setTabOrder(self.cancel_btn, self.save_btn)
        FileSaveForm.setTabOrder(self.save_btn, self.expand_checkbox)
Esempio n. 11
0
    def __init__(self, *args, **kwargs):

        # Get field defaults
        fields = kwargs.pop('fields', None)
        fields.setdefault('title', None)
        fields.setdefault('priority', None)
        fields.setdefault('type', None)
        fields.setdefault('description', None)
        fields.setdefault('context', None)
        fields.setdefault('error', None)
        fields.setdefault('message', None)
        fields.setdefault('assignee', None)
        self._exc_info = fields.pop('exc_info', None)

        # Initialize widget
        super(TicketsSubmitter, self).__init__(*args, **kwargs)

        # Create task manager
        self._task_manager = task_manager.BackgroundTaskManager(
            parent=self,
            start_processing=True,
            max_threads=2,
        )
        self._assignee = None
        self._context = None

        # Create widgets
        self.message = QtGui.QLabel()
        self.message.setWordWrap(True)
        self.sep0 = QtGui.QFrame()
        self.sep0.setFrameShape(self.sep0.HLine)
        self.sep0.setFrameShadow(self.sep0.Sunken)
        self.context_selector = context_selector.ContextWidget(self)
        self.context_selector.set_up(self._task_manager)
        self.context_selector.ui.label.setText('Ticket Context')
        self.context_selector.ui.label.hide()
        self.context_selector.context_changed.connect(self._on_context_changed)
        self.sep1 = QtGui.QFrame()
        self.sep1.setFrameShape(self.sep1.HLine)
        self.sep1.setFrameShadow(self.sep1.Sunken)
        self.title = QtGui.QLineEdit(self)
        self.type = QtGui.QComboBox(self)
        self.type.setSizePolicy(
            QtGui.QSizePolicy.Expanding,
            QtGui.QSizePolicy.Expanding,
        )
        self.priority = QtGui.QComboBox(self)
        self.priority.setSizePolicy(
            QtGui.QSizePolicy.Expanding,
            QtGui.QSizePolicy.Expanding,
        )
        self.assignee = shotgun_search_widget.GlobalSearchWidget(self)
        self.assignee.set_searchable_entity_types({
            'HumanUser': [['sg_status_list', 'is', 'act']],
            'Group': [],
        })
        self.assignee.set_bg_task_manager(self._task_manager)
        self.assignee.entity_activated.connect(self._on_assignee_changed)
        self.assignee.completer().entity_activated.disconnect(
            self.assignee.clear)
        self.description = QtGui.QTextEdit(self)
        policy = self.description.sizePolicy()
        policy.setVerticalStretch(1)
        self.description.setSizePolicy(policy)
        self.attachments = Attachments(self)
        self.error = QtGui.QTextEdit(self)
        self.error.setFocusPolicy(QtCore.Qt.NoFocus)
        self.error.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
        policy = self.error.sizePolicy()
        policy.setVerticalStretch(1)
        self.error.setSizePolicy(policy)
        self.submit_button = QtGui.QPushButton('Submit')
        self.submit_button.clicked.connect(self._on_submit)

        # Layout widgets
        footer_layouer = QtGui.QHBoxLayout()
        footer_layouer.addStretch(1)
        footer_layouer.addWidget(self.submit_button)
        self.footer = QtGui.QWidget()
        self.footer.setLayout(footer_layouer)

        self.layout = QtGui.QFormLayout()
        self.layout.addRow(self.message)
        self.layout.addRow(self.sep0)
        self.layout.addRow(self.context_selector)
        self.layout.addRow(self.sep1)
        self.layout.addRow('Title', self.title)
        self.layout.addRow('Type', self.type)
        self.layout.addRow('Priority', self.priority)
        self.layout.addRow('Assignee', self.assignee)
        self.layout.addRow('Attachments', self.attachments)
        self.layout.addRow('Description', self.description)
        self.layout.addRow('Error', self.error)
        self.layout.addRow(self.footer)
        self.setLayout(self.layout)
        if not fields['error']:
            self.hide_field(self.error)
        if not fields['message']:
            self.hide_field(self.message)
            self.hide_field(self.sep0)

        # Initialize field defaults
        QtCore.QTimer.singleShot(
            50,
            partial(self.set_field_defaults, fields),
        )
        self.adjustSize()
    def __init__(self,
                 QTimeFrom=None,
                 QTimeTo=None,
                 QTimeRem=None,
                 QTimeEvery=None,
                 taskList=[]):
        QtGui.QFrame.__init__(self)
        self.color = ["0", "0", "0"]

        self.setObjectName("Box")
        styleButton = " QPushButton { border: none;margin: 0px;padding: 0px;    }"
        styleButton += " QPushButton:hover{border: 1px solid #00BFFF;}"

        buttonLayout = QtGui.QVBoxLayout()
        toTopButton = QtGui.QPushButton()
        toTopButton.setIcon(QtGui.QIcon(QtGui.QPixmap(getIconPath("up.png"))))
        toTopButton.setStyleSheet(styleButton)
        toTopButton.setIconSize(QtCore.QSize(10, 10))
        delButton = QtGui.QPushButton()
        delButton.setIcon(QtGui.QIcon(QtGui.QPixmap(
            getIconPath("delete.png"))))
        delButton.setStyleSheet(styleButton)
        delButton.setIconSize(QtCore.QSize(10, 10))
        toDownButton = QtGui.QPushButton()
        toDownButton.setIcon(
            QtGui.QIcon(QtGui.QPixmap(getIconPath("down.png"))))
        toDownButton.setStyleSheet(styleButton)
        toDownButton.setIconSize(QtCore.QSize(10, 10))

        buttonLayout.addWidget(toTopButton)
        buttonLayout.addWidget(delButton)
        buttonLayout.addWidget(toDownButton)

        toTopButton.clicked.connect(self.onTopClick)
        delButton.clicked.connect(self.onDelClick)
        toDownButton.clicked.connect(self.onBotClick)

        mainLayout = QtGui.QHBoxLayout()

        timeLabelLayout = QtGui.QVBoxLayout()
        timeInLabel = QtGui.QLabel("From")
        timeOutLabel = QtGui.QLabel("To")

        timeLabelLayout.addWidget(timeInLabel)
        timeLabelLayout.addWidget(timeOutLabel)

        timeInOutLayout = QtGui.QVBoxLayout()
        self.timeIn = QtGui.QTimeEdit(QTimeFrom)
        self.timeOut = QtGui.QTimeEdit(QTimeTo)
        timeInOutLayout.addWidget(self.timeIn)
        timeInOutLayout.addWidget(self.timeOut)

        actionLabel = QtGui.QLabel("Remove")
        self.timeAction = QtGui.QTimeEdit(QTimeRem)
        self.timeAction.timeChanged.connect(self.setTimeInColor)

        inactivityLabel1 = QtGui.QLabel("Every")
        self.timeInactivity = QtGui.QTimeEdit(QTimeEvery)
        inactivityLabel2 = QtGui.QLabel("of inactivity")

        taskLabel = QtGui.QLabel("for")
        self.taskCombo = QtGui.QComboBox()
        taskLabel2 = QtGui.QLabel("task(s)")
        self.taskCombo.addItem("all")
        self.taskCombo.addItems(taskList)

        mainLayout.addLayout(timeLabelLayout)

        mainLayout.addLayout(timeInOutLayout)

        mainLayout.addSpacing(20)

        mainLayout.addWidget(actionLabel)
        mainLayout.addWidget(self.timeAction)
        mainLayout.addSpacing(20)

        mainLayout.addWidget(inactivityLabel1)
        mainLayout.addWidget(self.timeInactivity)
        mainLayout.addWidget(inactivityLabel2)
        mainLayout.addSpacing(20)

        mainLayout.addWidget(taskLabel)
        mainLayout.addWidget(self.taskCombo)
        mainLayout.addWidget(taskLabel2)
        mainLayout.addStretch()
        mainLayout.addLayout(buttonLayout)

        self.setLayout(mainLayout)

        self.setTimeInColor(QTimeRem)
    def setupUi(self, StorageMapWidget):
        StorageMapWidget.setObjectName("StorageMapWidget")
        StorageMapWidget.resize(456, 182)
        StorageMapWidget.setAutoFillBackground(True)
        self.gridLayout_2 = QtGui.QGridLayout(StorageMapWidget)
        self.gridLayout_2.setContentsMargins(8, 8, 8, 8)
        self.gridLayout_2.setHorizontalSpacing(12)
        self.gridLayout_2.setVerticalSpacing(6)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.root_desc_layout = QtGui.QHBoxLayout()
        self.root_desc_layout.setSpacing(0)
        self.root_desc_layout.setObjectName("root_desc_layout")
        spacerItem = QtGui.QSpacerItem(12, 20, QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Minimum)
        self.root_desc_layout.addItem(spacerItem)
        self.stroage_root_desc_area = QtGui.QScrollArea(StorageMapWidget)
        self.stroage_root_desc_area.setFocusPolicy(QtCore.Qt.NoFocus)
        self.stroage_root_desc_area.setFrameShape(QtGui.QFrame.NoFrame)
        self.stroage_root_desc_area.setFrameShadow(QtGui.QFrame.Plain)
        self.stroage_root_desc_area.setWidgetResizable(True)
        self.stroage_root_desc_area.setObjectName("stroage_root_desc_area")
        self.storage_root_desc = QtGui.QWidget()
        self.storage_root_desc.setGeometry(QtCore.QRect(0, 0, 157, 104))
        self.storage_root_desc.setObjectName("storage_root_desc")
        self.verticalLayout = QtGui.QVBoxLayout(self.storage_root_desc)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.root_description = QtGui.QLabel(self.storage_root_desc)
        self.root_description.setStyleSheet("font-size: 10px;\n"
                                            "color: rgb(160, 160, 160);")
        self.root_description.setAlignment(QtCore.Qt.AlignLeading
                                           | QtCore.Qt.AlignLeft
                                           | QtCore.Qt.AlignTop)
        self.root_description.setWordWrap(True)
        self.root_description.setObjectName("root_description")
        self.verticalLayout.addWidget(self.root_description)
        self.stroage_root_desc_area.setWidget(self.storage_root_desc)
        self.root_desc_layout.addWidget(self.stroage_root_desc_area)
        self.root_desc_layout.setStretch(0, 1)
        self.gridLayout_2.addLayout(self.root_desc_layout, 1, 0, 1, 1)
        self.storage_layout = QtGui.QHBoxLayout()
        self.storage_layout.setSpacing(6)
        self.storage_layout.setObjectName("storage_layout")
        self.storage_lbl = QtGui.QLabel(StorageMapWidget)
        self.storage_lbl.setObjectName("storage_lbl")
        self.storage_layout.addWidget(self.storage_lbl)
        self.storage_select_combo = QtGui.QComboBox(StorageMapWidget)
        self.storage_select_combo.setFocusPolicy(QtCore.Qt.NoFocus)
        self.storage_select_combo.setAutoFillBackground(True)
        self.storage_select_combo.setSizeAdjustPolicy(
            QtGui.QComboBox.AdjustToContents)
        self.storage_select_combo.setObjectName("storage_select_combo")
        self.storage_layout.addWidget(self.storage_select_combo)
        self.save_storage_btn = QtGui.QToolButton(StorageMapWidget)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.save_storage_btn.setFont(font)
        self.save_storage_btn.setFocusPolicy(QtCore.Qt.NoFocus)
        self.save_storage_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly)
        self.save_storage_btn.setObjectName("save_storage_btn")
        self.storage_layout.addWidget(self.save_storage_btn)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.storage_layout.addItem(spacerItem1)
        self.storage_layout.setStretch(0, 1)
        self.storage_layout.setStretch(1, 1)
        self.storage_layout.setStretch(2, 1)
        self.storage_layout.setStretch(3, 100)
        self.gridLayout_2.addLayout(self.storage_layout, 0, 1, 1, 1)
        self.paths_layout = QtGui.QHBoxLayout()
        self.paths_layout.setSpacing(0)
        self.paths_layout.setObjectName("paths_layout")
        self.path_frame = QtGui.QFrame(StorageMapWidget)
        self.path_frame.setObjectName("path_frame")
        self.gridLayout_3 = QtGui.QGridLayout(self.path_frame)
        self.gridLayout_3.setContentsMargins(6, 6, 6, 6)
        self.gridLayout_3.setSpacing(4)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.windows_path_lbl = QtGui.QLabel(self.path_frame)
        self.windows_path_lbl.setStyleSheet("font-size: 10px;\n"
                                            "color: rgb(120, 120, 120);")
        self.windows_path_lbl.setAlignment(QtCore.Qt.AlignRight
                                           | QtCore.Qt.AlignTrailing
                                           | QtCore.Qt.AlignVCenter)
        self.windows_path_lbl.setObjectName("windows_path_lbl")
        self.gridLayout_3.addWidget(self.windows_path_lbl, 2, 0, 1, 1)
        self.windows_path_layout = QtGui.QHBoxLayout()
        self.windows_path_layout.setSpacing(4)
        self.windows_path_layout.setObjectName("windows_path_layout")
        self.windows_path = QtGui.QLineEdit(self.path_frame)
        self.windows_path.setEnabled(False)
        self.windows_path.setFocusPolicy(QtCore.Qt.NoFocus)
        self.windows_path.setObjectName("windows_path")
        self.windows_path_layout.addWidget(self.windows_path)
        self.windows_path_edit = QtGui.QLineEdit(self.path_frame)
        self.windows_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.windows_path_edit.setObjectName("windows_path_edit")
        self.windows_path_layout.addWidget(self.windows_path_edit)
        self.windows_path_layout.setStretch(0, 1)
        self.windows_path_layout.setStretch(1, 1)
        self.gridLayout_3.addLayout(self.windows_path_layout, 2, 1, 1, 1)
        self.linux_path_layout = QtGui.QHBoxLayout()
        self.linux_path_layout.setSpacing(4)
        self.linux_path_layout.setObjectName("linux_path_layout")
        self.linux_path = QtGui.QLineEdit(self.path_frame)
        self.linux_path.setEnabled(False)
        self.linux_path.setFocusPolicy(QtCore.Qt.NoFocus)
        self.linux_path.setObjectName("linux_path")
        self.linux_path_layout.addWidget(self.linux_path)
        self.linux_path_edit = QtGui.QLineEdit(self.path_frame)
        self.linux_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.linux_path_edit.setObjectName("linux_path_edit")
        self.linux_path_layout.addWidget(self.linux_path_edit)
        self.linux_path_layout.setStretch(0, 1)
        self.linux_path_layout.setStretch(1, 1)
        self.gridLayout_3.addLayout(self.linux_path_layout, 0, 1, 1, 1)
        self.linux_path_lbl = QtGui.QLabel(self.path_frame)
        self.linux_path_lbl.setStyleSheet("font-size: 10px;\n"
                                          "color: rgb(120, 120, 120);")
        self.linux_path_lbl.setAlignment(QtCore.Qt.AlignRight
                                         | QtCore.Qt.AlignTrailing
                                         | QtCore.Qt.AlignVCenter)
        self.linux_path_lbl.setObjectName("linux_path_lbl")
        self.gridLayout_3.addWidget(self.linux_path_lbl, 0, 0, 1, 1)
        self.mac_path_lbl = QtGui.QLabel(self.path_frame)
        self.mac_path_lbl.setStyleSheet("font-size: 10px;\n"
                                        "color: rgb(120, 120, 120);")
        self.mac_path_lbl.setAlignment(QtCore.Qt.AlignRight
                                       | QtCore.Qt.AlignTrailing
                                       | QtCore.Qt.AlignVCenter)
        self.mac_path_lbl.setObjectName("mac_path_lbl")
        self.gridLayout_3.addWidget(self.mac_path_lbl, 1, 0, 1, 1)
        self.mac_path_layout = QtGui.QHBoxLayout()
        self.mac_path_layout.setSpacing(4)
        self.mac_path_layout.setObjectName("mac_path_layout")
        self.mac_path = QtGui.QLineEdit(self.path_frame)
        self.mac_path.setEnabled(False)
        self.mac_path.setFocusPolicy(QtCore.Qt.NoFocus)
        self.mac_path.setObjectName("mac_path")
        self.mac_path_layout.addWidget(self.mac_path)
        self.mac_path_edit = QtGui.QLineEdit(self.path_frame)
        self.mac_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus)
        self.mac_path_edit.setObjectName("mac_path_edit")
        self.mac_path_layout.addWidget(self.mac_path_edit)
        self.mac_path_layout.setStretch(0, 1)
        self.mac_path_layout.setStretch(1, 1)
        self.gridLayout_3.addLayout(self.mac_path_layout, 1, 1, 1, 1)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        spacerItem2 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem2)
        self.linux_path_browse = QtGui.QToolButton(self.path_frame)
        self.linux_path_browse.setFocusPolicy(QtCore.Qt.NoFocus)
        icon = QtGui.QIcon()
        icon.addPixmap(
            QtGui.QPixmap(
                ":/tk-framework-adminui/setup_project/file_browse.png"),
            QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.linux_path_browse.setIcon(icon)
        self.linux_path_browse.setObjectName("linux_path_browse")
        self.horizontalLayout_3.addWidget(self.linux_path_browse)
        self.linux_lock = QtGui.QLabel(self.path_frame)
        self.linux_lock.setMinimumSize(QtCore.QSize(8, 11))
        self.linux_lock.setMaximumSize(QtCore.QSize(8, 11))
        self.linux_lock.setText("")
        self.linux_lock.setPixmap(
            QtGui.QPixmap(
                ":/tk-framework-adminui/setup_project/icon_lock.png"))
        self.linux_lock.setScaledContents(True)
        self.linux_lock.setObjectName("linux_lock")
        self.horizontalLayout_3.addWidget(self.linux_lock)
        spacerItem3 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem3)
        self.gridLayout_3.addLayout(self.horizontalLayout_3, 0, 2, 1, 1)
        self.horizontalLayout_4 = QtGui.QHBoxLayout()
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        spacerItem4 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_4.addItem(spacerItem4)
        self.mac_path_browse = QtGui.QToolButton(self.path_frame)
        self.mac_path_browse.setFocusPolicy(QtCore.Qt.NoFocus)
        self.mac_path_browse.setIcon(icon)
        self.mac_path_browse.setObjectName("mac_path_browse")
        self.horizontalLayout_4.addWidget(self.mac_path_browse)
        self.mac_lock = QtGui.QLabel(self.path_frame)
        self.mac_lock.setMinimumSize(QtCore.QSize(8, 11))
        self.mac_lock.setMaximumSize(QtCore.QSize(8, 11))
        self.mac_lock.setText("")
        self.mac_lock.setPixmap(
            QtGui.QPixmap(
                ":/tk-framework-adminui/setup_project/icon_lock.png"))
        self.mac_lock.setScaledContents(True)
        self.mac_lock.setObjectName("mac_lock")
        self.horizontalLayout_4.addWidget(self.mac_lock)
        spacerItem5 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_4.addItem(spacerItem5)
        self.gridLayout_3.addLayout(self.horizontalLayout_4, 1, 2, 1, 1)
        self.horizontalLayout_5 = QtGui.QHBoxLayout()
        self.horizontalLayout_5.setSpacing(0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        spacerItem6 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_5.addItem(spacerItem6)
        self.windows_path_browse = QtGui.QToolButton(self.path_frame)
        self.windows_path_browse.setFocusPolicy(QtCore.Qt.NoFocus)
        self.windows_path_browse.setIcon(icon)
        self.windows_path_browse.setObjectName("windows_path_browse")
        self.horizontalLayout_5.addWidget(self.windows_path_browse)
        self.windows_lock = QtGui.QLabel(self.path_frame)
        self.windows_lock.setMinimumSize(QtCore.QSize(8, 11))
        self.windows_lock.setMaximumSize(QtCore.QSize(8, 11))
        self.windows_lock.setText("")
        self.windows_lock.setPixmap(
            QtGui.QPixmap(
                ":/tk-framework-adminui/setup_project/icon_lock.png"))
        self.windows_lock.setScaledContents(True)
        self.windows_lock.setObjectName("windows_lock")
        self.horizontalLayout_5.addWidget(self.windows_lock)
        spacerItem7 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_5.addItem(spacerItem7)
        self.gridLayout_3.addLayout(self.horizontalLayout_5, 2, 2, 1, 1)
        self.gridLayout_3.setColumnStretch(0, 1)
        self.gridLayout_3.setColumnStretch(1, 100)
        self.gridLayout_3.setColumnStretch(2, 1)
        self.paths_layout.addWidget(self.path_frame)
        self.gridLayout_2.addLayout(self.paths_layout, 1, 1, 1, 1)
        self.root_name_layout = QtGui.QHBoxLayout()
        self.root_name_layout.setSpacing(4)
        self.root_name_layout.setObjectName("root_name_layout")
        self.root_name = QtGui.QLabel(StorageMapWidget)
        self.root_name.setObjectName("root_name")
        self.root_name_layout.addWidget(self.root_name)
        spacerItem8 = QtGui.QSpacerItem(40, 4, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.root_name_layout.addItem(spacerItem8)
        self.root_name_layout.setStretch(0, 1)
        self.root_name_layout.setStretch(1, 10)
        self.gridLayout_2.addLayout(self.root_name_layout, 0, 0, 1, 1)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.count_lbl = QtGui.QLabel(StorageMapWidget)
        self.count_lbl.setStyleSheet("font-size: 10px;\n"
                                     "color: rgb(120, 120, 120);")
        self.count_lbl.setText("")
        self.count_lbl.setObjectName("count_lbl")
        self.horizontalLayout_2.addWidget(self.count_lbl)
        spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem9)
        self.storage_info = QtGui.QLabel(StorageMapWidget)
        self.storage_info.setStyleSheet("font-size: 10px;\n"
                                        "color: rgb(252, 98, 70);")
        self.storage_info.setText("")
        self.storage_info.setAlignment(QtCore.Qt.AlignRight
                                       | QtCore.Qt.AlignTrailing
                                       | QtCore.Qt.AlignVCenter)
        self.storage_info.setWordWrap(True)
        self.storage_info.setObjectName("storage_info")
        self.horizontalLayout_2.addWidget(self.storage_info)
        self.horizontalLayout_2.setStretch(0, 1)
        self.horizontalLayout_2.setStretch(1, 1)
        self.horizontalLayout_2.setStretch(2, 10)
        self.gridLayout_2.addLayout(self.horizontalLayout_2, 2, 0, 1, 2)
        self.gridLayout_2.setColumnStretch(0, 2)
        self.gridLayout_2.setColumnStretch(1, 3)
        self.gridLayout_2.setRowStretch(0, 1)

        self.retranslateUi(StorageMapWidget)
        QtCore.QMetaObject.connectSlotsByName(StorageMapWidget)
Esempio n. 14
0
    def __init__(self, parent=None):
        """
        Initialize the demo widget.
        """

        super(FilterMenuDemo, self).__init__(parent)

        # Set up the SG source/proxy models and menu.
        self._bg_task_manager = task_manager.BackgroundTaskManager(self, True)
        self._sg_source_model = shotgun_model.SimpleShotgunModel(
            self, self._bg_task_manager)
        self._sg_proxy_model = FilterItemTreeProxyModel()
        self._sg_proxy_model.setSourceModel(self._sg_source_model)

        # Create a 'ShotGrid' specific filter menu since we are using a 'ShotGrid' model.
        self._sg_filter_menu = ShotgunFilterMenu(self)

        # Before initializing the menu, set the filter/proxy model on the menu.
        self._sg_filter_menu.set_filter_model(self._sg_proxy_model)

        # Default filter fields to show on open (these default fields can be saved/restored using
        # QSettings).
        self._sg_filter_menu.set_visible_fields(
            ["Project.name", "Project.end_date", "Project.created_by"])

        # Now the menu is ready to be initialized.
        self._sg_filter_menu.initialize_menu()

        # Set up a basic model with predefined data to demonstrate how the filter menu can be used
        # with non-SG data. The filter menu set up is the same, except that the non SG specific
        # menu class is used, and a non-SG model is being used.
        basic_model_data = [
            ["one"],
            ["two"],
            ["three"],
            [{
                "Field Name 1": "field name 1 value 1",
                "Field Name 2": "field name 2 value 1",
                "Field Name 3": "field name 3 value 1",
            }],
            [{
                "Field Name 1": "field name 1 value 2",
                "Field Name 2": "field name 2 value 2",
                "Field Name 3": "field name 3 value 2",
            }],
            [{
                "Number Field": 1,
                "Bool Field": True,
            }],
            [{
                "Number Field": 2,
                "Bool Field": False,
            }],
            [{
                "Number Field": 2,
                "Bool Field": True,
            }],
        ]
        self._basic_source_model = BasicModel()
        self._basic_source_model.set_internal_data(basic_model_data)
        self._basic_proxy_model = FilterItemProxyModel()
        self._basic_proxy_model.setSourceModel(self._basic_source_model)
        self._basic_filter_menu = FilterMenu(self)
        # Set the model item data roles used to extract the model data for filtering.
        self._basic_filter_menu.set_filter_roles([BasicModel.FILTER_DATA_ROLE])
        self._basic_filter_menu.set_filter_model(self._basic_proxy_model)
        self._basic_filter_menu.set_visible_fields(
            ["{role}.None".format(role=BasicModel.FILTER_DATA_ROLE)])
        self._basic_filter_menu.initialize_menu()

        # Initialize the view to display the SG model data to filter on.
        self._view = QtGui.QTableView(self)
        self._view.horizontalHeader().setStretchLastSection(True)
        self._view.setModel(self._sg_proxy_model)

        # Initialize the filter button to display the SG filter menu.
        self._filter_menu_btn = FilterMenuButton(self)
        self._filter_menu_btn.setMenu(self._sg_filter_menu)

        # Set up a combobox for the user to toggle the SG entity data to filter on.
        # A list of entity type examples to filter on. User may also type in other entity types
        # that do not appear in this list.
        self._entity_types = [
            "Project", "Task", "HumanUser", "Asset", "Version"
        ]
        self._entity_type_combo_box = QtGui.QComboBox(self)
        self._entity_type_combo_box.addItems(self._entity_types)
        self._entity_type_combo_box.setEditable(True)
        self._entity_type_combo_box.setCurrentIndex(0)
        self._entity_type_combo_box.currentIndexChanged.connect(
            self._entity_type_changed)

        # Create and initialize the fields manager, which is used to get the entity fields used
        # for filtering.
        self._fields_manager = shotgun_fields.ShotgunFieldManager(
            self, self._bg_task_manager)
        self._fields_manager.initialized.connect(self._update_ui)

        # Build the UI before initializing the fields manager so that the UI is ready once the
        # fields manager is initialized.
        self._populate_ui()
        self._fields_manager.initialize()
Esempio n. 15
0
    def __init__(self, entity_type, entity_id, parent):
        """
        :param entity_type: Entity type to display tasks for
        :param entity_id: Entity id to display tasks for
        :param parent: The model parent.
        :type parent: :class:`~PySide.QtGui.QObject`
        """
        super(WorkAreaDialog, self).__init__(parent)

        # now load in the UI that was created in the UI designer
        self.ui = Ui_WorkAreaDialog()
        self.ui.setupUi(self)

        # double clicking an item in the list closes the dialog
        self.ui.task_list.itemDoubleClicked.connect(self.accept)

        self._bundle = sgtk.platform.current_bundle()

        # find information about the main item
        main_item = self._bundle.shotgun.find_one(
            entity_type, [["id", "is", entity_id]], ["code", "description"]
        )

        if main_item.get("code"):
            entity_name = "%s %s" % (
                shotgun_globals.get_type_display_name(entity_type),
                main_item.get("code"),
            )
        else:
            entity_name = "Unnamed %s" % shotgun_globals.get_type_display_name(
                entity_type
            )

        # # insert main item
        # self._main_item = QtGui.QListWidgetItem(entity_name, self.ui.task_list)
        # self._main_item.setToolTip(main_item.get("description") or "No description found.")
        # self._main_item.setData(self.ENTITY_TYPE_ROLE, entity_type)
        # self._main_item.setData(self.ENTITY_ID_ROLE, entity_id)
        #
        # # make this selected by default
        # self._main_item.setSelected(True)

        # now get all tasks from Shotgun
        tasks = self._bundle.shotgun.find(
            "Task",
            [["entity", "is", {"type": entity_type, "id": entity_id}]],
            ["content", "step", "sg_status_list", "task_assignees"],
        )

        # insert into list
        for task in tasks:
            task_name = "Task %s on %s" % (task["content"], entity_name)
            # indicate users assigned
            if task["task_assignees"]:
                task_name += " (%s)" % ", ".join(
                    [x["name"] for x in task["task_assignees"]]
                )
            task_item = QtGui.QListWidgetItem(task_name, self.ui.task_list)
            task_item.setData(self.ENTITY_TYPE_ROLE, task["type"])
            task_item.setData(self.ENTITY_ID_ROLE, task["id"])

        # as the last item, create the "create new task widget"
        # embedded into a list widget
        self.new_task = QtGui.QWidget(self)
        self.new_task.setObjectName("new_task")
        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.new_task)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.task_name = QtGui.QLineEdit(self.new_task)
        self.task_name.setObjectName("task_name")
        self.horizontalLayout_2.addWidget(self.task_name)
        self.step_combo = QtGui.QComboBox(self.new_task)
        self.step_combo.setObjectName("step_combo")
        self.horizontalLayout_2.addWidget(self.step_combo)
        self.task_name.setPlaceholderText("Create new task...")

        self._new_item = QtGui.QListWidgetItem(self.ui.task_list)
        self.ui.task_list.setItemWidget(self._new_item, self.new_task)

        # find the steps for this entity type
        steps = self._bundle.shotgun.find(
            "Step", [["entity_type", "is", entity_type]], ["code", "id"]
        )

        # populate combo box
        for step in steps:
            self.step_combo.addItem(step["code"], step["id"])

        # install filter so that when the task name is clicked
        # the list widget is selected
        self.task_name.installEventFilter(self)
    def setupUi(self, NewTaskForm):
        NewTaskForm.setObjectName("NewTaskForm")
        NewTaskForm.resize(380, 270)
        NewTaskForm.setMinimumSize(QtCore.QSize(380, 270))
        self.verticalLayout = QtGui.QVBoxLayout(NewTaskForm)
        self.verticalLayout.setSpacing(4)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setSpacing(20)
        self.verticalLayout_2.setContentsMargins(12, 12, 12, 4)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_3 = QtGui.QLabel(NewTaskForm)
        self.label_3.setWordWrap(True)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_2.addWidget(self.label_3)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setHorizontalSpacing(20)
        self.gridLayout.setVerticalSpacing(6)
        self.gridLayout.setObjectName("gridLayout")
        self.assigned_to = QtGui.QLabel(NewTaskForm)
        self.assigned_to.setObjectName("assigned_to")
        self.gridLayout.addWidget(self.assigned_to, 7, 2, 1, 1)
        self.label_6 = QtGui.QLabel(NewTaskForm)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.gridLayout.addWidget(self.label_6, 7, 0, 1, 1)
        self.label_4 = QtGui.QLabel(NewTaskForm)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 8, 0, 1, 1)
        self.pipeline_step = QtGui.QComboBox(NewTaskForm)
        self.pipeline_step.setObjectName("pipeline_step")
        self.gridLayout.addWidget(self.pipeline_step, 1, 2, 1, 1)
        spacerItem = QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.gridLayout.addItem(spacerItem, 6, 0, 1, 1)
        self.entity = QtGui.QLabel(NewTaskForm)
        self.entity.setObjectName("entity")
        self.gridLayout.addWidget(self.entity, 8, 2, 1, 1)
        self.label = QtGui.QLabel(NewTaskForm)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.label_2 = QtGui.QLabel(NewTaskForm)
        font = QtGui.QFont()
        font.setWeight(75)
        font.setBold(True)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
        self.task_name = QtGui.QLineEdit(NewTaskForm)
        self.task_name.setObjectName("task_name")
        self.gridLayout.addWidget(self.task_name, 0, 2, 1, 1)
        self.gridLayout.setColumnStretch(2, 1)
        self.verticalLayout_2.addLayout(self.gridLayout)
        self.warning = QtGui.QLabel(NewTaskForm)
        self.warning.setText("")
        self.warning.setWordWrap(True)
        self.warning.setObjectName("warning")
        self.verticalLayout_2.addWidget(self.warning)
        self.verticalLayout.addLayout(self.verticalLayout_2)
        spacerItem1 = QtGui.QSpacerItem(20, 11, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem1)
        self.break_line = QtGui.QFrame(NewTaskForm)
        self.break_line.setFrameShape(QtGui.QFrame.HLine)
        self.break_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.break_line.setObjectName("break_line")
        self.verticalLayout.addWidget(self.break_line)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint)
        self.horizontalLayout.setContentsMargins(12, 8, 12, 12)
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem2)
        self.cancel_btn = QtGui.QPushButton(NewTaskForm)
        self.cancel_btn.setObjectName("cancel_btn")
        self.horizontalLayout.addWidget(self.cancel_btn)
        self.create_btn = QtGui.QPushButton(NewTaskForm)
        self.create_btn.setDefault(True)
        self.create_btn.setObjectName("create_btn")
        self.horizontalLayout.addWidget(self.create_btn)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.verticalLayout.setStretch(2, 1)

        self.retranslateUi(NewTaskForm)
        QtCore.QObject.connect(self.cancel_btn, QtCore.SIGNAL("clicked()"), NewTaskForm.close)
        QtCore.QMetaObject.connectSlotsByName(NewTaskForm)
        NewTaskForm.setTabOrder(self.task_name, self.pipeline_step)
        NewTaskForm.setTabOrder(self.pipeline_step, self.create_btn)
        NewTaskForm.setTabOrder(self.create_btn, self.cancel_btn)
Esempio n. 17
0
    def _populate_ui(self):

        # --- query some data

        # query the full site schema from shotgun
        self._schema = self._app.shotgun.schema_read()

        # --- build the ui components

        select_lbl = QtGui.QLabel("Select an Entity type from the list:")

        # populate a combo box with all the entity types (the keys)
        self._entity_type_combo = QtGui.QComboBox(self)
        self._entity_type_combo.addItems(sorted(self._schema.keys()))

        field_lbl = QtGui.QLabel("Select a Field name from the list:")

        self._field_name_combo = QtGui.QComboBox(self)
        self._field_name_combo.setSizeAdjustPolicy(
            QtGui.QComboBox.AdjustToContents)

        # get_type_display_name
        type_display_lbl = MethodLabel("get_type_display_name():")
        self._type_display_lbl = ValueLabel()

        # get_field_display_name
        field_display_lbl = MethodLabel("get_field_display_name():")
        self._field_display_lbl = ValueLabel()

        # get_empty_phrase
        empty_phrase_lbl = MethodLabel("get_empty_phrase():")
        self._empty_phrase_lbl = ValueLabel()

        # get_entity_type_icon
        entity_type_icon = MethodLabel("get_entity_type_icon():")
        self._entity_type_icon = ValueLabel()

        # get_entity_type_icon_url
        entity_type_icon_url = MethodLabel("get_entity_type_icon_url():")
        self._entity_type_icon_url = ValueLabel()

        # get_valid_values
        valid_values_lbl = MethodLabel("get_valid_values():")
        self._valid_values_list = QtGui.QListWidget()
        self._valid_values_list.setMaximumHeight(100)

        # field_is_editable
        field_is_editable_lbl = MethodLabel("field_is_editable():")
        self._field_is_editable_lbl = ValueLabel()

        # field_is_visible
        field_is_visible_lbl = MethodLabel("field_is_visible():")
        self._field_is_visible_lbl = ValueLabel()

        # --- layout the components

        row = 0

        layout = QtGui.QGridLayout(self)
        layout.addWidget(select_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._entity_type_combo, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(type_display_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._type_display_lbl, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(entity_type_icon, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._entity_type_icon, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(entity_type_icon_url, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._entity_type_icon_url, row, 1,
                         QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(field_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._field_name_combo, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(field_display_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._field_display_lbl, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(empty_phrase_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._empty_phrase_lbl, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(valid_values_lbl, row, 0,
                         QtCore.Qt.AlignRight | QtCore.Qt.AlignTop)
        layout.addWidget(self._valid_values_list, row, 1, QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(field_is_editable_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._field_is_editable_lbl, row, 1,
                         QtCore.Qt.AlignLeft)
        row += 1

        layout.addWidget(field_is_visible_lbl, row, 0, QtCore.Qt.AlignRight)
        layout.addWidget(self._field_is_visible_lbl, row, 1,
                         QtCore.Qt.AlignLeft)
        row += 1

        # ---- connect some signals

        # handle entity type changes
        self._entity_type_combo.activated[str].connect(
            self._on_entity_type_combo_activated)

        # handle field name changes
        self._field_name_combo.activated[str].connect(
            self._on_field_name_combo_activated)

        # ---- populate the defaults

        # entity
        entity_type_index = self._entity_type_combo.findText(
            DEFAULT_ENTITY_TYPE)
        if entity_type_index > -1:
            self._entity_type_combo.setCurrentIndex(entity_type_index)
            self._on_entity_type_combo_activated(DEFAULT_ENTITY_TYPE)

        # field
        field_name_index = self._field_name_combo.findText(DEFAULT_FIELD_NAME)
        if field_name_index > -1:
            self._field_name_combo.setCurrentIndex(field_name_index)
            self._on_field_name_combo_activated(DEFAULT_FIELD_NAME)
Esempio n. 18
0
    def _build_tag_selector_widget(self, items, properties):
        """
        Returns a QT widget which contains the tag.
        """
        fields = ['code']
        filter = [['entity_type', 'is', 'Shot']]
        templates = [
            t['code'] for t in self.app.shotgun.find(
                'TaskTemplate', filter, fields=fields)
        ]

        schema = self.app.shotgun.schema_field_read('Shot', 'sg_status_list')
        statuses = schema['sg_status_list']['properties']['valid_values'][
            'value']

        values = [statuses, templates]
        labels = ['Shotgun Shot Status', 'Shotgun Task Template for Shots']
        keys = ['sg_status_hiero_tags', 'task_template_map']

        # build a map of tag value pairs from the properties
        propertyDicts = [dict(properties[key]) for key in keys]
        propertyTags = list(
            set(itertools.chain(*[d.keys() for d in propertyDicts])))
        map = {}
        for tag in propertyTags:
            map[tag] = [d.get(tag, None) for d in propertyDicts]

        # add in blank entries for the current tags
        tags = self._get_tags(items)
        for tag in tags:
            map.setdefault(tag.name(), [None] * len(keys))

        # keep a known order
        names = sorted(map.keys())

        # setup the table
        tagTable = QtGui.QTableWidget(len(names), len(labels) + 1)
        tagTable.setMinimumHeight(150)
        tagTable.setHorizontalHeaderLabels(['Hiero Tags'] + labels)
        tagTable.setAlternatingRowColors(True)
        tagTable.setSelectionMode(tagTable.NoSelection)
        tagTable.setShowGrid(False)
        tagTable.verticalHeader().hide()
        tagTable.horizontalHeader().setStretchLastSection(True)
        tagTable.setSizePolicy(QtGui.QSizePolicy.Expanding,
                               QtGui.QSizePolicy.Preferred)

        # on change rebuild the properties
        def changed(index):
            for (row, name) in enumerate(names):
                for (col, key) in enumerate(keys):
                    combo = tagTable.cellWidget(row, col + 1)

                    # if no tag mapped to a name
                    if combo is None:
                        continue

                    # otherwise grab the text and keep it in the properties
                    select = combo.currentText()
                    propertyDicts[col][name] = (select and str(select) or None)
                    properties[key] = [
                        (k, v) for (k, v) in propertyDicts[col].items() if v
                    ]

        # and build the table
        tagsByName = self._get_all_tags_by_name()
        for (row, name) in enumerate(names):
            tag = tagsByName.get(name, None)
            if tag is None:
                continue

            # build item for the tag
            item = QtGui.QTableWidgetItem(name)
            item.setIcon(QtGui.QIcon(tag.icon()))
            tagTable.setItem(row, 0, item)

            # build combo boxes for each set of values
            for (col, vals) in enumerate(values):
                combo = QtGui.QComboBox()
                combo.addItem(None)
                for (i, value) in enumerate(vals):
                    combo.addItem(value)
                    # see if the current item is the one in the properties
                    if map[name][col] == value:
                        combo.setCurrentIndex(i + 1)
                combo.currentIndexChanged[int].connect(changed)
                # adjust sizes to avoid clipping or scrolling
                width = combo.minimumSizeHint().width()
                combo.setMinimumWidth(width)
                combo.setSizeAdjustPolicy(combo.AdjustToContents)
                tagTable.setCellWidget(row, col + 1, combo)

        tagTable.resizeRowsToContents()
        tagTable.resizeColumnsToContents()

        width = sum([tagTable.columnWidth(i)
                     for i in xrange(len(keys) + 1)]) + 60
        tagTable.setMinimumWidth(width)

        return tagTable
    def _setup_ui(self):
        self.setWindowTitle('Create Output')
        self.setFixedSize(465, 125)

        output_group = QtGui.QGroupBox('Create Output')

        # Name and type layout
        type_layout = QtGui.QHBoxLayout()

        type_label = QtGui.QLabel('Type:')

        self._type_combo = QtGui.QComboBox()
        for out_type in self._types:
            self._type_combo.addItem(out_type)

        self._name_line = QtGui.QLineEdit()
        self._name_line.setPlaceholderText('Cache Name')
        self._name_line.returnPressed.connect(self._on_btn_press)

        cache_name = QtGui.QLabel('Cache Name:')

        type_layout.addWidget(type_label)
        type_layout.addWidget(self._type_combo)
        type_layout.addWidget(cache_name)
        type_layout.addWidget(self._name_line)

        # toggles layout
        range_label = QtGui.QLabel('Range:')

        self._range_combo = QtGui.QComboBox()
        self._range_combo.addItem('Single')
        self._range_combo.addItem('Multiple')
        self._range_combo.setCurrentIndex(1)

        range_layout = QtGui.QHBoxLayout()
        range_layout.addWidget(range_label)
        range_layout.addWidget(self._range_combo)

        self._sim_toggle = QtGui.QCheckBox('Simulation')
        self._version_toggle = QtGui.QCheckBox('Auto Version')
        self._version_toggle.setChecked(True)
        self._publish_toggle = QtGui.QCheckBox('Auto Publish')

        toggle_layout = QtGui.QHBoxLayout()

        toggle_layout.addLayout(range_layout)
        toggle_layout.addWidget(self._sim_toggle)
        toggle_layout.addWidget(self._version_toggle)
        toggle_layout.addWidget(self._publish_toggle)

        # Add layout
        changedgroup_layout = QtGui.QVBoxLayout(output_group)
        changedgroup_layout.addLayout(type_layout)
        changedgroup_layout.addLayout(toggle_layout)

        # Create _button
        self._button = QtGui.QPushButton('Create outputs')
        self._button.clicked.connect(self._on_btn_press)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(output_group)
        layout.addWidget(self._button)
        self.setLayout(layout)
Esempio n. 20
0
    def __init__(self):
        """
        Initialize the main demo widget.
        """

        self._current_demo_info = None

        super(DemoWidget, self).__init__()

        # easy access to the app instance
        self.app = sgtk.platform.current_bundle()

        # the default class/info to use at startup
        self._default_demo_info = None

        # quick lookup of demo info as selection changes
        self._demo_info_lookup = {}

        # quick lookup of stacked widget positions via demo names
        self._demo_stack_lookup = {}

        # quick lookup of previously created file models via demo names
        self._demo_file_model_lookup = {}

        # keep a reference to all demo widgets created. this will prevent issues
        # with garbage collection
        self.__all_demos = []

        # construct the model based on the hierarchy defined in the
        # demos module
        self._demo_model = self._get_demo_model()

        # build a tree view to show all the demos
        self._demo_tree_view = QtGui.QTreeView()
        self._demo_tree_view.setModel(self._demo_model)
        self._demo_tree_view.setObjectName("demo_tree_view")
        self._demo_tree_view.setIndentation(16)
        self._demo_tree_view.header().hide()
        self._demo_tree_view.expandAll()
        self._demo_tree_view.setRootIsDecorated(False)
        self._demo_tree_view.setFocusPolicy(QtCore.Qt.NoFocus)
        self._demo_tree_view.setMinimumWidth(250)

        # shows the name of the demo
        self._demo_name = QtGui.QLabel(self)
        self._demo_name.setObjectName("demo_name")
        self._demo_name.setMinimumHeight(30)

        # shows the description of the demo
        self._demo_desc = QtGui.QLabel(self)
        self._demo_desc.setObjectName("demo_desc")
        self._demo_desc.setWordWrap(True)
        self._demo_desc.setOpenExternalLinks(True)

        # holds a stack of all demo widgets
        self._demo_widget_tab = QtGui.QStackedWidget()

        # used to display the code associated with the demos
        self._demo_code_edit = QtGui.QPlainTextEdit(self)
        self._demo_code_edit.setObjectName("demo_code_edit")
        self._demo_code_edit.setReadOnly(True)
        self._demo_code_edit.setWordWrapMode(QtGui.QTextOption.NoWrap)

        # a syntax highlighter for the code editor
        self._syntax_highlighter = PythonSyntaxHighlighter(
            self._demo_code_edit.document(), self._demo_code_edit.palette()
        )
        self._syntax_highlighter.setDocument(self._demo_code_edit.document())

        # combobox to display all python files in a demo
        self._demo_file_combo = QtGui.QComboBox()
        self._demo_file_combo.setObjectName("demo_file_combo")

        # layout the code tab
        demo_code_layout = QtGui.QVBoxLayout()
        demo_code_layout.addWidget(self._demo_code_edit)
        demo_code_layout.addWidget(self._demo_file_combo)
        demo_code_layout.setAlignment(self._demo_file_combo, QtCore.Qt.AlignRight)

        # a single widget to wrap the code layout
        demo_code_widget = QtGui.QWidget()
        demo_code_widget.setLayout(demo_code_layout)

        # tab widget displays the current demo
        self._demo_tabs = QtGui.QTabWidget(self)
        self._demo_tabs.setTabPosition(QtGui.QTabWidget.South)
        self._demo_tabs.setMinimumWidth(625)

        # add the widgets as tabs
        self._demo_tabs.addTab(self._demo_widget_tab, "Interactive Demo")
        self._demo_tabs.addTab(demo_code_widget, "Code")

        # an overlay of the tabs for displaying errors, etc.
        self._overlay = overlay.ShotgunOverlayWidget(self._demo_tabs)

        demo_header_layout = QtGui.QHBoxLayout()
        demo_header_layout.addWidget(self._demo_name)
        demo_header_layout.addStretch()

        # layout the demo display widgets
        demo_layout = QtGui.QVBoxLayout()
        demo_layout.addLayout(demo_header_layout)
        demo_layout.addWidget(self._demo_desc)
        demo_layout.addWidget(self._demo_tabs)

        # wrapper widget for the display layout
        demo_stack = QtGui.QWidget()
        demo_stack.setLayout(demo_layout)

        # add the primary wrapper widgets to this splitter
        self.addWidget(self._demo_tree_view)
        self.addWidget(demo_stack)

        # make the demo side stretch 3x as fast as the demo tree view
        self.setStretchFactor(1, 3)

        # grab the selection model from the tree view and connect it up
        # to handle a new demo being selected
        # NOTE: this has to be done in 2 calls to avoid segfault!
        selection_model = self._demo_tree_view.selectionModel()
        selection_model.selectionChanged.connect(self._on_selection_changed)

        # handle the user selecting a new file to display in the code widget
        self._demo_file_combo.activated[str].connect(self._on_file_selected)

        # set the default demo
        self._set_default_demo()

        QtCore.QCoreApplication.instance().aboutToQuit.connect(self.destroy)
    def __init__(self, dataType, data, noteData=None, parent=None):
        super(noteContentLayout, self).__init__(parent)

        self.data = data
        self.noteData = noteData  # is a list

        layout = QtGui.QVBoxLayout()
        self.setLayout(layout)

        layoutContainer = QtGui.QHBoxLayout()
        titleGridLayout = QtGui.QGridLayout()
        layoutContainer.addLayout(titleGridLayout)

        #titleGridLayout.setColumnStretch(2,40)

        # author
        authorTxt = "unknown"

        self.attachmentLayout = QtGui.QHBoxLayout()

        self.Qt_noteContent = my_textEdit("",
                                          editable=bool(self.data),
                                          parent=self)  # QtGui.QTextEdit( )

        if self.data:

            try:
                self.Qt_noteContent.setPlainText(
                    QtCore.QString.fromUtf8(self.data["content"]))
            except:
                self.Qt_noteContent.setPlainText(self.data["content"])

            if dataType == "Reply":
                titleGridLayout.setColumnStretch(0, 0)
                titleGridLayout.setColumnStretch(1, 1)

                authorHtmlTxt = "<font size=2 color=#BBBBBB>Author : " + self.data[
                    "user"]['name'] + "</font><br>"
                dateHtmlTxt = "<font size=2 color=#BBBBBB>Date : " + self.data[
                    "created_at"].strftime('%Y-%m-%d %H:%M:%S') + "</font>"
                labelText = QtGui.QLabel(authorHtmlTxt + dateHtmlTxt,
                                         parent=self)

                titleGridLayout.setHorizontalSpacing(20)
                titleGridLayout.addWidget(labelText, 0, 0, QtCore.Qt.AlignTop)
                titleGridLayout.addWidget(self.Qt_noteContent, 0, 1)
                layout.addLayout(layoutContainer)
                layout.addLayout(self.attachmentLayout)
                titleGridLayout.setContentsMargins(0, 0, 0, 0)
                layout.setContentsMargins(0, 0, 0, 0)

            else:
                authorHtmlTxt = "<font color=#BBBBBB>Author : " + self.data[
                    "user"]['name'] + "</font><br>"
                dateHtmlTxt = "<font color=#BBBBBB>Date : <b>" + self.data[
                    "created_at"].strftime(
                        '%Y-%m-%d %H:%M:%S') + "</font></b><br>"
                labelText = QtGui.QLabel(authorHtmlTxt + dateHtmlTxt,
                                         parent=self)

                titleGridLayout.addWidget(labelText, 0, 0, QtCore.Qt.AlignTop)

                layout.addLayout(layoutContainer)
                layout.addWidget(self.Qt_noteContent)
                layout.addLayout(self.attachmentLayout)

                self.Qt_noteContent.setStyleSheet(
                    "QTextEdit { color : #F0F0F0 ; }")
                titleGridLayout.setContentsMargins(0, 0, 0, 0)
                layout.setContentsMargins(0, 0, 0, 0)

        if not self.data:
            if dataType == "Reply":
                if len(self.noteData) > 1:
                    self.Qt_noteContent.setText(
                        u"Type a reply for all the selected notes")
                else:
                    self.Qt_noteContent.setText(u"Type a reply")
                    self.Qt_noteContent.selectAll()
                    self.Qt_noteContent.SIGNAL_return.connect(
                        self.replyNoteSlot)

            elif dataType == "Note":
                self.Qt_noteContent.setText(u"Type a note")
                self.Qt_noteContent.setFocus()
                self.Qt_noteContent.selectAll()
                self.Qt_noteContent.SIGNAL_return.connect(self.createNoteSlot)
            layout.setContentsMargins(0, 0, 0, 0)

            layout.addLayout(layoutContainer)
            layout.addWidget(self.Qt_noteContent)
            layout.addLayout(self.attachmentLayout)

        if self.data:
            for attachementFile in self.data["queriedAttachement"]:
                labelImage = PicButton(attachementFile["fileOnDisk"],
                                       overImageName="magnifier.png",
                                       parent=self)

                labelImage.SIGNAL_imageClicked.connect(self.showImageDisplay)

                self.attachmentLayout.addWidget(labelImage)
        else:
            attachButton = QtGui.QPushButton(parent=self)
            attachmentPixmap = QtGui.QPixmap(
                getRessources("note_attachment.png"))
            attachementScaled = attachmentPixmap.scaled(
                32, 32, QtCore.Qt.KeepAspectRatio)
            attachButton.setIcon(QtGui.QIcon(attachementScaled))
            attachButton.clicked.connect(self.addAttachment)

            screenShotButton = QtGui.QPushButton(parent=self)
            attachmentPixmap = QtGui.QPixmap(
                getRessources("note_screenShot.png"))
            attachementScaled = attachmentPixmap.scaled(
                32, 32, QtCore.Qt.KeepAspectRatio)
            screenShotButton.setIcon(QtGui.QIcon(attachementScaled))
            screenShotButton.clicked.connect(self.addScreenShot)

            self.attachmentLayout.addWidget(screenShotButton)
            self.attachmentLayout.addWidget(attachButton)

            replyButton = None
            if dataType == "Reply":
                replyButton = QtGui.QPushButton("Reply", parent=self)
                replyButton.clicked.connect(self.replyNoteSlot)
                #replyButton.setStyleSheet("QPushButton {border: 1px solid #199909;border-radius: 6px;background-color: #116a06;}")
                replyButton.setMinimumHeight(18)
                replyButton.setStyleSheet(
                    "QPushButton {border: 1px solid #39B3FF;border-radius: 6px;background-color: #474747;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.67, stop: 0 #6B6B6B, stop: 1  #474747);}"
                )

                self.statusLabel = QtGui.QComboBox(parent=self)
                self.statusLabel.addItem(
                    QtGui.QIcon(getRessources("status_opn.png")), "Open")
                self.statusLabel.addItem(
                    QtGui.QIcon(getRessources("status_clsd.png")), "closed")
                self.statusLabel.addItem(
                    QtGui.QIcon(getRessources("status_ip.png")), "In progress")

                if self.noteData[0]["sg_status_list"] == "opn":
                    self.statusLabel.setCurrentIndex(0)
                elif self.noteData[0]["sg_status_list"] == "clsd":
                    self.statusLabel.setCurrentIndex(1)
                elif self.noteData[0]["sg_status_list"] == "ip":
                    self.statusLabel.setCurrentIndex(2)

                self.statusLabel.setMaximumWidth(100)
                #self.connect(self.statusLabel, QtCore.SIGNAL("currentIndexChanged(int)"),  self.updateNodeDataStatus )
                self.statusLabel.currentIndexChanged.connect(
                    self.updateNodeDataStatus)

                layout.addWidget(self.statusLabel)
                layout.addWidget(replyButton)

            elif dataType == "Note":
                #self.linkFilterWidget = comboFilterWidget2()

                replyButton = QtGui.QPushButton("Create Note", parent=self)
                replyButton.setMinimumHeight(18)
                replyButton.setStyleSheet(
                    "QPushButton {border: 1px solid #39B3FF;border-radius: 6px;background-color: #3990CA;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.67, stop: 0 #3990CA, stop: 1  #215272);}"
                )

                replyButton.clicked.connect(self.createNoteSlot)

                layout.addWidget(replyButton)

        self.attachmentLayout.addStretch()

        style = "background-color: red;"
Esempio n. 22
0
    def initUI(self):
        # --- initiate ui components
        btn_publish_files = QtGui.QPushButton('Publish Files')

        lbl_folder = QtGui.QLabel('Folder:')
        self._lbl_display_folder = QtGui.QLineEdit('nothing selected')
        self._lbl_display_folder.setReadOnly(True)
        btn_browse_files = QtGui.QPushButton('...')

        btn_create_assets = QtGui.QPushButton('Create Assets')
        btn_create_sheet = QtGui.QPushButton('Create Sheet')

        lbl_asset_type = QtGui.QLabel('Type:')
        self._combo_entity_type = QtGui.QComboBox(self)

        result = sg.schema_field_read("Asset", "sg_asset_type")
        self._combo_entity_type.addItems(result['sg_asset_type']['properties']['valid_values']['value'])

        lbl_parent_assets = QtGui.QLabel('Parent Asset:')
        self._txt_parent_assets = QtGui.QLineEdit('Assets')

        lbl_asset_tags = QtGui.QLabel('Tags:')
        self._txt_asset_tag = QtGui.QLineEdit('Tags')
        completer = Completer_new()
        completer.setCompletionMode(QtGui.QCompleter.PopupCompletion)
        completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        self._txt_asset_tag.setCompleter(completer)

        model = QtGui.QStringListModel()
        completer.setModel(model)
        filters = [['id', 'greater_than', 0]]
        fields = ['name']
        temp_tag_list = sg.find('Tag', filters, fields)
        tag_list = []
        for t in temp_tag_list:
            tag_list.append(t['name'])
        model.setStringList(tag_list)

        # --- build the ui components
        layout = QtGui.QGridLayout(self)
        layout.setHorizontalSpacing(5)
        layout.setVerticalSpacing(6)

        # addWidget (self, QWidget, int row, int column, int rowSpan, int columnSpan, Qt.Alignment alignment = 0)
        layout.addWidget(lbl_folder, 0, 0)
        layout.addWidget(self._lbl_display_folder, 0, 1, 1, 4)
        layout.addWidget(btn_browse_files, 0, 5)

        row = 1
        layout.addWidget(btn_create_sheet, row, 1)
        layout.addWidget(btn_create_assets, row, 2)

        row += 1
        layout.addWidget(lbl_asset_type, row, 0)
        # layout.addWidget(self.txt_type, row, 1, 1, 5)
        layout.addWidget(self._combo_entity_type, row, 1, 1, 5)

        row += 1
        layout.addWidget(lbl_parent_assets, row, 0)
        layout.addWidget(self._txt_parent_assets, row, 1, 1, 5)

        row += 1
        layout.addWidget(lbl_asset_tags, row, 0)
        layout.addWidget(self._txt_asset_tag, row, 1, 1, 5)

        row += 1
        layout.addWidget(btn_publish_files)

        logging_widget = QtGui.QSplitter()
        log_handler = QPlainTextEditLogger(logging_widget)
        logger.addHandler(log_handler)
        layout.addWidget(logging_widget, row, 1, 5, 5)
        logger.info('tk-legend-shotgun-publish running')

        # ---- connect some signals
        btn_publish_files.clicked.connect(self._publish_files)
        btn_browse_files.clicked.connect(self._browse_files)
        btn_create_sheet.clicked.connect(self._create_sheet)
        btn_create_assets.clicked.connect(self._create_assets)

        self.setGeometry(10, 20, 500, 100)
        self.setWindowTitle('Legend Shotgun Publish')  # Remember this to remind yourself not to mess up live scripts
        self.setLayout(layout)
        self.show()
Esempio n. 23
0
    def __init__(self, parent=None):
        super(Client, self).__init__(parent)

        hostLabel = QtGui.QLabel("&Server name:")
        portLabel = QtGui.QLabel("S&erver port:")
        methodLabel = QtGui.QLabel("Method:")
        paramsLabel = QtGui.QLabel("Params:")

        self.hostLineEdit = QtGui.QLineEdit("127.0.0.1")
        self.portLineEdit = QtGui.QLineEdit("55893")
        self.portLineEdit.setValidator(QtGui.QIntValidator(1, 65535, self))
        self.paramsLineEdit = QtGui.QLineEdit("{}")
        self.methodCombo = QtGui.QComboBox()
        self.resultsTextEdit = QtGui.QTextEdit("")

        hostLabel.setBuddy(self.hostLineEdit)
        portLabel.setBuddy(self.portLineEdit)
        paramsLabel.setBuddy(self.paramsLineEdit)
        methodLabel.setBuddy(self.methodCombo)

        self.statusLabel = QtGui.QLabel("Ready.")

        self.sendCommandButton = QtGui.QPushButton("Send")
        self.sendCommandButton.setDefault(True)
        self.sendCommandButton.setEnabled(False)

        quitButton = QtGui.QPushButton("Quit")
        self.connectButton = QtGui.QPushButton("Connect")

        buttonBox = QtGui.QDialogButtonBox()

        buttonBox.addButton(
            self.connectButton, QtGui.QDialogButtonBox.ActionRole
        )
        buttonBox.addButton(
            self.sendCommandButton, QtGui.QDialogButtonBox.ActionRole
        )
        buttonBox.addButton(quitButton, QtGui.QDialogButtonBox.RejectRole)

        self.hostLineEdit.textChanged.connect(self.enablesendCommandButton)
        self.portLineEdit.textChanged.connect(self.enablesendCommandButton)
        self.sendCommandButton.clicked.connect(self.sendCommand)
        self.connectButton.clicked.connect(self.connect_to_host)
        quitButton.clicked.connect(self.close)

        mainLayout = QtGui.QGridLayout()
        mainLayout.addWidget(hostLabel, 0, 0)
        mainLayout.addWidget(self.hostLineEdit, 0, 1)

        mainLayout.addWidget(portLabel, 1, 0)
        mainLayout.addWidget(self.portLineEdit, 1, 1)

        mainLayout.addWidget(methodLabel, 2, 0)
        mainLayout.addWidget(self.methodCombo, 2, 1)

        mainLayout.addWidget(paramsLabel, 3, 0)
        mainLayout.addWidget(self.paramsLineEdit, 3, 1)

        mainLayout.addWidget(self.resultsTextEdit, 4, 1)

        mainLayout.addWidget(self.statusLabel, 5, 0, 1, 2)
        mainLayout.addWidget(buttonBox, 6, 0, 1, 2)
        self.setLayout(mainLayout)

        self.setWindowTitle("Toon Boom Harmony Engine Client")
        self.portLineEdit.setFocus()

        self.client = QTcpSocketClient(parent=self)