Beispiel #1
0
    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)
Beispiel #2
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)))
Beispiel #3
0
    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)
Beispiel #4
0
    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,
        )
Beispiel #5
0
    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,
        )
Beispiel #6
0
    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,
        )
Beispiel #7
0
    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
Beispiel #8
0
    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
Beispiel #9
0
    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,
        )
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
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)
Beispiel #13
0
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
Beispiel #14
0
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()
Beispiel #15
0
    def icon_factory(self):

        if not hasattr(self, '_icon_factory'):
            self._icon_factory = IconFactory()

        return self._icon_factory