def __init__(self, session=None, parent=None): super(EntityImportWizard, self).__init__(parent=parent) self.setModal(True) if not session: session = SessionRegistry().current() self._session = session logo_pixmap = QtGui.QPixmap( IconFactory().disk_path("icon:///images/icons/import_32x32.png")) self.setWindowTitle("Product Import") self.setPixmap(QtGui.QWizard.LogoPixmap, logo_pixmap) self._query_categories() query_id = self.addPage(self.product_query_page) selection_id = self.addPage(self.product_selection_page) options_id = self.addPage(self.import_options_page) confirm_id = self.addPage(self.import_confirm_page) self.setOption(QtGui.QWizard.CancelButtonOnLeft, on=True) self.product_widget.itemSelectionChanged.connect(self._toggle_options) self.setButtonText(QtGui.QWizard.FinishButton, 'Export') self.currentIdChanged.connect(self._check_descriptions)
def _make_frame_range_controls(self, min_time, max_time, start_time, end_time): self._frame_start = QtGui.QSpinBox() self._frame_start.setMinimum(min_time) self._frame_start.setMaximum(max_time) self._frame_start.setValue(int(start_time)) self._frame_start.setFixedWidth(50) frame_to = QtGui.QLabel("to") self._frame_end = QtGui.QSpinBox() self._frame_end.setMinimum(min_time) self._frame_end.setMaximum(max_time) self._frame_end.setValue(int(end_time)) self._frame_end.setFixedWidth(50) frame_by = QtGui.QLabel("by") self._frame_step = QtGui.QSpinBox() self._frame_step.setValue(1) self._frame_step.setFixedWidth(50) auto_frange_layout = QtGui.QHBoxLayout() auto_frange_layout.setContentsMargins(0, 0, 0, 0) auto_frange_layout.setSpacing(4) auto_frange_layout.addWidget(self._frame_start) auto_frange_layout.addWidget(frame_to) auto_frange_layout.addWidget(self._frame_end) auto_frange_layout.addWidget(frame_by) auto_frange_layout.addWidget(self._frame_step) auto_frange = QtGui.QWidget() auto_frange.setLayout(auto_frange_layout) self._manual_frange = QtGui.QLineEdit( str(int(start_time)) + "-" + str(int(end_time))) self._manual_frange.setFixedHeight(22) self._frange_stack = QtGui.QStackedWidget() self._frange_stack.addWidget(auto_frange) self._frange_stack.addWidget(self._manual_frange) edit_icon_path = IconFactory().disk_path( "icon:///images/icons/edit_32x32.png") self._frange_btn = QtGui.QPushButton() self._frange_btn_size = QtCore.QSize(22, 22) self._frange_btn.setFlat(True) self._frange_btn.setCheckable(True) self._frange_btn.setFixedSize(self._frange_btn_size) self._frange_btn.setIcon(QtGui.QIcon(edit_icon_path)) self._frange_btn.setIconSize(self._frange_btn_size) self._frange_btn.toggled.connect( lambda c: self._frange_stack.setCurrentIndex(int(c)))
def add_button(self, **kwargs): import sys # intercept/adjust some of the arguments for (key, val) in kwargs.iteritems(): # get full image path if key.startswith("image") and IconFactory.is_icon_path(val): kwargs[key] = self.icon_factory.disk_path(val) cmds.setParent("|".join([self.layout, self.name])) cmds.shelfButton(**kwargs)
def __init__(self): ptask_area = PTaskArea.current() options_config = ptask_area.config(FAIL_OPTIONS_CONFIG, composite_ancestors=True) icon_path = IconFactory().disk_path(FAIL_ICON_URI) super(FailDialog, self).__init__( title='Failure Report', options_config=options_config, icon_path=icon_path, action_button_text='Submit', modal=False, )
def __init__(self): ptask_area = PTaskArea.current() options_config = ptask_area.config(OOTO_OPTIONS_CONFIG, composite_ancestors=True) icon_path = IconFactory().disk_path(OOTO_ICON_URI) super(OotoDialog, self).__init__( title='Out Of The Office (OOTO)', options_config=options_config, icon_path=icon_path, action_button_text='Submit', modal=False, )
def __init__(self): ptask_area = PTaskArea.current() options_config = ptask_area.config(IMPORT_OPTIONS_CONFIG, composite_ancestors=True) self.get_files() options_config['options']['products'].set('choices', self.sublist.keys()) options_config['options']['products'].set('default', self.sublist.keys()[0]) icon_path = IconFactory().disk_path(IMPORT_ICON_URI) super(ImportDialog, self).__init__( title='Import Product', options_config=options_config, icon_path=icon_path, action_button_text='Import', modal=False, )
def __init__(self, session=None, parent=None): super(SubscriptionImportWizard, self).__init__(parent=parent) self.setModal(True) if not session: session = SessionRegistry().current() self._session = session logo_pixmap = QtGui.QPixmap( IconFactory().disk_path("icon:///images/icons/import_32x32.png")) self.setWindowTitle("Subscription Import") self.setPixmap(QtGui.QWizard.LogoPixmap, logo_pixmap) # get entity classes entity_classes = EntityRegistry().get_entity_classes( self.session.app_name) # map entity category to class self._category_lookup = {} for cls in entity_classes: self._category_lookup[cls.category] = cls selection_id = self.addPage(self.sub_selection_page) options_id = self.addPage(self.import_options_page) self.setOption(QtGui.QWizard.CancelButtonOnLeft, on=True) self.setButtonText(QtGui.QWizard.FinishButton, 'Import') self._subs_widget.itemSelectionChanged.connect(self._toggle_options) if not self._subs_widget.repr_items: QtGui.QMessageBox.warning(self.parent(), "Import Warning", "<b>No subs available to Import</b>." ) self.NO_SUBS = True
def __init__(self, session=None, parent=None): super(EntityExportWizard, self).__init__(parent=parent) self.setModal(True) if not session: session = SessionRegistry().current() self._session = session logo_pixmap = QtGui.QPixmap( IconFactory().disk_path("icon:///images/icons/export_32x32.png")) self.setWindowTitle("Entity Export") self.setPixmap(QtGui.QWizard.LogoPixmap, logo_pixmap) self._query_entities() selection_id = self.addPage(self.entity_selection_page) options_id = self.addPage(self.export_options_page) confirm_id = self.addPage(self.export_confirm_page) self.setOption(QtGui.QWizard.CancelButtonOnLeft, on=True) self.entity_widget.itemSelectionChanged.connect(self._toggle_options) self.setButtonText(QtGui.QWizard.FinishButton, 'Export') self.currentIdChanged.connect(self._check_descriptions) if not self.exportable_entities: QtGui.QMessageBox.warning(self.parent(), "Export Warning", "<b>No entities available to Export</b>. If all entities " + \ "have been published at this version already, you will " + \ "need to <b>version up</b> before continuing." ) self.NO_ENTITIES = True
def __init__(self): self._ptask_area = PTaskArea.current() options_config = self._ptask_area.config(VERSION_OPTIONS_CONFIG, composite_ancestors=True) try: self._ptask = PTask.get(self._ptask_area.spec) except PTaskError as e: error_dialog = QtGui.QErrorMessage(self) error_dialog.setWindowTitle('Version Failure') error_dialog.showMessage("Unable to determine current ptask.") return icon_path = IconFactory().disk_path(VERSION_ICON_URI) super(PTaskVersionDialog, self).__init__( title='Version up', options_config=options_config, icon_path=icon_path, action_button_text='Submit', modal=False, )
def add_button(self, **kwargs): # so not sure if this is going to work, yay programming! # intercept/adjust some of the arguments cmd = kwargs.get('command', 'print "No action defined"') label = kwargs.get('label', 'Unknown') annotation = kwargs.get('annotation', '') image = QtGui.QPixmap() for (key, val) in kwargs.iteritems(): if key.startswith("image") and IconFactory.is_icon_path(val): image = QtGui.QIcon(self.icon_factory.disk_path(val)) action = QtGui.QAction(self.widget) action.setIcon(image) action.setToolTip(annotation) action.triggered.connect(lambda: self._exec_cmd(cmd)) button = QtGui.QToolButton() button.setAutoRaise(True) button.setDefaultAction(action) self.layout.addWidget(button)
def load_toolbars(): """Load all custom toolbars via config files.""" ptask_area = PTaskArea.current() nuke_toolbar_config = ptask_area.config(config_file=NUKE_TOOLBAR_CONFIG, composite_ancestors=True) for (toolbar_name, toolbar_config) in nuke_toolbar_config.iteritems(): toolbar = nuke.toolbar(toolbar_name) for (item_key, item_config) in toolbar_config.iteritems(): name = item_config.get('label', item_key) command = item_config.get('command', "print 'No op'") icon = item_config.get('image', None) tooltip = item_config.get('annotation', "") if icon: icon = IconFactory().disk_path(icon) toolbar.addCommand(name=name, command=command, icon=icon, tooltip=tooltip)
class ActionOption(object): option_type = None _registry = {} _icon_factory = IconFactory() # ----------------------------------------------------------------------------- @classmethod def register(cls, option_cls): cls._registry[option_cls.option_type] = option_cls # ----------------------------------------------------------------------------- @classmethod def factory(cls, option_type): try: return cls._registry[option_type] except KeyError: raise TypeError("Unknown option type: " + str(option_type)) # ----------------------------------------------------------------------------- def __init__(self, name, config): self._name = name self._default = config.get('default', None) self._help = config.get('help', None) self._icon_path = self.__class__._icon_factory.disk_path( config.get('icon', None)) self._header = ActionOptionHeader( config.get('label', name), icon_path=self.icon_path, ) self._required = config.get('required', False) self._disabled = config.get('disabled', False) # ----------------------------------------------------------------------------- @property def value_ok(self): if not self.required: return True return self.value is not None # ----------------------------------------------------------------------------- @property def default(self): return self._default # ----------------------------------------------------------------------------- @property def help(self): return self._help # ----------------------------------------------------------------------------- @property def icon_path(self): return self._icon_path # ----------------------------------------------------------------------------- @property def header(self): return self._header # ----------------------------------------------------------------------------- @property def name(self): return self._name # ----------------------------------------------------------------------------- @property def layout(self): return QtCore.Qt.Vertical # ----------------------------------------------------------------------------- @property def required(self): return self._required # ----------------------------------------------------------------------------- @property def disabled(self): return self._disabled # ----------------------------------------------------------------------------- @property def tooltip(self): return """ <b>{hlp}</b><br><br> type: <b>{typ}</b><br> required: <b>{req}</b><br> default: <b>{default}</b><br> """.format(hlp=self.help, typ=self.type, req=str(self.required), default=str(self.default)) # ----------------------------------------------------------------------------- @property def type(self): return self.__class__.option_type
class BaseDarkKnightDialog(SessionDialog): """Base class for application specific Dark Knight implementations. Why "Dark Knight"? The old queue submission tool was called "Batman". This is the new, improved reboot version. """ _icon_path = IconFactory().disk_path("icon:///images/icons/dk_64x64.png") _logo_path = IconFactory().disk_path("icon:///images/logos/dk_logo.png") _logo_full_path = IconFactory().disk_path("icon:///images/logos/dk_full.png") _dir_path = IconFactory().disk_path("icon:///images/icons/dir_32x32.png") # ------------------------------------------------------------------------- def __init__(self, parent=None): super(BaseDarkKnightDialog, self).__init__(parent=parent) cls = self.__class__ self.setWindowTitle("TDK") self.setWindowIcon(QtGui.QIcon(cls._icon_path)) self.main_layout = QtGui.QVBoxLayout(self) self.main_layout.setSpacing(4) self.main_layout.setContentsMargins(4, 4, 4, 4) # ---- logo image logo_btn = QtGui.QPushButton() logo_btn.setCheckable(True) logo_btn.setFlat(True) logo_full = QtGui.QPixmap(cls._logo_full_path) logo = QtGui.QPixmap(cls._logo_path) def _display_logo(checked): if checked: logo_btn.setFixedSize(logo_full.size()) logo_btn.setIcon(QtGui.QIcon(logo_full)) logo_btn.setIconSize(logo_full.size()) else: logo_btn.setFixedSize(logo.size()) logo_btn.setIcon(QtGui.QIcon(logo)) logo_btn.setIconSize(logo.size()) _display_logo(logo_btn.isChecked()) logo_btn.toggled.connect(_display_logo) logo_layout = QtGui.QHBoxLayout() logo_layout.addStretch() logo_layout.addWidget(logo_btn) logo_layout.addStretch() self.main_layout.addLayout(logo_layout) self.main_layout.setStretchFactor(logo_btn, 0) # ------------------------------------------------------------------------- def _make_frame_range_controls(self, min_time, max_time, start_time, end_time): self._frame_start = QtGui.QSpinBox() self._frame_start.setMinimum(min_time) self._frame_start.setMaximum(max_time) self._frame_start.setValue(int(start_time)) self._frame_start.setFixedWidth(50) frame_to = QtGui.QLabel("to") self._frame_end = QtGui.QSpinBox() self._frame_end.setMinimum(min_time) self._frame_end.setMaximum(max_time) self._frame_end.setValue(int(end_time)) self._frame_end.setFixedWidth(50) frame_by = QtGui.QLabel("by") self._frame_step = QtGui.QSpinBox() self._frame_step.setValue(1) self._frame_step.setFixedWidth(50) auto_frange_layout = QtGui.QHBoxLayout() auto_frange_layout.setContentsMargins(0, 0, 0, 0) auto_frange_layout.setSpacing(4) auto_frange_layout.addWidget(self._frame_start) auto_frange_layout.addWidget(frame_to) auto_frange_layout.addWidget(self._frame_end) auto_frange_layout.addWidget(frame_by) auto_frange_layout.addWidget(self._frame_step) auto_frange = QtGui.QWidget() auto_frange.setLayout(auto_frange_layout) self._manual_frange = QtGui.QLineEdit( str(int(start_time)) + "-" + str(int(end_time))) self._manual_frange.setFixedHeight(22) self._frange_stack = QtGui.QStackedWidget() self._frange_stack.addWidget(auto_frange) self._frange_stack.addWidget(self._manual_frange) edit_icon_path = IconFactory().disk_path( "icon:///images/icons/edit_32x32.png") self._frange_btn = QtGui.QPushButton() self._frange_btn_size = QtCore.QSize(22, 22) self._frange_btn.setFlat(True) self._frange_btn.setCheckable(True) self._frange_btn.setFixedSize(self._frange_btn_size) self._frange_btn.setIcon(QtGui.QIcon(edit_icon_path)) self._frange_btn.setIconSize(self._frange_btn_size) self._frange_btn.toggled.connect( lambda c: self._frange_stack.setCurrentIndex(int(c))) # ------------------------------------------------------------------------- def _get_frange_from_controls(self): # auto frame range if self._frange_stack.currentIndex() == 0: frange_str = str(self._frame_start.value()) + "-" + \ str(self._frame_end.value()) + ":" + \ str(self._frame_step.value()) # manual frame range else: frange_str = self._manual_frange.text() try: frange = Frange(frange_str) except FrangeError: self._show_error( "Unable to determine frame range from: " + frange_str) return None return frange # ------------------------------------------------------------------------- def _separator(self): sep = QtGui.QFrame() sep.setFrameStyle(QtGui.QFrame.HLine | QtGui.QFrame.Plain) return sep # ------------------------------------------------------------------------- def _show_error(self, msg): error_dialog = QtGui.QErrorMessage(self) error_dialog.setWindowTitle("TDK Errors") error_dialog.showMessage(msg) # ------------------------------------------------------------------------- def _sync_latest(self): ptask = self.session.ptask area = self.session.ptask_area latest_ver = ptask.latest_version area.provision( area.dir(version=latest_ver.number, verify=False)) source_action_class = ActionRegistry().get_action('source', 'ptask') if not source_action_class: raise DarkKnightError("Could not find ptask source action.") source_action = source_action_class( source=ptask, destination=ptask, destination_version=latest_ver, wait=True, ) source_action.interactive = False source_action()
def icon_factory(self): if not hasattr(self, '_icon_factory'): self._icon_factory = IconFactory() return self._icon_factory