def _StartEdgeDrag(self, item: typing.Any) -> typing.Any: assert isinstance(item, JGraphicSocket) if item.socketType == JCONSTANTS.GRSOCKET.TYPE_INPUT: self._currentState = JCONSTANTS.GRVIEW.OP_MODE_DEFAULT return if item.multiConnection: self._tempEdgeDragObj = JGraphicEdge.DragNewEdge( startSocket=item, dragPos=item.scenePos(), ) self.scene().addItem(self._tempEdgeDragObj) self._tempEdgeDragObj.update() self._tempSocket = item self.setCursor(QtCore.Qt.DragLinkCursor) elif not item.AtMaxLimit(): self._tempEdgeDragObj = JGraphicEdge.DragNewEdge( startSocket=item, dragPos=item.scenePos(), ) self.scene().addItem(self._tempEdgeDragObj) self._tempEdgeDragObj.update() self._tempSocket = item self.setCursor(QtCore.Qt.DragLinkCursor) else: self._currentState = JCONSTANTS.GRVIEW.OP_MODE_DEFAULT
def _EndEdgeDrag(self, item: typing.Any): assert isinstance(self._tempEdgeDragObj, JGraphicEdge) if isinstance(item, JGraphicSocket): # * check same socket if self._tempSocket.socketId == item.socketId: logger.warning(f"tried connecting same socket") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() # * check if same socket type, intput type elif self._tempSocket.socketType == item.socketType: logger.warning(f"tried connecting same socket type") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() # * check if connecttion possible, non multi connection type elif item.AtMaxLimit(): logger.warning(f"socket cannot add edge, maxlimit") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() # * check sockets belong to same parent elif self._tempEdgeDragObj.startSocket.nodeId == item.nodeId: logger.warning(f"socket belong to same parent") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() else: # * check dupliate edge for edgeInScene in list( filter( lambda edge: isinstance(edge, JGraphicEdge) and edge.edgeId != self._tempEdgeDragObj.edgeId and edge.startSocket.socketId == self._tempEdgeDragObj. startSocket.socketId, self.scene().items(), )): assert isinstance(edgeInScene, JGraphicEdge) if edgeInScene.destinationSocket is item: logger.warning(f"duplicate edge") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() return # * only add edge if all above fail self._tempEdgeDragObj.destinationSocket = item self._ResetEdgeDrag() elif not isinstance(item, JGraphicSocket): logger.warning(f"clicked no socket type") self._tempEdgeDragObj.DisconnectFromSockets() self.scene().removeItem(self._tempEdgeDragObj) self._ResetEdgeDrag() self.setCursor(QtCore.Qt.ArrowCursor) self.setInteractive(True)