def _setup_ui(self): self.setWindowTitle("Select Task to Copy To") self.setMinimumWidth(400) self.setMinimumHeight(400) self.setLayout(QtGui.QVBoxLayout()) self._model, self._picker = picker_presets.any_task(entity=self._publish['sg_link']) self._picker.setMaximumHeight(400) self._picker.setPreviewVisible(False) self._picker.nodeChanged.connect(self._on_node_changed) self.layout().addWidget(self._picker) workspace = self._sgfs.path_for_entity(self._publish) self._namer = SceneNameWidget(dict(workspace=workspace)) self.layout().addWidget(self._namer) button_layout = QtGui.QHBoxLayout() button_layout.addStretch() self.layout().addLayout(button_layout) self._cancel_button = QtGui.QPushButton("Cancel") self._cancel_button.clicked.connect(self._on_cancel) button_layout.addWidget(self._cancel_button) self._copy_button = QtGui.QPushButton("Copy") self._copy_button.setDefault(True) self._copy_button.clicked.connect(self._on_copy) button_layout.addWidget(self._copy_button) # Trigger a UI update. self._on_node_changed(self._picker.currentNode())
def _setup_ui(self): self.setWindowTitle("Copy Publish to Work Area") self.setLayout(QtGui.QVBoxLayout()) self._workspace = workspace = self._path or cmds.workspace(q=True, rootDirectory=True) self._model, self._picker = picker_presets.publishes_from_path(workspace) self._model.register_node_type(ScenePickerNode) self._picker.setMaximumHeight(400) self._picker.nodeChanged.connect(self._on_node_changed) self._picker.setColumnWidths([200] * 10) self.layout().addWidget(self._picker) self._namer = SceneNameWidget(dict(workspace=workspace)) self.layout().addWidget(self._namer) button_layout = QtGui.QHBoxLayout() self.layout().addLayout(button_layout) self._cancel_button = QtGui.QPushButton("Cancel") self._cancel_button.clicked.connect(self._on_cancel_pressed) button_layout.addWidget(self._cancel_button) button_layout.addStretch() self._copy_button = QtGui.QPushButton("Copy") self._copy_button.setEnabled(False) self._copy_button.clicked.connect(self._on_copy_pressed) button_layout.addWidget(self._copy_button) self._open_button = QtGui.QPushButton("Copy and Open") self._open_button.setEnabled(False) self._open_button.clicked.connect(self._on_open_pressed) button_layout.addWidget(self._open_button) self._preview = Preview() self._picker.setPreviewWidget(self._preview) self._picker.updatePreviewWidget.connect(self._on_update_preview)
class Dialog(QtGui.QDialog): def __init__(self, publish, sgfs=None): super(Dialog, self).__init__() self._sgfs = sgfs or SGFS(session=publish.session) self._publish = publish self._setup_ui() def _setup_ui(self): self.setWindowTitle("Select Task to Copy To") self.setMinimumWidth(400) self.setMinimumHeight(400) self.setLayout(QtGui.QVBoxLayout()) self._model, self._picker = picker_presets.any_task(entity=self._publish['sg_link']) self._picker.setMaximumHeight(400) self._picker.setPreviewVisible(False) self._picker.nodeChanged.connect(self._on_node_changed) self.layout().addWidget(self._picker) workspace = self._sgfs.path_for_entity(self._publish) self._namer = SceneNameWidget(dict(workspace=workspace)) self.layout().addWidget(self._namer) button_layout = QtGui.QHBoxLayout() button_layout.addStretch() self.layout().addLayout(button_layout) self._cancel_button = QtGui.QPushButton("Cancel") self._cancel_button.clicked.connect(self._on_cancel) button_layout.addWidget(self._cancel_button) self._copy_button = QtGui.QPushButton("Copy") self._copy_button.setDefault(True) self._copy_button.clicked.connect(self._on_copy) button_layout.addWidget(self._copy_button) # Trigger a UI update. self._on_node_changed(self._picker.currentNode()) def _on_cancel(self): exit() def _on_node_changed(self, node): self._node = node self._enable = 'Task' in node.state if self._enable: self._task_path = self._model.sgfs.path_for_entity(node.state['Task']) if self._task_path is not None and os.path.exists(os.path.join(self._task_path, 'maya', 'workspace.mel')): self._setup_namer() else: self._enable = False else: pass self._copy_button.setEnabled(self._enable) def _setup_namer(self): ext = os.path.splitext(self._publish['sg_path'])[1] # Increment the version number if copying to the same task. if self._node.state['Task'] is self._publish['sg_link']: version = self._publish['sg_version'] + 1 else: version = 1 workspace = os.path.join(self._task_path, 'maya') scenes = os.path.join(workspace, 'scenes') self._namer._namer = SceneName( workspace=workspace, directory='scenes', detail=self._publish['code'], version=version, revision=1, step_name=self._node.state['Task']['step']['short_name'], ) self._namer._namer.version = version basename = self._namer._namer.get_basename() revision = utils.get_next_revision( scenes, basename, ext, version, ) self._namer._namer.revision = revision self._namer._namer.extension = ext self._namer.namer_updated() self._namer.update_preview() def _on_copy(self): path = self._namer._namer.get_path() subprocess.call(['cp', self._publish['sg_path'], path]) subprocess.call(['chmod', 'a+w', path]) exit()
class Dialog(QtGui.QDialog): def __init__(self, path=None): super(Dialog, self).__init__() self._node = None self._path = path self._setup_ui() def _setup_ui(self): self.setWindowTitle("Copy Publish to Work Area") self.setLayout(QtGui.QVBoxLayout()) self._workspace = workspace = self._path or cmds.workspace(q=True, rootDirectory=True) self._model, self._picker = picker_presets.publishes_from_path(workspace) self._model.register_node_type(ScenePickerNode) self._picker.setMaximumHeight(400) self._picker.nodeChanged.connect(self._on_node_changed) self._picker.setColumnWidths([200] * 10) self.layout().addWidget(self._picker) self._namer = SceneNameWidget(dict(workspace=workspace)) self.layout().addWidget(self._namer) button_layout = QtGui.QHBoxLayout() self.layout().addLayout(button_layout) self._cancel_button = QtGui.QPushButton("Cancel") self._cancel_button.clicked.connect(self._on_cancel_pressed) button_layout.addWidget(self._cancel_button) button_layout.addStretch() self._copy_button = QtGui.QPushButton("Copy") self._copy_button.setEnabled(False) self._copy_button.clicked.connect(self._on_copy_pressed) button_layout.addWidget(self._copy_button) self._open_button = QtGui.QPushButton("Copy and Open") self._open_button.setEnabled(False) self._open_button.clicked.connect(self._on_open_pressed) button_layout.addWidget(self._open_button) self._preview = Preview() self._picker.setPreviewWidget(self._preview) self._picker.updatePreviewWidget.connect(self._on_update_preview) def _on_node_changed(self, node): self._node = node self._enable = 'PublishEvent' in node.state # Button only works when there is a publish. self._copy_button.setEnabled(self._enable) self._open_button.setEnabled(self._enable) if self._enable: self._task_path = self._model.sgfs.path_for_entity(node.state['Task']) publish = node.state.get('PublishEvent') self._namer._namer.detail = publish['code'] self._namer._namer.extension = ext = os.path.splitext(publish['sg_path'])[1] basename = self._namer._namer.get_basename() self._namer._namer.revision = utils.get_next_revision( os.path.join(self._workspace, 'scenes'), os.path.splitext(basename)[0], ext, 1, ) self._namer.namer_updated() self._namer.update_preview() def _on_update_preview(self, index): node = self._model.node_from_index(index) entity = node.state['PublishEvent'] self._preview.update(entity) def _on_cancel_pressed(self): self.hide() def _on_open_pressed(self): self._on_copy_pressed(open_=True) def _on_copy_pressed(self, state=None, open_=False): src_path = self._node.state.get('maya_scene') if not src_path: publish = self._node.state['PublishEvent'] src_path = publish.fetch('sg_path') dst_path = self._namer._namer.get_path() subprocess.call(['cp', src_path, dst_path]) subprocess.call(['chmod', 'a+w', dst_path]) self.hide() if open_: # Make sure they want to proceed if there are changes to the file. if cmds.file(q=True, modified=True): res = QtGui.QMessageBox.warning(self, "Unsaved Changes", "Would you like to save your changes before opening the copied file?", QtGui.QMessageBox.Save | QtGui.QMessageBox.No | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Save ) if res & QtGui.QMessageBox.Cancel: return if res & QtGui.QMessageBox.Save: cmds.file(save=True) cmds.file(dst_path, open=True, force=True)