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)
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)
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()
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
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)
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)
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)