Esempio n. 1
0
    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())
Esempio n. 2
0
    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())
Esempio n. 3
0
    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)
Esempio n. 4
0
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()
Esempio n. 5
0
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()
Esempio n. 6
0
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)