Exemplo n.º 1
0
    def __init__(self, parent, prefSaver, thumbTmpRoot):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.tableView = SceneTree(self, thumbTmpRoot = thumbTmpRoot)
        self.tableView.setupData()
        self.tableView.setFrameShape(QtGui.QFrame.NoFrame)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.tableView)
        vbox.setMargin(0)
        self.playListContainer.setLayout(vbox)

        # set the icons
        self.cmdAddSource.setIcon(QtGui.QIcon(resources.fetch("add.png")))
        self.cmdAddSource.setText("")
        self.cmdAddVariantSource.setIcon(QtGui.QIcon(resources.fetch("subadd.png")))
        self.cmdAddVariantSource.setText("")
        self.cmdRemoveSource.setIcon(QtGui.QIcon(resources.fetch("remove.png")))
        self.cmdRemoveSource.setText("")
        self.cmdClearPlaylist.setIcon(QtGui.QIcon(resources.fetch("clearPage.png")))
        self.cmdClearPlaylist.setText("")
        self.cmdMoveSourceUp.setIcon(QtGui.QIcon(resources.fetch("up.png")))
        self.cmdMoveSourceUp.setText("")
        self.cmdMoveSourceDown.setIcon(QtGui.QIcon(resources.fetch("down.png")))
        self.cmdMoveSourceDown.setText("")
        self.cmdEditSource.setIcon(QtGui.QIcon(resources.fetch("pencil.png")))
        self.cmdEditSource.setText("")
        self.cmdSetDefaultPad.setIcon(QtGui.QIcon(resources.fetch("apply.png")))
        self.cmdSetDefaultPad.setText("")
        self.cmdPublish.setIcon(QtGui.QIcon(resources.fetch("publish.png")))
        self.cmdApplyPad.setIcon(QtGui.QIcon(resources.fetch("apply.png")))
        self.cmdApplyPad.setText("")
        self.cmdHelp.setIcon(QtGui.QIcon(resources.fetch("help.png")))
        self.cmdHelp.setText("")
        self.cmdSavePlaylist.setIcon(QtGui.QIcon(resources.fetch("saveFile.png")))
        self.lblMixMasterIcon.setPixmap(QtGui.QPixmap(resources.fetch("tapeRecorder32.png")))
        self.cmdPlay.setIcon(QtGui.QIcon(resources.fetch("play.png")))
        self.cmdImportPlaylist.setIcon(QtGui.QIcon(resources.fetch("page_lightning.png")))
        self.cmdCloseEditSourcePanel.setIcon(QtGui.QIcon(resources.fetch("close.png")))

        self.cmdAddVariantSource.setEnabled(False)

        self.cmdImportPlaylist.setFocus()
        # show the edit source by default
        self.pnlEditSource.hide()
        self.clearSourceEditPanel()

        version = os.environ["MIXMASTER_VERSION"] if os.environ.has_key("MIXMASTER_VERSION") else ""
        self.titleMixMaster = "Mix Master - %s : " % version
        self.setWindowTitleFile("")

        self.connect (  self.tableView,
                QtCore.SIGNAL("frameScrubChange"),
                self.syncFrameScrubChange)

        self.connect (  self.tableView,
                QtCore.SIGNAL("frameScrubFinish"),
                self.handleFrameScrubFinish)

        self.connect (  self.cmdEditAudioPrompt,
                QtCore.SIGNAL("clicked()"),
                self.handleEditAudioPrompt)

        self.connect (  self.cmdClearPlaylist,
                QtCore.SIGNAL("clicked()"),
                self.clearPlaylist)

        self.connect (  self.cmdAddSource,
                QtCore.SIGNAL("clicked()"),
                self.handleAddSource)

        self.connect (  self.cmdRemoveSource,
                QtCore.SIGNAL("clicked()"),
                self.removeSource)

        self.connect (  self.cmdMoveSourceUp,
                QtCore.SIGNAL("clicked()"),
                self.moveSourceUp)

        self.connect (  self.cmdMoveSourceDown,
                QtCore.SIGNAL("clicked()"),
                self.moveSourceDown)

        self.connect ( self.cmdEditSource,
                QtCore.SIGNAL("clicked()"),
                self.editSource
                       )

        self.connect ( self.cmdCloseEditSourcePanel,
                QtCore.SIGNAL("clicked()"),
                self.closeEditSource
                       )

        self.connect ( self.cmdEditSourcePrompt,
                QtCore.SIGNAL("clicked()"),
                self.handleEditSourcePrompt
                       )

        self.connect ( self.cmdAudioSource,
                QtCore.SIGNAL("clicked()"),
                self.handleEditAudioSource
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceSelectionChanged"),
                self.handleShotSelectionChanged
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceCellClicked"),
                self.handleCellSelectionChanged
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceEditTrigger"),
                self.playlistEditTrigger
                       )

        self.connect ( self.spnStart,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnEnd,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnPerShotAudioOffset,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnHeadHold,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnTailHold,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.cmdApplyPad,
                QtCore.SIGNAL("clicked()"),
                self.applyFramePadding
                       )

        self.connect ( self.cmdSetDefaultPad,
                QtCore.SIGNAL("clicked()"),
                self.setDefaultPad
                       )

        self.connect ( self.cmdHelp,
                       QtCore.SIGNAL("clicked()"),
                       self.showHelp
                       )

        # state data
        self.stateTankVersionChanging = False
        self.stateSyncing = False
        self.cmdPublish.hide()

        # create the preference saver
        if prefSaver == None:
            self.pref = guiPrefSaver.QtGuiPreference("/tmp/mixMaster.conf")
        else:
            self.pref = prefSaver

        # save the text
        self.pref.bootstrapWidget (  widget      = self.lblDefaultPad,
                                     widgetName  = "defaultFramePadding",
                                     widgetType  =  guiPrefSaver.TEXTBOX
                                     )

        self.pref.bootstrapWidget (  widget      = self.chkUseFrameNum,
                                     widgetName  = "repectFrameNumber",
                                     widgetType  =  guiPrefSaver.CHECKBOX
                                     )

        # save the dialog position and size
        self.pref.bootstrapWidget (  widget      = self,
                                     widgetName  = "dialog window",
                                     widgetType  = guiPrefSaver.WINDOW,
                                     defaultValue = "119;76;1250;921"
                                     )

        # when dialog close, call the save preference function
        self.connect(self,
                     QtCore.SIGNAL("finished (int)"),
                     self.savePref
                     )
Exemplo n.º 2
0
class MixMasterGui(Ui_MixMasterMain, QtGui.QWidget):
    '''
    The main panel for mix master
    '''
    def __init__(self, parent, prefSaver, thumbTmpRoot):
        QtGui.QWidget.__init__(self, parent)
        self.setupUi(self)

        self.tableView = SceneTree(self, thumbTmpRoot = thumbTmpRoot)
        self.tableView.setupData()
        self.tableView.setFrameShape(QtGui.QFrame.NoFrame)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.tableView)
        vbox.setMargin(0)
        self.playListContainer.setLayout(vbox)

        # set the icons
        self.cmdAddSource.setIcon(QtGui.QIcon(resources.fetch("add.png")))
        self.cmdAddSource.setText("")
        self.cmdAddVariantSource.setIcon(QtGui.QIcon(resources.fetch("subadd.png")))
        self.cmdAddVariantSource.setText("")
        self.cmdRemoveSource.setIcon(QtGui.QIcon(resources.fetch("remove.png")))
        self.cmdRemoveSource.setText("")
        self.cmdClearPlaylist.setIcon(QtGui.QIcon(resources.fetch("clearPage.png")))
        self.cmdClearPlaylist.setText("")
        self.cmdMoveSourceUp.setIcon(QtGui.QIcon(resources.fetch("up.png")))
        self.cmdMoveSourceUp.setText("")
        self.cmdMoveSourceDown.setIcon(QtGui.QIcon(resources.fetch("down.png")))
        self.cmdMoveSourceDown.setText("")
        self.cmdEditSource.setIcon(QtGui.QIcon(resources.fetch("pencil.png")))
        self.cmdEditSource.setText("")
        self.cmdSetDefaultPad.setIcon(QtGui.QIcon(resources.fetch("apply.png")))
        self.cmdSetDefaultPad.setText("")
        self.cmdPublish.setIcon(QtGui.QIcon(resources.fetch("publish.png")))
        self.cmdApplyPad.setIcon(QtGui.QIcon(resources.fetch("apply.png")))
        self.cmdApplyPad.setText("")
        self.cmdHelp.setIcon(QtGui.QIcon(resources.fetch("help.png")))
        self.cmdHelp.setText("")
        self.cmdSavePlaylist.setIcon(QtGui.QIcon(resources.fetch("saveFile.png")))
        self.lblMixMasterIcon.setPixmap(QtGui.QPixmap(resources.fetch("tapeRecorder32.png")))
        self.cmdPlay.setIcon(QtGui.QIcon(resources.fetch("play.png")))
        self.cmdImportPlaylist.setIcon(QtGui.QIcon(resources.fetch("page_lightning.png")))
        self.cmdCloseEditSourcePanel.setIcon(QtGui.QIcon(resources.fetch("close.png")))

        self.cmdAddVariantSource.setEnabled(False)

        self.cmdImportPlaylist.setFocus()
        # show the edit source by default
        self.pnlEditSource.hide()
        self.clearSourceEditPanel()

        version = os.environ["MIXMASTER_VERSION"] if os.environ.has_key("MIXMASTER_VERSION") else ""
        self.titleMixMaster = "Mix Master - %s : " % version
        self.setWindowTitleFile("")

        self.connect (  self.tableView,
                QtCore.SIGNAL("frameScrubChange"),
                self.syncFrameScrubChange)

        self.connect (  self.tableView,
                QtCore.SIGNAL("frameScrubFinish"),
                self.handleFrameScrubFinish)

        self.connect (  self.cmdEditAudioPrompt,
                QtCore.SIGNAL("clicked()"),
                self.handleEditAudioPrompt)

        self.connect (  self.cmdClearPlaylist,
                QtCore.SIGNAL("clicked()"),
                self.clearPlaylist)

        self.connect (  self.cmdAddSource,
                QtCore.SIGNAL("clicked()"),
                self.handleAddSource)

        self.connect (  self.cmdRemoveSource,
                QtCore.SIGNAL("clicked()"),
                self.removeSource)

        self.connect (  self.cmdMoveSourceUp,
                QtCore.SIGNAL("clicked()"),
                self.moveSourceUp)

        self.connect (  self.cmdMoveSourceDown,
                QtCore.SIGNAL("clicked()"),
                self.moveSourceDown)

        self.connect ( self.cmdEditSource,
                QtCore.SIGNAL("clicked()"),
                self.editSource
                       )

        self.connect ( self.cmdCloseEditSourcePanel,
                QtCore.SIGNAL("clicked()"),
                self.closeEditSource
                       )

        self.connect ( self.cmdEditSourcePrompt,
                QtCore.SIGNAL("clicked()"),
                self.handleEditSourcePrompt
                       )

        self.connect ( self.cmdAudioSource,
                QtCore.SIGNAL("clicked()"),
                self.handleEditAudioSource
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceSelectionChanged"),
                self.handleShotSelectionChanged
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceCellClicked"),
                self.handleCellSelectionChanged
                       )

        self.connect ( self.tableView,
                QtCore.SIGNAL("sourceEditTrigger"),
                self.playlistEditTrigger
                       )

        self.connect ( self.spnStart,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnEnd,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnPerShotAudioOffset,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnHeadHold,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.spnTailHold,
                QtCore.SIGNAL("valueChanged (int)"),
                self.syncSourceEditPanelToSelection
                       )

        self.connect ( self.cmdApplyPad,
                QtCore.SIGNAL("clicked()"),
                self.applyFramePadding
                       )

        self.connect ( self.cmdSetDefaultPad,
                QtCore.SIGNAL("clicked()"),
                self.setDefaultPad
                       )

        self.connect ( self.cmdHelp,
                       QtCore.SIGNAL("clicked()"),
                       self.showHelp
                       )

        # state data
        self.stateTankVersionChanging = False
        self.stateSyncing = False
        self.cmdPublish.hide()

        # create the preference saver
        if prefSaver == None:
            self.pref = guiPrefSaver.QtGuiPreference("/tmp/mixMaster.conf")
        else:
            self.pref = prefSaver

        # save the text
        self.pref.bootstrapWidget (  widget      = self.lblDefaultPad,
                                     widgetName  = "defaultFramePadding",
                                     widgetType  =  guiPrefSaver.TEXTBOX
                                     )

        self.pref.bootstrapWidget (  widget      = self.chkUseFrameNum,
                                     widgetName  = "repectFrameNumber",
                                     widgetType  =  guiPrefSaver.CHECKBOX
                                     )

        # save the dialog position and size
        self.pref.bootstrapWidget (  widget      = self,
                                     widgetName  = "dialog window",
                                     widgetType  = guiPrefSaver.WINDOW,
                                     defaultValue = "119;76;1250;921"
                                     )

        # when dialog close, call the save preference function
        self.connect(self,
                     QtCore.SIGNAL("finished (int)"),
                     self.savePref
                     )

    def enablePublishMode(self):
        self.cmdPublish.show()

    def setWindowTitleFile(self, fileName):
        parent = self.parent()
        if parent:
            parent.setWindowIcon(QtGui.QIcon(resources.fetch("tapeRecorder48.png")))
            parent.setWindowTitle(self.titleMixMaster + fileName)
        else:
            self.setWindowIcon(QtGui.QIcon(resources.fetch("tapeRecorder48.png")))
            self.setWindowTitle(self.titleMixMaster + fileName)

    def showHelp(self):
        import subprocess
        subprocess.Popen(['konqueror', 'http://prodwiki.drd.int/mediawiki/index.php/RnD:HF2ProductionToolsList:Previs:UserHelp'])


    def closeEvent(self, event):
        self.pref.save()
        self.tableView.clearThumbCache()
        QtGui.QWidget.closeEvent(self, event)


    def savePref(self):
        self.pref.save()


    def setDefaultPad(self):
        self.lblDefaultPad.setText( str( self.spnFramePadding.value() ))


    def applyFramePadding(self):
        selectedRowList = self.tableView.getSelectedRow()
        framepad = int( self.spnFramePadding.value() )

        if len(selectedRowList)>1:
            reply = QtGui.QMessageBox.warning(self, self.tr("Apply Padding"),
                                              "Apply padding of %s frames to all selected source?" % framepad,
                                              self.tr("Ca&ncel"),
                                              self.tr("&Ok"))

            if reply:
                for rowIndex in selectedRowList:
                    shotData = self.tableView.getShotData(rowIndex)

                    frameMax = shotData["Max"]
                    frameMin = shotData["Min"]
                    shotData["Start"] = frameMin + framepad
                    shotData["End"]   = frameMax - framepad

                    if shotData["Start"] <= shotData["End"]:
                        self.tableView.setShotData(shotData, rowIndex)

        else:
            frameMin = int(self.lblFrameMin.text())
            frameMax = int(self.lblFrameMax.text())
            frameStart = frameMin + framepad
            frameEnd = frameMax - framepad

            if frameStart <= frameEnd:
                self.spnStart.setValue(  frameStart  )
                self.spnEnd.setValue( frameEnd  )



    def clearSourceEditPanel(self):

        self.txtEditSourcePath.setText("")

        self.spnStart.setValue(0)
        self.spnEnd.setValue(0)

        self.lblFrameMin.setText("")
        self.lblFrameMax.setText("")


    def syncSceneShotVersionBar(self):
        '''
        update the tank version combo by looking at the path
        populate the tank versions combo box if the source comes from tank
        '''
        if not self.cboSourceVersion.isVisible():
            return

        self.stateTankVersionChanging = True
        QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)

        # get the source data
        sourceData = self.tableView.getShotData(self.tableView.getSelectedRow()[0])

        if isEditSourceMovie(sourceData["Source Name"]):
            path = os.path.join(sourceData["Source Path"], sourceData["Source Name"])
        else:
            path = sourceData["Source Path"]

        # check if it specify a tank version
        rev = None
        try:
            rev = tank.find(path)
        except tank.common.errors.TankNotFound, e:
            pass

        self.cboSourceVersion.setEnabled(False)
        self.cboSourceVersion.clear()

        if rev:
            if rev.system.has_key('type'):  # tank 1.14
                revType = rev.system.type.system.name
            else:
                revType = rev.system.type_object.get_name()

            if revType in ["DailiesRenderSeq", "DailiesRenderMov", "Movie", "Frames"]:
                self.cboSourceVersion.setEnabled(True)

                revList = filter(lambda x: x[0]==revType, rev.asset.revisions.keys())
                revList = map(lambda x: x[1], revList)

                revList.sort()
                revList.reverse()

            # populate, then select the default version
            self.cboSourceVersion.addItems(revList)
            self.cboSourceVersion.setCurrentIndex(revList.index(rev.system.name))

        self.stateTankVersionChanging = False
        QtGui.QApplication.restoreOverrideCursor()