def __init__(self, parent=None): super(PyFlow, self).__init__(parent=parent) self.edHistory = EditorHistory(self) self.setWindowTitle("PyFlow v{0}".format(currentVersion().__str__())) self.undoStack = QUndoStack(self) self.setContentsMargins(1, 1, 1, 1) self.graphManager = GraphManagerSingleton() self.canvasWidget = CanvasWidget(self.graphManager.get(), self) self.canvasWidget.setObjectName("canvasWidget") self.setCentralWidget(self.canvasWidget) self.setTabPosition(QtCore.Qt.AllDockWidgetAreas, QTabWidget.North) self.setDockOptions(QMainWindow.AnimatedDocks | QMainWindow.AllowNestedDocks) self.menuBar = QMenuBar(self) self.menuBar.setGeometry(QtCore.QRect(0, 0, 863, 21)) self.menuBar.setObjectName("menuBar") self.setMenuBar(self.menuBar) self.toolBar = QToolBar(self) self.toolBar.setObjectName("toolBar") self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.setWindowIcon(QtGui.QIcon(":/LogoBpApp.png")) self._tools = set() self.currentTempDir = "" self.preferencesWindow = PreferencesWindow(self) self.setMouseTracking(True) self._lastClock = 0.0 self.fps = EDITOR_TARGET_FPS self.tick_timer = QtCore.QTimer() self._current_file_name = 'Untitled' self.populateMenu()
def serialize(self): """Serializes itself to json. All child graphs will be serialized. :rtype: dict """ rootGraph = self.findRootGraph() saved = rootGraph.serialize() saved["fileVersion"] = str(version.currentVersion()) saved["activeGraph"] = self.activeGraph().name return saved
def serialize(self): rootGraph = self.findRootGraph() saved = rootGraph.serialize() saved["fileVersion"] = str(version.currentVersion()) saved["activeGraph"] = self.activeGraph().name return saved
# If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os import sys sys.path.insert(0, os.path.abspath('../../')) from PyFlow.Core.version import currentVersion # -- Project information ----------------------------------------------------- project = 'PyFlow' copyright = '2019, Ilgar Lunin, Pedro Cabrera' author = 'Ilgar Lunin, Pedro Cabrera' # The full version, including alpha/beta/rc tags release = currentVersion().__str__() # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.todo', 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx' ] source_suffix = { '.rst': 'restructuredtext', }
def main(): parser = argparse.ArgumentParser(description="PyFlow CLI") parser.add_argument("-m", "--mode", type=str, default="edit", choices=["edit", "run", "runui"]) parser.add_argument("-f", "--filePath", type=str, default="untitled.pygraph") parser.add_argument("--version", action="version", version=str(currentVersion())) parsedArguments, unknown = parser.parse_known_args(sys.argv[1:]) filePath = parsedArguments.filePath if not filePath.endswith(".pygraph"): filePath += ".pygraph" if parsedArguments.mode == "edit": app = QApplication(sys.argv) instance = PyFlow.instance(software="standalone") if instance is not None: app.setActiveWindow(instance) instance.show() if os.path.exists(filePath): with open(filePath, 'r') as f: data = json.load(f) instance.loadFromData(data) instance.currentFileName = filePath try: sys.exit(app.exec_()) except Exception as e: print(e) if parsedArguments.mode == "run": data = None if not os.path.exists(filePath): print("No such file. {}".format(filePath)) return with open(filePath, 'r') as f: data = json.load(f) getGraphArguments(data, parser) parsedArguments = parser.parse_args() # load updated data INITIALIZE() GM = GraphManagerSingleton().get() GM.deserialize(data) # fake main loop def programLoop(): while True: GM.Tick(deltaTime=0.02) time.sleep(0.02) if GM.terminationRequested: break # call graph inputs nodes root = GM.findRootGraph() graphInputNodes = root.getNodesList(classNameFilters=["graphInputs"]) evalFunctions = [] for graphInput in graphInputNodes: # update data for outPin in graphInput.outputs.values(): if outPin.isExec(): evalFunctions.append(outPin.call) if hasattr(parsedArguments, outPin.name): cliValue = getattr(parsedArguments, outPin.name) if cliValue is not None: outPin.setData(cliValue) for foo in evalFunctions: foo() loopThread = threading.Thread(target=programLoop) loopThread.start() loopThread.join() if parsedArguments.mode == "runui": graphUiParser.run(filePath)