Exemplo n.º 1
0
 def _add_node(self, fp_node, point):
     qt_node = QTGRAPH.create_node('flowpipe.FlowpipeNode',
                                   name=fp_node.name,
                                   pos=[point.x(), point.y()])
     for input_ in fp_node.all_inputs().values():
         qt_node.add_input(input_.name)
     for output in fp_node.all_outputs().values():
         qt_node.add_output(output.name)
     self.fp_nodes_map[qt_node.id] = fp_node
     self.qt_nodes_map[qt_node.id] = qt_node
     QTGRAPH.clear_selection()
     return qt_node
Exemplo n.º 2
0
 def node_evaluation_finished(self, node, error=False):
     qt_node = QTGRAPH.get_node_by_name(node.name)
     self.index += 1.0
     self.progressbar.setValue((self.index / len(self.graph.nodes)) * 100)
     qt_node.set_color(*COLORS["success"])
     QtWidgets.QApplication.instance().processEvents()
     self.update_logs("Evaluated: {0}".format(node.name))
Exemplo n.º 3
0
    def evaluate_locally(self):
        print self.graph
        self.index = 0.0
        self.progressbar.setValue(0)
        self.current_node = None
        for qt_node in self.qt_nodes_map.values():
            qt_node.set_color(*COLORS["scheduled"])

        flowpipe.node.INode.EVENTS["evaluation-started"].register(
            self.node_evaluation_started)
        flowpipe.node.INode.EVENTS["evaluation-finished"].register(
            self.node_evaluation_finished)

        try:
            self.graph.evaluate()
            self.progress_label.setText("Evaluation successful")
        except Exception as error:
            qt_node = QTGRAPH.get_node_by_name(self.current_node.name)
            qt_node.set_color(*COLORS["error"])
            self.progress_label.setText("Evaluation failed!")
            tb = ''.join(traceback.format_exception(*sys.exc_info()))
            self.logs[self.current_node] = (
                '<span style="white-space: pre-wrap; color: #ff9999;">{0}'
                '</span>'.format(tb))
            log.exception(error)
            self.update_logs(tb)

        flowpipe.node.INode.EVENTS["evaluation-started"].deregister(
            self.node_evaluation_started)
        flowpipe.node.INode.EVENTS["evaluation-finished"].deregister(
            self.node_evaluation_finished)

        self.refresh_node_attributes()
Exemplo n.º 4
0
 def load_graph(self, graph):
     self.new()
     self.graph = graph
     self.graph_name_lineedit.setText(graph.name)
     x = 0
     for row in graph.evaluation_matrix:
         y = 0
         x_diff = 250
         for fp_node in row:
             self._add_node(fp_node, QtCore.QPoint(x, y))
             y += 150
         x += x_diff
     for fp_node in graph.nodes:
         for i, output in enumerate(fp_node.all_outputs().values()):
             for c in output.connections:
                 in_index = c.node.all_inputs().values().index(c)
                 QTGRAPH.get_node_by_name(fp_node.name).set_output(
                     i,
                     QTGRAPH.get_node_by_name(c.node.name).input(in_index))
Exemplo n.º 5
0
    def __init__(self, parent=None):
        super(FlowEditor, self).__init__(parent=parent)
        self.setupUi(self)

        self.statusBar().addPermanentWidget(self.bottom_widget, 1)
        style = QtWidgets.QApplication.instance().style()
        qstyle = QtWidgets.QStyle

        toolbar = QtWidgets.QToolBar("Evaluation", self)
        self.addToolBar(QtCore.Qt.TopToolBarArea, toolbar)
        self.addToolBar(QtCore.Qt.TopToolBarArea, toolbar)
        self.evaluate_locally_action.setIcon(
            style.standardIcon(qstyle.SP_ComputerIcon))
        self.evaluate_locally_action.triggered.connect(self.evaluate_locally)
        toolbar.addAction(self.evaluate_locally_action)

        self.fp_nodes_map = {}
        self.qt_nodes_map = {}
        self.logs = {}
        self.graph = None
        self.selected_fp_node = None

        # Graph View
        #
        self.graph_viewer = QTGRAPH.viewer()
        self.graph_widget.layout().addWidget(self.graph_viewer)
        QTGRAPH.nodes_deleted.connect(self.nodes_deleted)
        self.graph_viewer.data_dropped.connect(self.node_dropped)
        self.graph_viewer.connection_changed.connect(self.connection_changed)

        # graph_menu = QTGRAPH._viewer.context_menu()
        # graph_menu.clear()
        # self.delete_action = graph_menu.addAction(
        #     'Delete', self.delete_nodes, QtGui.QKeySequence.Delete)

        nodes = utils.discover_nodes()

        # ---------------------------------------------------------------------
        # Available Nodes - View
        #
        self.node_model = AvailableNodesModel()
        for node in nodes:
            item = QtGui.QStandardItem()
            item.setData(node["name"], QtCore.Qt.DisplayRole)
            item.setData("{0}.{1}".format(node["file"], node["name"]),
                         QtCore.Qt.ToolTipRole)
            item.setData(node["node"], QtCore.Qt.UserRole)
            self.node_model.appendRow([item])
        self.available_nodes_view.setModel(self.node_model)

        # Available Nodes - Actions
        #
        self.create_action = QtWidgets.QAction("Create",
                                               self.available_nodes_view)
        self.create_action.triggered.connect(self.create_node)
        self.available_nodes_view.addAction(self.create_action)
        self.available_nodes_view.doubleClicked.connect(self.create_node)

        # Available Nodes - Details
        #
        self.available_nodes_view.selection_changed.connect(
            self.show_node_details)

        # ---------------------------------------------------------------------
        # Selected Node - Attributes
        #
        self.name_lineedit.textChanged.connect(self.edit_node_name)
        self.open_code_button.clicked.connect(self.open_code)
        self.graph_viewer.node_selection_changed.connect(
            self.node_selection_changed)
        # self.graph_viewer.node_selected.connect(self.node_selection_changed)

        # Logs
        #
        self.clear_log_button.clicked.connect(self.log_textedit.clear)

        # Main Menu
        #
        self.actionNew.triggered.connect(self.new)
        self.actionOpen.triggered.connect(self.open)
        self.actionSave_As.triggered.connect(self.save_as)
        self.actionQuit.triggered.connect(self.close)

        # Prototyping options
        #
        self.node_inputs_widget.right_clicked.connect(
            self.inputs_right_clicked)
        self.node_outputs_widget.right_clicked.connect(
            self.outputs_right_clicked)

        self.new()
Exemplo n.º 6
0
 def delete_nodes(self):
     for qt_node in QTGRAPH.selected_nodes():
         self.graph.delete_node(self.fp_nodes_map[qt_node.id])
     QTGRAPH.delete_nodes(QTGRAPH.selected_nodes())
     self.node_deselected()
Exemplo n.º 7
0
 def node_evaluation_started(self, node):
     qt_node = QTGRAPH.get_node_by_name(node.name)
     self.current_node = node
     qt_node.set_color(*COLORS["evaluating"])
     self.progress_label.setText(node.name)
     QtWidgets.QApplication.instance().processEvents()
Exemplo n.º 8
0
 def new(self):
     self.fp_nodes_map = {}
     self.qt_nodes_map = {}
     self.graph = Graph()
     QTGRAPH.clear_session()
     self.node_deselected()