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