Example #1
0
    def __init__(self, ftrack_entity, hint=None):
        '''Instantiate asset selector with *ftrack_entity*.'''
        super(AssetSelector, self).__init__()

        self.assets = ftrack_entity.session.query(
            'select name, id, type_id from Asset where context_id '
            'is "{0}"'.format(
                ftrack_entity['id']
            )
        ).all()

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

        self.asset_selector = QtWidgets.QComboBox(self)
        main_layout.addWidget(self.asset_selector)

        self.asset_selector.addItem('Create new asset')
        for asset in self.assets:
            self.asset_selector.addItem(asset['name'])

        self.asset_name = QtWidgets.QLineEdit(self)
        self.asset_name.setPlaceholderText('Asset name...')
        main_layout.addWidget(self.asset_name)

        self.asset_type_selector = QtWidgets.QComboBox(self)

        self.asset_types = ftrack_entity.session.query(
            'select name, short, id from AssetType'
        ).all()

        for asset_type in self.asset_types:
            self.asset_type_selector.addItem(asset_type['name'])

        # automatically set the correct asset type
        if hint:
            for index, asset_type in enumerate(self.asset_types):
                if asset_type['short'] == hint:
                    self.asset_type_selector.setCurrentIndex(index)
                    break

        main_layout.addWidget(self.asset_type_selector)

        self.asset_selector.currentIndexChanged.connect(
            self._on_asset_selection_changed
        )
        self.asset_type_selector.currentIndexChanged.connect(
            self.notify_changed
        )
        self.asset_name.textChanged.connect(self.notify_changed)
    def build(self):
        '''Build widgets and layout.'''
        self.setLayout(QtWidgets.QVBoxLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)

        self.optionsLayout = QtWidgets.QHBoxLayout()
        self.assetTypeSelector = QtWidgets.QComboBox()
        self.optionsLayout.addWidget(self.assetTypeSelector)

        self.refreshButton = QtWidgets.QPushButton(self.tr('Refresh'))
        self.optionsLayout.addWidget(self.refreshButton)
        self.optionsLayout.addStretch(1)

        self.layout().addLayout(self.optionsLayout)

        self.assetTable = QtWidgets.QTableWidget()
        self.assetTable.setEditTriggers(
            QtWidgets.QAbstractItemView.NoEditTriggers)
        self.assetTable.setSelectionMode(
            QtWidgets.QAbstractItemView.SingleSelection)
        self.assetTable.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)

        self.assetTable.setColumnCount(len(self.assetTableColumns))
        self.assetTable.setRowCount(0)
        self.assetTable.verticalHeader().hide()

        self.assetTable.setHorizontalHeaderLabels(self.assetTableColumns)

        horizontalHeader = self.assetTable.horizontalHeader()
        horizontalHeader.setResizeMode(QtWidgets.QHeaderView.Fixed)

        self.assetTable.horizontalHeader().setDefaultSectionSize(100)
        self.assetTable.setColumnWidth(1, 63)
        self.assetTable.horizontalHeader().setResizeMode(
            0, QtWidgets.QHeaderView.Stretch)

        self.layout().addWidget(self.assetTable)
Example #3
0
    def __init__(self, data_dict, options):
        '''Instanstiate settings from *options*.'''
        super(ActionSettingsWidget, self).__init__()

        self.setLayout(QtWidgets.QFormLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)

        for option in options:
            type_ = option['type']
            label = option.get('label', '')
            name = option['name']
            value = option.get('value')
            empty_text = option.get('empty_text')
            if name in data_dict.get('options', {}):
                value = data_dict['options'][name]

            if value is not None and name not in data_dict:
                # Set default value from options.
                data_dict[name] = value

            field = None

            if type_ == 'group':
                nested_dict = data_dict[name] = dict()
                settings_widget = QtWidgets.QGroupBox(label)
                settings_widget.setLayout(QtWidgets.QVBoxLayout())
                settings_widget.layout().addWidget(
                    ActionSettingsWidget(nested_dict,
                                         option.get('options', [])))
                self.layout().addRow(settings_widget)

            if type_ == 'boolean':
                field = QtWidgets.QCheckBox()
                if value is True:
                    field.setCheckState(QtCore.Qt.Checked)

                field.stateChanged.connect(
                    functools.partial(
                        self.update_on_change, data_dict, field, name,
                        lambda check_box: (check_box.checkState() == QtCore.Qt.
                                           CheckState.Checked)))

            if type_ == 'textarea':
                field = textarea.TextAreaField(empty_text or '')
                if value is not None:
                    field.setPlainText(unicode(value))

                field.value_changed.connect(
                    functools.partial(
                        self.update_on_change, data_dict, field, name,
                        lambda textarea_widget: textarea_widget.value()))

            if type_ == 'text':
                field = QtWidgets.QLineEdit()
                if value is not None:
                    field.insert(unicode(value))

                field.textChanged.connect(
                    functools.partial(self.update_on_change, data_dict, field,
                                      name,
                                      lambda line_edit: line_edit.text()))

            if type_ == 'number':
                field = QtWidgets.QDoubleSpinBox()
                if value is not None:
                    field.setValue(float(value))

                field.setMaximum(sys.maxint)
                field.setMinimum(-sys.maxint)

                field.valueChanged.connect(
                    functools.partial(self.update_on_change, data_dict, field,
                                      name, lambda spin_box: spin_box.value()))

            if type_ == 'enumerator':
                field = QtWidgets.QComboBox()
                for item in option['data']:
                    field.addItem(item['label'])

                field.currentIndexChanged.connect(
                    functools.partial(
                        self.update_on_change, data_dict, field, name,
                        lambda box:
                        (option['data'][box.currentIndex()]['value'])))

            if type_ == 'qt_widget':
                field = option['widget']
                field.value_changed.connect(
                    functools.partial(
                        self.update_on_change, data_dict, field, name,
                        lambda custom_field: (custom_field.value())))

            if field is not None:
                if label:
                    label_widget = QtWidgets.QLabel(label)
                    self.layout().addRow(label_widget, field)
                else:
                    self.layout().addRow(field)
Example #4
0
    def __init__(self, selection, parent=None):
        ''' Initialise class with *selection* and *parent* widget. '''
        self._result_data = {}

        if not parent:
            parent = hiero.ui.mainWindow()

        super(FtrackReBuildServerTrackDialog, self).__init__(parent)
        self.logger = logging.getLogger(__name__ + '.' +
                                        self.__class__.__name__)

        num_tasks = registry.numTasks()
        self._ftrack_tasks = [
            registry.taskName(index) for index in range(num_tasks)
        ]

        self._selection = selection

        if self._selection:
            self.project = self.item_project(self._selection[0])

        self._window_title = 'Build track from ftrack'
        self.setWindowTitle(self._window_title)
        # self.setWindowIcon(QtGui.QPixmap(':ftrack/image/default/ftrackLogoColor'))

        self.setSizeGripEnabled(True)

        layout = QtWidgets.QVBoxLayout()
        formLayout = QtWidgets.QFormLayout()
        self._tracknameField = QtWidgets.QLineEdit()
        self._tracknameField.setToolTip('Name of new track')
        formLayout.addRow('Track name:', self._tracknameField)

        self.tasks_combobox = QtWidgets.QComboBox()
        formLayout.addRow('Task type:', self.tasks_combobox)

        self.asset_type_combobox = QtWidgets.QComboBox()

        formLayout.addRow('Asset type:', self.asset_type_combobox)

        self.asset_status_combobox = QtWidgets.QComboBox()
        formLayout.addRow('Asset Status:', self.asset_status_combobox)

        self.component_combobox = QtWidgets.QComboBox()
        formLayout.addRow('Component name:', self.component_combobox)

        layout.addLayout(formLayout)

        # Add the standard ok/cancel buttons, default to ok.
        self._buttonbox = QtWidgets.QDialogButtonBox(
            QtWidgets.QDialogButtonBox.StandardButton.Ok
            | QtWidgets.QDialogButtonBox.StandardButton.Cancel)
        self._buttonbox.button(
            QtWidgets.QDialogButtonBox.StandardButton.Ok).setText('Build')
        self._buttonbox.button(
            QtWidgets.QDialogButtonBox.StandardButton.Ok).setDisabled(True)
        self._buttonbox.button(
            QtWidgets.QDialogButtonBox.StandardButton.Ok).setAutoDefault(True)
        self._buttonbox.accepted.connect(self.accept_test)
        self._buttonbox.rejected.connect(self.reject)
        layout.addWidget(self._buttonbox)

        self.setLayout(layout)

        # populate data
        self.populate_tasks()
        self.populate_asset_types()
        self.populate_components()
        self.populate_asset_statuses()

        # connect signals
        self.tasks_combobox.currentIndexChanged.connect(self.get_components)
        self.asset_type_combobox.currentIndexChanged.connect(
            self.get_components)
        self.component_combobox.currentIndexChanged.connect(
            self.get_components)
        self.asset_status_combobox.currentIndexChanged.connect(
            self.get_components)

        # set suggested track name
        self._tracknameField.setText(self.suggested_track_name)

        # force ui to refresh
        self.get_components()
Example #5
0
    def parseOptions(self, rowLayout, optionElements, assetTypeName, enabled):
        '''Parse options.'''
        optionsCount = 0
        for k in range(optionElements.length()):
            optionElement = optionElements.item(k).toElement()
            optionType = optionElement.attribute('type')
            optionValue = optionElement.attribute('value')
            if optionValue == 'True':
                optionValue = True
            elif optionValue == 'False':
                optionValue = False
            optionName = optionElement.attribute('name')
            self.stackedOptions[assetTypeName].append(optionName)

            if optionType == 'float':
                floatBox = QtWidgets.QDoubleSpinBox()
                floatBox.setEnabled(enabled)
                floatBox.setObjectName(optionName)
                floatBox.setSingleStep(0.1)
                floatBox.setMaximum(sys.maxint)
                floatBox.setMinimum(-sys.maxint)
                floatBox.setValue(float(optionValue))
                rowLayout.addWidget(floatBox)
                optionsCount = 1

            if optionType == 'checkbox':
                checkBox = QtWidgets.QCheckBox()
                checkBox.setEnabled(enabled)
                checkBox.setChecked(bool(optionValue))
                checkBox.setObjectName(optionName)
                rowLayout.addWidget(checkBox)
                optionsCount = 1

            if optionType == 'string':
                textBox = QtWidgets.QLineEdit()
                textBox.setEnabled(enabled)
                textBox.setText(optionValue)
                textBox.setObjectName(optionName)
                rowLayout.addWidget(textBox)
                optionsCount = 1

            if optionType == 'combo':
                comboBox = QtWidgets.QComboBox()
                comboBox.setEnabled(enabled)
                optionitemElements = optionElement.elementsByTagName(
                    'optionitem')
                for t in range(optionitemElements.length()):
                    optionitemElement = optionitemElements.item(t).toElement()
                    optionitemValue = optionitemElement.attribute('name')
                    comboBox.addItem(optionitemValue)

                comboBox.setObjectName(optionName)
                rowLayout.addWidget(comboBox)
                optionsCount = optionitemElements.length()

            if optionType == 'radio':
                radioWidget = QtWidgets.QWidget()
                radioLayout = QtWidgets.QVBoxLayout()
                radioLayout.setSpacing(1)
                radioWidget.setLayout(radioLayout)
                optionitemElements = optionElement.elementsByTagName(
                    'optionitem')
                for t in range(optionitemElements.length()):
                    optionitemElement = optionitemElements.item(t).toElement()
                    optionitemValue = optionitemElement.attribute('value')
                    optionitemName = optionitemElement.attribute('name')
                    radioButton = QtWidgets.QRadioButton(optionitemName)
                    if bool(optionitemValue):
                        radioButton.setChecked(True)
                    radioLayout.addWidget(radioButton)
                    radioButton.setEnabled(enabled)

                    radioButton.setObjectName(optionName)
                rowLayout.addWidget(radioWidget)
                optionsCount = optionitemElements.length()
        return optionsCount
Example #6
0
    def setupUi(self, ExportAssetOptions):
        ExportAssetOptions.setObjectName("ExportAssetOptions")
        ExportAssetOptions.resize(429, 130)
        self.verticalLayout = QtWidgets.QVBoxLayout(ExportAssetOptions)
        self.verticalLayout.setSpacing(3)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.assetTaskLabel = QtWidgets.QLabel(ExportAssetOptions)
        self.assetTaskLabel.setMinimumSize(QtCore.QSize(120, 0))
        self.assetTaskLabel.setMaximumSize(QtCore.QSize(120, 16777215))
        self.assetTaskLabel.setObjectName("assetTaskLabel")
        self.gridLayout.addWidget(self.assetTaskLabel, 1, 0, 1, 1)
        self.ListAssetsComboBox = QtWidgets.QComboBox(ExportAssetOptions)
        self.ListAssetsComboBox.setMinimumSize(QtCore.QSize(100, 0))
        self.ListAssetsComboBox.setMaximumSize(QtCore.QSize(200, 16777215))
        self.ListAssetsComboBox.setObjectName("ListAssetsComboBox")
        self.gridLayout.addWidget(self.ListAssetsComboBox, 0, 1, 1, 1)
        self.ListAssetNamesComboBox = QtWidgets.QComboBox(ExportAssetOptions)
        self.ListAssetNamesComboBox.setMinimumSize(QtCore.QSize(100, 0))
        self.ListAssetNamesComboBox.setMaximumSize(QtCore.QSize(200, 16777215))
        self.ListAssetNamesComboBox.setObjectName("ListAssetNamesComboBox")
        self.gridLayout.addWidget(self.ListAssetNamesComboBox, 3, 1, 1, 1)
        self.AssetNameLineEdit = QtWidgets.QLineEdit(ExportAssetOptions)
        self.AssetNameLineEdit.setEnabled(True)
        self.AssetNameLineEdit.setMinimumSize(QtCore.QSize(100, 0))
        self.AssetNameLineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
        self.AssetNameLineEdit.setObjectName("AssetNameLineEdit")
        self.gridLayout.addWidget(self.AssetNameLineEdit, 4, 1, 1, 1)
        self.AssetTaskComboBox = QtWidgets.QComboBox(ExportAssetOptions)
        self.AssetTaskComboBox.setMinimumSize(QtCore.QSize(100, 0))
        self.AssetTaskComboBox.setMaximumSize(QtCore.QSize(200, 16777215))
        self.AssetTaskComboBox.setObjectName("AssetTaskComboBox")
        self.gridLayout.addWidget(self.AssetTaskComboBox, 1, 1, 1, 1)
        self.labelAssetType = QtWidgets.QLabel(ExportAssetOptions)
        self.labelAssetType.setMinimumSize(QtCore.QSize(120, 0))
        self.labelAssetType.setMaximumSize(QtCore.QSize(120, 16777215))
        self.labelAssetType.setObjectName("labelAssetType")
        self.gridLayout.addWidget(self.labelAssetType, 0, 0, 1, 1)
        self.assetNameLabel = QtWidgets.QLabel(ExportAssetOptions)
        self.assetNameLabel.setMinimumSize(QtCore.QSize(120, 0))
        self.assetNameLabel.setMaximumSize(QtCore.QSize(120, 16777215))
        self.assetNameLabel.setObjectName("assetNameLabel")
        self.gridLayout.addWidget(self.assetNameLabel, 4, 0, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 20,
                                           QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 0, 2, 1, 1)
        self.label_2 = QtWidgets.QLabel(ExportAssetOptions)
        self.label_2.setMinimumSize(QtCore.QSize(120, 0))
        self.label_2.setMaximumSize(QtCore.QSize(120, 16777215))
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1)
        self.assetTaskLabel_2 = QtWidgets.QLabel(ExportAssetOptions)
        self.assetTaskLabel_2.setMinimumSize(QtCore.QSize(120, 0))
        self.assetTaskLabel_2.setMaximumSize(QtCore.QSize(120, 16777215))
        self.assetTaskLabel_2.setObjectName("assetTaskLabel_2")
        self.gridLayout.addWidget(self.assetTaskLabel_2, 2, 0, 1, 1)
        self.ListStatusComboBox = QtWidgets.QComboBox(ExportAssetOptions)
        self.ListStatusComboBox.setMinimumSize(QtCore.QSize(100, 0))
        self.ListStatusComboBox.setMaximumSize(QtCore.QSize(200, 16777215))
        self.ListStatusComboBox.setObjectName("ListStatusComboBox")
        self.gridLayout.addWidget(self.ListStatusComboBox, 2, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)

        self.retranslateUi(ExportAssetOptions)

        self.ListAssetsComboBox.currentIndexChanged[int].connect(
            ExportAssetOptions.setFilter)

        self.ListAssetsComboBox.currentIndexChanged[int].connect(
            ExportAssetOptions.emitAssetType)
        QtCore.QMetaObject.connectSlotsByName(ExportAssetOptions)
    def setAssetVersion(self, assetVersionId):
        '''Update list of components for asset version with *assetVersionId*.'''
        self.clear()

        query = (
            'select id, asset, asset.type, asset.type.short, components'
            ' from AssetVersion where id is "{0}"'.format(assetVersionId)
        )
        asset_version = self.session.query(query).one()

        self.assetType = asset_version['asset']['type']['short']

        asset_version_components = asset_version['components']

        connectorName = self.connector.getConnectorName()
        # Temporary alias
        column = self.columns.index

        for component in asset_version_components:
            componentName = component['name']

            if (
                connectorName == 'nuke' and 'proxy' in componentName
            ):
                pass
            else:
                rowCount = self.rowCount()
                self.insertRow(rowCount)

                componentItem = QtWidgets.QTableWidgetItem(componentName)
                componentItem.setData(self.COMPONENT_ROLE, component['id'])

                self.setItem(
                    rowCount, column('Component'), componentItem
                )

                pathItem = QtWidgets.QTableWidgetItem('')
                self.setItem(rowCount, column('Path'), pathItem)

                availabilityItem = QtWidgets.QTableWidgetItem('')
                self.setItem(
                    rowCount, column('Availability'), availabilityItem
                )

                actionItem = QtWidgets.QPushButton()
                self.setCellWidget(rowCount, column('Action'), actionItem)

                actionItem.clicked.connect(self.actionSignalMapper.map)
                self.actionSignalMapper.setMapping(actionItem, rowCount)

                locationItem = QtWidgets.QComboBox()
                self.setCellWidget(rowCount, column('Location'), locationItem)

                # Map version widget to row number to enable simple lookup
                locationItem.currentIndexChanged[int].connect(
                    self.locationSignalMapper.map
                )
                self.locationSignalMapper.setMapping(
                    locationItem, rowCount
                )

                available_locations = []
                for location in self.locations:
                    accessor = location.accessor
                    # Don't show inaccessible locations
                    if accessor is symbol.NOT_SET:
                        continue
                    name = location['name']
                    location_id = location['id']
                    locationItem.addItem(name, location_id)
                    available_locations.append(location)

                picked_location = self.session.pick_location(component)

                try:
                    location_index = available_locations.index(picked_location)
                except ValueError:
                    location_index = 0

                locationItem.setCurrentIndex(location_index)
Example #8
0
    def refreshAssetManager(self):
        '''Refresh assets in asset manager.'''
        assets = self.connector.getAssets()

        self.ui.AssertManagerTableWidget.setSortingEnabled(False)
        self.ui.AssertManagerTableWidget.setRowCount(0)

        self.ui.AssertManagerTableWidget.setRowCount(len(assets))

        component_ids = []

        for component_id, _ in assets:
            if component_id:
                component_ids.append(component_id)

        if component_ids:
            query_string = (
                'select name, version.asset.type.short, version.asset.name, '
                'version.asset.type.name, version.asset.versions.version, '
                'version.id, version.version, version.asset.versions, '
                'version.date, version.comment, version.asset.name, version, '
                'version_id, version.user.first_name, version.user.last_name '
                'from Component where id in ({0})'.format(
                    ','.join(component_ids)))
            components = self.connector.session.query(query_string).all()

            asset_ids = set()
            for component in components:
                asset_ids.add(component['version']['asset']['id'])

            if asset_ids:
                # Because of bug in 3.3.X backend we need to divide the query. The
                # memory cache will allow using entities without caring about this.
                preload_string = (
                    'select components.name from AssetVersion where '
                    'asset_id in ({0})').format(', '.join(list(asset_ids)))
                self.connector.session.query(preload_string).all()

            component_map = dict(
                (component['id'], component) for component in components)
        else:
            component_map = {}

        for i in range(len(assets)):
            if assets[i][0]:
                component = component_map[assets[i][0]]
                asset_version = component['version']
                componentNameStr = component['name']
                assetVersionNr = asset_version['version']
                asset = asset_version['asset']

                asset_versions_with_same_component_name = []
                for related_version in asset['versions']:
                    for other_component in related_version['components']:
                        if other_component['name'] == componentNameStr:
                            asset_versions_with_same_component_name.append(
                                related_version)

                asset_versions_with_same_component_name = sorted(
                    asset_versions_with_same_component_name,
                    key=lambda x: x['version'])
                latest_version_number = (
                    asset_versions_with_same_component_name[-1]['version'])

                versionIndicatorButton = QtWidgets.QPushButton('')
                if assetVersionNr == latest_version_number:
                    versionIndicatorButton.setStyleSheet('''
                        QPushButton {
                            background-color: #1CBC90;
                            border: none;
                        }
                    ''')
                    self.connector.setNodeColor(applicationObject=assets[i][1],
                                                latest=True)
                else:
                    versionIndicatorButton.setStyleSheet('''
                        QPushButton {
                            background-color: #E36316;
                            border: none;
                        }
                    ''')
                    self.connector.setNodeColor(applicationObject=assets[i][1],
                                                latest=False)
                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 0, versionIndicatorButton)

                componentName = QtWidgets.QTableWidgetItem(componentNameStr)
                self.ui.AssertManagerTableWidget.setItem(i, 1, componentName)

                componentId = QtWidgets.QTableWidgetItem(component['id'])
                self.ui.AssertManagerTableWidget.setItem(i, 2, componentId)

                assetType = QtWidgets.QTableWidgetItem(asset['type']['short'])
                self.ui.AssertManagerTableWidget.setItem(i, 3, assetType)

                assetTypeLong = QtWidgets.QTableWidgetItem(
                    asset['type']['name'])
                self.ui.AssertManagerTableWidget.setItem(i, 4, assetTypeLong)

                versionNumberComboBox = QtWidgets.QComboBox()
                for version in reversed(
                        asset_versions_with_same_component_name):
                    versionNumberComboBox.addItem(str(version['version']))

                conName = self.connector.getConnectorName()
                if conName in self.notVersionable:
                    if componentNameStr in self.notVersionable[conName]:
                        versionNumberComboBox.setEnabled(False)

                result = versionNumberComboBox.findText(str(assetVersionNr))
                versionNumberComboBox.setCurrentIndex(result)

                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 5, versionNumberComboBox)

                versionNumberComboBox.currentIndexChanged.connect(
                    self.changeVersion)

                latestVersionNumberWidget = QtWidgets.QTableWidgetItem(
                    str(latest_version_number))
                self.ui.AssertManagerTableWidget.setItem(
                    i, 6, latestVersionNumberWidget)

                assetName = QtWidgets.QTableWidgetItem(asset['name'])
                assetName.setToolTip(asset['name'])
                self.ui.AssertManagerTableWidget.setItem(i, 7, assetName)

                assetNameInScene = QtWidgets.QTableWidgetItem(assets[i][1])
                assetNameInScene.setToolTip(assets[i][1])
                self.ui.AssertManagerTableWidget.setItem(
                    i, 8, assetNameInScene)

                selectButton = QtWidgets.QPushButton('S')
                selectButton.setToolTip('Select asset in scene')
                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 9, selectButton)
                selectButton.clicked.connect(self.signalMapperSelect.map)

                self.signalMapperSelect.setMapping(selectButton, assets[i][1])

                replaceButton = QtWidgets.QPushButton('R')
                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 10, replaceButton)

                removeButton = QtWidgets.QPushButton()
                removeButton.setToolTip('Remove asset from scene')
                icon = QtGui.QIcon()
                icon.addPixmap(
                    QtGui.QPixmap(':ftrack/image/integration/trash'),
                    QtGui.QIcon.Normal, QtGui.QIcon.Off)
                removeButton.setIcon(icon)
                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 11, removeButton)
                removeButton.clicked.connect(self.signalMapperRemove.map)
                self.signalMapperRemove.setMapping(removeButton, assets[i][1])

                assetId = QtWidgets.QTableWidgetItem(str(asset['id']))
                self.ui.AssertManagerTableWidget.setItem(i, 12, assetId)

                assetVersionId = QtWidgets.QTableWidgetItem(
                    str(asset_version['id']))
                self.ui.AssertManagerTableWidget.setItem(i, 13, assetVersionId)

                currentVersionFallback = QtWidgets.QTableWidgetItem(
                    str(assetVersionNr))
                self.ui.AssertManagerTableWidget.setItem(
                    i, 14, currentVersionFallback)

                commentButton = QtWidgets.QPushButton()
                commentButton.setText('')
                icon = QtGui.QIcon()
                icon.addPixmap(
                    QtGui.QPixmap(':ftrack/image/integration/comment'),
                    QtGui.QIcon.Normal, QtGui.QIcon.Off)
                commentButton.setIcon(icon)

                fullUserName = (asset_version['user']['first_name'] + ' ' +
                                asset_version['user']['last_name'])
                pubDate = str(asset_version['date'])
                comment = asset_version['comment']
                tooltipText = '\n'.join([fullUserName, pubDate, comment])

                commentButton.setToolTip(tooltipText)
                self.ui.AssertManagerTableWidget.setCellWidget(
                    i, 15, commentButton)

                commentButton.clicked.connect(self.signalMapperComment.map)

                self.signalMapperComment.setMapping(commentButton,
                                                    str(asset_version['id']))

                commentButton.setEnabled(has_webwidgets)

        self.ui.AssertManagerTableWidget.setHorizontalHeaderLabels(
            self.columnHeaders)
Example #9
0
    def setupUi(self, AssetManager):
        '''Setup ui for *AssetManager*.'''
        AssetManager.setObjectName('AssetManager')
        AssetManager.resize(549, 419)
        self.verticalLayout = QtWidgets.QVBoxLayout(AssetManager)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName('verticalLayout')
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName('horizontalLayout')
        self.AssetManagerComboBox = QtWidgets.QComboBox(AssetManager)
        self.AssetManagerComboBox.setMaximumSize(QtCore.QSize(120, 16777215))
        self.AssetManagerComboBox.setObjectName('AssetManagerComboBox')
        self.horizontalLayout.addWidget(self.AssetManagerComboBox)
        self.versionDownButton = QtWidgets.QPushButton(AssetManager)
        self.versionDownButton.setMinimumSize(QtCore.QSize(20, 0))
        self.versionDownButton.setMaximumSize(QtCore.QSize(20, 16777215))
        self.versionDownButton.setObjectName('versionDownButton')
        self.horizontalLayout.addWidget(self.versionDownButton)
        self.versionUpButton = QtWidgets.QPushButton(AssetManager)
        self.versionUpButton.setMinimumSize(QtCore.QSize(20, 0))
        self.versionUpButton.setMaximumSize(QtCore.QSize(20, 16777215))
        self.versionUpButton.setObjectName('versionUpButton')
        self.horizontalLayout.addWidget(self.versionUpButton)
        self.latestButton = QtWidgets.QPushButton(AssetManager)
        self.latestButton.setMinimumSize(QtCore.QSize(60, 0))
        self.latestButton.setMaximumSize(QtCore.QSize(60, 16777215))
        self.latestButton.setObjectName('latestButton')
        self.horizontalLayout.addWidget(self.latestButton)
        self.selectAllButton = QtWidgets.QPushButton(AssetManager)
        self.selectAllButton.setMinimumSize(QtCore.QSize(80, 0))
        self.selectAllButton.setMaximumSize(QtCore.QSize(80, 16777215))
        self.selectAllButton.setObjectName('selectAllButton')
        self.horizontalLayout.addWidget(self.selectAllButton)
        self.menuButton = QtWidgets.QPushButton(AssetManager)
        self.menuButton.setMaximumSize(QtCore.QSize(70, 16777215))
        self.menuButton.setObjectName('menuButton')
        self.horizontalLayout.addWidget(self.menuButton)
        self.whiteSpaceLabel = QtWidgets.QLabel(AssetManager)
        self.whiteSpaceLabel.setText('')
        self.whiteSpaceLabel.setObjectName('whiteSpaceLabel')
        self.horizontalLayout.addWidget(self.whiteSpaceLabel)
        self.refreshButton = QtWidgets.QPushButton(AssetManager)
        self.refreshButton.setMaximumSize(QtCore.QSize(80, 16777215))
        self.refreshButton.setObjectName('refreshButton')
        self.horizontalLayout.addWidget(self.refreshButton)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.AssertManagerTableWidget = QtWidgets.QTableWidget(AssetManager)
        self.AssertManagerTableWidget.setFrameShape(QtWidgets.QFrame.Box)
        self.AssertManagerTableWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.AssertManagerTableWidget.setSelectionBehavior(
            QtWidgets.QAbstractItemView.SelectRows)
        self.AssertManagerTableWidget.setObjectName('AssertManagerTableWidget')
        self.AssertManagerTableWidget.setColumnCount(0)
        self.AssertManagerTableWidget.setRowCount(0)
        self.verticalLayout.addWidget(self.AssertManagerTableWidget)

        self.retranslateUi(AssetManager)

        # Connect signals.
        self.refreshButton.clicked.connect(AssetManager.refreshAssetManager)

        self.AssetManagerComboBox.currentIndexChanged[int].connect(
            AssetManager.filterAssets)

        self.versionDownButton.clicked.connect(
            AssetManager.versionDownSelected)

        self.versionUpButton.clicked.connect(AssetManager.versionUpSelected)

        self.latestButton.clicked.connect(AssetManager.versionLatestSelected)

        self.selectAllButton.clicked.connect(AssetManager.selectAll)

        QtCore.QMetaObject.connectSlotsByName(AssetManager)
    def updateView(self, ftrackId=None):
        '''Update to view entity identified by *ftrackId*.'''
        self.latestFtrackId = ftrackId

        try:
            assetHandler = FTAssetHandlerInstance.instance()
            task = ftrack.Task(ftrackId)
            assets = task.getAssets(assetTypes=assetHandler.getAssetTypes())
            assets = sorted(assets, key=lambda a: a.getName().lower())
            self.assetTable.clearContents()
            self.assetTable.setRowCount(len(assets))
            blankRows = 0
            for i in range(len(assets)):
                assetName = assets[i].getName()
                assetVersions = assets[i].getVersions()

                # Temporary alias
                column = self.assetTableColumns.index

                if assetName != '' and assetVersions:
                    item = QtWidgets.QTableWidgetItem(assetName)
                    item.id = assets[i].getId()
                    item.setToolTip(assetName)

                    j = i - blankRows
                    self.assetTable.setItem(j, column('Asset'), item)

                    self.assetTable.setItem(j, column('Author'),
                                            QtWidgets.QTableWidgetItem(''))

                    self.assetTable.setItem(j, column('Date'),
                                            QtWidgets.QTableWidgetItem(''))

                    assetType = assets[i].getType()
                    itemType = QtWidgets.QTableWidgetItem(assetType.getShort())
                    self.assetTable.setItem(j, column('Asset Type Code'),
                                            itemType)

                    itemTypeLong = QtWidgets.QTableWidgetItem(
                        assetType.getName())
                    self.assetTable.setItem(j, column('Asset Type'),
                                            itemTypeLong)

                    assetVersions = assets[i].getVersions()
                    versionComboBox = QtWidgets.QComboBox()
                    self.assetTable.setCellWidget(j, column('Version'),
                                                  versionComboBox)

                    # Populate version list
                    for version in reversed(assetVersions):
                        versionComboBox.addItem(str(version.getVersion()),
                                                version)

                    try:
                        authorName = assetVersions[-1].getUser().getName()
                    except ftrack.ftrackerror.FTrackError:
                        # This error can happen if a version does not have an user,
                        # for example if the user has been deleted after publishing
                        # the version.
                        authorName = 'No User Found'

                    author = QtWidgets.QTableWidgetItem(authorName)
                    self.assetTable.setItem(j, column('Author'), author)

                    author = QtWidgets.QTableWidgetItem(
                        assetVersions[-1].getDate().strftime('%Y-%m-%d %H:%M'))
                    self.assetTable.setItem(j, column('Date'), author)

                    # Map version widget to row number to enable simple lookup
                    versionComboBox.currentIndexChanged[int].connect(
                        self.assetTableSignalMapper.map)

                    self.assetTableSignalMapper.setMapping(versionComboBox, j)

                else:
                    blankRows += 1

            self.assetTable.setRowCount(len(assets) - blankRows)

        except:
            traceback.print_exc(file=sys.stdout)