def _initDFG(self): """Initializes the Data Flow Graph. An evalContext is created to provide contextual information about the evaluation to operators and other objects and systems with Fabric Engine. A binding to a graph is initialized and is setup so the application can interact with it via the DFGWidget and through other scripted methods within the application. The UICmdHandler handles the interaction between the UI and the client. The DFGWidget is the UI that reflects the binding to the graph that is created and changed through the application. """ self.evalContext = self.client.RT.types.EvalContext.create() self.evalContext = self.evalContext.getInstance('EvalContext') self.evalContext.host = 'Canvas' self.astManager = KLASTManager(self.client) self.host = self.client.getDFGHost() self.mainBinding = self.host.createBindingToNewGraph() self.lastSavedBindingVersion = self.mainBinding.getVersion() self.lastAutosaveBindingVersion = self.lastSavedBindingVersion graph = self.mainBinding.getExec() self.scriptEditor = ScriptEditor(self.client, self.mainBinding, self.qUndoStack, self.logWidget, self.settings, self, self.config) self.dfguiCommandHandler = UICmdHandler(self.client, self.scriptEditor) astManager = KLASTManager(self.client) self.lastSavedBindingVersion = self.mainBinding.getVersion() self.lastAutosaveBindingVersion = self.lastSavedBindingVersion graph = self.mainBinding.getExec() self.dfgWidget = DFG.DFGWidget(None, self.client, self.host, self.mainBinding, '', graph, self.astManager, self.dfguiCommandHandler, self.config) self.scriptEditor.setDFGControllerGlobal( self.dfgWidget.getDFGController()) tabSearchWidget = self.dfgWidget.getTabSearchWidget() tabSearchWidget.enabled.connect(self.enableShortCutsAndUndoRedo) self.dfgWidget.onGraphSet.connect(self.onGraphSet) self.dfgWidget.additionalMenuActionsRequested.connect( self.onAdditionalMenuActionsRequested) self.dfgWidget.urlDropped.connect(self.onUrlDropped)
def __init__(self, settings, unguarded): super(MainWindow, self).__init__() self.settings = settings DFG.DFGWidget.setSettings(settings) self.viewport = None self.dfgWidget = None self.currentGraph = None self.config = DFG.DFGConfig() self.autosaveFilename = os.path.join(fabricDir, 'autosave') if not os.path.exists(self.autosaveFilename): os.makedirs(self.autosaveFilename) autosaveBasename = 'autosave.' + str(os.getpid()) + '.canvas' self.autosaveFilename = os.path.join(self.autosaveFilename, autosaveBasename) print 'Will autosave to ' + self.autosaveFilename + ' every ' + str( MainWindow.autosaveIntervalSecs) + ' seconds' self.autosaveTimer = QtCore.QTimer() self.autosaveTimer.timeout.connect(self.autosave) self.autosaveTimer.start(MainWindow.autosaveIntervalSecs * 1000) self.windowTitle = 'Fabric Engine' self.lastFileName = '' self.onFileNameChanged('') statusBar = QtGui.QStatusBar(self) self.fpsLabel = QtGui.QLabel(statusBar) statusBar.addPermanentWidget(self.fpsLabel) self.setStatusBar(statusBar) statusBar.show() self.fpsTimer = QtCore.QTimer() self.fpsTimer.setInterval(1000) self.fpsTimer.timeout.connect(self.updateFPS) self.fpsTimer.start() client = Core.createClient({ 'unguarded': unguarded, 'reportCallback': self.reportCallback }) #options.licenseType = FabricCore::ClientLicenseType_Interactive client.loadExtension('Math') client.loadExtension('Parameters') client.loadExtension('Util') client.setStatusCallback(self.statusCallback) self.client = client self.qUndoStack = QtGui.QUndoStack() self.dfguiCommandHandler = DFG.DFGUICmdHandler_QUndo(self.qUndoStack) astManager = KLASTManager(client) self.evalContext = client.RT.types.EvalContext.create() self.evalContext = self.evalContext.getInstance('EvalContext') self.evalContext.host = 'Canvas' self.evalContext.graph = '' self.host = client.getDFGHost() binding = self.host.createBindingToNewGraph() self.lastSavedBindingVersion = binding.getVersion() self.lastAutosaveBindingVersion = self.lastSavedBindingVersion graph = binding.getExec() glFormat = QtOpenGL.QGLFormat() glFormat.setDoubleBuffer(True) glFormat.setDepth(True) glFormat.setAlpha(True) glFormat.setSampleBuffers(True) glFormat.setSamples(4) self.viewport = Viewports.GLViewportWidget( client, self.config.defaultWindowColor, glFormat, None, None) self.setCentralWidget(self.viewport) self.dfgWidget = DFG.DFGWidget(None, client, self.host, binding, '', graph, astManager, self.dfguiCommandHandler, self.config) self.contentChanged.connect(self.viewport.redraw) self.viewport.portManipulationRequested.connect( self.onPortManipulationRequested) dockFeatures = QtGui.QDockWidget.DockWidgetMovable | QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetClosable dfgDock = QtGui.QDockWidget('Canvas Graph', self) dfgDock.setObjectName('Canvas Graph') dfgDock.setFeatures(dockFeatures) dfgDock.setWidget(self.dfgWidget) self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, dfgDock, QtCore.Qt.Vertical) self.timeLinePortIndex = -1 self.timeLinePortPath = None self.timeLine = Viewports.TimeLineWidget() self.timeLine.setTimeRange(MainWindow.defaultFrameIn, MainWindow.defaultFrameOut) self.timeLine.updateTime(1) timeLineDock = QtGui.QDockWidget("TimeLine", self) timeLineDock.setObjectName("TimeLine") timeLineDock.setFeatures(dockFeatures) timeLineDock.setWidget(self.timeLine) self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, timeLineDock, QtCore.Qt.Vertical) treeWidget = DFG.PresetTreeWidget(self.dfgWidget.getDFGController(), self.config, True, False, True) treeDock = QtGui.QDockWidget("Explorer", self) treeDock.setObjectName("Explorer") treeDock.setFeatures(dockFeatures) treeDock.setWidget(treeWidget) self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, treeDock) self.dfgWidget.newPresetSaved.connect(treeWidget.refresh) self.dfgValueEditor = DFG.DFGValueEditor( self.dfgWidget.getDFGController(), self.config) dfgValueEditorDockWidget = QtGui.QDockWidget("Value Editor", self) dfgValueEditorDockWidget.setObjectName("Values") dfgValueEditorDockWidget.setFeatures(dockFeatures) dfgValueEditorDockWidget.setWidget(self.dfgValueEditor) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dfgValueEditorDockWidget) self.logWidget = DFG.DFGLogWidget(self.config) logDockWidget = QtGui.QDockWidget("Log Messages", self) logDockWidget.setObjectName("Log") logDockWidget.setFeatures(dockFeatures) logDockWidget.setWidget(self.logWidget) logDockWidget.hide() self.addDockWidget(QtCore.Qt.TopDockWidgetArea, logDockWidget, QtCore.Qt.Vertical) self.qUndoView = QtGui.QUndoView(self.qUndoStack) self.qUndoView.setEmptyLabel("New Graph") undoDockWidget = QtGui.QDockWidget("History", self) undoDockWidget.setObjectName("History") undoDockWidget.setFeatures(dockFeatures) undoDockWidget.setWidget(self.qUndoView) undoDockWidget.hide() self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, undoDockWidget) self.newGraphAction = None self.loadGraphAction = None self.saveGraphAction = None self.saveGraphAsAction = None self.quitAction = None self.manipAction = None self.setGridVisibleAction = None self.resetCameraAction = None self.clearLogAction = None self.blockCompilationsAction = None controller = self.dfgWidget.getDFGController() controller.varsChanged.connect(treeWidget.refresh) controller.argsChanged.connect(self.onStructureChanged) controller.argValuesChanged.connect(self.onValueChanged) controller.defaultValuesChanged.connect(self.onValueChanged) self.dfgWidget.nodeInspectRequested.connect( self.onNodeInspectRequested) controller.dirty.connect(self.onDirty) controller.bindingChanged.connect(self.dfgValueEditor.setBinding) controller.nodeRemoved.connect(self.dfgValueEditor.onNodeRemoved) tabSearchWidget = self.dfgWidget.getTabSearchWidget() tabSearchWidget.enabled.connect(self.enableShortCuts) self.timeLine.frameChanged.connect(self.onFrameChanged) self.dfgWidget.onGraphSet.connect(self.onGraphSet) self.restoreGeometry(settings.value("mainWindow/geometry")) self.restoreState(settings.value("mainWindow/state")) self.dfgWidget.additionalMenuActionsRequested.connect( self.onAdditionalMenuActionsRequested) self.dfgWidget.populateMenuBar(self.menuBar()) windowMenu = self.menuBar().addMenu("&Window") toggleAction = dfgDock.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_4) windowMenu.addAction(toggleAction) toggleAction = treeDock.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_5) windowMenu.addAction(toggleAction) toggleAction = dfgValueEditorDockWidget.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_6) windowMenu.addAction(toggleAction) toggleAction = timeLineDock.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_9) windowMenu.addAction(toggleAction) windowMenu.addSeparator() toggleAction = undoDockWidget.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_7) windowMenu.addAction(toggleAction) toggleAction = logDockWidget.toggleViewAction() toggleAction.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_8) windowMenu.addAction(toggleAction) self.onFrameChanged(self.timeLine.getTime()) self.onGraphSet(self.dfgWidget.getUIGraph()) self.onSidePanelInspectRequested() self.installEventFilter(MainWindowEventFilter(self))