def ui(self):
        super(AssetsManagerSettingsWidget, self).ui()

        self._auto_check_published_cbx = QCheckBox('Auto Check Published Versions?')
        self.main_layout.addWidget(self._auto_check_published_cbx)
        self._auto_check_working_cbx = QCheckBox('Auto Check Working Versions?')
        self.main_layout.addWidget(self._auto_check_working_cbx)
        self._auto_check_lock_cbx = QCheckBox('Check Lock/Unlock Working Versions?')
        self.main_layout.addWidget(self._auto_check_lock_cbx)

        self.main_layout.addLayout(dividers.DividerLayout())
        self.main_layout.addItem(QSpacerItem(0, 10, QSizePolicy.Preferred, QSizePolicy.Expanding))

        bottom_layout = QHBoxLayout()
        bottom_layout.setContentsMargins(0, 0, 0, 0)
        bottom_layout.setSpacing(1)
        self.main_layout.addLayout(bottom_layout)

        save_icon = tpDcc.ResourcesMgr().icon('save')
        cancel_icon = tpDcc.ResourcesMgr().icon('close')

        self._save_btn = QPushButton('Save')
        self._save_btn.setIcon(save_icon)
        self._cancel_btn = QPushButton('Cancel')
        self._cancel_btn.setIcon(cancel_icon)
        bottom_layout.addWidget(self._save_btn)
        bottom_layout.addWidget(self._cancel_btn)
Exemplo n.º 2
0
    def _create_context_menu(self, context_menu):
        """
        Internal function that generates contextual menu for asset widget
        Reimplement for custom functionality
        :param context_menu: Menu
        """

        sync_icon = tpDcc.ResourcesMgr().icon('sync')
        artella_icon = tpDcc.ResourcesMgr().icon('artella')
        eye_icon = tpDcc.ResourcesMgr().icon('eye')

        artella_action = QAction(artella_icon, 'Open in Artella', context_menu)
        view_locally_action = QAction(eye_icon, 'View Locally', context_menu)
        sync_action = QAction(sync_icon, 'Synchronize', context_menu)

        sync_menu = menu.Menu(self)
        actions_added = self._fill_sync_action_menu(sync_menu)
        artella_action.triggered.connect(self._on_open_in_artella)
        view_locally_action.triggered.connect(self._on_view_locally)

        context_menu.addAction(artella_action)
        context_menu.addAction(view_locally_action)
        context_menu.addSeparator()
        if actions_added:
            sync_action.setMenu(sync_menu)
            context_menu.addAction(sync_action)
Exemplo n.º 3
0
    def update_asset_categories(self, asset_categories):
        """
        Updates current categories with the given ones
        :param asset_categories: list(str)
        """

        for btn in self._categories_btn_grp.buttons():
            self._categories_btn_grp.removeButton(btn)

        qtutils.clear_layout(self._categories_menu_layout)

        all_asset_categories = [defines.ArtellaFileStatus.ALL]
        all_asset_categories.extend(asset_categories)
        for category in all_asset_categories:
            new_btn = QPushButton(category)
            new_btn.setMinimumWidth(
                QFontMetrics(new_btn.font()).width(category) + 10)
            new_btn.setIcon(tpDcc.ResourcesMgr().icon(category.lower()))
            new_btn.setCheckable(True)
            self._categories_menu_layout.addWidget(new_btn)
            self._categories_btn_grp.addButton(new_btn)
            if category == defines.ArtellaFileStatus.ALL:
                new_btn.setIcon(tpDcc.ResourcesMgr().icon('home'))
                new_btn.setChecked(True)
            new_btn.toggled.connect(partial(self._change_category, category))
    def _setup_menubar(self):
        """
        Internal function used to setup Artella Manager menu bar
        """

        menubar_widget = QWidget()
        menubar_layout = QGridLayout()
        menubar_layout.setAlignment(Qt.AlignTop)
        menubar_layout.setContentsMargins(0, 0, 0, 0)
        menubar_layout.setSpacing(2)
        menubar_widget.setLayout(menubar_layout)
        self._project_artella_btn = QToolButton()
        self._project_artella_btn.setText('Artella')
        self._project_artella_btn.setIcon(tpDcc.ResourcesMgr().icon('artella'))
        self._project_artella_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self._project_folder_btn = QToolButton()
        self._project_folder_btn.setText('Project')
        self._project_folder_btn.setIcon(tpDcc.ResourcesMgr().icon('folder'))
        self._project_folder_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self._synchronize_btn = QToolButton()
        self._synchronize_btn.setText('Synchronize')
        self._synchronize_btn.setPopupMode(QToolButton.InstantPopup)
        self._synchronize_btn.setIcon(tpDcc.ResourcesMgr().icon('sync'))
        self._synchronize_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self._settings_btn = QToolButton()
        self._settings_btn.setText('Settings')
        self._settings_btn.setIcon(tpDcc.ResourcesMgr().icon('settings'))
        self._settings_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        for i, btn in enumerate(
                [self._project_artella_btn, self._project_folder_btn, self._synchronize_btn, self._settings_btn]):
            menubar_layout.addWidget(btn, 0, i, 1, 1, Qt.AlignCenter)

        self._setup_synchronize_menu()

        return menubar_widget
Exemplo n.º 5
0
    def get_icon(cls):
        """
        Returns icon resource of the current plugin
        :return: QIcon
        """

        plugin_icon = cls.ICON
        icon_split = plugin_icon.split('/')
        if len(icon_split) == 1:
            theme = 'default'
        elif len(icon_split) > 1:
            theme = icon_split[0]
        else:
            theme = 'default'
        icon_path = tpDcc.ResourcesMgr().get('icons',
                                             theme,
                                             '{}.png'.format(cls.ICON),
                                             key='project')
        if not icon_path or not os.path.isfile(icon_path):
            icon_path = tpDcc.ResourcesMgr().get('icons', theme,
                                                 '{}.png'.format(cls.ICON))
            if not icon_path or not os.path.isfile(icon_path):
                plugin_icon = tpDcc.ResourcesMgr().icon('plugin')
            else:
                plugin_icon = tpDcc.ResourcesMgr().icon(cls.ICON, theme=theme)
        else:
            plugin_icon = tpDcc.ResourcesMgr().icon(cls.ICON,
                                                    theme=theme,
                                                    key='launcher')

        return plugin_icon
Exemplo n.º 6
0
class AssetDisplayButtons(DisplayButtonsWidget, object):

    open_eye_icon = tpDcc.ResourcesMgr().icon('eye')
    closed_eye_icon = tpDcc.ResourcesMgr().icon('eye_closed')

    def __init__(self, parent=None):
        super(AssetDisplayButtons, self).__init__(parent=parent)

    def custom_ui(self):

        self.setMinimumWidth(25)

        self.view_btn = QPushButton()
        self.view_btn.setIcon(tpDcc.ResourcesMgr().icon('eye'))
        self.view_btn.setFlat(True)
        self.view_btn.setFixedWidth(25)
        self.view_btn.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
        self.main_layout.addWidget(self.view_btn)

        self.main_layout.addWidget(dividers.get_horizontal_separator_widget())

    def show(self):
        """
        Updates icon of the button to show
        """

        self.view_btn.setIcon(self.open_eye_icon)

    def hide(self):
        """
        Updates icon of the button to hide
        """

        self.view_btn.setIcon(self.closed_eye_icon)
Exemplo n.º 7
0
    def ui(self):
        super(OutlinerOverrideItem, self).ui()

        self.setMouseTracking(True)

        self._item_widget.setFrameStyle(QFrame.Raised | QFrame.StyledPanel)
        self.setStyleSheet('background-color: rgb(45,45,45);')

        icon_lbl = QLabel()
        icon_lbl.setMaximumWidth(18)
        icon_lbl.setPixmap(self._override.OVERRIDE_ICON.pixmap(self._override.OVERRIDE_ICON.actualSize(QSize(20, 20))))
        self._target_lbl = QLabel(self._name.title())
        self._editor_btn = QPushButton('Editor')
        self._editor_btn.setFlat(True)
        self._save_btn = QPushButton()
        self._editor_btn.setIcon(tp.ResourcesMgr().icon('editor'))
        self._save_btn.setFlat(True)
        self._save_btn.setIcon(tp.ResourcesMgr().icon('save'))
        self._delete_btn = QPushButton()
        self._delete_btn.setFlat(True)
        self._delete_btn.setIcon(tp.ResourcesMgr().icon('delete'))

        self._item_layout.addWidget(icon_lbl, 0, 1, 1, 1)
        self._item_layout.addWidget(dividers.get_horizontal_separator_widget(), 0, 2, 1, 1)
        self._item_layout.addWidget(self._target_lbl, 0, 3, 1, 1)
        self._item_layout.addWidget(dividers.get_horizontal_separator_widget(), 0, 4, 1, 1)
        self._item_layout.addWidget(self._editor_btn, 0, 5, 1, 1)
        self._item_layout.setColumnStretch(6, 7)
        self._item_layout.addWidget(self._save_btn, 0, 8, 1, 1)
        self._item_layout.addWidget(self._delete_btn, 0, 9, 1, 1)
Exemplo n.º 8
0
    def ui(self):
        self.main_layout = QHBoxLayout()
        self.main_layout.setAlignment(Qt.AlignTop)
        self.main_layout.setContentsMargins(0, 0, 0, 0)
        self.main_layout.setSpacing(0)
        self.setLayout(self.main_layout)

        self.setFrameShape(QFrame.Panel)
        self.setFrameShadow(QFrame.Raised)
        self.setLineWidth(1)

        shutdown_icon = tpDcc.ResourcesMgr().icon('shutdown')
        self._kitsu_off_icon = tpDcc.ResourcesMgr().icon('kitsu_off')
        self._kitsu_on_icon = tpDcc.ResourcesMgr().icon('kitsu_on')

        self._kitsu_btn = QPushButton('Kitsu')
        self._kitsu_btn.setIconSize(QSize(50, 50))
        self._kitsu_btn.setFixedHeight(25)
        self._kitsu_btn.setMinimumWidth(90)
        self._kitsu_btn.setFlat(True)

        self._kitsu_logout_btn = QPushButton()
        self._kitsu_logout_btn.setVisible(False)
        self._kitsu_logout_btn.setIcon(shutdown_icon)
        self._kitsu_btn.setFlat(True)

        self.main_layout.addWidget(self._kitsu_btn)
        self.main_layout.addWidget(self._kitsu_logout_btn)

        self._kitsu_btn.clicked.connect(self._on_open_kitsu_login)
        self._kitsu_logout_btn.clicked.connect(self._on_kitsu_logout)

        if self._project:
            self.update_kitsu_status()
Exemplo n.º 9
0
    def _create_sequence_toolbar(self):
        """
        Creates toolbar widget for the sequence
        """

        toolbar_widget = QWidget()
        toolbar_widget.setMaximumWidth(40)
        toolbar_layout = QVBoxLayout()
        toolbar_layout.setContentsMargins(2, 2, 2, 2)
        toolbar_layout.setSpacing(5)
        toolbar_widget.setLayout(toolbar_layout)

        artella_btn = QToolButton()
        artella_btn.setText('Artella')
        artella_btn.setIcon(tpDcc.ResourcesMgr().icon('artella'))
        artella_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        view_locally_btn = QToolButton()
        view_locally_btn.setText('Folder')
        view_locally_btn.setIcon(tpDcc.ResourcesMgr().icon('folder'))
        view_locally_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        toolbar_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))
        toolbar_layout.addWidget(artella_btn)
        toolbar_layout.addWidget(view_locally_btn)
        toolbar_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))

        artella_btn.clicked.connect(self._on_open_artella)
        view_locally_btn.clicked.connect(self._on_view_locally)

        return toolbar_widget
Exemplo n.º 10
0
    def _create_replace_actions(self, replace_menu, item):
        """
        Internal function that creates replacement options for current file
        :param replace_menu: QMenu
        :return: bool
        """

        rig_icon = tpDcc.ResourcesMgr().icon('rig')
        alembic_icon = tpDcc.ResourcesMgr().icon('alembic')
        standin_icon = tpDcc.ResourcesMgr().icon('standin')

        rig_action = QAction(rig_icon, 'Rig', replace_menu)
        gpu_cache_action = QAction(alembic_icon, 'Gpu Cache', replace_menu)
        standin_action = QAction(standin_icon, 'Standin', replace_menu)
        replace_menu.addAction(rig_action)
        replace_menu.addAction(gpu_cache_action)
        replace_menu.addAction(standin_action)

        rig_replace_menu = QMenu()
        rig_action.setMenu(rig_replace_menu)
        rig_root_control_action = QAction('Root Control', replace_menu)
        rig_main_control_action = QAction('Main Control', replace_menu)
        rig_replace_menu.addAction(rig_root_control_action)
        rig_replace_menu.addAction(rig_main_control_action)

        gpu_cache_replace_menu = QMenu()
        gpu_cache_action.setMenu(gpu_cache_replace_menu)
        gpu_cache_root_control_action = QAction('Root Control', replace_menu)
        gpu_cache_main_control_action = QAction('Main Control', replace_menu)
        gpu_cache_replace_menu.addAction(gpu_cache_root_control_action)
        gpu_cache_replace_menu.addAction(gpu_cache_main_control_action)

        standin_replace_menu = QMenu()
        standin_action.setMenu(standin_replace_menu)
        standin_root_control_action = QAction('Root Control', replace_menu)
        standin_main_control_action = QAction('Main Control', replace_menu)
        standin_replace_menu.addAction(standin_root_control_action)
        standin_replace_menu.addAction(standin_main_control_action)

        if item.asset_node.is_rig():
            rig_action.setEnabled(False)
        elif item.asset_node.is_gpu_cache():
            gpu_cache_action.setEnabled(False)
        elif item.asset_node.is_standin():
            standin_action.setEnabled(False)

        rig_root_control_action.triggered.connect(
            partial(self._on_replace_rig, item, 'root_ctrl'))
        rig_main_control_action.triggered.connect(
            partial(self._on_replace_rig, item, 'main_ctrl'))
        gpu_cache_root_control_action.triggered.connect(
            partial(self._on_replace_gpu_cache, item, 'root_ctrl'))
        gpu_cache_main_control_action.triggered.connect(
            partial(self._on_replace_gpu_cache, item, 'main_ctrl'))
        standin_root_control_action.triggered.connect(
            partial(self._on_replace_standin, item, 'root_ctrl'))
        gpu_cache_main_control_action.triggered.connect(
            partial(self._on_replace_standin, item, 'main_ctrl'))

        return replace_menu
Exemplo n.º 11
0
    def _fill_sync_action_menu(self, sync_menu):
        """
        Internal function that fills sync menu with proper actions depending of the asset files supported
        :param sync_menu: Menu
        """

        if not sync_menu:
            return

        actions_to_add = list()

        for asset_type_name in self.asset.FILES:
            asset_type_icon = tpDcc.ResourcesMgr().icon(asset_type_name)
            asset_type_action = QAction(asset_type_icon,
                                        asset_type_name.title(), sync_menu)
            asset_type_action.triggered.connect(
                partial(self._on_sync, asset_type_name,
                        defines.ArtellaFileStatus.ALL))
            actions_to_add.append(asset_type_action)

        if actions_to_add:
            download_icon = tpDcc.ResourcesMgr().icon('download')
            all_action = QAction(download_icon, 'All', sync_menu)
            all_action.triggered.connect(
                partial(self._on_sync, defines.ArtellaFileStatus.ALL,
                        defines.ArtellaFileStatus.ALL))
            actions_to_add.insert(0, all_action)

            for action in actions_to_add:
                sync_menu.addAction(action)

        return actions_to_add
    def ui(self):
        super(DCCButton, self).ui()

        dcc_name = self._dcc.name.lower().replace(' ', '_')
        dcc_icon = self._dcc.icon
        icon_split = dcc_icon.split('/')
        if len(icon_split) == 1:
            theme = ''
            icon_name = icon_split[0]
        elif len(icon_split) > 1:
            theme = icon_split[0]
            icon_name = icon_split[1]
        else:
            theme = 'color'
            icon_name = dcc_name

        icon_path = tpDcc.ResourcesMgr().get('icons', theme,
                                             '{}.png'.format(icon_name))
        if not os.path.isfile(icon_path):
            icon_path = tpDcc.ResourcesMgr().get('icons', theme,
                                                 '{}.png'.format(icon_name))
            if not os.path.isfile(icon_path):
                dcc_icon = tpDcc.ResourcesMgr().icon('artella')
            else:
                dcc_icon = tpDcc.ResourcesMgr().icon(icon_name, theme=theme)
        else:
            dcc_icon = tpDcc.ResourcesMgr().icon(icon_name, theme=theme)

        self._title = QPushButton(self._dcc.name.title())
        self._title.setStyleSheet("""
            border-top-left-radius: 10px;
            border-top-right-radius: 10px;
            """)
        self._title.setFixedHeight(20)

        self.main_layout.addWidget(self._title)
        self._dcc_btn = QPushButton()
        self._dcc_btn.setFixedSize(QSize(100, 100))
        self._dcc_btn.setIconSize(QSize(110, 110))
        self._dcc_btn.setIcon(dcc_icon)
        self._dcc_btn.setSizePolicy(QSizePolicy.Expanding,
                                    QSizePolicy.Preferred)
        self.main_layout.addWidget(self._dcc_btn)

        self._version_combo = QComboBox()
        self.main_layout.addWidget(self._version_combo)
        for version in self._dcc.supported_versions:
            self._version_combo.addItem(str(version))

        default_version = self._dcc.default_version
        index = self._version_combo.findText(default_version,
                                             Qt.MatchFixedString)
        if index > -1:
            self._version_combo.setCurrentIndex(index)

        self.setMaximumWidth(105)
    def _setup_splash(self, dcc_name):
        """
        Internal function that is used to setup launch splash depending on the selected DCC
        :param dcc_name: str
        """

        splash_pixmap = self._get_splash_pixmap()

        self._splash = QSplashScreen(splash_pixmap)
        # self._splash.setFixedSize(QSize(800, 270))
        self._splash.setWindowFlags(Qt.FramelessWindowHint)
        self._splash.setEnabled(True)

        self.main_layout = QVBoxLayout()
        self.main_layout.setContentsMargins(5, 2, 5, 2)
        self.main_layout.setSpacing(2)
        self.main_layout.setAlignment(Qt.AlignBottom)

        self._splash.setLayout(self.main_layout)
        self.progress_bar = self.project.get_progress_bar()
        self.main_layout.addWidget(self.progress_bar)
        self.progress_bar.setMaximum(6)
        self.progress_bar.setTextVisible(False)

        self._progress_text = QLabel('Loading {} Tools ...'.format(
            self.project.name.title()))
        self._progress_text.setAlignment(Qt.AlignCenter)
        self._progress_text.setStyleSheet(
            "QLabel { background-color : rgba(0, 0, 0, 180); color : white; }")
        font = self._progress_text.font()
        font.setPointSize(10)
        self._progress_text.setFont(font)
        self.main_layout.addWidget(self._progress_text)

        self.main_layout.addItem(QSpacerItem(0, 20))

        artella_icon = tpDcc.ResourcesMgr().icon('artella')
        artella_lbl = QLabel()
        artella_lbl.setFixedSize(QSize(52, 52))
        artella_lbl.setParent(self._splash)
        artella_lbl.move(self._splash.width() - artella_lbl.width(), 0)
        artella_lbl.setPixmap(
            artella_icon.pixmap(artella_icon.actualSize(QSize(48, 48))))

        dcc_icon = tpDcc.ResourcesMgr().icon(dcc_name.lower())
        dcc_lbl = QLabel()
        dcc_lbl.setFixedSize(QSize(52, 52))
        dcc_lbl.setParent(self._splash)
        dcc_lbl.move(self._splash.width() - dcc_lbl.width(), 52)
        dcc_lbl.setPixmap(dcc_icon.pixmap(dcc_icon.actualSize(QSize(48, 48))))

        self._splash.show()
        self._splash.raise_()
Exemplo n.º 14
0
    def ui(self):
        super(AssetShadersStack, self).ui()

        export_icon = tpDcc.ResourcesMgr().icon('export')
        open_folder_icon = tpDcc.ResourcesMgr().icon('folder')

        self._export_btn = QPushButton('Shaders Exporter')
        self._export_btn.setIcon(export_icon)
        self._export_btn.setMinimumWidth(80)
        self._open_folder_btn = QPushButton('Open Shaders Folder')
        self._open_folder_btn.setIcon(open_folder_icon)
        self._open_folder_btn.setMaximumWidth(135)

        buttons_layout = QHBoxLayout()
        buttons_layout.setContentsMargins(0, 0, 0, 0)
        buttons_layout.setSpacing(10)
        buttons_layout.addWidget(self._open_folder_btn)
        buttons_layout.addWidget(self._export_btn)

        self._shaders_stack = stack.SlidingStackedWidget()

        project = self._asset_widget.asset.project
        shaders_viewer_widget = QWidget()
        self._shaders_viewer = artellapipe.ShadersViewer(
            project=project,
            shaders_path=self._asset_widget.asset.get_shaders_path())
        shaders_viewer_widget.setLayout(self._shaders_viewer)
        no_shaders_widget = QFrame()
        no_shaders_widget.setFrameShape(QFrame.StyledPanel)
        no_shaders_widget.setFrameShadow(QFrame.Sunken)
        no_shaders_layout = QVBoxLayout()
        no_shaders_layout.setContentsMargins(0, 0, 0, 0)
        no_shaders_layout.setSpacing(0)
        no_shaders_widget.setLayout(no_shaders_layout)
        no_shaders_lbl = QLabel()
        no_shaders_pixmap = tpDcc.ResourcesMgr().pixmap('no_shaders_available')
        no_shaders_lbl.setPixmap(no_shaders_pixmap)
        no_shaders_lbl.setAlignment(Qt.AlignCenter)
        no_shaders_layout.addItem(
            QSpacerItem(0, 10, QSizePolicy.Preferred, QSizePolicy.Expanding))
        no_shaders_layout.addWidget(no_shaders_lbl)
        no_shaders_layout.addItem(
            QSpacerItem(0, 10, QSizePolicy.Preferred, QSizePolicy.Expanding))
        self._shaders_exporter = shaderexporter.ShaderExporter(project=project)

        self._shaders_stack.addWidget(no_shaders_widget)
        self._shaders_stack.addWidget(shaders_viewer_widget)
        self._shaders_stack.addWidget(self._shaders_exporter)

        self.main_layout.addLayout(buttons_layout)
        self.main_layout.addWidget(self._shaders_stack)
Exemplo n.º 15
0
    def __init__(self, spinner_type=SpinnerType.Thumb, parent=None):
        super(WaitSpinner, self).__init__(parent=parent)

        self._spin_icons = list()

        empty_thumb = tpDcc.ResourcesMgr().pixmap(self.EMPTY_FILE)

        if spinner_type == SpinnerType.Thumb:
            for i in range(self.THUMB_INFO[0]):
                self._spin_icons.append(tpDcc.ResourcesMgr().pixmap(
                    self.THUMB_INFO[1].format(i + 1)))
        elif spinner_type == SpinnerType.Loading:
            for i in range(self.LOADING_INFO[0]):
                self._spin_icons.append(tpDcc.ResourcesMgr().pixmap(
                    self.LOADING_INFO[1].format(i + 1)))
        else:
            for i in range(self.CIRCLE_INFO[0]):
                self._spin_icons.append(tpDcc.ResourcesMgr().pixmap(
                    self.CIRCLE_INFO[1].format(i + 1)))

        main_layout = QVBoxLayout()
        main_layout.setAlignment(Qt.AlignTop)
        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.setSpacing(2)
        self.setLayout(main_layout)

        self._bg = QFrame(self)
        self._bg.setStyleSheet(
            "#background {border-radius: 3px;border-style: solid;border-width: 1px;border-color: rgb(32,32,32);}"
        )
        self._bg.setFrameShape(QFrame.StyledPanel)
        self._bg.setFrameShadow(QFrame.Raised)
        self.frame_layout = QHBoxLayout()
        self.frame_layout.setContentsMargins(4, 4, 4, 4)
        self._bg.setLayout(self.frame_layout)
        main_layout.addWidget(self._bg)

        self._thumb_lbl = label.ThumbnailLabel()
        self._thumb_lbl.setMinimumSize(QSize(80, 55))
        self._thumb_lbl.setMaximumSize(QSize(80, 55))
        self._thumb_lbl.setStyleSheet('')
        self._thumb_lbl.setPixmap(empty_thumb)
        self._thumb_lbl.setScaledContents(False)
        self._thumb_lbl.setAlignment(Qt.AlignCenter)
        self.frame_layout.addWidget(self._thumb_lbl)

        self._current_spinner_index = 0

        self._timer = QTimer(self)
        self._timer.timeout.connect(self._on_update_spinner)
Exemplo n.º 16
0
    def ui(self):
        super(ArtellaLightRigManager, self).ui()

        buttons_layout = QHBoxLayout()
        buttons_layout.setContentsMargins(0, 0, 0, 0)
        buttons_layout.setSpacing(0)
        self.main_layout.addLayout(buttons_layout)

        self._open_btn = QToolButton()
        self._open_btn.setIcon(tpDcc.ResourcesMgr().icon('open'))
        self._sync_btn = QToolButton()
        self._sync_btn.setIcon(tpDcc.ResourcesMgr().icon('sync'))
        buttons_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
        buttons_layout.addWidget(self._open_btn)
        buttons_layout.addWidget(dividers.get_horizontal_separator_widget())
        buttons_layout.addWidget(self._sync_btn)
        buttons_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))

        self.main_layout.addLayout(dividers.DividerLayout())

        self._stack = stack.SlidingStackedWidget()
        self.main_layout.addWidget(self._stack)

        no_lights_pixmap = tpDcc.ResourcesMgr().pixmap('no_light_rigs')
        no_lights_lbl = QLabel()
        no_lights_lbl.setPixmap(no_lights_pixmap)
        no_lights_widget = QWidget()
        no_lights_layout = QHBoxLayout()
        no_lights_widget.setLayout(no_lights_layout)
        no_lights_layout.setContentsMargins(2, 2, 2, 2)
        no_lights_layout.setSpacing(2)
        no_lights_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))
        no_lights_layout.addWidget(no_lights_lbl)
        no_lights_layout.addItem(
            QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))
        self._stack.addWidget(no_lights_widget)

        light_rigs_widget = QWidget()
        self._light_rigs_layout = QHBoxLayout()
        light_rigs_widget.setLayout(self._light_rigs_layout)
        self._light_rigs_layout.setContentsMargins(5, 5, 5, 5)
        self._light_rigs_layout.setSpacing(5)
        self._light_rigs_layout.setAlignment(Qt.AlignCenter)
        self._stack.addWidget(light_rigs_widget)

        self._update_ui()
Exemplo n.º 17
0
    def ui(self):
        super(RadioButtonExample, self).ui()

        folder_icon = tpDcc.ResourcesMgr().icon('folder')
        play_icon = tpDcc.ResourcesMgr().icon('play')
        user_icon = tpDcc.ResourcesMgr().icon('user')

        lyt1 = layouts.HorizontalLayout()
        lyt1.addWidget(buttons.BaseRadioButton('Maya'))
        lyt1.addWidget(buttons.BaseRadioButton('Nuke'))
        lyt1.addWidget(buttons.BaseRadioButton('Houdini'))

        cbx_single = buttons.BaseRadioButton('Single')
        cbx_single.setChecked(True)
        cbx_single.setEnabled(False)

        lyt2 = layouts.HorizontalLayout()
        cbx_icon1 = buttons.BaseRadioButton('Folder')
        cbx_icon1.setIcon(folder_icon)
        cbx_icon2 = buttons.BaseRadioButton('Play')
        cbx_icon2.setIcon(play_icon)
        cbx_icon3 = buttons.BaseRadioButton('User')
        cbx_icon3.setIcon(user_icon)
        lyt2.addWidget(cbx_icon1)
        lyt2.addWidget(cbx_icon2)
        lyt2.addWidget(cbx_icon3)

        cbx_bind = buttons.BaseRadioButton('Data Bind')
        lbl = label.BaseLabel()
        btn = buttons.BaseButton(text='Change State')
        btn.clicked.connect(
            lambda: self.set_field('checked', not self.field('checked')))
        self.register_field('checked', True)
        self.register_field('checked_text', lambda: 'Yes!'
                            if self.field('checked') else 'No!')
        self.bind('checked', cbx_bind, 'checked', signal='toggled')
        self.bind('checked_text', lbl, 'text')

        self.main_layout.addWidget(dividers.Divider('Basic'))
        self.main_layout.addLayout(lyt1)
        self.main_layout.addWidget(cbx_single)
        self.main_layout.addWidget(dividers.Divider('Icon'))
        self.main_layout.addLayout(lyt2)
        self.main_layout.addWidget(dividers.Divider('Data Bind'))
        self.main_layout.addWidget(cbx_bind)
        self.main_layout.addWidget(lbl)
        self.main_layout.addWidget(btn)
        self.main_layout.addStretch()
Exemplo n.º 18
0
    def tray_icon(self):
        """
        Returns icon used by the tray of the project
        :return: QIcon
        """

        return tp.ResourcesMgr().icon(self.tray_icon_name, key='project')
Exemplo n.º 19
0
    def ui(self):
        super(SliderPanelExample, self).ui()

        add_icon = tpDcc.ResourcesMgr().icon('add', color=QColor(125, 0, 0))

        self._button_grp = group.RadioButtonGroup()
        self._button_grp.set_button_list(
            ['top', {
                'text': 'right',
                'checked': True
            }, 'bottom', 'left'])

        self._open_btn_2 = buttons.BaseButton('Open', parent=self).tiny()
        lyt = layouts.HorizontalLayout()
        lyt.addWidget(self._button_grp)
        lyt.addSpacing(20)
        lyt.addWidget(self._open_btn_2)
        lyt.addStretch()

        self._new_account_btn = buttons.BaseButton(text='New account',
                                                   icon=add_icon).primary()
        lyt1 = layouts.HorizontalLayout()
        lyt1.addWidget(label.BaseLabel('Submit form in drawer'))
        lyt1.addWidget(self._new_account_btn)
        lyt1.addStretch()

        self.main_layout.addWidget(dividers.Divider('Custom Placement'))
        self.main_layout.addLayout(lyt)
        self.main_layout.addWidget(dividers.Divider('Submit form in drawer'))
        self.main_layout.addLayout(lyt1)
Exemplo n.º 20
0
    def ui(self):
        super(ShotInfoWidget, self).ui()

        self._shot_title_breadcrumb = breadcrumb.BreadcrumbFrame()
        self._shot_icon_frame = QFrame()
        self._shot_icon_frame.setFrameShape(QFrame.StyledPanel)
        self._shot_icon_frame.setFrameShadow(QFrame.Sunken)
        self._shot_icon_frame.setLineWidth(3)
        self._shot_icon_frame.setStyleSheet(
            'background-color: rgba(60, 60, 60, 100); border-radius:5px;')
        shot_icon_layout = QHBoxLayout()
        shot_icon_layout.setContentsMargins(0, 0, 0, 0)
        shot_icon_layout.setSpacing(0)
        self._shot_icon_frame.setLayout(shot_icon_layout)
        self._shot_icon_lbl = QLabel()
        self._shot_icon_lbl.setAlignment(Qt.AlignCenter)
        self._shot_icon_lbl.setPixmap(tpDcc.ResourcesMgr().pixmap('default'))
        self._shot_toolbar_layout = QVBoxLayout()
        self._shot_toolbar_layout.setContentsMargins(2, 2, 2, 2)
        self._shot_toolbar_layout.setSpacing(5)

        shot_icon_layout.addLayout(self._shot_toolbar_layout)
        shot_icon_layout.addWidget(self._shot_icon_lbl)

        self.main_layout.addWidget(self._shot_title_breadcrumb)
        self.main_layout.addWidget(self._shot_icon_frame)
Exemplo n.º 21
0
    def create_bug_tracker_action(self, package_name):
        """
        Creates bug tracker action
        :return:
        """

        main_win = tpDcc.Dcc.get_main_window()
        parent_menu_bar = main_win.menuBar() if main_win else None
        if not parent_menu_bar:
            return

        bug_object_action_name = '{}_bugTracker'.format(package_name)

        # Remove previous created menu
        for child_widget in parent_menu_bar.children():
            if child_widget.objectName() == bug_object_action_name:
                child_widget.deleteLater()

        bug_tracker_action = QAction(parent_menu_bar)
        bug_tracker_action.setIcon(tpDcc.ResourcesMgr().icon('bug',
                                                             theme='color'))
        parent_menu_bar.addAction(bug_tracker_action)
        bug_tracker_action.setObjectName(bug_object_action_name)
        bug_tracker_action.triggered.connect(
            partial(self._launch_tool_by_id, 'artellapipe-tools-bugtracker'))
    def __init__(self, parent=None):
        super(KitsuLoginWidget, self).__init__(parent)

        self.setStyleSheet(
            "#background {border-radius: 3px;border-style: solid;border-width: 1px;border-color: rgb(32,32,32);}"
        )
        self.setFrameShape(QFrame.StyledPanel)
        self.setFrameShadow(QFrame.Raised)

        main_layout = QVBoxLayout()
        main_layout.setContentsMargins(0, 0, 0, 0)
        main_layout.setSpacing(0)
        self.setLayout(main_layout)

        kitsu_pixmap = tpDcc.ResourcesMgr().pixmap('kitsu',
                                                   category='icons',
                                                   theme='color')
        kitsu_icon = QLabel()
        kitsu_icon.setAlignment(Qt.AlignCenter)
        kitsu_icon.setPixmap(kitsu_pixmap)
        main_layout.addWidget(kitsu_icon)

        self.wait_spinner = spinner.WaitSpinner(
            spinner_type=spinner.SpinnerType.Loading)
        self.wait_spinner._bg.setFrameShape(QFrame.NoFrame)
        self.wait_spinner._bg.setFrameShadow(QFrame.Plain)

        # main_layout.addItem(QSpacerItem(0, 20, QSizePolicy.Fixed, QSizePolicy.Expanding))
        main_layout.addWidget(self.wait_spinner)
Exemplo n.º 23
0
    def get_media_profile_data(self, media_profile_name):
        """
        Returns data stored in given media profile name if exists
        :param media_profile_name: str
        :return: dict
        """

        media_profile_path = self.get_media_profile_path(media_profile_name)
        if not media_profile_path or not os.path.isfile(media_profile_path):
            return dict()

        config_data = yamlio.read_file(media_profile_path)

        # We try to update config files with proper reosurce paths
        profile_resource_folders = config_data.get('resources_folders', list())
        if profile_resource_folders:
            for profile_resource_folder in profile_resource_folders:
                for key, value in config_data.items():
                    try:
                        if value and os.path.isfile(value):
                            continue
                        resource_path = tpDcc.ResourcesMgr().get(
                            profile_resource_folder, value, key='project')
                    except Exception:
                        continue
                    if resource_path and os.path.isfile(resource_path):
                        config_data[key] = resource_path
                        continue

        return config_data
    def ui(self):
        super(SequencesPublisher, self).ui()

        self._stack = stack.SlidingStackedWidget()
        self.main_layout.addWidget(self._stack)

        self._sequences_viewer = artellapipe.SequencesViewer(project=self._project)
        self._stack.addWidget(self._sequences_viewer)

        publisher_widget = QWidget()
        self._publisher_layout = QVBoxLayout()
        self._publisher_layout.setContentsMargins(0, 0, 0, 0)
        self._publisher_layout.setSpacing(2)
        publisher_widget.setLayout(self._publisher_layout)
        self._stack.addWidget(publisher_widget)

        back_icon = tpDcc.ResourcesMgr().icon('back')
        self._back_btn = QPushButton()
        self._back_btn.setIcon(back_icon)
        buttons_layout = QHBoxLayout()
        buttons_layout.setContentsMargins(0, 0, 0, 0)
        buttons_layout.setSpacing(2)
        self._publisher_layout.addLayout(buttons_layout)
        buttons_layout.addWidget(self._back_btn)
        buttons_layout.addItem(QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))
        self._publisher_layout.addLayout(splitters.SplitterLayout())
        options_layout = QHBoxLayout()
        options_layout.setContentsMargins(0, 0, 0, 0)
        options_layout.setSpacing(2)
        self._publisher_layout.addLayout(options_layout)
        self._upload_new_version_cbx = QCheckBox('Upload New Version')
        os.environ['{}_SEQUENCES_PUBLISHER_NEW_VERSION'.format(self._project.get_clean_name().upper())] = str(False)
        options_layout.addWidget(self._upload_new_version_cbx)
        options_layout.addItem(QSpacerItem(10, 0, QSizePolicy.Expanding, QSizePolicy.Preferred))
Exemplo n.º 25
0
    def update_sequences_categories(self):
        """
        Updates current sequences categories
        """

        from artellapipe.widgets import sequence as sequence_widgets

        for btn in self._sequences_btn_grp.buttons():
            self._sequences_btn_grp.removeButton(btn)

        qtutils.clear_layout(self._sequences_menu_layout)

        all_sequences_categories = ['All']
        all_sequences = artellapipe.SequencesMgr().find_all_sequences()
        if all_sequences:
            sequence_names = [
                sequence.get_name() for sequence in all_sequences
            ]
            all_sequences_categories.extend(sequence_names)

        for sequence_name in all_sequences_categories:
            sequence = artellapipe.SequencesMgr().find_sequence(sequence_name)
            new_btn = sequence_widgets.SequenceCategoryButton(
                sequence_name, sequence)
            new_btn.setMinimumWidth(
                QFontMetrics(new_btn.font()).width(sequence_name) + 10)
            new_btn.setCheckable(True)
            self._sequences_menu_layout.addWidget(new_btn)
            self._sequences_btn_grp.addButton(new_btn)
            if sequence_name == 'All':
                new_btn.setIcon(tpDcc.ResourcesMgr().icon('home'))
                new_btn.setChecked(True)
            new_btn.toggled.connect(
                partial(self._on_change_sequence, sequence_name))
    def update_supported_types(self):
        """
        Updates current supported types
        """

        for btn in self._supported_types_btn_grp.buttons():
            self._supported_types_btn_grp.removeButton(btn)

        qtutils.clear_layout(self._supported_types_layout)

        if not self._supported_files:
            LOGGER.warning('No Supported Files for AssetsLibrary!')
            return

        total_buttons = 0
        for supported_file in self._supported_files:
            for type_name, file_info in supported_file.items():
                new_btn = QPushButton(type_name.title())
                new_btn.setIcon(tp.ResourcesMgr().icon(
                    type_name.lower().replace(' ', '')))
                new_btn.setCheckable(True)
                new_btn.file_info = file_info
                self._supported_types_layout.addWidget(new_btn)
                self._supported_types_btn_grp.addButton(new_btn)
                if total_buttons == 0:
                    new_btn.setChecked(True)
                total_buttons += 1
    def update_categories(self):
        """
        Updates current tag categories with the given ones
        """

        for btn in self._tags_btn_grp.buttons():
            self._tags_btn_grp.removeButton(btn)

        qtutils.clear_layout(self._tags_menu_layout)

        if not self._outliners:
            return

        total_buttons = 0

        categories_list = self._outliners.keys()
        for category in categories_list:
            new_btn = QPushButton(category.title())
            new_btn.category = category
            category_icon = tpDcc.ResourcesMgr().icon(category.strip().lower())
            new_btn.setIcon(category_icon)
            new_btn.setCheckable(True)
            new_btn.clicked.connect(partial(self._on_change_outliner, new_btn))
            self._tags_menu_layout.addWidget(new_btn)
            self._tags_btn_grp.addButton(new_btn)
            if total_buttons == 0:
                new_btn.blockSignals(True)
                new_btn.setChecked(True)
                new_btn.blockSignals(False)
            total_buttons += 1
Exemplo n.º 28
0
    def update_thumbnail_icon(self, force=False):
        """
        Function that updates the thumbnail icon
        :return:
        """

        try:
            thumbnail_path = self.get_thumbnail_path()
            if thumbnail_path and os.path.isfile(thumbnail_path) and not force:
                thumb_icon = QIcon(QPixmap(thumbnail_path))
                self._asset_btn.setIcon(thumb_icon)
                self._thumbnail_icon = thumb_icon
                return thumb_icon
            else:
                self._thumbnail_icon = tpDcc.ResourcesMgr().icon(
                    artellapipe.AssetsMgr().get_default_asset_thumb())
                self._asset_btn.setIcon(self._thumbnail_icon)
                asset_thumbnail_path = self._asset.get_thumbnail_path()
                if not asset_thumbnail_path:
                    return self._thumbnail_icon
                self._worker_started = True
                self._worker.set_path(thumbnail_path)
                self._worker.set_force(force)
                self._worker.set_preview_id(asset_thumbnail_path)
                self.ThreadPool.start(self._worker)
                return self._thumbnail_icon
        except Exception as exc:
            LOGGER.error('Impossible to update thumbnail icon: {} | {}'.format(
                exc, traceback.format_exc()))
Exemplo n.º 29
0
def register_resources():
    """
    Registers artellapipe-launcher-plugins-artellamanager resources
    """

    resources_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                  'resources')
    tp.ResourcesMgr().register_resource(resources_path, 'launcher')
Exemplo n.º 30
0
    def icon(self):
        """
        Returns project icon
        :return: QIcon
        """

        return tp.ResourcesMgr().icon(self.icon_name,
                                      theme=self.icon_resources_folder)