Ejemplo n.º 1
0
    def _RemoveFromScene(self):

        if not self.scene().selectedItems():
            logger.debug("no items to delete")
            return

        edgeIdRemove: typing.Set[str] = set()
        nodeIdRemove: typing.Set[str] = set()

        for item in self.scene().selectedItems():
            if isinstance(item, JGraphicNode):
                nodeIdRemove.add(item.nodeId)
                for socket in item.socketManager.socketList:
                    edgeIdRemove |= set(socket.edgeList)
            elif isinstance(item, JGraphicEdge):
                edgeIdRemove.add(item.edgeId)
            else:
                logger.debug(
                    f"unknown item selected in delete type {type(item)}")

        logger.debug(f"nodes marked for removal {nodeIdRemove}")
        logger.debug(f"edges marked for removal {edgeIdRemove}")

        self._sceneManager.undoStack.beginMacro("remove item")
        # * first always remove edges, easier to implement undo stack!
        self._RemoveEdgesFromScene(edgeIdRemove)
        self._RemoveNodesFromScene(nodeIdRemove)
        self._sceneManager.undoStack.endMacro()
Ejemplo n.º 2
0
    def mousePressEvent(self, event: QtGui.QMouseEvent):

        # * pan view
        if event.button() == QtCore.Qt.RightButton:
            self._currentState = JCONSTANTS.GRVIEW.OP_MODE_PAN_VIEW
            self.prevPos = event.pos()
            self.setCursor(QtCore.Qt.ClosedHandCursor)
            self.setInteractive(False)

        # * Rubber band selection
        elif (event.button() == QtCore.Qt.LeftButton
              and event.modifiers() == QtCore.Qt.NoModifier
              and self.scene().itemAt(self.mapToScene(event.pos()),
                                      QtGui.QTransform()) is None):
            self._currentState = JCONSTANTS.GRVIEW.OP_MODE_SELECTION
            self._InitRubberband(event.pos())
            self.setInteractive(False)

        # * start edge drag
        elif (event.button() == QtCore.Qt.LeftButton
              and self._currentState == JCONSTANTS.GRVIEW.OP_MODE_DEFAULT
              and isinstance(
                  self.scene().itemAt(self.mapToScene(event.pos()),
                                      QtGui.QTransform()),
                  JGraphicSocket,
              )):
            self._currentState = JCONSTANTS.GRVIEW.OP_MODE_EDGE_DRAG
            self._StartEdgeDrag(self.scene().itemAt(
                self.mapToScene(event.pos()), QtGui.QTransform()))

        # * end edge drag
        elif (event.button() == QtCore.Qt.LeftButton
              and self._currentState == JCONSTANTS.GRVIEW.OP_MODE_EDGE_DRAG):
            self._EndEdgeDrag(self.scene().itemAt(self.mapToScene(event.pos()),
                                                  QtGui.QTransform()))

        # * debug
        elif event.button() == QtCore.Qt.MidButton:
            logger.debug("items in scene")
            for item in self.scene().items():
                if isinstance(item,
                              (JGraphicEdge, JGraphicNode, JGraphicSocket)):
                    logger.debug(item)

        super().mousePressEvent(event)
Ejemplo n.º 3
0
    def _RemoveNodeFromScene(self, nodeId: str):
        node_ = list(
            filter(
                lambda node: isinstance(node, JGraphicNode) and node.nodeId ==
                nodeId,
                self.scene().items(),
            ))
        assert len(node_) == 1, logger.error(
            f"error fetching node {nodeId} for removal")

        node__ = node_[0]
        assert isinstance(node__, JGraphicNode)
        self.scene().removeItem(node__)

        logger.debug(f"remove node {nodeId}")
        self._sceneManager.undoStack.beginMacro("remove node")
        self._sceneManager.undoStack.push(
            NodeRemoveCommand(graphicScene=self._sceneManager.graphicsScene,
                              node=node__))
        self._sceneManager.undoStack.endMacro()
Ejemplo n.º 4
0
    def _RemoveEdgeFromScene(self, edgeId: str):
        edge_ = list(
            filter(
                lambda edge: isinstance(edge, JGraphicEdge) and edge.edgeId ==
                edgeId,
                self.scene().items(),
            ))
        assert len(edge_) == 1, logger.error(
            f"error fetching node {edgeId} for removal")

        edge__ = edge_[0]
        assert isinstance(edge__, JGraphicEdge)

        edge__.DisconnectFromSockets()

        logger.debug(f"remove edge {edgeId}")
        self.scene().removeItem(edge__)

        self._sceneManager.undoStack.beginMacro("remove edge")
        self._sceneManager.undoStack.push(
            EdgeRemoveCommand(graphicScene=self._sceneManager.graphicsScene,
                              edge=edge__))
        self._sceneManager.undoStack.endMacro()
Ejemplo n.º 5
0
 def SaveToFile(self):
     logger.debug("saving to file")
     with open("graph.json", "w") as file:
         json.dump(obj=self.Serialize(), fp=file)
Ejemplo n.º 6
0
 def LoadFromFile(self) -> Dict:
     logger.debug("loading from file")
     with open("graph.json", "r") as file:
         data = json.load(file)
         return data