def run(filePath): app = QApplication(sys.argv) app.setStyle(QStyleFactory.create("plastique")) app.setStyleSheet(editableStyleSheet().getStyleSheet()) msg = QMessageBox() msg.setWindowIcon(QtGui.QIcon(":/LogoBpApp.png")) msg.setIcon(QMessageBox.Critical) if os.path.exists(filePath): with open(filePath, 'r') as f: data = json.load(f) # Window to display inputs prop = QDialog() prop.setLayout(QVBoxLayout()) prop.setWindowTitle(filePath) prop.setWindowIcon(QtGui.QIcon(":/LogoBpApp.png")) # Initalize packages try: INITIALIZE() man = GraphManagerSingleton().get() man.deserialize(data) grph = man.findRootGraph() inputs = grph.getNodesByClassName("graphInputs") if len(inputs) > 0: for inp in inputs: uiNode = getUINodeInstance(inp) uiNodeJsonTemplate = inp.serialize() uiNodeJsonTemplate["wrapper"] = inp.wrapperJsonData uiNode.postCreate(uiNodeJsonTemplate) cat = CollapsibleFormWidget(headName=inp.name) prop.layout().addWidget(cat) cat = uiNode.createOutputWidgets(cat) nodes = grph.getNodesList() if len(nodes) > 0: for node in nodes: uiNode = getUINodeInstance(node) uiNodeJsonTemplate = node.serialize() uiNodeJsonTemplate["wrapper"] = node.wrapperJsonData uiNode.postCreate(uiNodeJsonTemplate) if uiNode.bExposeInputsToCompound: cat = CollapsibleFormWidget( headName="{} inputs".format(node.name)) prop.layout().addWidget(cat) uiNode.createInputWidgets(cat, pins=False) prop.show() def programLoop(): while True: man.Tick(deltaTime=0.02) time.sleep(0.02) if man.terminationRequested: break t = threading.Thread(target=programLoop) t.start() def quitEvent(): man.terminationRequested = True t.join() app.aboutToQuit.connect(quitEvent) # If no GraphInput Nodes Exit propgram else: msg.setInformativeText(filePath) msg.setDetailedText( "The file doesn't containt graphInputs nodes") msg.setWindowTitle("PyFlow Ui Graph Parser") msg.setStandardButtons(QMessageBox.Ok) msg.show() except Exception as e: msg.setText("Error reading Graph") msg.setInformativeText(filePath) msg.setDetailedText(str(e)) msg.setWindowTitle("PyFlow Ui Graph Parser") msg.setStandardButtons(QMessageBox.Ok) msg.show() else: msg.setText("File Not Found") msg.setInformativeText(filePath) msg.setWindowTitle("PyFlow Ui Graph Parser") msg.setStandardButtons(QMessageBox.Ok) msg.show() try: sys.exit(app.exec_()) except Exception as e: print(e)
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)