def create_settings_widget(self, parent): """ Creates a Qt widget, for the supplied parent widget (a container widget on the right side of the publish UI). :param parent: The parent to use for the widget being created :return: A :class:`QtGui.QFrame` that displays editable widgets for modifying the plugin's settings. """ # defer Qt-related imports from sgtk.platform.qt import QtGui, QtCore # Create a QFrame with all our widgets settings_frame = QtGui.QFrame(parent) # Create our widgets, we add them as properties on the QFrame so we can # retrieve them easily. Qt uses camelCase so our xxxx_xxxx names can't # clash with existing Qt properties. # Show this plugin description settings_frame.description_label = QtGui.QLabel(self.description) settings_frame.description_label.setWordWrap(True) settings_frame.description_label.setOpenExternalLinks(True) settings_frame.description_label.setTextFormat(QtCore.Qt.RichText) # Unreal setttings settings_frame.unreal_render_presets_label = QtGui.QLabel( "Render with Movie Pipeline Presets:") settings_frame.unreal_render_presets_widget = QtGui.QComboBox() settings_frame.unreal_render_presets_widget.addItem("No presets") presets_folder = unreal.MovieRenderPipelineProjectSettings( ).preset_save_dir for preset in unreal.EditorAssetLibrary.list_assets( presets_folder.path): settings_frame.unreal_render_presets_widget.addItem( preset.split(".")[0]) settings_frame.unreal_publish_folder_label = QtGui.QLabel( "Publish folder:") storage_roots = self.parent.shotgun.find( "LocalStorage", [], ["code", _OS_LOCAL_STORAGE_PATH_FIELD]) settings_frame.storage_roots_widget = QtGui.QComboBox() settings_frame.storage_roots_widget.addItem("Current Unreal Project") for storage_root in storage_roots: if storage_root[_OS_LOCAL_STORAGE_PATH_FIELD]: settings_frame.storage_roots_widget.addItem( "%s (%s)" % (storage_root["code"], storage_root[_OS_LOCAL_STORAGE_PATH_FIELD]), userData=storage_root, ) # Create the layout to use within the QFrame settings_layout = QtGui.QVBoxLayout() settings_layout.addWidget(settings_frame.description_label) settings_layout.addWidget(settings_frame.unreal_render_presets_label) settings_layout.addWidget(settings_frame.unreal_render_presets_widget) settings_layout.addWidget(settings_frame.unreal_publish_folder_label) settings_layout.addWidget(settings_frame.storage_roots_widget) settings_layout.addStretch() settings_frame.setLayout(settings_layout) return settings_frame
def __init__(self, parent): super(EnvImporter, self).__init__(parent) self.state = { 'projects': None, 'project': None, 'environments': None, 'environment': None, } # Can't get this search widget to work right... # search = sgtk.platform.import_framework( # "tk-framework-qtwidgets", # "shotgun_search_widget", # ) # self.project_search = search.GlobalSearchWidget(self) # self.project_search.set_searchable_entity_types({'Project': []}) # self.project_search.set_placeholder_text('Search for Project') # self.project_search.entity_activated.connect(self.on_entity_activated) # Create widgets self.project_search = QtGui.QComboBox() self.env_list = QtGui.QComboBox() self.engine = QtGui.QLineEdit() self.engine.setReadOnly(True) self.engine.setFocusPolicy(QtCore.Qt.NoFocus) self.req_list = QtGui.QListWidget() self.import_button = QtGui.QPushButton('Import') self.cancel_button = QtGui.QPushButton('Cancel') # Layout widgets button_layout = QtGui.QHBoxLayout() button_layout.addWidget(self.import_button) button_layout.addWidget(self.cancel_button) layout = QtGui.QVBoxLayout() layout.addWidget(QtGui.QLabel('Project')) layout.addWidget(self.project_search) layout.addWidget(QtGui.QLabel('Environment')) layout.addWidget(self.env_list) layout.addWidget(QtGui.QLabel('Engine')) layout.addWidget(self.engine) layout.addWidget(QtGui.QLabel('Requires')) layout.addWidget(self.req_list) layout.addLayout(button_layout) self.setLayout(layout) # Connect widgets self.project_search.activated.connect(self.on_project_changed) self.env_list.activated.connect(self.on_env_changed) self.import_button.clicked.connect(self.on_import_clicked) self.cancel_button.clicked.connect(self.on_cancel_clicked) self.setWindowTitle('Import Environments') self.setWindowIcon(QtGui.QIcon(res.get_path('icon_dark_256.png'))) self.update_projects()
def __setup_ui(self): """ Creates and lays out all the Qt widgets :return: """ layout = QtGui.QVBoxLayout() layout.setAlignment(QtCore.Qt.AlignLeft) self.setLayout(layout) # Create a check box to hold the state of whether we should set the task in review. self.review_cbx = QtGui.QCheckBox("Set task to in review") # Create a Combobox to list and chose the reviewers. self.reviewer_cmbx = QtGui.QComboBox() self.reviewer_cmbx.setAccessibleName("Reviewer selection dropdown") self.reviewer_lbl = QtGui.QLabel("Select reviewer") self.reviewer_layout = QtGui.QHBoxLayout() self.reviewer_layout.addWidget(self.reviewer_cmbx) self.reviewer_layout.addWidget(self.reviewer_lbl) sp = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Maximum) self.review_cbx.setSizePolicy(sp) self.reviewer_cmbx.setSizePolicy(sp) layout.addWidget(self.review_cbx) layout.setAlignment(self.review_cbx, QtCore.Qt.AlignLeft) layout.addLayout(self.reviewer_layout)
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)
def __init__(self, parent=None): super(versionWidgetCombo, self).__init__(parent) self.versionDatas = [] self.pathToMovie = None self.masterLayout = QtGui.QVBoxLayout() self.masterLayout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.masterLayout) self.layout = QtGui.QHBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) titleLabel = QtGui.QLabel("Create Note", parent=self) #titleLabel.setStyleSheet("QLabel { background-color : red; color : blue; }"); font = QtGui.QFont("", 10, QtGui.QFont.Bold) titleLabel.setFont(font) titleLabel.setAlignment(QtCore.Qt.AlignCenter) self.masterLayout.addWidget(titleLabel) self.masterLayout.addLayout(self.layout) self.pic = loadingWidget(parent=self) # ####self.pic.setMaximumWidth(50) infoLayout = QtGui.QVBoxLayout() infoLayout.setAlignment(QtCore.Qt.AlignTop) self.layout.addLayout(infoLayout) self.layout.addStretch() self.layout.addWidget(self.pic, QtCore.Qt.AlignLeft) self.versionQtCombo = QtGui.QComboBox(parent=self) self.nameQt = QtGui.QLabel("", parent=self) self.userQt = QtGui.QLabel("", parent=self) self.dateQt = QtGui.QLabel("", parent=self) self.taskQt = QtGui.QLabel("", parent=self) comboLayout = QtGui.QHBoxLayout() comboLayout.setContentsMargins(0, 0, 0, 0) comboLayout.addWidget(QtGui.QLabel("Link to version : ", parent=self)) comboLayout.addWidget(self.versionQtCombo, QtCore.Qt.AlignLeft) infoLayout.addLayout(comboLayout) infoLayout.addWidget(self.nameQt) infoLayout.addWidget(self.userQt) infoLayout.addWidget(self.dateQt) infoLayout.addWidget(self.taskQt) infoLayout.addSpacing(100) #infoLayout.addStretch() infoLayout.setContentsMargins(0, 0, 0, 0) infoLayout.setSpacing(0) self.layout.addSpacing(5) self.versionQtCombo.currentIndexChanged.connect(self.setVersionValue)
def create_settings_widget(self, parent, items=None): """ Creates a Qt widget, for the supplied parent widget (a container widget on the right side of the publish UI). :param parent: The parent to use for the widget being created. :param items: A list of PublishItems the selected publish tasks are parented to. :return: A QtGui.QWidget or subclass that displays information about the plugin and/or editable widgets for modifying the plugin's settings. """ # defer Qt-related imports from sgtk.platform.qt import QtCore, QtGui # The main widget widget = QtGui.QWidget(parent) widget_layout = QtGui.QVBoxLayout() # create a group box to display the description description_group_box = QtGui.QGroupBox(widget) description_group_box.setTitle("Description:") # Defer setting the description text, this will be updated when # the version type combobox value is changed description_label = QtGui.QLabel() description_label.setWordWrap(True) description_label.setOpenExternalLinks(True) description_label.setTextFormat(QtCore.Qt.RichText) # create the layout to use within the group box description_layout = QtGui.QVBoxLayout() description_layout.addWidget(description_label) description_layout.addStretch() description_group_box.setLayout(description_layout) # Add a combobox to edit the version type option version_type_combobox = QtGui.QComboBox(widget) version_type_combobox.setAccessibleName( "Version type selection dropdown") version_type_combobox.addItems(self.VERSION_TYPE_OPTIONS) # Hook up the signal/slot to update the description according to the current version type version_type_combobox.currentIndexChanged.connect( lambda index: self._on_version_type_changed( version_type_combobox.currentText(), description_label)) # Add all the minor widgets to the main widget widget_layout.addWidget(description_group_box) widget_layout.addWidget(version_type_combobox) widget.setLayout(widget_layout) # Set the widget property to store the combobox to access in get_ui_settings and set_ui_settings widget.setProperty("description_label", description_label) widget.setProperty("version_type_combobox", version_type_combobox) return widget
def _build_cut_type_layout(self, properties): """ Returns layout with a Label and QComboBox with a list of cut types. :param properties: A dict containing the 'sg_cut_type' preset :return: QtGui.QLayout - for the cut type widget """ tooltip = "What to populate in the `Type` field for this Cut in Shotgun" # ---- construct the widget # populate the list of cut types and default from the site schema schema = self.app.shotgun.schema_field_read("Cut", "sg_cut_type") cut_types = schema["sg_cut_type"]["properties"]["valid_values"][ "value"] # make sure we have an empty item at the top cut_types.insert(0, "") # create a combo box for the cut types cut_type_widget = QtGui.QComboBox() cut_type_widget.setToolTip(tooltip) cut_type_widget.addItems(cut_types) # make sure the current value is set current_value = properties["sg_cut_type"] index = cut_type_widget.findText(current_value) if index > 0: # found a match cut_type_widget.setCurrentIndex(index) else: # empty value cut_type_widget.setCurrentIndex(0) # a callback to update the property dict when the value changes def value_changed(new_value): properties["sg_cut_type"] = new_value # connect the widget index changed to the callback cut_type_widget.currentIndexChanged[str].connect(value_changed) # ---- construct the layout with a label cut_type_label = QtGui.QLabel("Cut Type:") cut_type_label.setToolTip(tooltip) cut_type_layout = QtGui.QHBoxLayout() cut_type_layout.addWidget(cut_type_label) cut_type_layout.addWidget(cut_type_widget) cut_type_layout.addStretch() return cut_type_layout
def create_item(self, spec_set): item = QtGui.QTreeWidgetItem(parent=self) item.spec_set = spec_set item.setText(Name, spec_set.selection.name) item.setText(Version, spec_set.selection.version.string) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsDragEnabled) # Add versions combobox item.combo_box = QtGui.QComboBox(parent=self) item.combo_box.setFocusPolicy(QtCore.Qt.NoFocus) for spec in item.spec_set.module_specs: item.combo_box.addItem(spec.version.string) item.combo_box.setCurrentIndex(spec_set.selection_index) item.combo_box.currentIndexChanged.connect( partial(self.on_version_changed, item)) return item
def __init__(self, name, data, parent=None): """ Initialize the class. :param name: The node name. :type name: str :param data: The data used to populate this node. :type data: dict :type parent: QtGui.QWidget """ super(LookFilePublishWidgetItem, self).__init__(parent=None) self.__name = name layout = QtGui.QHBoxLayout() self.setLayout(layout) label = QtGui.QLabel(self.__name, parent=self) layout.addWidget(label) self._combo = QtGui.QComboBox(parent=self) layout.addWidget(self._combo) self._populate(self._combo, data)
def setupUi(self, FileSaveForm): FileSaveForm.setObjectName("FileSaveForm") FileSaveForm.resize(850, 539) self.verticalLayout = QtGui.QVBoxLayout(FileSaveForm) self.verticalLayout.setSpacing(4) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_3 = QtGui.QVBoxLayout() self.verticalLayout_3.setContentsMargins(12, 12, 12, 4) self.verticalLayout_3.setObjectName("verticalLayout_3") self.gridLayout_2 = QtGui.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setSpacing(1) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.expand_checkbox = QtGui.QCheckBox(FileSaveForm) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.expand_checkbox.sizePolicy().hasHeightForWidth()) self.expand_checkbox.setSizePolicy(sizePolicy) self.expand_checkbox.setMaximumSize(QtCore.QSize(16777215, 24)) self.expand_checkbox.setStyleSheet( "#expand_checkbox::indicator {\n" "width: 24;\n" "height: 24;\n" "}\n" "\n" "#expand_checkbox::indicator::unchecked {\n" " image: url(:/tk-multi-workfiles2/save_expand.png);\n" "\n" "}\n" "\n" "#expand_checkbox::indicator::unchecked::hover {\n" " image: url(:/tk-multi-workfiles2/save_expand_hover.png);\n" "}\n" "\n" "#expand_checkbox::indicator::unchecked::pressed {\n" " image: url(:/tk-multi-workfiles2/save_expand_pressed.png);\n" "}\n" "\n" "#expand_checkbox::indicator::checked {\n" " image: url(:/tk-multi-workfiles2/save_collapse.png);\n" "}\n" "\n" "#expand_checkbox::indicator::checked:hover {\n" " image: url(:/tk-multi-workfiles2/save_collapse_hover.png);\n" "}\n" "\n" "#expand_checkbox::indicator::checked:pressed {\n" " image: url(:/tk-multi-workfiles2/save_collapse_pressed.png);\n" "}") self.expand_checkbox.setText("") self.expand_checkbox.setObjectName("expand_checkbox") self.horizontalLayout_3.addWidget(self.expand_checkbox) self.gridLayout_2.addLayout(self.horizontalLayout_3, 0, 0, 1, 1) self.nav = NavigationWidget(FileSaveForm) self.nav.setMinimumSize(QtCore.QSize(80, 30)) self.nav.setStyleSheet("#nav {\n" "background-color: rgb(255, 128, 0);\n" "}") self.nav.setObjectName("nav") self.gridLayout_2.addWidget(self.nav, 0, 1, 1, 1) self.breadcrumbs = BreadcrumbWidget(FileSaveForm) self.breadcrumbs.setMinimumSize(QtCore.QSize(0, 30)) self.breadcrumbs.setStyleSheet("#breadcrumbs {\n" "background-color: rgb(255, 128, 0);\n" "}") self.breadcrumbs.setObjectName("breadcrumbs") self.gridLayout_2.addWidget(self.breadcrumbs, 0, 2, 1, 1) self.gridLayout_2.setColumnStretch(2, 1) self.verticalLayout_3.addLayout(self.gridLayout_2) self.browser = BrowserForm(FileSaveForm) self.browser.setStyleSheet("#browser {\n" "background-color: rgb(255, 128, 0);\n" "}") self.browser.setObjectName("browser") self.verticalLayout_3.addWidget(self.browser) self.verticalLayout_3.setStretch(1, 1) self.verticalLayout.addLayout(self.verticalLayout_3) self.line = QtGui.QFrame(FileSaveForm) self.line.setFrameShape(QtGui.QFrame.HLine) self.line.setFrameShadow(QtGui.QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout.addWidget(self.line) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setSpacing(20) self.verticalLayout_2.setContentsMargins(12, 4, 12, 4) self.verticalLayout_2.setObjectName("verticalLayout_2") self.file_controls_grid = QtGui.QGridLayout() self.file_controls_grid.setHorizontalSpacing(14) self.file_controls_grid.setVerticalSpacing(6) self.file_controls_grid.setObjectName("file_controls_grid") self.version_label = QtGui.QLabel(FileSaveForm) self.version_label.setMinimumSize(QtCore.QSize(0, 0)) self.version_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.version_label.setIndent(-1) self.version_label.setObjectName("version_label") self.file_controls_grid.addWidget(self.version_label, 1, 0, 1, 1) self.name_label = QtGui.QLabel(FileSaveForm) self.name_label.setMinimumSize(QtCore.QSize(0, 0)) self.name_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.name_label.setIndent(-1) self.name_label.setObjectName("name_label") self.file_controls_grid.addWidget(self.name_label, 0, 0, 1, 1) self.file_type_label = QtGui.QLabel(FileSaveForm) self.file_type_label.setMinimumSize(QtCore.QSize(0, 0)) self.file_type_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.file_type_label.setIndent(-1) self.file_type_label.setObjectName("file_type_label") self.file_controls_grid.addWidget(self.file_type_label, 2, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setSpacing(-1) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.version_spinner = QtGui.QSpinBox(FileSaveForm) self.version_spinner.setMaximum(9999999) self.version_spinner.setObjectName("version_spinner") self.horizontalLayout_2.addWidget(self.version_spinner) self.use_next_available_cb = QtGui.QCheckBox(FileSaveForm) self.use_next_available_cb.setObjectName("use_next_available_cb") self.horizontalLayout_2.addWidget(self.use_next_available_cb) spacerItem = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.file_controls_grid.addLayout(self.horizontalLayout_2, 1, 1, 1, 1) self.horizontalLayout_6 = QtGui.QHBoxLayout() self.horizontalLayout_6.setSpacing(0) self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.file_type_menu = QtGui.QComboBox(FileSaveForm) self.file_type_menu.setMinimumSize(QtCore.QSize(200, 0)) self.file_type_menu.setObjectName("file_type_menu") self.horizontalLayout_6.addWidget(self.file_type_menu) spacerItem1 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_6.addItem(spacerItem1) self.file_controls_grid.addLayout(self.horizontalLayout_6, 2, 1, 1, 1) self.horizontalLayout_8 = QtGui.QHBoxLayout() self.horizontalLayout_8.setSpacing(0) self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.name_edit = QtGui.QLineEdit(FileSaveForm) self.name_edit.setMaximumSize(QtCore.QSize(200, 16777215)) self.name_edit.setFrame(True) self.name_edit.setObjectName("name_edit") self.horizontalLayout_8.addWidget(self.name_edit) spacerItem2 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_8.addItem(spacerItem2) self.horizontalLayout_8.setStretch(0, 1) self.file_controls_grid.addLayout(self.horizontalLayout_8, 0, 1, 1, 1) self.file_controls_grid.setColumnMinimumWidth(0, 80) self.file_controls_grid.setColumnStretch(1, 1) self.verticalLayout_2.addLayout(self.file_controls_grid) self.feedback_stacked_widget = QtGui.QStackedWidget(FileSaveForm) self.feedback_stacked_widget.setObjectName("feedback_stacked_widget") self.preview_page = QtGui.QWidget() self.preview_page.setObjectName("preview_page") self.verticalLayout_4 = QtGui.QVBoxLayout(self.preview_page) self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) self.verticalLayout_4.setObjectName("verticalLayout_4") self.preview_grid = QtGui.QGridLayout() self.preview_grid.setHorizontalSpacing(14) self.preview_grid.setVerticalSpacing(1) self.preview_grid.setObjectName("preview_grid") self.preview_label = QtGui.QLabel(self.preview_page) self.preview_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTop | QtCore.Qt.AlignTrailing) self.preview_label.setIndent(-1) self.preview_label.setObjectName("preview_label") self.preview_grid.addWidget(self.preview_label, 0, 0, 1, 1) self.file_name_preview = QtGui.QLabel(self.preview_page) self.file_name_preview.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.file_name_preview.setWordWrap(True) self.file_name_preview.setIndent(-1) self.file_name_preview.setObjectName("file_name_preview") self.preview_grid.addWidget(self.file_name_preview, 0, 1, 1, 1) self.work_area_preview = ElidedLabel(self.preview_page) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.work_area_preview.sizePolicy().hasHeightForWidth()) self.work_area_preview.setSizePolicy(sizePolicy) self.work_area_preview.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.work_area_preview.setWordWrap(True) self.work_area_preview.setIndent(-1) self.work_area_preview.setTextInteractionFlags( QtCore.Qt.TextSelectableByMouse) self.work_area_preview.setObjectName("work_area_preview") self.preview_grid.addWidget(self.work_area_preview, 1, 1, 1, 1) self.work_area_label = QtGui.QLabel(self.preview_page) self.work_area_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTop | QtCore.Qt.AlignTrailing) self.work_area_label.setIndent(-1) self.work_area_label.setObjectName("work_area_label") self.preview_grid.addWidget(self.work_area_label, 1, 0, 1, 1) self.preview_grid.setColumnMinimumWidth(0, 80) self.preview_grid.setColumnStretch(1, 1) self.verticalLayout_4.addLayout(self.preview_grid) self.feedback_stacked_widget.addWidget(self.preview_page) self.warning_page = QtGui.QWidget() self.warning_page.setObjectName("warning_page") self.horizontalLayout_7 = QtGui.QHBoxLayout(self.warning_page) self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.warning_grid = QtGui.QGridLayout() self.warning_grid.setContentsMargins(0, -1, -1, -1) self.warning_grid.setHorizontalSpacing(14) self.warning_grid.setVerticalSpacing(6) self.warning_grid.setObjectName("warning_grid") self.warning = QtGui.QLabel(self.warning_page) self.warning.setMinimumSize(QtCore.QSize(0, 45)) self.warning.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.warning.setWordWrap(True) self.warning.setMargin(0) self.warning.setIndent(-1) self.warning.setTextInteractionFlags( QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByKeyboard | QtCore.Qt.TextSelectableByMouse) self.warning.setObjectName("warning") self.warning_grid.addWidget(self.warning, 0, 1, 1, 1) self.warning_label = QtGui.QLabel(self.warning_page) self.warning_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTop | QtCore.Qt.AlignTrailing) self.warning_label.setIndent(-1) self.warning_label.setObjectName("warning_label") self.warning_grid.addWidget(self.warning_label, 0, 0, 1, 1) self.warning_grid.setColumnMinimumWidth(0, 80) self.warning_grid.setColumnStretch(1, 1) self.horizontalLayout_7.addLayout(self.warning_grid) self.feedback_stacked_widget.addWidget(self.warning_page) self.verticalLayout_2.addWidget(self.feedback_stacked_widget) self.verticalLayout_2.setStretch(1, 1) self.verticalLayout.addLayout(self.verticalLayout_2) spacerItem3 = QtGui.QSpacerItem(20, 0, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem3) self.break_line = QtGui.QFrame(FileSaveForm) self.break_line.setFrameShape(QtGui.QFrame.HLine) self.break_line.setFrameShadow(QtGui.QFrame.Sunken) self.break_line.setObjectName("break_line") self.verticalLayout.addWidget(self.break_line) self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setContentsMargins(12, 8, 12, 12) self.horizontalLayout_4.setObjectName("horizontalLayout_4") spacerItem4 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem4) self.cancel_btn = QtGui.QPushButton(FileSaveForm) self.cancel_btn.setObjectName("cancel_btn") self.horizontalLayout_4.addWidget(self.cancel_btn) self.save_btn = QtGui.QPushButton(FileSaveForm) self.save_btn.setDefault(True) self.save_btn.setObjectName("save_btn") self.horizontalLayout_4.addWidget(self.save_btn) self.verticalLayout.addLayout(self.horizontalLayout_4) self.verticalLayout.setStretch(0, 1) self.retranslateUi(FileSaveForm) self.feedback_stacked_widget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(FileSaveForm) FileSaveForm.setTabOrder(self.name_edit, self.version_spinner) FileSaveForm.setTabOrder(self.version_spinner, self.use_next_available_cb) FileSaveForm.setTabOrder(self.use_next_available_cb, self.file_type_menu) FileSaveForm.setTabOrder(self.file_type_menu, self.cancel_btn) FileSaveForm.setTabOrder(self.cancel_btn, self.save_btn) FileSaveForm.setTabOrder(self.save_btn, self.expand_checkbox)
def __init__(self, *args, **kwargs): # Get field defaults fields = kwargs.pop('fields', None) fields.setdefault('title', None) fields.setdefault('priority', None) fields.setdefault('type', None) fields.setdefault('description', None) fields.setdefault('context', None) fields.setdefault('error', None) fields.setdefault('message', None) fields.setdefault('assignee', None) self._exc_info = fields.pop('exc_info', None) # Initialize widget super(TicketsSubmitter, self).__init__(*args, **kwargs) # Create task manager self._task_manager = task_manager.BackgroundTaskManager( parent=self, start_processing=True, max_threads=2, ) self._assignee = None self._context = None # Create widgets self.message = QtGui.QLabel() self.message.setWordWrap(True) self.sep0 = QtGui.QFrame() self.sep0.setFrameShape(self.sep0.HLine) self.sep0.setFrameShadow(self.sep0.Sunken) self.context_selector = context_selector.ContextWidget(self) self.context_selector.set_up(self._task_manager) self.context_selector.ui.label.setText('Ticket Context') self.context_selector.ui.label.hide() self.context_selector.context_changed.connect(self._on_context_changed) self.sep1 = QtGui.QFrame() self.sep1.setFrameShape(self.sep1.HLine) self.sep1.setFrameShadow(self.sep1.Sunken) self.title = QtGui.QLineEdit(self) self.type = QtGui.QComboBox(self) self.type.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding, ) self.priority = QtGui.QComboBox(self) self.priority.setSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding, ) self.assignee = shotgun_search_widget.GlobalSearchWidget(self) self.assignee.set_searchable_entity_types({ 'HumanUser': [['sg_status_list', 'is', 'act']], 'Group': [], }) self.assignee.set_bg_task_manager(self._task_manager) self.assignee.entity_activated.connect(self._on_assignee_changed) self.assignee.completer().entity_activated.disconnect( self.assignee.clear) self.description = QtGui.QTextEdit(self) policy = self.description.sizePolicy() policy.setVerticalStretch(1) self.description.setSizePolicy(policy) self.attachments = Attachments(self) self.error = QtGui.QTextEdit(self) self.error.setFocusPolicy(QtCore.Qt.NoFocus) self.error.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) policy = self.error.sizePolicy() policy.setVerticalStretch(1) self.error.setSizePolicy(policy) self.submit_button = QtGui.QPushButton('Submit') self.submit_button.clicked.connect(self._on_submit) # Layout widgets footer_layouer = QtGui.QHBoxLayout() footer_layouer.addStretch(1) footer_layouer.addWidget(self.submit_button) self.footer = QtGui.QWidget() self.footer.setLayout(footer_layouer) self.layout = QtGui.QFormLayout() self.layout.addRow(self.message) self.layout.addRow(self.sep0) self.layout.addRow(self.context_selector) self.layout.addRow(self.sep1) self.layout.addRow('Title', self.title) self.layout.addRow('Type', self.type) self.layout.addRow('Priority', self.priority) self.layout.addRow('Assignee', self.assignee) self.layout.addRow('Attachments', self.attachments) self.layout.addRow('Description', self.description) self.layout.addRow('Error', self.error) self.layout.addRow(self.footer) self.setLayout(self.layout) if not fields['error']: self.hide_field(self.error) if not fields['message']: self.hide_field(self.message) self.hide_field(self.sep0) # Initialize field defaults QtCore.QTimer.singleShot( 50, partial(self.set_field_defaults, fields), ) self.adjustSize()
def __init__(self, QTimeFrom=None, QTimeTo=None, QTimeRem=None, QTimeEvery=None, taskList=[]): QtGui.QFrame.__init__(self) self.color = ["0", "0", "0"] self.setObjectName("Box") styleButton = " QPushButton { border: none;margin: 0px;padding: 0px; }" styleButton += " QPushButton:hover{border: 1px solid #00BFFF;}" buttonLayout = QtGui.QVBoxLayout() toTopButton = QtGui.QPushButton() toTopButton.setIcon(QtGui.QIcon(QtGui.QPixmap(getIconPath("up.png")))) toTopButton.setStyleSheet(styleButton) toTopButton.setIconSize(QtCore.QSize(10, 10)) delButton = QtGui.QPushButton() delButton.setIcon(QtGui.QIcon(QtGui.QPixmap( getIconPath("delete.png")))) delButton.setStyleSheet(styleButton) delButton.setIconSize(QtCore.QSize(10, 10)) toDownButton = QtGui.QPushButton() toDownButton.setIcon( QtGui.QIcon(QtGui.QPixmap(getIconPath("down.png")))) toDownButton.setStyleSheet(styleButton) toDownButton.setIconSize(QtCore.QSize(10, 10)) buttonLayout.addWidget(toTopButton) buttonLayout.addWidget(delButton) buttonLayout.addWidget(toDownButton) toTopButton.clicked.connect(self.onTopClick) delButton.clicked.connect(self.onDelClick) toDownButton.clicked.connect(self.onBotClick) mainLayout = QtGui.QHBoxLayout() timeLabelLayout = QtGui.QVBoxLayout() timeInLabel = QtGui.QLabel("From") timeOutLabel = QtGui.QLabel("To") timeLabelLayout.addWidget(timeInLabel) timeLabelLayout.addWidget(timeOutLabel) timeInOutLayout = QtGui.QVBoxLayout() self.timeIn = QtGui.QTimeEdit(QTimeFrom) self.timeOut = QtGui.QTimeEdit(QTimeTo) timeInOutLayout.addWidget(self.timeIn) timeInOutLayout.addWidget(self.timeOut) actionLabel = QtGui.QLabel("Remove") self.timeAction = QtGui.QTimeEdit(QTimeRem) self.timeAction.timeChanged.connect(self.setTimeInColor) inactivityLabel1 = QtGui.QLabel("Every") self.timeInactivity = QtGui.QTimeEdit(QTimeEvery) inactivityLabel2 = QtGui.QLabel("of inactivity") taskLabel = QtGui.QLabel("for") self.taskCombo = QtGui.QComboBox() taskLabel2 = QtGui.QLabel("task(s)") self.taskCombo.addItem("all") self.taskCombo.addItems(taskList) mainLayout.addLayout(timeLabelLayout) mainLayout.addLayout(timeInOutLayout) mainLayout.addSpacing(20) mainLayout.addWidget(actionLabel) mainLayout.addWidget(self.timeAction) mainLayout.addSpacing(20) mainLayout.addWidget(inactivityLabel1) mainLayout.addWidget(self.timeInactivity) mainLayout.addWidget(inactivityLabel2) mainLayout.addSpacing(20) mainLayout.addWidget(taskLabel) mainLayout.addWidget(self.taskCombo) mainLayout.addWidget(taskLabel2) mainLayout.addStretch() mainLayout.addLayout(buttonLayout) self.setLayout(mainLayout) self.setTimeInColor(QTimeRem)
def setupUi(self, StorageMapWidget): StorageMapWidget.setObjectName("StorageMapWidget") StorageMapWidget.resize(456, 182) StorageMapWidget.setAutoFillBackground(True) self.gridLayout_2 = QtGui.QGridLayout(StorageMapWidget) self.gridLayout_2.setContentsMargins(8, 8, 8, 8) self.gridLayout_2.setHorizontalSpacing(12) self.gridLayout_2.setVerticalSpacing(6) self.gridLayout_2.setObjectName("gridLayout_2") self.root_desc_layout = QtGui.QHBoxLayout() self.root_desc_layout.setSpacing(0) self.root_desc_layout.setObjectName("root_desc_layout") spacerItem = QtGui.QSpacerItem(12, 20, QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Minimum) self.root_desc_layout.addItem(spacerItem) self.stroage_root_desc_area = QtGui.QScrollArea(StorageMapWidget) self.stroage_root_desc_area.setFocusPolicy(QtCore.Qt.NoFocus) self.stroage_root_desc_area.setFrameShape(QtGui.QFrame.NoFrame) self.stroage_root_desc_area.setFrameShadow(QtGui.QFrame.Plain) self.stroage_root_desc_area.setWidgetResizable(True) self.stroage_root_desc_area.setObjectName("stroage_root_desc_area") self.storage_root_desc = QtGui.QWidget() self.storage_root_desc.setGeometry(QtCore.QRect(0, 0, 157, 104)) self.storage_root_desc.setObjectName("storage_root_desc") self.verticalLayout = QtGui.QVBoxLayout(self.storage_root_desc) self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.root_description = QtGui.QLabel(self.storage_root_desc) self.root_description.setStyleSheet("font-size: 10px;\n" "color: rgb(160, 160, 160);") self.root_description.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.root_description.setWordWrap(True) self.root_description.setObjectName("root_description") self.verticalLayout.addWidget(self.root_description) self.stroage_root_desc_area.setWidget(self.storage_root_desc) self.root_desc_layout.addWidget(self.stroage_root_desc_area) self.root_desc_layout.setStretch(0, 1) self.gridLayout_2.addLayout(self.root_desc_layout, 1, 0, 1, 1) self.storage_layout = QtGui.QHBoxLayout() self.storage_layout.setSpacing(6) self.storage_layout.setObjectName("storage_layout") self.storage_lbl = QtGui.QLabel(StorageMapWidget) self.storage_lbl.setObjectName("storage_lbl") self.storage_layout.addWidget(self.storage_lbl) self.storage_select_combo = QtGui.QComboBox(StorageMapWidget) self.storage_select_combo.setFocusPolicy(QtCore.Qt.NoFocus) self.storage_select_combo.setAutoFillBackground(True) self.storage_select_combo.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToContents) self.storage_select_combo.setObjectName("storage_select_combo") self.storage_layout.addWidget(self.storage_select_combo) self.save_storage_btn = QtGui.QToolButton(StorageMapWidget) font = QtGui.QFont() font.setPointSize(10) self.save_storage_btn.setFont(font) self.save_storage_btn.setFocusPolicy(QtCore.Qt.NoFocus) self.save_storage_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly) self.save_storage_btn.setObjectName("save_storage_btn") self.storage_layout.addWidget(self.save_storage_btn) spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.storage_layout.addItem(spacerItem1) self.storage_layout.setStretch(0, 1) self.storage_layout.setStretch(1, 1) self.storage_layout.setStretch(2, 1) self.storage_layout.setStretch(3, 100) self.gridLayout_2.addLayout(self.storage_layout, 0, 1, 1, 1) self.paths_layout = QtGui.QHBoxLayout() self.paths_layout.setSpacing(0) self.paths_layout.setObjectName("paths_layout") self.path_frame = QtGui.QFrame(StorageMapWidget) self.path_frame.setObjectName("path_frame") self.gridLayout_3 = QtGui.QGridLayout(self.path_frame) self.gridLayout_3.setContentsMargins(6, 6, 6, 6) self.gridLayout_3.setSpacing(4) self.gridLayout_3.setObjectName("gridLayout_3") self.windows_path_lbl = QtGui.QLabel(self.path_frame) self.windows_path_lbl.setStyleSheet("font-size: 10px;\n" "color: rgb(120, 120, 120);") self.windows_path_lbl.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.windows_path_lbl.setObjectName("windows_path_lbl") self.gridLayout_3.addWidget(self.windows_path_lbl, 2, 0, 1, 1) self.windows_path_layout = QtGui.QHBoxLayout() self.windows_path_layout.setSpacing(4) self.windows_path_layout.setObjectName("windows_path_layout") self.windows_path = QtGui.QLineEdit(self.path_frame) self.windows_path.setEnabled(False) self.windows_path.setFocusPolicy(QtCore.Qt.NoFocus) self.windows_path.setObjectName("windows_path") self.windows_path_layout.addWidget(self.windows_path) self.windows_path_edit = QtGui.QLineEdit(self.path_frame) self.windows_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus) self.windows_path_edit.setObjectName("windows_path_edit") self.windows_path_layout.addWidget(self.windows_path_edit) self.windows_path_layout.setStretch(0, 1) self.windows_path_layout.setStretch(1, 1) self.gridLayout_3.addLayout(self.windows_path_layout, 2, 1, 1, 1) self.linux_path_layout = QtGui.QHBoxLayout() self.linux_path_layout.setSpacing(4) self.linux_path_layout.setObjectName("linux_path_layout") self.linux_path = QtGui.QLineEdit(self.path_frame) self.linux_path.setEnabled(False) self.linux_path.setFocusPolicy(QtCore.Qt.NoFocus) self.linux_path.setObjectName("linux_path") self.linux_path_layout.addWidget(self.linux_path) self.linux_path_edit = QtGui.QLineEdit(self.path_frame) self.linux_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus) self.linux_path_edit.setObjectName("linux_path_edit") self.linux_path_layout.addWidget(self.linux_path_edit) self.linux_path_layout.setStretch(0, 1) self.linux_path_layout.setStretch(1, 1) self.gridLayout_3.addLayout(self.linux_path_layout, 0, 1, 1, 1) self.linux_path_lbl = QtGui.QLabel(self.path_frame) self.linux_path_lbl.setStyleSheet("font-size: 10px;\n" "color: rgb(120, 120, 120);") self.linux_path_lbl.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.linux_path_lbl.setObjectName("linux_path_lbl") self.gridLayout_3.addWidget(self.linux_path_lbl, 0, 0, 1, 1) self.mac_path_lbl = QtGui.QLabel(self.path_frame) self.mac_path_lbl.setStyleSheet("font-size: 10px;\n" "color: rgb(120, 120, 120);") self.mac_path_lbl.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.mac_path_lbl.setObjectName("mac_path_lbl") self.gridLayout_3.addWidget(self.mac_path_lbl, 1, 0, 1, 1) self.mac_path_layout = QtGui.QHBoxLayout() self.mac_path_layout.setSpacing(4) self.mac_path_layout.setObjectName("mac_path_layout") self.mac_path = QtGui.QLineEdit(self.path_frame) self.mac_path.setEnabled(False) self.mac_path.setFocusPolicy(QtCore.Qt.NoFocus) self.mac_path.setObjectName("mac_path") self.mac_path_layout.addWidget(self.mac_path) self.mac_path_edit = QtGui.QLineEdit(self.path_frame) self.mac_path_edit.setFocusPolicy(QtCore.Qt.ClickFocus) self.mac_path_edit.setObjectName("mac_path_edit") self.mac_path_layout.addWidget(self.mac_path_edit) self.mac_path_layout.setStretch(0, 1) self.mac_path_layout.setStretch(1, 1) self.gridLayout_3.addLayout(self.mac_path_layout, 1, 1, 1, 1) self.horizontalLayout_3 = QtGui.QHBoxLayout() self.horizontalLayout_3.setSpacing(0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem2 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem2) self.linux_path_browse = QtGui.QToolButton(self.path_frame) self.linux_path_browse.setFocusPolicy(QtCore.Qt.NoFocus) icon = QtGui.QIcon() icon.addPixmap( QtGui.QPixmap( ":/tk-framework-adminui/setup_project/file_browse.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.linux_path_browse.setIcon(icon) self.linux_path_browse.setObjectName("linux_path_browse") self.horizontalLayout_3.addWidget(self.linux_path_browse) self.linux_lock = QtGui.QLabel(self.path_frame) self.linux_lock.setMinimumSize(QtCore.QSize(8, 11)) self.linux_lock.setMaximumSize(QtCore.QSize(8, 11)) self.linux_lock.setText("") self.linux_lock.setPixmap( QtGui.QPixmap( ":/tk-framework-adminui/setup_project/icon_lock.png")) self.linux_lock.setScaledContents(True) self.linux_lock.setObjectName("linux_lock") self.horizontalLayout_3.addWidget(self.linux_lock) spacerItem3 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem3) self.gridLayout_3.addLayout(self.horizontalLayout_3, 0, 2, 1, 1) self.horizontalLayout_4 = QtGui.QHBoxLayout() self.horizontalLayout_4.setSpacing(0) self.horizontalLayout_4.setObjectName("horizontalLayout_4") spacerItem4 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem4) self.mac_path_browse = QtGui.QToolButton(self.path_frame) self.mac_path_browse.setFocusPolicy(QtCore.Qt.NoFocus) self.mac_path_browse.setIcon(icon) self.mac_path_browse.setObjectName("mac_path_browse") self.horizontalLayout_4.addWidget(self.mac_path_browse) self.mac_lock = QtGui.QLabel(self.path_frame) self.mac_lock.setMinimumSize(QtCore.QSize(8, 11)) self.mac_lock.setMaximumSize(QtCore.QSize(8, 11)) self.mac_lock.setText("") self.mac_lock.setPixmap( QtGui.QPixmap( ":/tk-framework-adminui/setup_project/icon_lock.png")) self.mac_lock.setScaledContents(True) self.mac_lock.setObjectName("mac_lock") self.horizontalLayout_4.addWidget(self.mac_lock) spacerItem5 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem5) self.gridLayout_3.addLayout(self.horizontalLayout_4, 1, 2, 1, 1) self.horizontalLayout_5 = QtGui.QHBoxLayout() self.horizontalLayout_5.setSpacing(0) self.horizontalLayout_5.setObjectName("horizontalLayout_5") spacerItem6 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem6) self.windows_path_browse = QtGui.QToolButton(self.path_frame) self.windows_path_browse.setFocusPolicy(QtCore.Qt.NoFocus) self.windows_path_browse.setIcon(icon) self.windows_path_browse.setObjectName("windows_path_browse") self.horizontalLayout_5.addWidget(self.windows_path_browse) self.windows_lock = QtGui.QLabel(self.path_frame) self.windows_lock.setMinimumSize(QtCore.QSize(8, 11)) self.windows_lock.setMaximumSize(QtCore.QSize(8, 11)) self.windows_lock.setText("") self.windows_lock.setPixmap( QtGui.QPixmap( ":/tk-framework-adminui/setup_project/icon_lock.png")) self.windows_lock.setScaledContents(True) self.windows_lock.setObjectName("windows_lock") self.horizontalLayout_5.addWidget(self.windows_lock) spacerItem7 = QtGui.QSpacerItem(0, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem7) self.gridLayout_3.addLayout(self.horizontalLayout_5, 2, 2, 1, 1) self.gridLayout_3.setColumnStretch(0, 1) self.gridLayout_3.setColumnStretch(1, 100) self.gridLayout_3.setColumnStretch(2, 1) self.paths_layout.addWidget(self.path_frame) self.gridLayout_2.addLayout(self.paths_layout, 1, 1, 1, 1) self.root_name_layout = QtGui.QHBoxLayout() self.root_name_layout.setSpacing(4) self.root_name_layout.setObjectName("root_name_layout") self.root_name = QtGui.QLabel(StorageMapWidget) self.root_name.setObjectName("root_name") self.root_name_layout.addWidget(self.root_name) spacerItem8 = QtGui.QSpacerItem(40, 4, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.root_name_layout.addItem(spacerItem8) self.root_name_layout.setStretch(0, 1) self.root_name_layout.setStretch(1, 10) self.gridLayout_2.addLayout(self.root_name_layout, 0, 0, 1, 1) self.horizontalLayout_2 = QtGui.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.count_lbl = QtGui.QLabel(StorageMapWidget) self.count_lbl.setStyleSheet("font-size: 10px;\n" "color: rgb(120, 120, 120);") self.count_lbl.setText("") self.count_lbl.setObjectName("count_lbl") self.horizontalLayout_2.addWidget(self.count_lbl) spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem9) self.storage_info = QtGui.QLabel(StorageMapWidget) self.storage_info.setStyleSheet("font-size: 10px;\n" "color: rgb(252, 98, 70);") self.storage_info.setText("") self.storage_info.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.storage_info.setWordWrap(True) self.storage_info.setObjectName("storage_info") self.horizontalLayout_2.addWidget(self.storage_info) self.horizontalLayout_2.setStretch(0, 1) self.horizontalLayout_2.setStretch(1, 1) self.horizontalLayout_2.setStretch(2, 10) self.gridLayout_2.addLayout(self.horizontalLayout_2, 2, 0, 1, 2) self.gridLayout_2.setColumnStretch(0, 2) self.gridLayout_2.setColumnStretch(1, 3) self.gridLayout_2.setRowStretch(0, 1) self.retranslateUi(StorageMapWidget) QtCore.QMetaObject.connectSlotsByName(StorageMapWidget)
def __init__(self, parent=None): """ Initialize the demo widget. """ super(FilterMenuDemo, self).__init__(parent) # Set up the SG source/proxy models and menu. self._bg_task_manager = task_manager.BackgroundTaskManager(self, True) self._sg_source_model = shotgun_model.SimpleShotgunModel( self, self._bg_task_manager) self._sg_proxy_model = FilterItemTreeProxyModel() self._sg_proxy_model.setSourceModel(self._sg_source_model) # Create a 'ShotGrid' specific filter menu since we are using a 'ShotGrid' model. self._sg_filter_menu = ShotgunFilterMenu(self) # Before initializing the menu, set the filter/proxy model on the menu. self._sg_filter_menu.set_filter_model(self._sg_proxy_model) # Default filter fields to show on open (these default fields can be saved/restored using # QSettings). self._sg_filter_menu.set_visible_fields( ["Project.name", "Project.end_date", "Project.created_by"]) # Now the menu is ready to be initialized. self._sg_filter_menu.initialize_menu() # Set up a basic model with predefined data to demonstrate how the filter menu can be used # with non-SG data. The filter menu set up is the same, except that the non SG specific # menu class is used, and a non-SG model is being used. basic_model_data = [ ["one"], ["two"], ["three"], [{ "Field Name 1": "field name 1 value 1", "Field Name 2": "field name 2 value 1", "Field Name 3": "field name 3 value 1", }], [{ "Field Name 1": "field name 1 value 2", "Field Name 2": "field name 2 value 2", "Field Name 3": "field name 3 value 2", }], [{ "Number Field": 1, "Bool Field": True, }], [{ "Number Field": 2, "Bool Field": False, }], [{ "Number Field": 2, "Bool Field": True, }], ] self._basic_source_model = BasicModel() self._basic_source_model.set_internal_data(basic_model_data) self._basic_proxy_model = FilterItemProxyModel() self._basic_proxy_model.setSourceModel(self._basic_source_model) self._basic_filter_menu = FilterMenu(self) # Set the model item data roles used to extract the model data for filtering. self._basic_filter_menu.set_filter_roles([BasicModel.FILTER_DATA_ROLE]) self._basic_filter_menu.set_filter_model(self._basic_proxy_model) self._basic_filter_menu.set_visible_fields( ["{role}.None".format(role=BasicModel.FILTER_DATA_ROLE)]) self._basic_filter_menu.initialize_menu() # Initialize the view to display the SG model data to filter on. self._view = QtGui.QTableView(self) self._view.horizontalHeader().setStretchLastSection(True) self._view.setModel(self._sg_proxy_model) # Initialize the filter button to display the SG filter menu. self._filter_menu_btn = FilterMenuButton(self) self._filter_menu_btn.setMenu(self._sg_filter_menu) # Set up a combobox for the user to toggle the SG entity data to filter on. # A list of entity type examples to filter on. User may also type in other entity types # that do not appear in this list. self._entity_types = [ "Project", "Task", "HumanUser", "Asset", "Version" ] self._entity_type_combo_box = QtGui.QComboBox(self) self._entity_type_combo_box.addItems(self._entity_types) self._entity_type_combo_box.setEditable(True) self._entity_type_combo_box.setCurrentIndex(0) self._entity_type_combo_box.currentIndexChanged.connect( self._entity_type_changed) # Create and initialize the fields manager, which is used to get the entity fields used # for filtering. self._fields_manager = shotgun_fields.ShotgunFieldManager( self, self._bg_task_manager) self._fields_manager.initialized.connect(self._update_ui) # Build the UI before initializing the fields manager so that the UI is ready once the # fields manager is initialized. self._populate_ui() self._fields_manager.initialize()
def __init__(self, entity_type, entity_id, parent): """ :param entity_type: Entity type to display tasks for :param entity_id: Entity id to display tasks for :param parent: The model parent. :type parent: :class:`~PySide.QtGui.QObject` """ super(WorkAreaDialog, self).__init__(parent) # now load in the UI that was created in the UI designer self.ui = Ui_WorkAreaDialog() self.ui.setupUi(self) # double clicking an item in the list closes the dialog self.ui.task_list.itemDoubleClicked.connect(self.accept) self._bundle = sgtk.platform.current_bundle() # find information about the main item main_item = self._bundle.shotgun.find_one( entity_type, [["id", "is", entity_id]], ["code", "description"] ) if main_item.get("code"): entity_name = "%s %s" % ( shotgun_globals.get_type_display_name(entity_type), main_item.get("code"), ) else: entity_name = "Unnamed %s" % shotgun_globals.get_type_display_name( entity_type ) # # insert main item # self._main_item = QtGui.QListWidgetItem(entity_name, self.ui.task_list) # self._main_item.setToolTip(main_item.get("description") or "No description found.") # self._main_item.setData(self.ENTITY_TYPE_ROLE, entity_type) # self._main_item.setData(self.ENTITY_ID_ROLE, entity_id) # # # make this selected by default # self._main_item.setSelected(True) # now get all tasks from Shotgun tasks = self._bundle.shotgun.find( "Task", [["entity", "is", {"type": entity_type, "id": entity_id}]], ["content", "step", "sg_status_list", "task_assignees"], ) # insert into list for task in tasks: task_name = "Task %s on %s" % (task["content"], entity_name) # indicate users assigned if task["task_assignees"]: task_name += " (%s)" % ", ".join( [x["name"] for x in task["task_assignees"]] ) task_item = QtGui.QListWidgetItem(task_name, self.ui.task_list) task_item.setData(self.ENTITY_TYPE_ROLE, task["type"]) task_item.setData(self.ENTITY_ID_ROLE, task["id"]) # as the last item, create the "create new task widget" # embedded into a list widget self.new_task = QtGui.QWidget(self) self.new_task.setObjectName("new_task") self.horizontalLayout_2 = QtGui.QHBoxLayout(self.new_task) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.task_name = QtGui.QLineEdit(self.new_task) self.task_name.setObjectName("task_name") self.horizontalLayout_2.addWidget(self.task_name) self.step_combo = QtGui.QComboBox(self.new_task) self.step_combo.setObjectName("step_combo") self.horizontalLayout_2.addWidget(self.step_combo) self.task_name.setPlaceholderText("Create new task...") self._new_item = QtGui.QListWidgetItem(self.ui.task_list) self.ui.task_list.setItemWidget(self._new_item, self.new_task) # find the steps for this entity type steps = self._bundle.shotgun.find( "Step", [["entity_type", "is", entity_type]], ["code", "id"] ) # populate combo box for step in steps: self.step_combo.addItem(step["code"], step["id"]) # install filter so that when the task name is clicked # the list widget is selected self.task_name.installEventFilter(self)
def setupUi(self, NewTaskForm): NewTaskForm.setObjectName("NewTaskForm") NewTaskForm.resize(380, 270) NewTaskForm.setMinimumSize(QtCore.QSize(380, 270)) self.verticalLayout = QtGui.QVBoxLayout(NewTaskForm) self.verticalLayout.setSpacing(4) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setSpacing(20) self.verticalLayout_2.setContentsMargins(12, 12, 12, 4) self.verticalLayout_2.setObjectName("verticalLayout_2") self.label_3 = QtGui.QLabel(NewTaskForm) self.label_3.setWordWrap(True) self.label_3.setObjectName("label_3") self.verticalLayout_2.addWidget(self.label_3) self.gridLayout = QtGui.QGridLayout() self.gridLayout.setHorizontalSpacing(20) self.gridLayout.setVerticalSpacing(6) self.gridLayout.setObjectName("gridLayout") self.assigned_to = QtGui.QLabel(NewTaskForm) self.assigned_to.setObjectName("assigned_to") self.gridLayout.addWidget(self.assigned_to, 7, 2, 1, 1) self.label_6 = QtGui.QLabel(NewTaskForm) font = QtGui.QFont() font.setWeight(75) font.setBold(True) self.label_6.setFont(font) self.label_6.setObjectName("label_6") self.gridLayout.addWidget(self.label_6, 7, 0, 1, 1) self.label_4 = QtGui.QLabel(NewTaskForm) font = QtGui.QFont() font.setWeight(75) font.setBold(True) self.label_4.setFont(font) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 8, 0, 1, 1) self.pipeline_step = QtGui.QComboBox(NewTaskForm) self.pipeline_step.setObjectName("pipeline_step") self.gridLayout.addWidget(self.pipeline_step, 1, 2, 1, 1) spacerItem = QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed) self.gridLayout.addItem(spacerItem, 6, 0, 1, 1) self.entity = QtGui.QLabel(NewTaskForm) self.entity.setObjectName("entity") self.gridLayout.addWidget(self.entity, 8, 2, 1, 1) self.label = QtGui.QLabel(NewTaskForm) font = QtGui.QFont() font.setWeight(75) font.setBold(True) self.label.setFont(font) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 1, 0, 1, 1) self.label_2 = QtGui.QLabel(NewTaskForm) font = QtGui.QFont() font.setWeight(75) font.setBold(True) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) self.task_name = QtGui.QLineEdit(NewTaskForm) self.task_name.setObjectName("task_name") self.gridLayout.addWidget(self.task_name, 0, 2, 1, 1) self.gridLayout.setColumnStretch(2, 1) self.verticalLayout_2.addLayout(self.gridLayout) self.warning = QtGui.QLabel(NewTaskForm) self.warning.setText("") self.warning.setWordWrap(True) self.warning.setObjectName("warning") self.verticalLayout_2.addWidget(self.warning) self.verticalLayout.addLayout(self.verticalLayout_2) spacerItem1 = QtGui.QSpacerItem(20, 11, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.break_line = QtGui.QFrame(NewTaskForm) self.break_line.setFrameShape(QtGui.QFrame.HLine) self.break_line.setFrameShadow(QtGui.QFrame.Sunken) self.break_line.setObjectName("break_line") self.verticalLayout.addWidget(self.break_line) self.horizontalLayout = QtGui.QHBoxLayout() self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint) self.horizontalLayout.setContentsMargins(12, 8, 12, 12) self.horizontalLayout.setObjectName("horizontalLayout") spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.cancel_btn = QtGui.QPushButton(NewTaskForm) self.cancel_btn.setObjectName("cancel_btn") self.horizontalLayout.addWidget(self.cancel_btn) self.create_btn = QtGui.QPushButton(NewTaskForm) self.create_btn.setDefault(True) self.create_btn.setObjectName("create_btn") self.horizontalLayout.addWidget(self.create_btn) self.verticalLayout.addLayout(self.horizontalLayout) self.verticalLayout.setStretch(2, 1) self.retranslateUi(NewTaskForm) QtCore.QObject.connect(self.cancel_btn, QtCore.SIGNAL("clicked()"), NewTaskForm.close) QtCore.QMetaObject.connectSlotsByName(NewTaskForm) NewTaskForm.setTabOrder(self.task_name, self.pipeline_step) NewTaskForm.setTabOrder(self.pipeline_step, self.create_btn) NewTaskForm.setTabOrder(self.create_btn, self.cancel_btn)
def _populate_ui(self): # --- query some data # query the full site schema from shotgun self._schema = self._app.shotgun.schema_read() # --- build the ui components select_lbl = QtGui.QLabel("Select an Entity type from the list:") # populate a combo box with all the entity types (the keys) self._entity_type_combo = QtGui.QComboBox(self) self._entity_type_combo.addItems(sorted(self._schema.keys())) field_lbl = QtGui.QLabel("Select a Field name from the list:") self._field_name_combo = QtGui.QComboBox(self) self._field_name_combo.setSizeAdjustPolicy( QtGui.QComboBox.AdjustToContents) # get_type_display_name type_display_lbl = MethodLabel("get_type_display_name():") self._type_display_lbl = ValueLabel() # get_field_display_name field_display_lbl = MethodLabel("get_field_display_name():") self._field_display_lbl = ValueLabel() # get_empty_phrase empty_phrase_lbl = MethodLabel("get_empty_phrase():") self._empty_phrase_lbl = ValueLabel() # get_entity_type_icon entity_type_icon = MethodLabel("get_entity_type_icon():") self._entity_type_icon = ValueLabel() # get_entity_type_icon_url entity_type_icon_url = MethodLabel("get_entity_type_icon_url():") self._entity_type_icon_url = ValueLabel() # get_valid_values valid_values_lbl = MethodLabel("get_valid_values():") self._valid_values_list = QtGui.QListWidget() self._valid_values_list.setMaximumHeight(100) # field_is_editable field_is_editable_lbl = MethodLabel("field_is_editable():") self._field_is_editable_lbl = ValueLabel() # field_is_visible field_is_visible_lbl = MethodLabel("field_is_visible():") self._field_is_visible_lbl = ValueLabel() # --- layout the components row = 0 layout = QtGui.QGridLayout(self) layout.addWidget(select_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._entity_type_combo, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(type_display_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._type_display_lbl, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(entity_type_icon, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._entity_type_icon, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(entity_type_icon_url, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._entity_type_icon_url, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(field_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._field_name_combo, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(field_display_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._field_display_lbl, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(empty_phrase_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._empty_phrase_lbl, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(valid_values_lbl, row, 0, QtCore.Qt.AlignRight | QtCore.Qt.AlignTop) layout.addWidget(self._valid_values_list, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(field_is_editable_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._field_is_editable_lbl, row, 1, QtCore.Qt.AlignLeft) row += 1 layout.addWidget(field_is_visible_lbl, row, 0, QtCore.Qt.AlignRight) layout.addWidget(self._field_is_visible_lbl, row, 1, QtCore.Qt.AlignLeft) row += 1 # ---- connect some signals # handle entity type changes self._entity_type_combo.activated[str].connect( self._on_entity_type_combo_activated) # handle field name changes self._field_name_combo.activated[str].connect( self._on_field_name_combo_activated) # ---- populate the defaults # entity entity_type_index = self._entity_type_combo.findText( DEFAULT_ENTITY_TYPE) if entity_type_index > -1: self._entity_type_combo.setCurrentIndex(entity_type_index) self._on_entity_type_combo_activated(DEFAULT_ENTITY_TYPE) # field field_name_index = self._field_name_combo.findText(DEFAULT_FIELD_NAME) if field_name_index > -1: self._field_name_combo.setCurrentIndex(field_name_index) self._on_field_name_combo_activated(DEFAULT_FIELD_NAME)
def _build_tag_selector_widget(self, items, properties): """ Returns a QT widget which contains the tag. """ fields = ['code'] filter = [['entity_type', 'is', 'Shot']] templates = [ t['code'] for t in self.app.shotgun.find( 'TaskTemplate', filter, fields=fields) ] schema = self.app.shotgun.schema_field_read('Shot', 'sg_status_list') statuses = schema['sg_status_list']['properties']['valid_values'][ 'value'] values = [statuses, templates] labels = ['Shotgun Shot Status', 'Shotgun Task Template for Shots'] keys = ['sg_status_hiero_tags', 'task_template_map'] # build a map of tag value pairs from the properties propertyDicts = [dict(properties[key]) for key in keys] propertyTags = list( set(itertools.chain(*[d.keys() for d in propertyDicts]))) map = {} for tag in propertyTags: map[tag] = [d.get(tag, None) for d in propertyDicts] # add in blank entries for the current tags tags = self._get_tags(items) for tag in tags: map.setdefault(tag.name(), [None] * len(keys)) # keep a known order names = sorted(map.keys()) # setup the table tagTable = QtGui.QTableWidget(len(names), len(labels) + 1) tagTable.setMinimumHeight(150) tagTable.setHorizontalHeaderLabels(['Hiero Tags'] + labels) tagTable.setAlternatingRowColors(True) tagTable.setSelectionMode(tagTable.NoSelection) tagTable.setShowGrid(False) tagTable.verticalHeader().hide() tagTable.horizontalHeader().setStretchLastSection(True) tagTable.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) # on change rebuild the properties def changed(index): for (row, name) in enumerate(names): for (col, key) in enumerate(keys): combo = tagTable.cellWidget(row, col + 1) # if no tag mapped to a name if combo is None: continue # otherwise grab the text and keep it in the properties select = combo.currentText() propertyDicts[col][name] = (select and str(select) or None) properties[key] = [ (k, v) for (k, v) in propertyDicts[col].items() if v ] # and build the table tagsByName = self._get_all_tags_by_name() for (row, name) in enumerate(names): tag = tagsByName.get(name, None) if tag is None: continue # build item for the tag item = QtGui.QTableWidgetItem(name) item.setIcon(QtGui.QIcon(tag.icon())) tagTable.setItem(row, 0, item) # build combo boxes for each set of values for (col, vals) in enumerate(values): combo = QtGui.QComboBox() combo.addItem(None) for (i, value) in enumerate(vals): combo.addItem(value) # see if the current item is the one in the properties if map[name][col] == value: combo.setCurrentIndex(i + 1) combo.currentIndexChanged[int].connect(changed) # adjust sizes to avoid clipping or scrolling width = combo.minimumSizeHint().width() combo.setMinimumWidth(width) combo.setSizeAdjustPolicy(combo.AdjustToContents) tagTable.setCellWidget(row, col + 1, combo) tagTable.resizeRowsToContents() tagTable.resizeColumnsToContents() width = sum([tagTable.columnWidth(i) for i in xrange(len(keys) + 1)]) + 60 tagTable.setMinimumWidth(width) return tagTable
def _setup_ui(self): self.setWindowTitle('Create Output') self.setFixedSize(465, 125) output_group = QtGui.QGroupBox('Create Output') # Name and type layout type_layout = QtGui.QHBoxLayout() type_label = QtGui.QLabel('Type:') self._type_combo = QtGui.QComboBox() for out_type in self._types: self._type_combo.addItem(out_type) self._name_line = QtGui.QLineEdit() self._name_line.setPlaceholderText('Cache Name') self._name_line.returnPressed.connect(self._on_btn_press) cache_name = QtGui.QLabel('Cache Name:') type_layout.addWidget(type_label) type_layout.addWidget(self._type_combo) type_layout.addWidget(cache_name) type_layout.addWidget(self._name_line) # toggles layout range_label = QtGui.QLabel('Range:') self._range_combo = QtGui.QComboBox() self._range_combo.addItem('Single') self._range_combo.addItem('Multiple') self._range_combo.setCurrentIndex(1) range_layout = QtGui.QHBoxLayout() range_layout.addWidget(range_label) range_layout.addWidget(self._range_combo) self._sim_toggle = QtGui.QCheckBox('Simulation') self._version_toggle = QtGui.QCheckBox('Auto Version') self._version_toggle.setChecked(True) self._publish_toggle = QtGui.QCheckBox('Auto Publish') toggle_layout = QtGui.QHBoxLayout() toggle_layout.addLayout(range_layout) toggle_layout.addWidget(self._sim_toggle) toggle_layout.addWidget(self._version_toggle) toggle_layout.addWidget(self._publish_toggle) # Add layout changedgroup_layout = QtGui.QVBoxLayout(output_group) changedgroup_layout.addLayout(type_layout) changedgroup_layout.addLayout(toggle_layout) # Create _button self._button = QtGui.QPushButton('Create outputs') self._button.clicked.connect(self._on_btn_press) layout = QtGui.QVBoxLayout() layout.addWidget(output_group) layout.addWidget(self._button) self.setLayout(layout)
def __init__(self): """ Initialize the main demo widget. """ self._current_demo_info = None super(DemoWidget, self).__init__() # easy access to the app instance self.app = sgtk.platform.current_bundle() # the default class/info to use at startup self._default_demo_info = None # quick lookup of demo info as selection changes self._demo_info_lookup = {} # quick lookup of stacked widget positions via demo names self._demo_stack_lookup = {} # quick lookup of previously created file models via demo names self._demo_file_model_lookup = {} # keep a reference to all demo widgets created. this will prevent issues # with garbage collection self.__all_demos = [] # construct the model based on the hierarchy defined in the # demos module self._demo_model = self._get_demo_model() # build a tree view to show all the demos self._demo_tree_view = QtGui.QTreeView() self._demo_tree_view.setModel(self._demo_model) self._demo_tree_view.setObjectName("demo_tree_view") self._demo_tree_view.setIndentation(16) self._demo_tree_view.header().hide() self._demo_tree_view.expandAll() self._demo_tree_view.setRootIsDecorated(False) self._demo_tree_view.setFocusPolicy(QtCore.Qt.NoFocus) self._demo_tree_view.setMinimumWidth(250) # shows the name of the demo self._demo_name = QtGui.QLabel(self) self._demo_name.setObjectName("demo_name") self._demo_name.setMinimumHeight(30) # shows the description of the demo self._demo_desc = QtGui.QLabel(self) self._demo_desc.setObjectName("demo_desc") self._demo_desc.setWordWrap(True) self._demo_desc.setOpenExternalLinks(True) # holds a stack of all demo widgets self._demo_widget_tab = QtGui.QStackedWidget() # used to display the code associated with the demos self._demo_code_edit = QtGui.QPlainTextEdit(self) self._demo_code_edit.setObjectName("demo_code_edit") self._demo_code_edit.setReadOnly(True) self._demo_code_edit.setWordWrapMode(QtGui.QTextOption.NoWrap) # a syntax highlighter for the code editor self._syntax_highlighter = PythonSyntaxHighlighter( self._demo_code_edit.document(), self._demo_code_edit.palette() ) self._syntax_highlighter.setDocument(self._demo_code_edit.document()) # combobox to display all python files in a demo self._demo_file_combo = QtGui.QComboBox() self._demo_file_combo.setObjectName("demo_file_combo") # layout the code tab demo_code_layout = QtGui.QVBoxLayout() demo_code_layout.addWidget(self._demo_code_edit) demo_code_layout.addWidget(self._demo_file_combo) demo_code_layout.setAlignment(self._demo_file_combo, QtCore.Qt.AlignRight) # a single widget to wrap the code layout demo_code_widget = QtGui.QWidget() demo_code_widget.setLayout(demo_code_layout) # tab widget displays the current demo self._demo_tabs = QtGui.QTabWidget(self) self._demo_tabs.setTabPosition(QtGui.QTabWidget.South) self._demo_tabs.setMinimumWidth(625) # add the widgets as tabs self._demo_tabs.addTab(self._demo_widget_tab, "Interactive Demo") self._demo_tabs.addTab(demo_code_widget, "Code") # an overlay of the tabs for displaying errors, etc. self._overlay = overlay.ShotgunOverlayWidget(self._demo_tabs) demo_header_layout = QtGui.QHBoxLayout() demo_header_layout.addWidget(self._demo_name) demo_header_layout.addStretch() # layout the demo display widgets demo_layout = QtGui.QVBoxLayout() demo_layout.addLayout(demo_header_layout) demo_layout.addWidget(self._demo_desc) demo_layout.addWidget(self._demo_tabs) # wrapper widget for the display layout demo_stack = QtGui.QWidget() demo_stack.setLayout(demo_layout) # add the primary wrapper widgets to this splitter self.addWidget(self._demo_tree_view) self.addWidget(demo_stack) # make the demo side stretch 3x as fast as the demo tree view self.setStretchFactor(1, 3) # grab the selection model from the tree view and connect it up # to handle a new demo being selected # NOTE: this has to be done in 2 calls to avoid segfault! selection_model = self._demo_tree_view.selectionModel() selection_model.selectionChanged.connect(self._on_selection_changed) # handle the user selecting a new file to display in the code widget self._demo_file_combo.activated[str].connect(self._on_file_selected) # set the default demo self._set_default_demo() QtCore.QCoreApplication.instance().aboutToQuit.connect(self.destroy)
def __init__(self, dataType, data, noteData=None, parent=None): super(noteContentLayout, self).__init__(parent) self.data = data self.noteData = noteData # is a list layout = QtGui.QVBoxLayout() self.setLayout(layout) layoutContainer = QtGui.QHBoxLayout() titleGridLayout = QtGui.QGridLayout() layoutContainer.addLayout(titleGridLayout) #titleGridLayout.setColumnStretch(2,40) # author authorTxt = "unknown" self.attachmentLayout = QtGui.QHBoxLayout() self.Qt_noteContent = my_textEdit("", editable=bool(self.data), parent=self) # QtGui.QTextEdit( ) if self.data: try: self.Qt_noteContent.setPlainText( QtCore.QString.fromUtf8(self.data["content"])) except: self.Qt_noteContent.setPlainText(self.data["content"]) if dataType == "Reply": titleGridLayout.setColumnStretch(0, 0) titleGridLayout.setColumnStretch(1, 1) authorHtmlTxt = "<font size=2 color=#BBBBBB>Author : " + self.data[ "user"]['name'] + "</font><br>" dateHtmlTxt = "<font size=2 color=#BBBBBB>Date : " + self.data[ "created_at"].strftime('%Y-%m-%d %H:%M:%S') + "</font>" labelText = QtGui.QLabel(authorHtmlTxt + dateHtmlTxt, parent=self) titleGridLayout.setHorizontalSpacing(20) titleGridLayout.addWidget(labelText, 0, 0, QtCore.Qt.AlignTop) titleGridLayout.addWidget(self.Qt_noteContent, 0, 1) layout.addLayout(layoutContainer) layout.addLayout(self.attachmentLayout) titleGridLayout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0) else: authorHtmlTxt = "<font color=#BBBBBB>Author : " + self.data[ "user"]['name'] + "</font><br>" dateHtmlTxt = "<font color=#BBBBBB>Date : <b>" + self.data[ "created_at"].strftime( '%Y-%m-%d %H:%M:%S') + "</font></b><br>" labelText = QtGui.QLabel(authorHtmlTxt + dateHtmlTxt, parent=self) titleGridLayout.addWidget(labelText, 0, 0, QtCore.Qt.AlignTop) layout.addLayout(layoutContainer) layout.addWidget(self.Qt_noteContent) layout.addLayout(self.attachmentLayout) self.Qt_noteContent.setStyleSheet( "QTextEdit { color : #F0F0F0 ; }") titleGridLayout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0) if not self.data: if dataType == "Reply": if len(self.noteData) > 1: self.Qt_noteContent.setText( u"Type a reply for all the selected notes") else: self.Qt_noteContent.setText(u"Type a reply") self.Qt_noteContent.selectAll() self.Qt_noteContent.SIGNAL_return.connect( self.replyNoteSlot) elif dataType == "Note": self.Qt_noteContent.setText(u"Type a note") self.Qt_noteContent.setFocus() self.Qt_noteContent.selectAll() self.Qt_noteContent.SIGNAL_return.connect(self.createNoteSlot) layout.setContentsMargins(0, 0, 0, 0) layout.addLayout(layoutContainer) layout.addWidget(self.Qt_noteContent) layout.addLayout(self.attachmentLayout) if self.data: for attachementFile in self.data["queriedAttachement"]: labelImage = PicButton(attachementFile["fileOnDisk"], overImageName="magnifier.png", parent=self) labelImage.SIGNAL_imageClicked.connect(self.showImageDisplay) self.attachmentLayout.addWidget(labelImage) else: attachButton = QtGui.QPushButton(parent=self) attachmentPixmap = QtGui.QPixmap( getRessources("note_attachment.png")) attachementScaled = attachmentPixmap.scaled( 32, 32, QtCore.Qt.KeepAspectRatio) attachButton.setIcon(QtGui.QIcon(attachementScaled)) attachButton.clicked.connect(self.addAttachment) screenShotButton = QtGui.QPushButton(parent=self) attachmentPixmap = QtGui.QPixmap( getRessources("note_screenShot.png")) attachementScaled = attachmentPixmap.scaled( 32, 32, QtCore.Qt.KeepAspectRatio) screenShotButton.setIcon(QtGui.QIcon(attachementScaled)) screenShotButton.clicked.connect(self.addScreenShot) self.attachmentLayout.addWidget(screenShotButton) self.attachmentLayout.addWidget(attachButton) replyButton = None if dataType == "Reply": replyButton = QtGui.QPushButton("Reply", parent=self) replyButton.clicked.connect(self.replyNoteSlot) #replyButton.setStyleSheet("QPushButton {border: 1px solid #199909;border-radius: 6px;background-color: #116a06;}") replyButton.setMinimumHeight(18) replyButton.setStyleSheet( "QPushButton {border: 1px solid #39B3FF;border-radius: 6px;background-color: #474747;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.67, stop: 0 #6B6B6B, stop: 1 #474747);}" ) self.statusLabel = QtGui.QComboBox(parent=self) self.statusLabel.addItem( QtGui.QIcon(getRessources("status_opn.png")), "Open") self.statusLabel.addItem( QtGui.QIcon(getRessources("status_clsd.png")), "closed") self.statusLabel.addItem( QtGui.QIcon(getRessources("status_ip.png")), "In progress") if self.noteData[0]["sg_status_list"] == "opn": self.statusLabel.setCurrentIndex(0) elif self.noteData[0]["sg_status_list"] == "clsd": self.statusLabel.setCurrentIndex(1) elif self.noteData[0]["sg_status_list"] == "ip": self.statusLabel.setCurrentIndex(2) self.statusLabel.setMaximumWidth(100) #self.connect(self.statusLabel, QtCore.SIGNAL("currentIndexChanged(int)"), self.updateNodeDataStatus ) self.statusLabel.currentIndexChanged.connect( self.updateNodeDataStatus) layout.addWidget(self.statusLabel) layout.addWidget(replyButton) elif dataType == "Note": #self.linkFilterWidget = comboFilterWidget2() replyButton = QtGui.QPushButton("Create Note", parent=self) replyButton.setMinimumHeight(18) replyButton.setStyleSheet( "QPushButton {border: 1px solid #39B3FF;border-radius: 6px;background-color: #3990CA;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.67, stop: 0 #3990CA, stop: 1 #215272);}" ) replyButton.clicked.connect(self.createNoteSlot) layout.addWidget(replyButton) self.attachmentLayout.addStretch() style = "background-color: red;"
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, 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)