Exemple #1
0
    def __init__(self, parent, qtwidgets, description_widget=None):
        QtGui.QWidget.__init__(self, parent)

        layout = QtGui.QVBoxLayout(self)

        # Label
        self.label = QtGui.QLabel(self)
        self.label.setText("Export Name")
        layout.addWidget(self.label)

        # Line edit
        self.editLine = QtGui.QLineEdit(self)

        # Layout
        layout.addWidget(self.editLine)

        self.setLayout(layout)

        if description_widget:
            layout.addWidget(description_widget)

        elided_label = qtwidgets.import_module("elided_label")
        long_label = elided_label.ElidedLabel(self)
        long_label.setText(
            "ASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDFASDF"
        )
        layout.addWidget(long_label)
 def createItem(self, asset_name, path, current_name):
     listWidgetItem = QtGui.QListWidgetItem()
     listWidgetItem.setSizeHint(QtCore.QSize(200, 80))
     itemWidget = QtGui.QWidget()
     vLayout = QtGui.QVBoxLayout(itemWidget)
     vLayout.setSpacing(3)
     hLayout = QtGui.QHBoxLayout()
     hLayout.setSpacing(25)
     asset_name_label = QtGui.QLabel()
     asset_name_label.setText(asset_name)
     asset_name_label.setObjectName('asset_name')
     asset_name_label.setTextInteractionFlags(
         QtCore.Qt.TextSelectableByMouse)
     asset_name_label.setMinimumWidth(260)
     current_name_le = QtGui.QLineEdit()
     current_name_le.setFixedHeight(23)
     current_name_le.setText(current_name)
     path_label = QtGui.QLabel()
     path_label.setText(path)
     path_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
     hLayout.addWidget(asset_name_label)
     hLayout.addWidget(current_name_le)
     vLayout.addLayout(hLayout)
     vLayout.addWidget(path_label)
     self.listwidget.addItem(listWidgetItem)
     self.listwidget.setItemWidget(listWidgetItem, itemWidget)
     widgets = {
         'asset_name': asset_name_label,
         'current_name': current_name_le,
         'path': path_label
     }
     listWidgetItem.setData(QtCore.Qt.UserRole, widgets)
     current_name_le.textChanged.connect(
         lambda *args: self._update_path(listWidgetItem))
    def __init__(self, parent, description_widget=None):
        QtGui.QWidget.__init__(self, parent)

        layout = QtGui.QVBoxLayout(self)

        ## Export Name Label
        self.export_label = QtGui.QLabel(self)
        self.export_label.setText("Export Name")
        layout.addWidget(self.export_label)

        ## Line edit
        self.editLine = QtGui.QLineEdit(self)
        layout.addWidget(self.editLine)

        ## Version Label
        self.version_label = QtGui.QLabel(self)
        self.version_label.setText("Publish Version")
        layout.addWidget(self.version_label)

        self.version_number = QtGui.QSpinBox(self)
        self.version_number.setMinimum(0)
        self.version_number.setMaximum(100)
        layout.addWidget(self.version_number)

        self.setLayout(layout)
Exemple #4
0
    def update_extra_tokens_widgets(self, template, missing_keys):
        missing_keys_dict = {}

        for key in missing_keys:
            if key in template.keys:
                keyObj = template.keys[key]
                missing_keys_dict[key] = keyObj

        parent = self.ui.extraTokensWidget
        parent_lay = self.ui.extraTokensWidgetLayout

        self.clear_extra_token_widgets()

        keys = missing_keys_dict.keys()
        keys.sort()

        row_cnt = 0

        if not keys:
            label = QtGui.QLabel('No Extra Keys found...', parent=parent)
            parent_lay.addWidget(label, row_cnt, 0)

        else:
            for key in keys:
                label = QtGui.QLabel(str(key), parent=parent)
                lineedit = QtGui.QLineEdit(str(missing_keys_dict[key].default), parent=parent)
                lineedit.data = missing_keys_dict[key]   # Not ideal to store to object, but QLabel has no data storage method

                lineedit.editingFinished.connect(self.update_template_file_path)

                parent_lay.addWidget(label, row_cnt, 0)
                parent_lay.addWidget(lineedit, row_cnt, 1)

                row_cnt += 1
Exemple #5
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)
Exemple #6
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 setupUi(self, CreateStorageDialog):
        CreateStorageDialog.setObjectName("CreateStorageDialog")
        CreateStorageDialog.resize(285, 94)
        CreateStorageDialog.setAutoFillBackground(True)
        self.verticalLayout_2 = QtGui.QVBoxLayout(CreateStorageDialog)
        self.verticalLayout_2.setSpacing(4)
        self.verticalLayout_2.setContentsMargins(12, 12, 12, 12)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.main_widget = QtGui.QWidget(CreateStorageDialog)
        self.main_widget.setObjectName("main_widget")
        self.verticalLayout = QtGui.QVBoxLayout(self.main_widget)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.storage_name_layout = QtGui.QHBoxLayout()
        self.storage_name_layout.setSpacing(4)
        self.storage_name_layout.setObjectName("storage_name_layout")
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.storage_name_layout.addItem(spacerItem)
        self.storage_name_lbl = QtGui.QLabel(self.main_widget)
        self.storage_name_lbl.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.storage_name_lbl.setObjectName("storage_name_lbl")
        self.storage_name_layout.addWidget(self.storage_name_lbl)
        self.storage_name = QtGui.QLineEdit(self.main_widget)
        self.storage_name.setObjectName("storage_name")
        self.storage_name_layout.addWidget(self.storage_name)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.storage_name_layout.addItem(spacerItem1)
        self.storage_name_layout.setStretch(0, 5)
        self.storage_name_layout.setStretch(2, 15)
        self.verticalLayout.addLayout(self.storage_name_layout)
        self.info = QtGui.QLabel(self.main_widget)
        font = QtGui.QFont()
        font.setPointSize(10)
        self.info.setFont(font)
        self.info.setText("")
        self.info.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.info.setWordWrap(True)
        self.info.setObjectName("info")
        self.verticalLayout.addWidget(self.info)
        self.verticalLayout.setStretch(0, 1)
        self.verticalLayout.setStretch(1, 10)
        self.verticalLayout_2.addWidget(self.main_widget)
        self.button_box = QtGui.QDialogButtonBox(CreateStorageDialog)
        self.button_box.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.button_box.setObjectName("button_box")
        self.verticalLayout_2.addWidget(self.button_box)

        self.retranslateUi(CreateStorageDialog)
        QtCore.QObject.connect(self.button_box, QtCore.SIGNAL("accepted()"), CreateStorageDialog.accept)
        QtCore.QObject.connect(self.button_box, QtCore.SIGNAL("rejected()"), CreateStorageDialog.reject)
        QtCore.QMetaObject.connectSlotsByName(CreateStorageDialog)
        CreateStorageDialog.setTabOrder(self.storage_name, self.button_box)
Exemple #8
0
    def __init__(self, parent):
        QtGui.QWidget.__init__(self, parent)

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

        self.edit = WidgetHandler(layout, "Edit", QtGui.QLineEdit(self))
        self.number = WidgetHandler(layout, "Number", QtGui.QSpinBox(self))
        self.check_box = CheckboxHandler(layout, "Boolean")

        self.edit.editor.setFocus()
        self.number.editor.setMinimum(0)
        self.number.editor.setMaximum(100)
Exemple #9
0
    def __init__(self, parent=None):
        super(Console, self).__init__(parent)

        self.setWindowTitle('Shotgun Desktop Console')
        self.setWindowIcon(QtGui.QIcon(":/tk-desktop/default_systray_icon.png"))

        self.__logs = QtGui.QPlainTextEdit()
        self.__find = QtGui.QLineEdit()
        self.__find_label = QtGui.QLabel()
        layout = QtGui.QVBoxLayout()
        find_layout = QtGui.QHBoxLayout()
        layout.addWidget(self.__logs)
        layout.addLayout(find_layout)
        find_layout.addStretch()
        find_layout.addWidget(self.__find)
        find_layout.addWidget(self.__find_label)
        self.setLayout(layout)

        # configure the text widget
        self.__logs.setReadOnly(True)
        self.__logs.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.__logs.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
        self.__logs.customContextMenuRequested.connect(self.on_logs_context_menu_request)
        self.__logs.setStyleSheet("QPlainTextEdit:focus { border: none; }")
        # configure the find area
        self.__find.setPlaceholderText("Find")
        self.__find_label.setText("No Results")
        self.__find_label.setFixedWidth(60)
        self.__find.returnPressed.connect(self.find)
        self.__pattern = ""
        self.__match_index = 0
        self.__matches = []
        # set shortcut
        find_shortcut = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+F"), self)
        find_shortcut.activated.connect(self.focus_find)
        # load up previous size
        self._settings_manager = settings.UserSettings(sgtk.platform.current_bundle())
        pos = self._settings_manager.retrieve("console.pos", self.pos(), self._settings_manager.SCOPE_GLOBAL)
        size = self._settings_manager.retrieve(
            "console.size", QtCore.QSize(800, 400), self._settings_manager.SCOPE_GLOBAL)

        self.move(pos)
        self.resize(size)

        self.__console_handler = ConsoleLogHandler(self)
        sgtk.LogManager().initialize_custom_handler(self.__console_handler)
Exemple #10
0
    def setupUi(self, SearchWidget):
        SearchWidget.setObjectName("SearchWidget")
        SearchWidget.resize(161, 50)
        self.horizontalLayout = QtGui.QHBoxLayout(SearchWidget)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.group = QtGui.QGroupBox(SearchWidget)
        self.group.setTitle("")
        self.group.setObjectName("group")
        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.group)
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setContentsMargins(4, 15, 4, 2)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.search = QtGui.QLineEdit(self.group)
        self.search.setObjectName("search")
        self.horizontalLayout_2.addWidget(self.search)
        self.horizontalLayout.addWidget(self.group)

        self.retranslateUi(SearchWidget)
        QtCore.QMetaObject.connectSlotsByName(SearchWidget)
Exemple #11
0
    def _create_overlay_parent_widget(self):
        """
        Creates a wiget with text, button and line edit to explain how the overlay works
        and showing how the overlay doesn't impact UI interaction when hidden.

        :returns: The widget who will own the overlay.
        """

        # setup a dummy widget to cover with the overlay
        my_label = QtGui.QLabel(
            "This is a label widget with an <tt>OverlayWidget</tt> "
            "parented to it. When shown,<br>the overlay will cover this label "
            "and display a message, error, or pixmap.<br><br><b>Click the "
            "buttons below to simulate calling the overlay's methods.<b>"
        )
        my_label.setWordWrap(True)
        my_label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter)
        my_label.setStyleSheet("border: 1px solid palette(base);")

        layout = QtGui.QVBoxLayout()
        layout.addWidget(my_label)

        layout.addWidget(
            QtGui.QPushButton(
                "When the overlay widget is hidden, you should be able to click this button."
            )
        )

        edit = QtGui.QLineEdit()
        if edit.setPlaceholderText:
            edit.setPlaceholderText(
                "When the overlay widget is hidden, you should be able to enter text."
            )
        layout.addWidget(edit)

        parent_widget = QtGui.QWidget()
        parent_widget.setLayout(layout)

        return parent_widget
    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)
Exemple #13
0
    def _populate_ui(self):
        """
        Build the UI.
        """

        show_msg_box = QtGui.QPushButton("Click to show MessageBox")
        show_msg_box.clicked.connect(self._show_message_box)

        show_details_always = QtGui.QCheckBox("Always Show Details")
        show_details_always.clicked.connect(self._set_always_show_details)

        show_remember_checkbox = QtGui.QCheckBox("Hide Remember Checkbox")
        show_remember_checkbox.clicked.connect(
            self._set_show_remember_checkbox)

        show_details_text_label = QtGui.QLabel(
            "Customize the 'Show Details...' Button Text:")
        show_details_text_label.setToolTip("Leave blank to use default")
        self._show_details_text = QtGui.QLineEdit()
        show_details_text_layout = QtGui.QHBoxLayout()
        show_details_text_layout.addWidget(show_details_text_label)
        show_details_text_layout.addWidget(self._show_details_text)

        hide_details_text_label = QtGui.QLabel(
            "Customize the 'Hide Details...' Button Text:")
        hide_details_text_label.setToolTip("Leave blank to use default")
        self._hide_details_text = QtGui.QLineEdit()
        hide_details_text_layout = QtGui.QHBoxLayout()
        hide_details_text_layout.addWidget(hide_details_text_label)
        hide_details_text_layout.addWidget(self._hide_details_text)

        checkbox_options = QtGui.QHBoxLayout()
        checkbox_options.addWidget(show_details_always)
        checkbox_options.addWidget(show_remember_checkbox)
        checkbox_options.addStretch()

        toolbar_layout = QtGui.QVBoxLayout()
        toolbar_layout.addLayout(checkbox_options)
        toolbar_layout.addLayout(show_details_text_layout)
        toolbar_layout.addLayout(hide_details_text_layout)

        self._msg_box_result = QtGui.QLabel()
        self._msg_box_result.setToolTip(
            "This is the button role of the button that was clicked to close the dialog."
        )
        self._button_clicked_result = QtGui.QLabel()
        self._msg_box_result.setToolTip(
            "This is the button that was clicked to close the dialog.")
        self._remember_value = QtGui.QLabel()
        self._msg_box_result.setToolTip(
            "This is the value of the 'remember' checkbox on closing the dialog."
        )

        footer_layout = QtGui.QVBoxLayout()
        footer_layout.addWidget(self._msg_box_result)
        footer_layout.addWidget(self._button_clicked_result)
        footer_layout.addWidget(self._remember_value)

        # The main demo layout
        vlayout = QtGui.QVBoxLayout()
        vlayout.addLayout(toolbar_layout)
        vlayout.addStretch()
        vlayout.addWidget(show_msg_box)
        vlayout.addStretch()
        vlayout.addLayout(footer_layout)

        self.setLayout(vlayout)
Exemple #14
0
    def __init__(self, parent=None, url=None, display=None):
        """
        Initialize the dialog.

        :param parent: Optional parent widget
        :param url: Optional url to insert it the input
        :param display: Optional display name to
        :return:
        """

        super(_EditWebLinkDialog, self).__init__(parent)

        self.setMinimumWidth(350)

        url = url
        display = display

        self.setWindowTitle("Link to Web Page")

        # url input
        url_lbl = QtGui.QLabel("<h3>Web page address</h3>")
        self._url_input = QtGui.QLineEdit()
        if url:
            self._url_input.setText(url)
            self._url_input.selectAll()

        # display input
        display_lbl = QtGui.QLabel("Optional display name")
        self._display_input = QtGui.QLineEdit()
        if display:
            self._display_input.setText(display)
            self._display_input.selectAll()

        # get the highlight color
        btn_color = sgtk.platform.current_bundle().style_constants["SG_HIGHLIGHT_COLOR"]
        btn_palette = self.palette()
        btn_palette.setColor(QtGui.QPalette.Button, btn_color)

        # color the button to match the SG version.
        self._add_link_btn = QtGui.QPushButton("Add Link")
        self._add_link_btn.setEnabled(False)
        self._add_link_btn.setPalette(btn_palette)

        cancel_btn = QtGui.QPushButton("Cancel")

        # put the buttons together. Didn't user QDialogButtonBox since can't
        # control the order
        btn_box = QtGui.QHBoxLayout()
        btn_box.addStretch()
        btn_box.addWidget(cancel_btn)
        btn_box.addWidget(self._add_link_btn)

        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(url_lbl)
        layout.addWidget(self._url_input)
        layout.addWidget(display_lbl)
        layout.addWidget(self._display_input)
        layout.addLayout(btn_box)

        # signals
        self._url_input.textChanged.connect(self._check_url)
        self._add_link_btn.clicked.connect(self.accept)
        cancel_btn.clicked.connect(self.reject)
    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)
    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)
Exemple #17
0
    def update_extra_tokens_widgets(self, template, missing_keys):
        missing_keys_dict = {}

        for key in missing_keys:
            if key in template.keys:
                keyObj = template.keys[key]
                missing_keys_dict[key] = keyObj

        parent = self.ui.extraTokensWidget
        parent_lay = self.ui.extraTokensWidgetLayout

        self.clear_extra_token_widgets()

        keys = missing_keys_dict.keys()
        keys.sort()
        row_cnt = 0
        context_dict = self.context.to_dict()
        name = "%s_%s" % (context_dict['entity']['name'],
                          context_dict['task']['name'])
        # self.log.info(name)
        if not keys:
            label = QtGui.QLabel('No Extra Keys found...', parent=parent)
            parent_lay.addWidget(label, row_cnt, 0)
        else:
            for key in keys:
                # self.log.info(key)
                # self.log.info(missing_keys_dict[key].default)
                if key == 'name':
                    value = name
                elif key == 'version':
                    # self.log.info(self.fields)
                    work_area_template = self._template_work_area()
                    path = work_area_template.apply_fields(self.fields)
                    # self.log.info(path)
                    try:
                        if os.path.exists(path):
                            files = os.listdir(path)
                            # self.log.info(files)
                            if files:
                                work_files = [
                                    s for s in files
                                    if os.path.isfile(os.path.join(path, s))
                                ]
                                # self.log.info(work_files)
                                if work_files:
                                    version = len([
                                        x for x in work_files
                                        if x.split('.')[-1].lower() ==
                                        self.extension[self.app_name]
                                    ]) + 1
                                else:
                                    version = 1
                            else:
                                version = 1
                            # self.log.info([version])

                        else:
                            version = 1
                            # self.log.info([version])
                    except Exception, e:
                        self.log.error(e)
                    # self.log.info(version)
                    value = str(version)
                else:
                    value = str(missing_keys_dict[key].default)
                label = QtGui.QLabel(str(key), parent=parent)
                # lineedit = QtGui.QLineEdit(str(missing_keys_dict[key].default), parent=parent)
                lineedit = QtGui.QLineEdit(value, parent=parent)

                lineedit.data = missing_keys_dict[
                    key]  # Not ideal to store to object, but QLabel has no data storage method

                lineedit.editingFinished.connect(
                    self.update_template_file_path)

                parent_lay.addWidget(label, row_cnt, 0)
                parent_lay.addWidget(lineedit, row_cnt, 1)

                row_cnt += 1
Exemple #18
0
    def __init__(self):
        """
        Constructor
        """
        # first, call the base class and let it do its thing.
        QtGui.QWidget.__init__(self)

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

        #################################################
        # maintain a list where we keep a reference to
        # all the dynamic UI we create. This is to make
        # the GC happy.
        self._dynamic_widgets = []

        # most of the useful accessors are available through the Application class instance
        # it is often handy to keep a reference to this. You can get it via the following method:
        app = sgtk.platform.current_bundle()

        tab = self.ui.frame

        layout = QtGui.QVBoxLayout(tab)
        layout.setSpacing(0)
        layout.setContentsMargins(0, 0, 0, 0)

        view = QtGui.QTreeView(tab)
        layout.addWidget(view)

        # a horiz layout to host search
        hlayout = QtGui.QHBoxLayout()
        layout.addLayout(hlayout)

        # add search textfield
        search = QtGui.QLineEdit(tab)
        search.setStyleSheet("QLineEdit{ border-width: 1px; "
                             "background-image: url(:/res/search.png);"
                             "background-repeat: no-repeat;"
                             "background-position: center left;"
                             "border-radius: 5px; "
                             "padding-left:20px;"
                             "margin:4px;"
                             "height:22px;"
                             "}")
        search.setToolTip(
            "Use the <i>search</i> field to narrow down the items displayed in the tree above."
        )
        try:
            # this was introduced in qt 4.7, so try to use it if we can... :)
            search.setPlaceholderText("Search...")
        except:
            pass

        hlayout.addWidget(search)

        # and add a cancel search button, disabled by default
        clear_search = QtGui.QToolButton(tab)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/res/clear_search.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        clear_search.setIcon(icon)
        clear_search.setAutoRaise(True)
        clear_search.clicked.connect(lambda editor=search: editor.setText(""))
        clear_search.setToolTip("Click to clear your current search.")
        hlayout.addWidget(clear_search)

        # set up data backend

        filters = [
            ["project", "is", app.context.project],
            # ["step", "in",
            #     [
            #         {'code': 'Art', 'entity_type': 'Asset', 'id': 9, 'type': 'Step'},
            #         {'code': 'Model', 'entity_type': 'Asset', 'id': 10, 'type': 'Step'},
            #         {'code': 'Rig', 'entity_type': 'Asset', 'id': 11, 'type': 'Step'},
            #         {'code': 'Rendering', 'entity_type': 'Asset', 'id': 12, 'type': 'Step'},
            #         {'code': 'Grooming', 'entity_type': 'Asset', 'id': 14, 'type': 'Step'},
            #         {'code': 'texturing', 'entity_type': 'Asset', 'id': 47, 'type': 'Step'},
            #         {'code': 'Simulation', 'entity_type': 'Asset', 'id': 48, 'type': 'Step'}
            #     ]
            # ]
        ]

        sg_entity_type = "Task"
        model = SgEntityModel(self, view, sg_entity_type, filters,
                              ["entity", "content"])

        # set up right click menu
        action_ea = QtGui.QAction("Expand All Folders", view)
        action_ca = QtGui.QAction("Collapse All Folders", view)
        action_refresh = QtGui.QAction("Refresh", view)

        action_ea.triggered.connect(view.expandAll)
        action_ca.triggered.connect(view.collapseAll)
        action_refresh.triggered.connect(model.async_refresh)
        view.addAction(action_ea)
        view.addAction(action_ca)
        view.addAction(action_refresh)
        view.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)

        # make sure we keep a handle to all the new objects
        # otherwise the GC may not work
        self._dynamic_widgets.extend([
            tab, layout, hlayout, search, clear_search, view, action_ea,
            action_ca, action_refresh
        ])

        # set up proxy model that we connect our search to
        proxy_model = SgEntityProxyModel(self)
        proxy_model.setSourceModel(model)
        search.textChanged.connect(lambda text, v=view, pm=proxy_model: self.
                                   _on_search_text_changed(text, v, pm))

        # configure the view
        view.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        view.setProperty("showDropIndicator", False)
        view.setIconSize(QtCore.QSize(20, 20))
        view.setStyleSheet("QTreeView::item { padding: 6px;  }")
        view.setUniformRowHeights(True)
        view.setHeaderHidden(True)
        view.setModel(proxy_model)

        # by first creating a direct handle to the selection model before
        # setting up signal / slots
        selection_model = view.selectionModel()
        self._dynamic_widgets.append(selection_model)
        #selection_model.selectionChanged.connect(self._on_treeview_item_selected)

        # finally store all these objects keyed by the caption
        self.ep = EntityPreset(sg_entity_type, model, proxy_model, view)
        # ctx = sgtk.platform.current_bundle().context
        #  ctx

        # DROP AREA
        self.dropArea = DropWidget(self)
        self.ui.horizontalLayout.addWidget(self.dropArea)

        model.async_refresh()
    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)
Exemple #20
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 _setup_ui(self):
        self.setWindowTitle('Flipbook')

        #Top lout
        upper_bar = QtGui.QHBoxLayout()
        title_lab = QtGui.QLabel('Flipbook versioning system')
        refresh_but = QtGui.QPushButton()
        refresh_but.setFixedSize(25, 25)
        icon = QtGui.QIcon(
            os.path.abspath(
                os.path.join(os.path.dirname(__file__), "..", "..",
                             "resources", "refresh.png")))
        refresh_but.setIcon(icon)
        refresh_but.clicked.connect(self._refresh_treewidget)

        upper_bar.addWidget(title_lab)
        upper_bar.addWidget(refresh_but)

        #Tree layout
        self._tree_widget = QtGui.QTreeWidget()
        self._tree_widget.itemClicked.connect(self._set_flipbook_name_sel)

        self._tree_widget.setColumnCount(
            len(self._column_names.get_nice_names()))
        self._tree_widget.setHeaderLabels(self._column_names.get_nice_names())
        self._tree_widget.setSelectionMode(
            QtGui.QAbstractItemView.SelectionMode.ExtendedSelection)
        self._tree_widget.header().setSectionsMovable(False)
        self._tree_widget.header().resizeSections(
            QtGui.QHeaderView.ResizeToContents)
        self._tree_widget.itemDoubleClicked.connect(self._item_double_clicked)
        self._tree_widget.itemExpanded.connect(self._item_expanded)

        tree_bar = QtGui.QHBoxLayout()
        del_but = QtGui.QPushButton('Delete')
        del_but.clicked.connect(self._del_flipbooks)
        load_but = QtGui.QPushButton('Load in Mplay')
        load_but.clicked.connect(self._load_flipbooks)
        send_but = QtGui.QPushButton('Copy Path')
        send_but.clicked.connect(self._copy_flipbook_clipboard)
        publish_but = QtGui.QPushButton('Publish')
        publish_but.clicked.connect(self._publish_flipbook)

        tree_bar.addWidget(del_but)
        tree_bar.addWidget(load_but)
        tree_bar.addWidget(send_but)
        tree_bar.addWidget(publish_but)

        #New flipbook layout
        new_flipbook_bar = QtGui.QVBoxLayout()
        title_label = QtGui.QLabel('New Flipbook Settings')

        #Name
        name_bar = QtGui.QHBoxLayout()
        self._name_line = QtGui.QLineEdit()
        self._name_line.setPlaceholderText('flipbook')

        name_bar.addWidget(self._name_line)

        name_box = QtGui.QGroupBox('Flipbook Name')
        name_box.setLayout(name_bar)

        #Comment
        comment_bar = QtGui.QHBoxLayout()
        self._comment_line = QtGui.QLineEdit()
        self._comment_line.returnPressed.connect(self._create_flipbook)

        comment_bar.addWidget(self._comment_line)

        comment_box = QtGui.QGroupBox('Comment')
        comment_box.setLayout(comment_bar)

        name_comment_layout = QtGui.QHBoxLayout()
        name_comment_layout.addWidget(name_box)
        name_comment_layout.addWidget(comment_box)

        #Create Name Button Larout
        name_but_layout = QtGui.QHBoxLayout()
        name_but_layout.addLayout(name_comment_layout)

        #Range
        range_bar = QtGui.QHBoxLayout()
        self._start_line = QtGui.QLineEdit()
        self._start_line.setPlaceholderText('$RFSTART')
        self._end_line = QtGui.QLineEdit()
        self._end_line.setPlaceholderText('$RFEND')

        range_bar.addWidget(self._start_line)
        range_bar.addWidget(self._end_line)

        range_box = QtGui.QGroupBox('Range')
        range_box.setLayout(range_bar)

        #Create button
        create_bar = QtGui.QVBoxLayout()
        self._beauty_toggle = QtGui.QCheckBox('Render Bg')
        self._beauty_toggle.setCheckState(QtCore.Qt.CheckState.Unchecked)

        create_but = QtGui.QPushButton('Create')
        create_but.setDefault(True)
        create_but.clicked.connect(self._create_flipbook)

        create_bar.addWidget(self._beauty_toggle)
        create_bar.addWidget(create_but)

        #Create Range Res Layout
        groupbox_layout = QtGui.QHBoxLayout()
        groupbox_layout.addWidget(range_box)
        groupbox_layout.addLayout(create_bar)

        new_flipbook_bar.addWidget(title_label)
        new_flipbook_bar.addLayout(name_but_layout)
        new_flipbook_bar.addLayout(groupbox_layout)

        #Create final layout
        self.setLayout(QtGui.QVBoxLayout())
        self.layout().addLayout(upper_bar)
        self.layout().addWidget(self._tree_widget)
        self.layout().addLayout(tree_bar)
        self.layout().addLayout(new_flipbook_bar)
Exemple #22
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()
Exemple #23
0
    def setupUi(self, NewProjectForm):
        NewProjectForm.setObjectName("NewProjectForm")
        NewProjectForm.resize(604, 473)
        self.verticalLayout = QtGui.QVBoxLayout(NewProjectForm)
        self.verticalLayout.setSpacing(4)
        self.verticalLayout.setContentsMargins(12, 12, 12, 4)
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setSpacing(4)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.verticalLayout.addLayout(self.verticalLayout_2)
        self.context_widget = context_selector.ContextWidget(NewProjectForm)
        self.context_widget.setObjectName("context_widget")
        self.verticalLayout_2.addWidget(self.context_widget)
        self.context_warning_label = QtGui.QLabel(NewProjectForm)
        self.context_warning_label.setText("")
        self.context_warning_label.setAlignment(QtCore.Qt.AlignLeading
                                                | QtCore.Qt.AlignLeft
                                                | QtCore.Qt.AlignTop)
        self.context_warning_label.setMargin(1)
        self.context_warning_label.setIndent(-1)
        self.context_warning_label.setObjectName("context_warning_label")
        self.verticalLayout_2.addWidget(self.context_warning_label)
        self.verticalLayout_3 = QtGui.QVBoxLayout()
        self.verticalLayout_3.setSpacing(12)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.project_groupbox = QtGui.QGroupBox(NewProjectForm)
        self.project_groupbox.setObjectName("project_groupbox")
        self.project_groupbox.setLayout(self.verticalLayout_3)
        self.verticalLayout.addWidget(self.project_groupbox)
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setSpacing(4)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.info_label = QtGui.QLabel(NewProjectForm)
        self.info_label.setMinimumSize(QtCore.QSize(0, 0))
        self.info_label.setAlignment(QtCore.Qt.AlignLeading
                                     | QtCore.Qt.AlignLeft
                                     | QtCore.Qt.AlignVCenter)
        self.info_label.setWordWrap(False)
        self.info_label.setObjectName("info_label")
        self.verticalLayout_4.addWidget(self.info_label)
        self.name_line = QtGui.QFrame(NewProjectForm)
        self.name_line.setFrameShadow(QtGui.QFrame.Plain)
        self.name_line.setFrameShape(QtGui.QFrame.HLine)
        self.name_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.name_line.setObjectName("name_line")
        self.verticalLayout_4.addWidget(self.name_line)
        self.verticalLayout_3.addLayout(self.verticalLayout_4)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setSpacing(-1)
        self.gridLayout.setObjectName("gridLayout")
        self.label_2 = QtGui.QLabel(NewProjectForm)
        self.label_2.setMargin(1)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
        self.name_edit = QtGui.QLineEdit(NewProjectForm)
        self.name_edit.setObjectName("name_edit")
        self.gridLayout.addWidget(self.name_edit, 0, 1, 1, 1)
        self.name_preview_label = QtGui.QLabel(NewProjectForm)
        self.name_preview_label.setText("")
        self.name_preview_label.setAlignment(QtCore.Qt.AlignLeading
                                             | QtCore.Qt.AlignLeft
                                             | QtCore.Qt.AlignTop)
        self.name_preview_label.setMargin(1)
        self.name_preview_label.setIndent(-1)
        self.name_preview_label.setObjectName("name_preview_label")
        self.gridLayout.addWidget(self.name_preview_label, 1, 1, 1, 1)
        self.label_4 = QtGui.QLabel(NewProjectForm)
        self.label_4.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft
                                  | QtCore.Qt.AlignTop)
        self.label_4.setMargin(1)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1)
        self.verticalLayout_3.addLayout(self.gridLayout)
        spacerItem = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Fixed)
        self.verticalLayout_3.addItem(spacerItem)
        self.verticalLayout_6 = QtGui.QVBoxLayout()
        self.verticalLayout_6.setSpacing(4)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.label = QtGui.QLabel(NewProjectForm)
        self.label.setObjectName("label")
        self.verticalLayout_6.addWidget(self.label)
        self.publishes_line = QtGui.QFrame(NewProjectForm)
        self.publishes_line.setFrameShadow(QtGui.QFrame.Plain)
        self.publishes_line.setFrameShape(QtGui.QFrame.HLine)
        self.publishes_line.setFrameShadow(QtGui.QFrame.Sunken)
        self.publishes_line.setObjectName("publishes_line")
        self.verticalLayout_6.addWidget(self.publishes_line)
        self.verticalLayout_3.addLayout(self.verticalLayout_6)
        self.verticalLayout_5 = QtGui.QVBoxLayout()
        self.verticalLayout_5.setSpacing(4)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.publish_list = PublishListView(NewProjectForm)
        self.publish_list.setStyleSheet("#publish_list {\n"
                                        "background-color: rgb(255, 128, 0);\n"
                                        "}")
        self.publish_list.setObjectName("publish_list")
        self.verticalLayout_5.addWidget(self.publish_list)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem1 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.add_publish_btn = QtGui.QPushButton(NewProjectForm)
        self.add_publish_btn.setMinimumSize(QtCore.QSize(32, 0))
        self.add_publish_btn.setObjectName("add_publish_btn")
        self.horizontalLayout.addWidget(self.add_publish_btn)
        self.horizontalLayout.setStretch(0, 1)
        self.verticalLayout_5.addLayout(self.horizontalLayout)
        self.verticalLayout_5.setStretch(0, 1)
        self.verticalLayout_3.addLayout(self.verticalLayout_5)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setContentsMargins(12, 8, 12, 12)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        spacerItem2 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem2)
        self.cancel_btn = QtGui.QPushButton(NewProjectForm)
        self.cancel_btn.setMinimumSize(QtCore.QSize(90, 0))
        self.cancel_btn.setObjectName("cancel_btn")
        self.horizontalLayout_3.addWidget(self.cancel_btn)
        self.create_btn = QtGui.QPushButton(NewProjectForm)
        self.create_btn.setMinimumSize(QtCore.QSize(90, 0))
        self.create_btn.setDefault(True)
        self.create_btn.setObjectName("create_btn")
        self.horizontalLayout_3.addWidget(self.create_btn)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.verticalLayout.setStretch(1, 1)

        self.retranslateUi(NewProjectForm)
        QtCore.QObject.connect(self.cancel_btn, QtCore.SIGNAL("clicked()"),
                               NewProjectForm.close)
        QtCore.QMetaObject.connectSlotsByName(NewProjectForm)
    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)
    def __init__(self,
                 data,
                 comboFilterWidgetList=None,
                 threadQueue=None,
                 sgtkQueue=None,
                 color=False,
                 parent=None):

        super(noteLayoutWidget, self).__init__(parent)

        self.top_assigneesFilterWidget = None

        self.taskFilterWidget = None
        self.shotWidgetItemList = None
        self.my_versionWidgetCombo = None
        self.queue = None
        self.myNoteBox = None
        self.receiveFocusWidget = None
        self.shotList = None
        self.getFocus = True

        self.data = data

        self.multiDisplay = False
        if self.data:
            if len(self.data) > 1:
                self.multiDisplay = True

        self.replyListWidget = None  # hold Replies, if any !

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

        titleGridLayout = QtGui.QGridLayout()
        titleGridLayout.setColumnStretch(0, False)
        titleGridLayout.setColumnStretch(1, False)

        self.titreLabel = None
        if self.data:
            if not self.multiDisplay:
                pass

        elif comboFilterWidgetList[0]:

            self.top_assigneesFilterWidget = comboFilterWidgetList[5]

            self.queue = threadQueue
            self.sgtkQueue = sgtkQueue

            idx = 0
            self.shotComboBox = comboFilterWidget3(comboFilterWidgetList[4],
                                                   comboFilterWidgetList[5],
                                                   parent=self)
            self.shotComboBox.fillItem(comboFilterWidgetList[0])
            self.shotWidgetItemList = comboFilterWidgetList[0]

            fct = lambda idx, getFocus, shotItemList=comboFilterWidgetList[
                0], top_taskFilterWidget=comboFilterWidgetList[
                    1], top_assigneesFilterWidget=comboFilterWidgetList[
                        5]: self.refillTaskFilter(idx, getFocus, shotItemList,
                                                  top_taskFilterWidget,
                                                  top_assigneesFilterWidget)
            self.shotComboBox.SIGNAL_currentIndexChanged.connect(fct)
            self.shotComboBox.SIGNAL_filterResultEmpty.connect(
                self.disableNoteLayout)

            titleGridLayout.addWidget(QtGui.QLabel("Shot/Asset", parent=self),
                                      idx, 0)
            titleGridLayout.addWidget(self.shotComboBox, idx, 1)

            idx += 1

            typeDict, entriesDictList = comboFilterWidgetList[1].retrieveDict()
            myShotItem = comboFilterWidgetList[0][0]

            assignedToTxt = comboFilterWidgetList[5].widget.text()
            if not isinstance(assignedToTxt, unicode):
                assignedToTxt = unicode(assignedToTxt.toUtf8(), "utf-8")

            availableTaskList = myShotItem["sgAvailableTaskList"]
            if not assignedToTxt == "":

                availableTaskList = []
                for tasks in myShotItem["sgtaskDictWithAssignees"].keys():
                    #print assignedToTxt.upper() , " ".join(comboFilterWidgetList[0][idx]["sgtaskDictWithAssignees"][tasks]).upper()
                    if assignedToTxt.upper() in " ".join(
                            myShotItem["sgtaskDictWithAssignees"]
                        [tasks]).upper():

                        availableTaskList.append(tasks)

            checkNumber = 0
            for idx in range(len(entriesDictList)):

                if entriesDictList[idx]["text"] == "NoTask":
                    if not checkNumber:
                        entriesDictList[idx]["checked"] = True
                    continue

                if not availableTaskList:
                    if "NoTask" in entriesDictList[idx]["values"]:
                        entriesDictList[idx]["checked"] = True
                    else:
                        entriesDictList[idx]["checked"] = False
                else:
                    test = False
                    for availableTask in availableTaskList:
                        if availableTask in entriesDictList[idx]["values"]:
                            test = True

                    if entriesDictList[idx]["checked"] == True and not test:
                        entriesDictList[idx]["checked"] = False

                if entriesDictList[idx]["checked"] == True:
                    checkNumber += 1

            self.taskFilterWidget = comboFilterWidget2(typeDict,
                                                       entriesDictList,
                                                       showLabel=False,
                                                       parent=self)
            self.taskFilterWidget.widget.currentIndexChanged.connect(
                self.getVersion)
            if self.taskFilterWidget.widget.count() == 1:
                self.taskFilterWidget.drawComplex = False
            self.shotList = comboFilterWidgetList[0]
            comboFilterWidgetList[1].SIGNAL_TaskcurrentIndexesChanged.connect(
                self.filterTasks)

            titleGridLayout.addWidget(QtGui.QLabel("Task", parent=self), idx,
                                      0)
            titleGridLayout.addWidget(self.taskFilterWidget, idx, 1)

            idx += 1
            self.typeFilterWidget = comboFilterWidget2(
                *comboFilterWidgetList[2].retrieveDict(),
                showLabel=False,
                parent=self)
            if self.typeFilterWidget.widget.count() == 1:
                self.typeFilterWidget.drawComplex = False

            comboFilterWidgetList[2].SIGNAL_currentIndexesChanged.connect(
                self.typeFilterWidget.setMyCurrentFromIndexes)
            titleGridLayout.addWidget(QtGui.QLabel("Type", parent=self), idx,
                                      0)
            titleGridLayout.addWidget(self.typeFilterWidget, idx, 1)

            idx += 1
            self.statusFilterWidget = comboFilterWidget2(
                *comboFilterWidgetList[3].retrieveDict(),
                showLabel=False,
                parent=self)
            if self.statusFilterWidget.widget.count() == 1:
                self.statusFilterWidget.drawComplex = False

            comboFilterWidgetList[3].SIGNAL_currentIndexesChanged.connect(
                self.statusFilterWidget.setMyCurrentFromIndexes)
            titleGridLayout.addWidget(QtGui.QLabel("Status", parent=self), idx,
                                      0)
            titleGridLayout.addWidget(self.statusFilterWidget, idx, 1)

            self.titreLabel = QtGui.QLineEdit("", parent=self)
            self.titreLabel.hide()

            self.my_versionWidgetCombo = versionWidgetCombo(parent=self)
            self.my_versionWidgetCombo.versionQtCombo.currentIndexChanged.connect(
                self.setTextEditOnFocus)
            layout.addWidget(self.my_versionWidgetCombo)

            # separator
            line = QtGui.QFrame(parent=self)
            line.setFrameShape(QtGui.QFrame.HLine)
            line.setFrameShadow(QtGui.QFrame.Sunken)
            layout.addWidget(line)

        else:
            selectLabel = QtGui.QLabel(
                "<font color:#F0F0F0><b> Select a Shot or a Note </b></font>",
                parent=self)
            selectLabel.setAlignment(QtCore.Qt.AlignCenter)
            font = selectLabel.font()
            font.setPointSize(10)
            selectLabel.setFont(font)
            layout.addWidget(selectLabel)

        self.statusLabel = None
        if self.data:
            if not self.multiDisplay:
                noteLinkVersion = []
                if self.data[0].has_key("note_links"):

                    for linksDict in self.data[0]["note_links"]:
                        if linksDict["type"] == "Version":
                            noteLinkVersion.append(linksDict)

                if noteLinkVersion:
                    versionLayout = QtGui.QHBoxLayout()
                    versionLayout.setContentsMargins(0, 0, 0, 0)
                    layout.addLayout(versionLayout)

                    idx = 0
                    for versionDict in noteLinkVersion:
                        taskIcon = None
                        if versionDict["sg_task"]:
                            taskIcon = comboFilterWidgetList[
                                1].retrieveIconFromValue(
                                    versionDict["sg_task"]["name"])

                        if idx == 0 and len(noteLinkVersion) > 1:
                            shortCutCodeList = ["Ctrl+Space"]
                        else:
                            shortCutCodeList = ["Ctrl+Alt+Space"]

                        versionLayout.addWidget(
                            versionWidget(versionDict,
                                          shortCutCodeList=shortCutCodeList,
                                          taskIcon=taskIcon,
                                          parent=self))

                        idx += 1

                    if len(noteLinkVersion) == 2:
                        labelArrow = QtGui.QLabel(parent=self)
                        labelArrow.setPixmap(
                            QtGui.QPixmap(getRessources("versionArrow.png")))
                        versionLayout.insertWidget(1, labelArrow)

                if noteLinkVersion:
                    line = QtGui.QFrame(parent=self)
                    line.setFrameShape(QtGui.QFrame.HLine)
                    line.setFrameShadow(QtGui.QFrame.Sunken)
                    layout.addWidget(line)

        # Note content
        contentLayout = QtGui.QHBoxLayout()

        if self.data:
            if not self.multiDisplay:
                contentLayout.addWidget(
                    noteContentLayout("Note",
                                      self.data[0],
                                      noteData=None,
                                      parent=self))
        elif comboFilterWidgetList[0]:
            my_noteContentLayout = noteContentLayout("Note",
                                                     None,
                                                     noteData=None,
                                                     parent=self)
            my_noteContentLayout.SIGNAL_send_NoteContent.connect(self.todo)
            self.receiveFocusWidget = my_noteContentLayout.Qt_noteContent
            contentLayout.addWidget(my_noteContentLayout)

        if self.data:
            if not self.multiDisplay:

                tmpLayout = QtGui.QVBoxLayout()
                tmpLayout.setContentsMargins(0, 0, 0, 0)

                #tmpLayout.addLayout(titleGridLayout )
                tmpLayout.addLayout(contentLayout)
                tmpLayout.addStretch()

                w = QtGui.QWidget(parent=self)
                w.setLayout(tmpLayout)

                myScrollNote = QtGui.QScrollArea(parent=self)
                myScrollNote.setHorizontalScrollBarPolicy(
                    QtCore.Qt.ScrollBarAlwaysOff)
                myScrollNote.setWidget(w)
                myScrollNote.setWidgetResizable(True)

                style = "QScrollArea {border: 0px none gray; border-radius: 0px;}"
                myScrollNote.setStyleSheet(style)

                self.myNoteBox = QtGui.QGroupBox(str(self.data[0]["subject"]))
                self.myNoteBox.setCheckable(True)

                self.myNoteBox.installEventFilter(self)

                myNoteBox_layout = QtGui.QHBoxLayout()
                myNoteBox_layout.setContentsMargins(5, 10, 0, 0)
                myNoteBox_layout.addWidget(myScrollNote)
                self.myNoteBox.setLayout(myNoteBox_layout)

                borderColor = "#CCCCCC"
                if self.data[0]["sg_status_list"] == "opn":
                    borderColor = "#30A6E3"
                elif self.data[0]["sg_status_list"] == "ip":
                    borderColor = "#FFC31E"

                style = "QGroupBox  { border: 2px solid " + borderColor + ";  border-radius: 5px; margin-top: 2ex; } "
                style += "QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px; color: " + borderColor + " ;} "
                style += "QGroupBox::indicator { width: 20px; height: 20px;} "
                p = getRessources("status_" + self.data[0]["sg_status_list"] +
                                  ".png").replace("\\", "/")
                style += "QGroupBox::indicator:checked { image: url('" + p + "'); }"

                self.myNoteBox.setStyleSheet(style)
                layout.addWidget(self.myNoteBox)

        else:
            layout.addLayout(titleGridLayout)
            layout.addLayout(contentLayout)

        # Reply widget
        if self.data:
            if not self.multiDisplay:

                myEmptyNewReply = noteContentLayout("Reply",
                                                    None,
                                                    noteData=self.data,
                                                    parent=self)
                self.receiveFocusWidget = myEmptyNewReply.Qt_noteContent

                myEmptyNewReply.SIGNAL_createReply.connect(self.replyNoteSlot)

                replyDataList = self.data[0]["queriedReplies"]
                if replyDataList:

                    #[0,1,2]
                    myform = QtGui.QVBoxLayout()
                    myReplyBox = QtGui.QGroupBox()

                    style = " QGroupBox  { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 0%), stop: 1 rgba(0, 0, 0, 33%) ); border: 0px none gray; border-radius: 0px}"

                    myReplyBox.setAttribute(QtCore.Qt.WA_TranslucentBackground,
                                            True)
                    myReplyBox.setStyleSheet(style)
                    myReplyBox.setLayout(myform)

                    scroll = QtGui.QScrollArea(parent=self)

                    scroll.setWidget(myReplyBox)
                    scroll.setWidgetResizable(True)

                    style = "QScrollArea {border: 0px none gray; border-radius: 0px;}"
                    scroll.setStyleSheet(style)
                    scroll.setHorizontalScrollBarPolicy(
                        QtCore.Qt.ScrollBarAlwaysOff)
                    moveScrollBarToBottom = lambda min, max: scroll.verticalScrollBar(
                    ).setValue(max)
                    scroll.verticalScrollBar().rangeChanged.connect(
                        moveScrollBarToBottom)

                    for replyData in replyDataList:
                        myform.addWidget(
                            noteContentLayout("Reply",
                                              replyData,
                                              noteData=None,
                                              parent=self))
                        line = QtGui.QFrame(parent=self)
                        line.setFrameShape(QtGui.QFrame.HLine)
                        line.setFrameShadow(QtGui.QFrame.Sunken)

                        myform.addWidget(line)

                    replyBox = QtGui.QGroupBox(" Replies ")
                    replyBox_layout = QtGui.QHBoxLayout()
                    replyBox_layout.setContentsMargins(0, 10, 0, 0)
                    replyBox.setLayout(replyBox_layout)
                    replyBox_layout.addWidget(scroll)

                    style = "QGroupBox  { border: 2px solid gray;  border-radius: 5px; margin-top: 2ex; } "
                    style += "QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px; }"
                    replyBox.setStyleSheet(style)

                    layout.addWidget(replyBox)

                layout.addWidget(myEmptyNewReply)

            else:

                myEmptyNewReply = noteContentLayout("Reply",
                                                    None,
                                                    noteData=self.data,
                                                    parent=self)
                myEmptyNewReply.SIGNAL_createMultiReply.connect(
                    self.multiReplyNoteSlot)

                layout.addWidget(myEmptyNewReply)
    def setupUi(self, DesktopWindow):
        DesktopWindow.setObjectName("DesktopWindow")
        DesktopWindow.resize(427, 715)
        DesktopWindow.setMouseTracking(True)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/tk-desktop/default_systray_icon.png"),
                       QtGui.QIcon.Normal, QtGui.QIcon.Off)
        DesktopWindow.setWindowIcon(icon)
        DesktopWindow.setDockNestingEnabled(False)
        DesktopWindow.setUnifiedTitleAndToolBarOnMac(True)
        self.center = QtGui.QWidget(DesktopWindow)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
                                       QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.center.sizePolicy().hasHeightForWidth())
        self.center.setSizePolicy(sizePolicy)
        self.center.setMouseTracking(True)
        self.center.setObjectName("center")
        self.border_layout = QtGui.QVBoxLayout(self.center)
        self.border_layout.setSpacing(0)
        self.border_layout.setContentsMargins(0, 0, 0, 0)
        self.border_layout.setObjectName("border_layout")
        self.header = QtGui.QFrame(self.center)
        self.header.setFrameShape(QtGui.QFrame.NoFrame)
        self.header.setFrameShadow(QtGui.QFrame.Raised)
        self.header.setObjectName("header")
        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.header)
        self.horizontalLayout_2.setSpacing(20)
        self.horizontalLayout_2.setContentsMargins(20, 0, 20, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.apps_button = QtGui.QPushButton(self.header)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.apps_button.sizePolicy().hasHeightForWidth())
        self.apps_button.setSizePolicy(sizePolicy)
        self.apps_button.setMinimumSize(QtCore.QSize(0, 0))
        self.apps_button.setMouseTracking(True)
        self.apps_button.setFocusPolicy(QtCore.Qt.NoFocus)
        self.apps_button.setFlat(True)
        self.apps_button.setObjectName("apps_button")
        self.horizontalLayout_2.addWidget(self.apps_button)
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                       QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem)
        self.border_layout.addWidget(self.header)
        self.stack = QtGui.QStackedWidget(self.center)
        self.stack.setObjectName("stack")
        self.project_browser_page = QtGui.QWidget()
        self.project_browser_page.setObjectName("project_browser_page")
        self.verticalLayout = QtGui.QVBoxLayout(self.project_browser_page)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.subheader = QtGui.QFrame(self.project_browser_page)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
                                       QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.subheader.sizePolicy().hasHeightForWidth())
        self.subheader.setSizePolicy(sizePolicy)
        self.subheader.setMaximumSize(QtCore.QSize(16777215, 60))
        self.subheader.setFrameShape(QtGui.QFrame.NoFrame)
        self.subheader.setFrameShadow(QtGui.QFrame.Plain)
        self.subheader.setLineWidth(1)
        self.subheader.setMidLineWidth(0)
        self.subheader.setObjectName("subheader")
        self.horizontalLayout = QtGui.QHBoxLayout(self.subheader)
        self.horizontalLayout.setSpacing(15)
        self.horizontalLayout.setContentsMargins(20, 15, 15, 15)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.subheader_label = QtGui.QLabel(self.subheader)
        self.subheader_label.setMouseTracking(True)
        self.subheader_label.setFocusPolicy(QtCore.Qt.WheelFocus)
        self.subheader_label.setTextInteractionFlags(
            QtCore.Qt.NoTextInteraction)
        self.subheader_label.setObjectName("subheader_label")
        self.horizontalLayout.addWidget(self.subheader_label)
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem1)
        self.search_frame = QtGui.QFrame(self.subheader)
        self.search_frame.setFrameShape(QtGui.QFrame.StyledPanel)
        self.search_frame.setFrameShadow(QtGui.QFrame.Raised)
        self.search_frame.setProperty("collapsed", False)
        self.search_frame.setObjectName("search_frame")
        self.horizontalLayout_6 = QtGui.QHBoxLayout(self.search_frame)
        self.horizontalLayout_6.setSpacing(2)
        self.horizontalLayout_6.setContentsMargins(5, 5, 5, 5)
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.search_magnifier = QtGui.QLabel(self.search_frame)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.search_magnifier.sizePolicy().hasHeightForWidth())
        self.search_magnifier.setSizePolicy(sizePolicy)
        self.search_magnifier.setMaximumSize(QtCore.QSize(17, 17))
        self.search_magnifier.setText("")
        self.search_magnifier.setPixmap(
            QtGui.QPixmap(":/tk-desktop/search_dark.png"))
        self.search_magnifier.setScaledContents(True)
        self.search_magnifier.setObjectName("search_magnifier")
        self.horizontalLayout_6.addWidget(self.search_magnifier)
        self.search_text = QtGui.QLineEdit(self.search_frame)
        self.search_text.setObjectName("search_text")
        self.horizontalLayout_6.addWidget(self.search_text)
        self.search_button = QtGui.QPushButton(self.search_frame)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.search_button.sizePolicy().hasHeightForWidth())
        self.search_button.setSizePolicy(sizePolicy)
        self.search_button.setMaximumSize(QtCore.QSize(17, 17))
        self.search_button.setFocusPolicy(QtCore.Qt.NoFocus)
        self.search_button.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/tk-desktop/icon_inbox_clear.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.search_button.setIcon(icon1)
        self.search_button.setIconSize(QtCore.QSize(17, 17))
        self.search_button.setFlat(True)
        self.search_button.setObjectName("search_button")
        self.horizontalLayout_6.addWidget(self.search_button)
        self.horizontalLayout.addWidget(self.search_frame)
        self.verticalLayout.addWidget(self.subheader)
        self.projects = ActionListView(self.project_browser_page)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding,
                                       QtGui.QSizePolicy.MinimumExpanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.projects.sizePolicy().hasHeightForWidth())
        self.projects.setSizePolicy(sizePolicy)
        self.projects.setMouseTracking(True)
        self.projects.setFocusPolicy(QtCore.Qt.NoFocus)
        self.projects.setFrameShape(QtGui.QFrame.NoFrame)
        self.projects.setFrameShadow(QtGui.QFrame.Plain)
        self.projects.setLineWidth(0)
        self.projects.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.projects.setAutoScroll(False)
        self.projects.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.projects.setProperty("showDropIndicator", False)
        self.projects.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
        self.projects.setVerticalScrollMode(
            QtGui.QAbstractItemView.ScrollPerPixel)
        self.projects.setMovement(QtGui.QListView.Static)
        self.projects.setFlow(QtGui.QListView.LeftToRight)
        self.projects.setProperty("isWrapping", True)
        self.projects.setResizeMode(QtGui.QListView.Adjust)
        self.projects.setLayoutMode(QtGui.QListView.SinglePass)
        self.projects.setSpacing(5)
        self.projects.setViewMode(QtGui.QListView.IconMode)
        self.projects.setUniformItemSizes(False)
        self.projects.setSelectionRectVisible(False)
        self.projects.setObjectName("projects")
        self.verticalLayout.addWidget(self.projects)
        self.stack.addWidget(self.project_browser_page)
        self.project_page = QtGui.QWidget()
        self.project_page.setObjectName("project_page")
        self.verticalLayout_2 = QtGui.QVBoxLayout(self.project_page)
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.project_subheader = QtGui.QFrame(self.project_page)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
                                       QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.project_subheader.sizePolicy().hasHeightForWidth())
        self.project_subheader.setSizePolicy(sizePolicy)
        self.project_subheader.setMaximumSize(QtCore.QSize(16777215, 60))
        self.project_subheader.setFrameShape(QtGui.QFrame.NoFrame)
        self.project_subheader.setFrameShadow(QtGui.QFrame.Plain)
        self.project_subheader.setLineWidth(1)
        self.project_subheader.setMidLineWidth(0)
        self.project_subheader.setObjectName("project_subheader")
        self.horizontalLayout_4 = QtGui.QHBoxLayout(self.project_subheader)
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.spacer_button_1 = QtGui.QPushButton(self.project_subheader)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.spacer_button_1.sizePolicy().hasHeightForWidth())
        self.spacer_button_1.setSizePolicy(sizePolicy)
        self.spacer_button_1.setMinimumSize(QtCore.QSize(10, 0))
        self.spacer_button_1.setMaximumSize(QtCore.QSize(10, 16777215))
        self.spacer_button_1.setBaseSize(QtCore.QSize(10, 0))
        self.spacer_button_1.setFocusPolicy(QtCore.Qt.NoFocus)
        self.spacer_button_1.setText("")
        self.spacer_button_1.setFlat(True)
        self.spacer_button_1.setObjectName("spacer_button_1")
        self.horizontalLayout_4.addWidget(self.spacer_button_1)
        self.project_arrow = QtGui.QPushButton(self.project_subheader)
        self.project_arrow.setMaximumSize(QtCore.QSize(30, 62))
        self.project_arrow.setFocusPolicy(QtCore.Qt.NoFocus)
        self.project_arrow.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/tk-desktop/back_arrow.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.project_arrow.setIcon(icon2)
        self.project_arrow.setIconSize(QtCore.QSize(20, 20))
        self.project_arrow.setFlat(True)
        self.project_arrow.setObjectName("project_arrow")
        self.horizontalLayout_4.addWidget(self.project_arrow)
        spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_4.addItem(spacerItem2)
        self.project_icon = QtGui.QLabel(self.project_subheader)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.project_icon.sizePolicy().hasHeightForWidth())
        self.project_icon.setSizePolicy(sizePolicy)
        self.project_icon.setMaximumSize(QtCore.QSize(42, 42))
        self.project_icon.setText("")
        self.project_icon.setPixmap(
            QtGui.QPixmap(":/tk-desktop/missing_thumbnail_project.png"))
        self.project_icon.setScaledContents(True)
        self.project_icon.setMargin(5)
        self.project_icon.setObjectName("project_icon")
        self.horizontalLayout_4.addWidget(self.project_icon)
        self.project_name = QtGui.QLabel(self.project_subheader)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
                                       QtGui.QSizePolicy.MinimumExpanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.project_name.sizePolicy().hasHeightForWidth())
        self.project_name.setSizePolicy(sizePolicy)
        self.project_name.setMaximumSize(QtCore.QSize(280, 16777215))
        self.project_name.setMargin(5)
        self.project_name.setObjectName("project_name")
        self.horizontalLayout_4.addWidget(self.project_name)
        spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_4.addItem(spacerItem3)
        self.project_menu = QtGui.QToolButton(self.project_subheader)
        self.project_menu.setFocusPolicy(QtCore.Qt.NoFocus)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/tk-desktop/down_arrow.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.project_menu.setIcon(icon3)
        self.project_menu.setIconSize(QtCore.QSize(20, 20))
        self.project_menu.setPopupMode(QtGui.QToolButton.InstantPopup)
        self.project_menu.setObjectName("project_menu")
        self.horizontalLayout_4.addWidget(self.project_menu)
        self.spacer_button_4 = QtGui.QPushButton(self.project_subheader)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.spacer_button_4.sizePolicy().hasHeightForWidth())
        self.spacer_button_4.setSizePolicy(sizePolicy)
        self.spacer_button_4.setMinimumSize(QtCore.QSize(10, 0))
        self.spacer_button_4.setMaximumSize(QtCore.QSize(10, 16777215))
        self.spacer_button_4.setBaseSize(QtCore.QSize(10, 0))
        self.spacer_button_4.setFocusPolicy(QtCore.Qt.NoFocus)
        self.spacer_button_4.setText("")
        self.spacer_button_4.setFlat(True)
        self.spacer_button_4.setObjectName("spacer_button_4")
        self.horizontalLayout_4.addWidget(self.spacer_button_4)
        self.verticalLayout_2.addWidget(self.project_subheader)
        self.configuration_frame = QtGui.QFrame(self.project_page)
        self.configuration_frame.setFrameShape(QtGui.QFrame.NoFrame)
        self.configuration_frame.setFrameShadow(QtGui.QFrame.Plain)
        self.configuration_frame.setObjectName("configuration_frame")
        self.horizontalLayout_8 = QtGui.QHBoxLayout(self.configuration_frame)
        self.horizontalLayout_8.setSpacing(0)
        self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        spacerItem4 = QtGui.QSpacerItem(150, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_8.addItem(spacerItem4)
        self.configuration_name = QtGui.QLabel(self.configuration_frame)
        self.configuration_name.setAlignment(QtCore.Qt.AlignCenter)
        self.configuration_name.setObjectName("configuration_name")
        self.horizontalLayout_8.addWidget(self.configuration_name)
        self.configuration_label = QtGui.QLabel(self.configuration_frame)
        self.configuration_label.setAlignment(QtCore.Qt.AlignRight
                                              | QtCore.Qt.AlignTrailing
                                              | QtCore.Qt.AlignVCenter)
        self.configuration_label.setObjectName("configuration_label")
        self.horizontalLayout_8.addWidget(self.configuration_label)
        self.horizontalLayout_8.setStretch(0, 1)
        self.horizontalLayout_8.setStretch(1, 1)
        self.horizontalLayout_8.setStretch(2, 1)
        self.verticalLayout_2.addWidget(self.configuration_frame)
        self.project_commands = GroupingListView(self.project_page)
        self.project_commands.setMouseTracking(True)
        self.project_commands.setFocusPolicy(QtCore.Qt.NoFocus)
        self.project_commands.setFrameShape(QtGui.QFrame.NoFrame)
        self.project_commands.setFrameShadow(QtGui.QFrame.Plain)
        self.project_commands.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.project_commands.setAutoScroll(False)
        self.project_commands.setEditTriggers(
            QtGui.QAbstractItemView.NoEditTriggers)
        self.project_commands.setProperty("showDropIndicator", False)
        self.project_commands.setDragDropMode(
            QtGui.QAbstractItemView.NoDragDrop)
        self.project_commands.setTextElideMode(QtCore.Qt.ElideMiddle)
        self.project_commands.setVerticalScrollMode(
            QtGui.QAbstractItemView.ScrollPerPixel)
        self.project_commands.setMovement(QtGui.QListView.Static)
        self.project_commands.setFlow(QtGui.QListView.LeftToRight)
        self.project_commands.setProperty("isWrapping", True)
        self.project_commands.setResizeMode(QtGui.QListView.Adjust)
        self.project_commands.setLayoutMode(QtGui.QListView.Batched)
        self.project_commands.setViewMode(QtGui.QListView.IconMode)
        self.project_commands.setWordWrap(True)
        self.project_commands.setSelectionRectVisible(False)
        self.project_commands.setObjectName("project_commands")
        self.verticalLayout_2.addWidget(self.project_commands)
        self.stack.addWidget(self.project_page)
        self.border_layout.addWidget(self.stack)
        self.footer = QtGui.QFrame(self.center)
        self.footer.setMouseTracking(True)
        self.footer.setFrameShape(QtGui.QFrame.NoFrame)
        self.footer.setFrameShadow(QtGui.QFrame.Plain)
        self.footer.setObjectName("footer")
        self.horizontalLayout_3 = QtGui.QHBoxLayout(self.footer)
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setContentsMargins(10, 5, 10, 5)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.shotgun_button = QtGui.QPushButton(self.footer)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum,
                                       QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.shotgun_button.sizePolicy().hasHeightForWidth())
        self.shotgun_button.setSizePolicy(sizePolicy)
        self.shotgun_button.setMinimumSize(QtCore.QSize(132, 26))
        self.shotgun_button.setMaximumSize(QtCore.QSize(132, 26))
        self.shotgun_button.setMouseTracking(True)
        self.shotgun_button.setFocusPolicy(QtCore.Qt.NoFocus)
        icon4 = QtGui.QIcon()
        icon4.addPixmap(
            QtGui.QPixmap(":/tk-desktop/shotgun_logo_light_medium.png"),
            QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.shotgun_button.setIcon(icon4)
        self.shotgun_button.setIconSize(QtCore.QSize(122, 16))
        self.shotgun_button.setFlat(True)
        self.shotgun_button.setObjectName("shotgun_button")
        self.horizontalLayout_3.addWidget(self.shotgun_button)
        spacerItem5 = QtGui.QSpacerItem(173, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem5)
        self.user_button = QtGui.QPushButton(self.footer)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.user_button.sizePolicy().hasHeightForWidth())
        self.user_button.setSizePolicy(sizePolicy)
        self.user_button.setMinimumSize(QtCore.QSize(40, 40))
        self.user_button.setMaximumSize(QtCore.QSize(40, 40))
        self.user_button.setMouseTracking(True)
        self.user_button.setFocusPolicy(QtCore.Qt.NoFocus)
        self.user_button.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap(":/tk-desktop/default_user_thumb.png"),
                        QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.user_button.setIcon(icon5)
        self.user_button.setIconSize(QtCore.QSize(30, 30))
        self.user_button.setFlat(True)
        self.user_button.setObjectName("user_button")
        self.horizontalLayout_3.addWidget(self.user_button)
        self.border_layout.addWidget(self.footer)
        DesktopWindow.setCentralWidget(self.center)
        self.actionQuit = QtGui.QAction(DesktopWindow)
        self.actionQuit.setObjectName("actionQuit")
        self.actionPin_to_Menu = QtGui.QAction(DesktopWindow)
        self.actionPin_to_Menu.setObjectName("actionPin_to_Menu")
        self.actionSign_Out = QtGui.QAction(DesktopWindow)
        self.actionSign_Out.setObjectName("actionSign_Out")
        self.actionKeep_on_Top = QtGui.QAction(DesktopWindow)
        self.actionKeep_on_Top.setCheckable(True)
        self.actionKeep_on_Top.setObjectName("actionKeep_on_Top")
        self.actionProject_Filesystem_Folder = QtGui.QAction(DesktopWindow)
        self.actionProject_Filesystem_Folder.setObjectName(
            "actionProject_Filesystem_Folder")
        self.actionPreferences = QtGui.QAction(DesktopWindow)
        self.actionPreferences.setObjectName("actionPreferences")
        self.actionShow_Console = QtGui.QAction(DesktopWindow)
        self.actionShow_Console.setObjectName("actionShow_Console")
        self.actionRefresh_Projects = QtGui.QAction(DesktopWindow)
        self.actionRefresh_Projects.setObjectName("actionRefresh_Projects")

        self.retranslateUi(DesktopWindow)
        self.stack.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(DesktopWindow)
        DesktopWindow.setTabOrder(self.projects, self.user_button)
        DesktopWindow.setTabOrder(self.user_button, self.search_button)
        DesktopWindow.setTabOrder(self.search_button, self.search_text)
        DesktopWindow.setTabOrder(self.search_text, self.project_commands)
    def setupUi(self, Wizard):
        Wizard.setObjectName("Wizard")
        Wizard.resize(701, 528)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/res/shotgun_logo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Wizard.setWindowIcon(icon)
        Wizard.setModal(True)
        Wizard.setWizardStyle(QtGui.QWizard.ModernStyle)
        Wizard.setOptions(QtGui.QWizard.CancelButtonOnLeft|QtGui.QWizard.HaveHelpButton|QtGui.QWizard.NoBackButtonOnLastPage)
        Wizard.setTitleFormat(QtCore.Qt.RichText)
        Wizard.setSubTitleFormat(QtCore.Qt.RichText)
        self.setup_type_page = SetupTypePage()
        self.setup_type_page.setObjectName("setup_type_page")
        self.verticalLayout = QtGui.QVBoxLayout(self.setup_type_page)
        self.verticalLayout.setContentsMargins(25, 20, 25, 20)
        self.verticalLayout.setObjectName("verticalLayout")
        self.setup_type_subheader = QtGui.QLabel(self.setup_type_page)
        self.setup_type_subheader.setStyleSheet("font-size: 14px;")
        self.setup_type_subheader.setWordWrap(True)
        self.setup_type_subheader.setObjectName("setup_type_subheader")
        self.verticalLayout.addWidget(self.setup_type_subheader)
        spacerItem = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem)
        self.select_standard = QtGui.QRadioButton(self.setup_type_page)
        self.select_standard.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_standard.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}\n"
"")
        self.select_standard.setChecked(True)
        self.select_standard.setObjectName("select_standard")
        self.verticalLayout.addWidget(self.select_standard)
        self.label_standard = QtGui.QLabel(self.setup_type_page)
        self.label_standard.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_standard.setIndent(20)
        self.label_standard.setObjectName("label_standard")
        self.verticalLayout.addWidget(self.label_standard)
        spacerItem1 = QtGui.QSpacerItem(20, 10, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem1)
        self.select_project = QtGui.QRadioButton(self.setup_type_page)
        self.select_project.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_project.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}\n"
"")
        self.select_project.setObjectName("select_project")
        self.verticalLayout.addWidget(self.select_project)
        self.label_project = QtGui.QLabel(self.setup_type_page)
        self.label_project.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_project.setIndent(20)
        self.label_project.setObjectName("label_project")
        self.verticalLayout.addWidget(self.label_project)
        spacerItem2 = QtGui.QSpacerItem(20, 10, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem2)
        self.select_github = QtGui.QRadioButton(self.setup_type_page)
        self.select_github.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_github.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}\n"
"")
        self.select_github.setObjectName("select_github")
        self.verticalLayout.addWidget(self.select_github)
        self.label_github = QtGui.QLabel(self.setup_type_page)
        self.label_github.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_github.setIndent(20)
        self.label_github.setObjectName("label_github")
        self.verticalLayout.addWidget(self.label_github)
        spacerItem3 = QtGui.QSpacerItem(20, 10, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout.addItem(spacerItem3)
        self.select_disk = QtGui.QRadioButton(self.setup_type_page)
        self.select_disk.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_disk.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}\n"
"")
        self.select_disk.setObjectName("select_disk")
        self.verticalLayout.addWidget(self.select_disk)
        self.label_disk = QtGui.QLabel(self.setup_type_page)
        self.label_disk.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_disk.setIndent(20)
        self.label_disk.setObjectName("label_disk")
        self.verticalLayout.addWidget(self.label_disk)
        spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem4)
        self.verticalLayout.setStretch(13, 1)
        Wizard.addPage(self.setup_type_page)
        self.default_configs_page = DefaultConfigPage()
        self.default_configs_page.setObjectName("default_configs_page")
        self.verticalLayout_3 = QtGui.QVBoxLayout(self.default_configs_page)
        self.verticalLayout_3.setContentsMargins(25, 20, 25, 20)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.default_configs_subheader = QtGui.QLabel(self.default_configs_page)
        self.default_configs_subheader.setStyleSheet("font-size: 14px;")
        self.default_configs_subheader.setWordWrap(True)
        self.default_configs_subheader.setObjectName("default_configs_subheader")
        self.verticalLayout_3.addWidget(self.default_configs_subheader)
        self.scrollArea = QtGui.QScrollArea(self.default_configs_page)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtGui.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 629, 312))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.verticalLayout_11 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents)
        self.verticalLayout_11.setObjectName("verticalLayout_11")
        self.select_default_config = QtGui.QRadioButton(self.scrollAreaWidgetContents)
        self.select_default_config.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_default_config.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}")
        self.select_default_config.setChecked(True)
        self.select_default_config.setObjectName("select_default_config")
        self.verticalLayout_11.addWidget(self.select_default_config)
        self.label_default_config = QtGui.QLabel(self.scrollAreaWidgetContents)
        self.label_default_config.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_default_config.setWordWrap(True)
        self.label_default_config.setIndent(20)
        self.label_default_config.setObjectName("label_default_config")
        self.verticalLayout_11.addWidget(self.label_default_config)
        self.select_multiroot_config = QtGui.QRadioButton(self.scrollAreaWidgetContents)
        self.select_multiroot_config.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_multiroot_config.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}")
        self.select_multiroot_config.setObjectName("select_multiroot_config")
        self.verticalLayout_11.addWidget(self.select_multiroot_config)
        self.label_multiroot_config = QtGui.QLabel(self.scrollAreaWidgetContents)
        self.label_multiroot_config.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_multiroot_config.setWordWrap(True)
        self.label_multiroot_config.setIndent(20)
        self.label_multiroot_config.setObjectName("label_multiroot_config")
        self.verticalLayout_11.addWidget(self.label_multiroot_config)
        self.select_flame_config = QtGui.QRadioButton(self.scrollAreaWidgetContents)
        self.select_flame_config.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_flame_config.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}")
        self.select_flame_config.setObjectName("select_flame_config")
        self.verticalLayout_11.addWidget(self.select_flame_config)
        self.label_multiroot_config_2 = QtGui.QLabel(self.scrollAreaWidgetContents)
        self.label_multiroot_config_2.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_multiroot_config_2.setWordWrap(True)
        self.label_multiroot_config_2.setIndent(20)
        self.label_multiroot_config_2.setObjectName("label_multiroot_config_2")
        self.verticalLayout_11.addWidget(self.label_multiroot_config_2)
        self.select_games_config = QtGui.QRadioButton(self.scrollAreaWidgetContents)
        self.select_games_config.setFocusPolicy(QtCore.Qt.NoFocus)
        self.select_games_config.setStyleSheet("QRadioButton {\n"
"    font-size: 16px;\n"
"}")
        self.select_games_config.setObjectName("select_games_config")
        self.verticalLayout_11.addWidget(self.select_games_config)
        self.label_games_config = QtGui.QLabel(self.scrollAreaWidgetContents)
        self.label_games_config.setStyleSheet("font-size: 12px;\n"
"color: rgb(160, 160, 160);")
        self.label_games_config.setWordWrap(True)
        self.label_games_config.setIndent(20)
        self.label_games_config.setObjectName("label_games_config")
        self.verticalLayout_11.addWidget(self.label_games_config)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.verticalLayout_3.addWidget(self.scrollArea)
        self.default_configs_errors = QtGui.QLabel(self.default_configs_page)
        self.default_configs_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.default_configs_errors.setText("")
        self.default_configs_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.default_configs_errors.setWordWrap(True)
        self.default_configs_errors.setObjectName("default_configs_errors")
        self.verticalLayout_3.addWidget(self.default_configs_errors)
        Wizard.addPage(self.default_configs_page)
        self.project_config_page = ProjectConfigPage()
        self.project_config_page.setObjectName("project_config_page")
        self.verticalLayout_2 = QtGui.QVBoxLayout(self.project_config_page)
        self.verticalLayout_2.setContentsMargins(25, 20, 25, 20)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.project_config_subheader = QtGui.QLabel(self.project_config_page)
        self.project_config_subheader.setStyleSheet("font-size: 14px;")
        self.project_config_subheader.setWordWrap(True)
        self.project_config_subheader.setObjectName("project_config_subheader")
        self.verticalLayout_2.addWidget(self.project_config_subheader)
        spacerItem5 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout_2.addItem(spacerItem5)
        self.project_list = QtGui.QListView(self.project_config_page)
        self.project_list.setFrameShape(QtGui.QFrame.NoFrame)
        self.project_list.setFrameShadow(QtGui.QFrame.Plain)
        self.project_list.setAutoScroll(False)
        self.project_list.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.project_list.setProperty("showDropIndicator", False)
        self.project_list.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
        self.project_list.setTextElideMode(QtCore.Qt.ElideNone)
        self.project_list.setMovement(QtGui.QListView.Static)
        self.project_list.setFlow(QtGui.QListView.LeftToRight)
        self.project_list.setProperty("isWrapping", True)
        self.project_list.setResizeMode(QtGui.QListView.Adjust)
        self.project_list.setLayoutMode(QtGui.QListView.Batched)
        self.project_list.setSpacing(10)
        self.project_list.setViewMode(QtGui.QListView.IconMode)
        self.project_list.setUniformItemSizes(True)
        self.project_list.setWordWrap(True)
        self.project_list.setSelectionRectVisible(False)
        self.project_list.setObjectName("project_list")
        self.verticalLayout_2.addWidget(self.project_list)
        self.project_errors = QtGui.QLabel(self.project_config_page)
        self.project_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.project_errors.setText("")
        self.project_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.project_errors.setWordWrap(True)
        self.project_errors.setObjectName("project_errors")
        self.verticalLayout_2.addWidget(self.project_errors)
        Wizard.addPage(self.project_config_page)
        self.github_config_page = GithubConfigPage()
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.github_config_page.sizePolicy().hasHeightForWidth())
        self.github_config_page.setSizePolicy(sizePolicy)
        self.github_config_page.setObjectName("github_config_page")
        self.verticalLayout_6 = QtGui.QVBoxLayout(self.github_config_page)
        self.verticalLayout_6.setSpacing(0)
        self.verticalLayout_6.setContentsMargins(25, 20, 25, 20)
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.github_config_subheader = QtGui.QLabel(self.github_config_page)
        self.github_config_subheader.setStyleSheet("font-size: 14px;")
        self.github_config_subheader.setWordWrap(True)
        self.github_config_subheader.setObjectName("github_config_subheader")
        self.verticalLayout_6.addWidget(self.github_config_subheader)
        spacerItem6 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout_6.addItem(spacerItem6)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setSpacing(20)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.octocat = QtGui.QLabel(self.github_config_page)
        self.octocat.setMaximumSize(QtCore.QSize(200, 200))
        self.octocat.setText("")
        self.octocat.setPixmap(QtGui.QPixmap(":/tk-framework-adminui/setup_project/octocats/original.png"))
        self.octocat.setScaledContents(True)
        self.octocat.setObjectName("octocat")
        self.horizontalLayout.addWidget(self.octocat)
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setSpacing(20)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        spacerItem7 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_4.addItem(spacerItem7)
        self.github_url = QtGui.QLineEdit(self.github_config_page)
        self.github_url.setText("")
        self.github_url.setObjectName("github_url")
        self.verticalLayout_4.addWidget(self.github_url)
        self.label = QtGui.QLabel(self.github_config_page)
        self.label.setObjectName("label")
        self.verticalLayout_4.addWidget(self.label)
        spacerItem8 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_4.addItem(spacerItem8)
        self.horizontalLayout.addLayout(self.verticalLayout_4)
        self.horizontalLayout.setStretch(1, 1)
        self.verticalLayout_6.addLayout(self.horizontalLayout)
        self.github_errors = QtGui.QLabel(self.github_config_page)
        self.github_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.github_errors.setText("")
        self.github_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.github_errors.setWordWrap(True)
        self.github_errors.setObjectName("github_errors")
        self.verticalLayout_6.addWidget(self.github_errors)
        Wizard.addPage(self.github_config_page)
        self.disk_config_page = DiskConfigPage()
        self.disk_config_page.setObjectName("disk_config_page")
        self.verticalLayout_8 = QtGui.QVBoxLayout(self.disk_config_page)
        self.verticalLayout_8.setContentsMargins(25, 20, 25, 20)
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.disk_config_subheader = QtGui.QLabel(self.disk_config_page)
        self.disk_config_subheader.setStyleSheet("font-size: 14px;")
        self.disk_config_subheader.setWordWrap(True)
        self.disk_config_subheader.setObjectName("disk_config_subheader")
        self.verticalLayout_8.addWidget(self.disk_config_subheader)
        spacerItem9 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.verticalLayout_8.addItem(spacerItem9)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(20)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.folder_icon = QtGui.QLabel(self.disk_config_page)
        self.folder_icon.setMaximumSize(QtCore.QSize(200, 200))
        self.folder_icon.setText("")
        self.folder_icon.setPixmap(QtGui.QPixmap(":/tk-framework-adminui/setup_project/shotgun_folder.png"))
        self.folder_icon.setScaledContents(True)
        self.folder_icon.setObjectName("folder_icon")
        self.horizontalLayout_2.addWidget(self.folder_icon)
        self.verticalLayout_7 = QtGui.QVBoxLayout()
        self.verticalLayout_7.setSpacing(20)
        self.verticalLayout_7.setObjectName("verticalLayout_7")
        spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_7.addItem(spacerItem10)
        self.horizontalLayout_4 = QtGui.QHBoxLayout()
        self.horizontalLayout_4.setSpacing(20)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.path = QtGui.QLineEdit(self.disk_config_page)
        self.path.setObjectName("path")
        self.horizontalLayout_4.addWidget(self.path)
        self.disk_browse_button = QtGui.QPushButton(self.disk_config_page)
        self.disk_browse_button.setObjectName("disk_browse_button")
        self.horizontalLayout_4.addWidget(self.disk_browse_button)
        self.verticalLayout_7.addLayout(self.horizontalLayout_4)
        self.label_2 = QtGui.QLabel(self.disk_config_page)
        self.label_2.setObjectName("label_2")
        self.verticalLayout_7.addWidget(self.label_2)
        spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_7.addItem(spacerItem11)
        self.horizontalLayout_2.addLayout(self.verticalLayout_7)
        self.horizontalLayout_2.setStretch(1, 1)
        self.verticalLayout_8.addLayout(self.horizontalLayout_2)
        self.disk_errors = QtGui.QLabel(self.disk_config_page)
        self.disk_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.disk_errors.setText("")
        self.disk_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.disk_errors.setWordWrap(True)
        self.disk_errors.setObjectName("disk_errors")
        self.verticalLayout_8.addWidget(self.disk_errors)
        Wizard.addPage(self.disk_config_page)
        self.project_name_page = ProjectNamePage()
        self.project_name_page.setObjectName("project_name_page")
        self.verticalLayout_9 = QtGui.QVBoxLayout(self.project_name_page)
        self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.project_name_scroll_area = QtGui.QScrollArea(self.project_name_page)
        self.project_name_scroll_area.setFocusPolicy(QtCore.Qt.NoFocus)
        self.project_name_scroll_area.setFrameShape(QtGui.QFrame.NoFrame)
        self.project_name_scroll_area.setFrameShadow(QtGui.QFrame.Plain)
        self.project_name_scroll_area.setWidgetResizable(True)
        self.project_name_scroll_area.setObjectName("project_name_scroll_area")
        self.project_name_scroll_area_contents = QtGui.QWidget()
        self.project_name_scroll_area_contents.setGeometry(QtCore.QRect(0, 0, 332, 200))
        self.project_name_scroll_area_contents.setObjectName("project_name_scroll_area_contents")
        self.project_contents_layout = QtGui.QVBoxLayout(self.project_name_scroll_area_contents)
        self.project_contents_layout.setContentsMargins(25, 20, 25, 20)
        self.project_contents_layout.setObjectName("project_contents_layout")
        self.project_name_subheader = QtGui.QLabel(self.project_name_scroll_area_contents)
        self.project_name_subheader.setStyleSheet("font-size: 14px;")
        self.project_name_subheader.setWordWrap(True)
        self.project_name_subheader.setObjectName("project_name_subheader")
        self.project_contents_layout.addWidget(self.project_name_subheader)
        spacerItem12 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.project_contents_layout.addItem(spacerItem12)
        self.project_name = QtGui.QLineEdit(self.project_name_scroll_area_contents)
        self.project_name.setObjectName("project_name")
        self.project_contents_layout.addWidget(self.project_name)
        spacerItem13 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.project_contents_layout.addItem(spacerItem13)
        self.project_directories = QtGui.QLabel(self.project_name_scroll_area_contents)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.project_directories.sizePolicy().hasHeightForWidth())
        self.project_directories.setSizePolicy(sizePolicy)
        self.project_directories.setFrameShape(QtGui.QFrame.NoFrame)
        self.project_directories.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
        self.project_directories.setObjectName("project_directories")
        self.project_contents_layout.addWidget(self.project_directories)
        self.project_name_scroll_area.setWidget(self.project_name_scroll_area_contents)
        self.verticalLayout_9.addWidget(self.project_name_scroll_area)
        spacerItem14 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_9.addItem(spacerItem14)
        self.project_name_errors = QtGui.QLabel(self.project_name_page)
        self.project_name_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.project_name_errors.setText("")
        self.project_name_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.project_name_errors.setWordWrap(True)
        self.project_name_errors.setObjectName("project_name_errors")
        self.verticalLayout_9.addWidget(self.project_name_errors)
        Wizard.addPage(self.project_name_page)
        self.config_location_page = ConfigLocationPage()
        self.config_location_page.setObjectName("config_location_page")
        self.gridLayout_3 = QtGui.QGridLayout(self.config_location_page)
        self.gridLayout_3.setContentsMargins(25, 20, 25, 20)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.mac_browse = QtGui.QPushButton(self.config_location_page)
        self.mac_browse.setEnabled(True)
        self.mac_browse.setObjectName("mac_browse")
        self.gridLayout_3.addWidget(self.mac_browse, 2, 3, 1, 1)
        self.windows_path = QtGui.QLineEdit(self.config_location_page)
        self.windows_path.setObjectName("windows_path")
        self.gridLayout_3.addWidget(self.windows_path, 6, 2, 1, 1)
        self.linux_path = QtGui.QLineEdit(self.config_location_page)
        self.linux_path.setObjectName("linux_path")
        self.gridLayout_3.addWidget(self.linux_path, 5, 2, 1, 1)
        self.config_location_errors = QtGui.QLabel(self.config_location_page)
        self.config_location_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.config_location_errors.setText("")
        self.config_location_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.config_location_errors.setWordWrap(True)
        self.config_location_errors.setObjectName("config_location_errors")
        self.gridLayout_3.addWidget(self.config_location_errors, 8, 0, 1, 4)
        self.linux_browse = QtGui.QPushButton(self.config_location_page)
        self.linux_browse.setEnabled(True)
        self.linux_browse.setObjectName("linux_browse")
        self.gridLayout_3.addWidget(self.linux_browse, 5, 3, 1, 1)
        spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.gridLayout_3.addItem(spacerItem15, 7, 0, 1, 4)
        self.windows_label = QtGui.QLabel(self.config_location_page)
        self.windows_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.windows_label.setObjectName("windows_label")
        self.gridLayout_3.addWidget(self.windows_label, 6, 0, 1, 1)
        self.config_location_subheader = QtGui.QLabel(self.config_location_page)
        self.config_location_subheader.setStyleSheet("font-size: 14px;")
        self.config_location_subheader.setWordWrap(True)
        self.config_location_subheader.setObjectName("config_location_subheader")
        self.gridLayout_3.addWidget(self.config_location_subheader, 0, 0, 1, 4)
        self.windows_browse = QtGui.QPushButton(self.config_location_page)
        self.windows_browse.setEnabled(True)
        self.windows_browse.setObjectName("windows_browse")
        self.gridLayout_3.addWidget(self.windows_browse, 6, 3, 1, 1)
        self.mac_label = QtGui.QLabel(self.config_location_page)
        self.mac_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.mac_label.setObjectName("mac_label")
        self.gridLayout_3.addWidget(self.mac_label, 2, 0, 1, 1)
        self.linux_label = QtGui.QLabel(self.config_location_page)
        self.linux_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.linux_label.setObjectName("linux_label")
        self.gridLayout_3.addWidget(self.linux_label, 5, 0, 1, 1)
        self.mac_path = QtGui.QLineEdit(self.config_location_page)
        self.mac_path.setObjectName("mac_path")
        self.gridLayout_3.addWidget(self.mac_path, 2, 2, 1, 1)
        spacerItem16 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
        self.gridLayout_3.addItem(spacerItem16, 1, 0, 1, 4)
        Wizard.addPage(self.config_location_page)
        self.progress_page = ProgressPage()
        self.progress_page.setObjectName("progress_page")
        self.verticalLayout_5 = QtGui.QVBoxLayout(self.progress_page)
        self.verticalLayout_5.setSpacing(15)
        self.verticalLayout_5.setContentsMargins(25, -1, 25, -1)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        spacerItem17 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_5.addItem(spacerItem17)
        self.message = QtGui.QLabel(self.progress_page)
        self.message.setText("")
        self.message.setObjectName("message")
        self.verticalLayout_5.addWidget(self.message)
        self.progress = QtGui.QProgressBar(self.progress_page)
        self.progress.setObjectName("progress")
        self.verticalLayout_5.addWidget(self.progress)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.additional_details_button = QtGui.QPushButton(self.progress_page)
        self.additional_details_button.setBaseSize(QtCore.QSize(20, 32))
        self.additional_details_button.setFocusPolicy(QtCore.Qt.NoFocus)
        self.additional_details_button.setAutoDefault(False)
        self.additional_details_button.setFlat(False)
        self.additional_details_button.setObjectName("additional_details_button")
        self.horizontalLayout_3.addWidget(self.additional_details_button)
        spacerItem18 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem18)
        self.verticalLayout_5.addLayout(self.horizontalLayout_3)
        self.progress_output = QtGui.QPlainTextEdit(self.progress_page)
        self.progress_output.setFocusPolicy(QtCore.Qt.NoFocus)
        self.progress_output.setUndoRedoEnabled(False)
        self.progress_output.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap)
        self.progress_output.setReadOnly(True)
        self.progress_output.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByKeyboard|QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextBrowserInteraction|QtCore.Qt.TextSelectableByKeyboard|QtCore.Qt.TextSelectableByMouse)
        self.progress_output.setObjectName("progress_output")
        self.verticalLayout_5.addWidget(self.progress_output)
        spacerItem19 = QtGui.QSpacerItem(20, 0, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.verticalLayout_5.addItem(spacerItem19)
        self.complete_errors = QtGui.QLabel(self.progress_page)
        self.complete_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.complete_errors.setText("")
        self.complete_errors.setAlignment(QtCore.Qt.AlignCenter)
        self.complete_errors.setWordWrap(True)
        self.complete_errors.setObjectName("complete_errors")
        self.verticalLayout_5.addWidget(self.complete_errors)
        Wizard.addPage(self.progress_page)
        self.summary_page = QtGui.QWizardPage()
        self.summary_page.setObjectName("summary_page")
        self.gridLayout = QtGui.QGridLayout(self.summary_page)
        self.gridLayout.setContentsMargins(25, 60, 25, 20)
        self.gridLayout.setVerticalSpacing(20)
        self.gridLayout.setObjectName("gridLayout")
        spacerItem20 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem20, 5, 2, 1, 1)
        self.final_message = QtGui.QLabel(self.summary_page)
        self.final_message.setStyleSheet("font-size: 16px;\n"
"color: rgb(141, 143, 143);")
        self.final_message.setTextFormat(QtCore.Qt.RichText)
        self.final_message.setWordWrap(True)
        self.final_message.setOpenExternalLinks(True)
        self.final_message.setObjectName("final_message")
        self.gridLayout.addWidget(self.final_message, 6, 2, 1, 1)
        spacerItem21 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem21, 0, 0, 1, 1)
        spacerItem22 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem22, 0, 6, 1, 1)
        self.setup_complete = QtGui.QLabel(self.summary_page)
        self.setup_complete.setStyleSheet("font-size: 20px;")
        self.setup_complete.setAlignment(QtCore.Qt.AlignCenter)
        self.setup_complete.setObjectName("setup_complete")
        self.gridLayout.addWidget(self.setup_complete, 4, 2, 1, 1)
        self.horizontalLayout_5 = QtGui.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.icon = QtGui.QLabel(self.summary_page)
        self.icon.setMaximumSize(QtCore.QSize(100, 100))
        self.icon.setText("")
        self.icon.setPixmap(QtGui.QPixmap(":/tk-framework-adminui/setup_project/circle_logo.png"))
        self.icon.setScaledContents(True)
        self.icon.setObjectName("icon")
        self.horizontalLayout_5.addWidget(self.icon)
        self.gridLayout.addLayout(self.horizontalLayout_5, 0, 2, 1, 1)
        spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem23, 7, 2, 1, 1)
        Wizard.addPage(self.summary_page)
        self.label_standard.setBuddy(self.select_standard)
        self.label_project.setBuddy(self.select_project)
        self.label_github.setBuddy(self.select_github)
        self.label_disk.setBuddy(self.select_disk)
        self.label_default_config.setBuddy(self.select_standard)
        self.label_multiroot_config.setBuddy(self.select_project)
        self.label_multiroot_config_2.setBuddy(self.select_project)
        self.label_games_config.setBuddy(self.select_github)
        self.octocat.setBuddy(self.github_url)
        self.project_directories.setBuddy(self.project_name)
        self.windows_label.setBuddy(self.windows_path)
        self.mac_label.setBuddy(self.mac_path)
        self.linux_label.setBuddy(self.linux_path)

        self.retranslateUi(Wizard)
        QtCore.QMetaObject.connectSlotsByName(Wizard)
        Wizard.setTabOrder(self.project_list, self.github_url)
        Wizard.setTabOrder(self.github_url, self.path)
        Wizard.setTabOrder(self.path, self.disk_browse_button)
        Wizard.setTabOrder(self.disk_browse_button, self.project_name)
        Wizard.setTabOrder(self.project_name, self.mac_path)
        Wizard.setTabOrder(self.mac_path, self.mac_browse)
        Wizard.setTabOrder(self.mac_browse, self.linux_path)
        Wizard.setTabOrder(self.linux_path, self.linux_browse)
        Wizard.setTabOrder(self.linux_browse, self.windows_path)
        Wizard.setTabOrder(self.windows_path, self.windows_browse)
        Wizard.setTabOrder(self.windows_browse, self.project_name_scroll_area)
Exemple #28
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()
    def __init__(self, store_name, store_info, uri, parent=None):
        BasePage.__init__(self, parent)

        # initialize member variables
        self._uri = uri
        self._store_name = store_name
        self._store_info = store_info
        self._last_page = False

        # setup the UI
        layout = QtGui.QGridLayout(self)
        layout.setContentsMargins(25, 20, 25, 20)
        self.setTitle("<p></p><font size=18>Define %s Storage</font><p></p>" % store_name.title())
        self.setSubTitle("&nbsp;")

        # setup the subtitle
        subtitle = QtGui.QLabel(self)
        subtitle.setWordWrap(True)
        subtitle.setStyleSheet("font-size: 14px;")
        subtitle.setText("""
            <p style="line-height: 130%%">
                Specify where you want Shotgun to store files on disk.<br/>
                If you use multiple operating systems, enter the equivalent path for each.<br/>
            </p>
        """)
        layout.addWidget(subtitle, 0, 0, 1, 4)

        # setup a label to describe the storage
        description = QtGui.QLabel(self)
        description.setWordWrap(True)
        description.setText(
            """
            <p style="line-height: 130%%">
                Storage description:<br/>
                %s
            </p>
        """ % (store_info["description"]))
        layout.addWidget(description, 1, 0, 1, 4)

        # add a spacer between storages
        spacer = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        layout.addItem(spacer, 2, 0, 1, 4)

        # Setup a group of line edits per storage
        os_specifics = [
            # (Label, info_key, current_os)
            ("Mac", "darwin", "/Path/On/Mac", sys.platform == "darwin"),
            ("Linux", "linux2", "/path/on/linux", sys.platform.startswith("linux")),
            ("Windows", "win32", "\\\\Path\\On\\Windows", sys.platform == "win32"),
        ]

        # current os first, then alphabetically
        def os_key(element):
            # return a key that sorts the os'es properly
            (os_display, _, _, os_current) = element
            return (not os_current, os_display)
        os_specifics.sort(key=os_key)

        self._store_path_widgets = {}
        for (i, (os_display, os_key, os_placeholder, os_current)) in enumerate(os_specifics):
            # setup the os widgets
            os_label = QtGui.QLabel("%s" % os_display, self)
            os_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
            os_path = QtGui.QLineEdit(self)
            os_path.setPlaceholderText(os_placeholder)

            # populate with existing paths
            if store_info[os_key]:
                os_path.setText(store_info[os_key])

            # don't allow editing data from Shotgun, too dangerous
            if store_info["defined_in_shotgun"] and store_info[os_key]:
                os_path.setReadOnly(True)
                os_path.setEnabled(False)
                os_path.setToolTip(
                    "Can not edit paths defined Shotgun. This has to be changed in Shotgun's preferences.")

            # keep around the line edits for validation
            self._store_path_widgets[os_key] = os_path

            # only create the browse button for the current os if
            #  the storage is not in Shotgun or
            #  the storage is blank in Shotgun
            create_browse = os_current and (
                not store_info["defined_in_shotgun"] or
                (store_info["defined_in_shotgun"] and not store_info[os_key]))
            if create_browse:
                os_button = QtGui.QPushButton("Browse...", self)

                # connect the button to populate the os specific path
                def generate_on_browse_clicked(path_widget):
                    # generate the slot as a closure to capture the current widget
                    def ret():
                        storage_dir = QtGui.QFileDialog.getExistingDirectory(
                            self, "Choose storage root", None,
                            QtGui.QFileDialog.ShowDirsOnly |
                            QtGui.QFileDialog.DontConfirmOverwrite)
                        path_widget.setText(storage_dir)
                    return ret
                os_button.pressed.connect(generate_on_browse_clicked(os_path))

            # add the widgets to the layout
            layout.addWidget(os_label, 3+i, 0, 1, 1)
            layout.addWidget(os_path, 3+i, 2, 1, 1)
            if create_browse:
                layout.addWidget(os_button, 3+i, 3, 1, 1)

        # add a spacer since
        spacer = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        layout.addItem(spacer, 6, 0, 1, 4)

        # setup a place to report errors
        self.storage_errors = QtGui.QLabel(self)
        self.storage_errors.setWordWrap(True)
        self.storage_errors.setStyleSheet("color: rgb(252, 98, 70);")
        self.storage_errors.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
        layout.addWidget(self.storage_errors, 7, 0, 1, 4)