def DelLine(self, lineID): from .graphicmgr import GetGraphicMgr oLine = self.m_ItemInfo[lineID] oPinID = oLine.GetAttr(define.LineAttrName.OUTPUT_PINID) iPinID = oLine.GetAttr(define.LineAttrName.INPUT_PINID) GetIDMgr().DelLine4Pin(oPinID, iPinID, lineID) GetGraphicMgr().DelLine4Graphic(lineID) del self.m_ItemInfo[lineID] graphicID = GetIDMgr().DelLine2Graphic(lineID) GetSignal().DEL_LINE.emit(graphicID, lineID) GetSignal().PIN_DEL_LINE.emit(iPinID)
def S_FocusItem(self, oModelIndex): """ oModelIndex QModelIndex self.model() QStandardItemModel """ item = self.m_Tree.model().itemFromIndex(oModelIndex) if not item: return iItemType, ID = item.GetInfo() if iItemType == define.SearchTreeItemType.GRAPHIC: GetSignal().UI_FOCUS_GRAPHIC.emit(self.m_BPID, ID) else: if iItemType == define.SearchTreeItemType.PIN: ID = interface.GetNodeIDByPinID(ID) graphicID = interface.GetGraphicIDByNodeID(ID) GetSignal().UI_FOCUS_NODE.emit(graphicID, ID)
def S_TypeChanged(self): sType = self.m_VarType.currentText() iType = bddefine.NAME_TYPE[sType] if iType == self.m_Type: return value = bddefine.GetDefauleValue(iType) GetSignal().UI_VARIABLE_CHANGE_ATTR.emit(self.m_VarID, eddefine.VariableAttrName.TYPE, iType) interface.SetVariableAttr(self.m_VarID, eddefine.VariableAttrName.VALUE, value) self.m_Type = iType self._SetValueWidget()
def NewGraphic(self, bpID): from .bpmgr import GetBPMgr graphicID = misc.uuid() sName = "图表-%s" % self.NewID() oGraphic = CGraphic(graphicID, sName) GetIDMgr().SetGraphic2BP(bpID, graphicID) GetBPMgr().AddGraphic2BP(graphicID) self.m_ItemInfo[graphicID] = oGraphic GetSignal().NEW_GRAPHIC.emit(bpID, graphicID) return graphicID
def _InitSignal(self): GetSignal().DEL_LINE.connect(self.S_OnDelLineUI) GetSignal().DEL_NODE.connect(self.S_OnDelNodeUI) GetSignal().NEW_NODE.connect(self.S_OnNewNodeUI) GetSignal().UI_LINE_PRESS.connect(self.S_LineOnPress) GetSignal().UI_LINE_MOVE.connect(self.S_LineOnMove) GetSignal().UI_LINE_RELEASE.connect(self.S_LineOnRelease) GetSignal().UI_LINE_CONNECT.connect(self.S_LineOnConnect)
def NewNode(self, graphicID, sNodeName, pos, varID): """ 因为预定义节点和上面的pin是预先定义的,可以生成很多实例 所以每创建一个节点,复制节点以及pin """ from . import interface from .graphicmgr import GetGraphicMgr oDefineNode = self.m_DefineInfo[sNodeName] iNodeType = oDefineNode.GetAttr(bddefine.NodeAttrName.TYPE) bIsEventNode = False if iNodeType == bddefine.NODE_TYPE_EVENT: bIsEventNode = True bpID = interface.GetBPIDByGraphicID(graphicID) iEventNodeID = interface.GetBlueprintAttr(bpID, eddefine.BlueprintAttrName.EVENT_NODE) if iEventNodeID: mygID = interface.GetGraphicIDByNodeID(iEventNodeID) GetSignal().UI_FOCUS_NODE.emit(mygID, iEventNodeID) return oNode = copy.deepcopy(oDefineNode) nodeID = misc.uuid() GetIDMgr().SetNode2Graphic(graphicID, nodeID) # 记录node对应的graphic GetGraphicMgr().AddNode2Graphic(nodeID) # 添加到graphic里面 oNode.SetID(nodeID) oNode.SetAttr(bddefine.NodeAttrName.POSITION, pos) lstPin = [] for _, oDefinePin in oNode.m_PinInfo.items(): pinID = interface.AddPin(nodeID, oDefinePin) lstPin.append(pinID) oNode.SetAttr(bddefine.NodeAttrName.PINIDLIST, lstPin) self.m_ItemInfo[nodeID] = oNode # 如果是添加变量节点 if varID: oNode.SetAttr(bddefine.NodeAttrName.VARIABLE_ID, varID) self.SetVarNodeInfo(nodeID, varID) if bIsEventNode: interface.SetBlueprintAttr(bpID, eddefine.BlueprintAttrName.EVENT_NODE, nodeID) GetSignal().NEW_NODE.emit(graphicID, nodeID) return nodeID
def NewVariable(self, bpID): from .bpmgr import GetBPMgr iType = bddefine.Type.INT sName = "NewVar%s" % self.NewID() varID = misc.uuid() self.m_ItemInfo[varID] = CVariable(varID, sName, iType, 0) GetIDMgr().SetVar2BP(bpID, varID) GetBPMgr().AddToAttrList(bpID, eddefine.BlueprintAttrName.VARIABLE_LIST, varID) GetSignal().NEW_VARIABLE.emit(bpID, varID) return varID
def NewLine(self, graphicID, oPinID, iPinID): # 删除input槽之前的连接 from .graphicmgr import GetGraphicMgr lstLine = GetIDMgr().GetAllLineByPin(iPinID) for lineID in lstLine: self.DelLine(lineID) lineID = misc.uuid() oLine = CLine(lineID, oPinID, iPinID) self.m_ItemInfo[lineID] = oLine GetIDMgr().SetLine2Graphic(graphicID, lineID) # 记录line对应的graphic GetIDMgr().AddLine2Pin(oPinID, iPinID, lineID) # 记录引脚对应的line GetGraphicMgr().AddLine2Graphic(lineID) # 添加到graphic属性里面 GetSignal().PIN_ADD_LINE.emit(iPinID) return lineID
def S_FocusNode(self, graphicID, nodeID): if self.m_GraphicID != graphicID: return bpID = interface.GetBPIDByGraphicID(graphicID) GetSignal().UI_FOCUS_GRAPHIC.emit(bpID, graphicID) pos = interface.GetNodeAttr(nodeID, bddefine.NodeAttrName.POSITION) x, y = pos[0], pos[1] oNodeUI = GetUIMgr().GetNodeUI(nodeID) if oNodeUI: x += oNodeUI.size().width() / 2 y += oNodeUI.size().height() / 2 point = QPointF(x, y) self.centerOn(point) GetStatusMgr().SelectOneNode(graphicID, nodeID)
def DelNode(self, nodeID): from . import interface from .graphicmgr import GetGraphicMgr oNode = self.m_ItemInfo.get(nodeID, None) if not oNode: return lstLine = interface.GetAllLineByNode(nodeID) for lineID in lstLine: interface.DelLine(lineID) lstPin = oNode.GetAttr(bddefine.NodeAttrName.PINIDLIST) for pinID in lstPin: interface.DelPin(pinID) del self.m_ItemInfo[nodeID] GetGraphicMgr().DelNode4Graphic(nodeID) graphicID = GetIDMgr().DelNode2Graphic(nodeID) GetSignal().DEL_NODE.emit(graphicID, nodeID) iNodeType = oNode.GetAttr(bddefine.NodeAttrName.TYPE) if iNodeType == bddefine.NODE_TYPE_EVENT: bpID = interface.GetBPIDByGraphicID(graphicID) interface.SetBlueprintAttr(bpID, eddefine.BlueprintAttrName.EVENT_NODE, None)
def _InitSignal(self): GetSignal().UI_NEW_BLUEPRINT.connect(self.S_NewBlueprint) GetSignal().UI_SAVE_BLUEPRINT.connect(self.S_SaveBlueprint) GetSignal().UI_OPEN_BLUEPRINT.connect(self.S_OpenBlueprint) GetSignal().UI_SAVE_ALL_BLUEPRINT.connect(self.S_SaveAllBlueprint)
def _InitSignal(self): GetSignal().PIN_ADD_LINE.connect(self.S_PinAddLine) GetSignal().PIN_DEL_LINE.connect(self.S_PinDelLine) GetSignal().LINE_RUN_STATUE.connect(self.S_ChangeLineRunStaue)
def _InitSignal(self): self.m_BtnMatch.clicked.connect(self.S_ChangeMatch) self.m_Search.returnPressed.connect(self.S_Search) self.m_Tree.doubleClicked.connect(self.S_FocusItem) GetSignal().UI_SHOW_BP_SEARCH.connect(self.S_ShowBPSearch)
def mousePressEvent(self, event): super(CTypeButton, self).mousePressEvent(event) if event.button() == Qt.LeftButton: GetSignal().UI_LINE_PRESS.emit(self.m_GraphicID, self.m_PinID) event.accept()
def S_NameEditingFinished(self): sName = self.m_VarName.text() if sName == self.m_Name: return GetSignal().UI_VARIABLE_CHANGE_ATTR.emit(self.m_VarID, eddefine.VariableAttrName.NAME, sName) self.m_Name = sName
def S_SaveAllBlueprint(self): GetSignal().UI_SAVE_ALL_BLUEPRINT.emit()
def mouseDoubleClickEvent(self, event): super(CFileTree, self).mouseDoubleClickEvent(event) index = self.indexAt(event.pos()) sFile = self.m_FileSystem.filePath(index) if os.path.isfile(sFile): GetSignal().UI_OPEN_BLUEPRINT.emit(sFile)
def mouseDoubleClickEvent(self, event): oItem = self.currentItem() _, ID = oItem.GetInfo() GetSignal().UI_FOCUS_GRAPHIC.emit(self.m_BPID, ID)
def _InitSignal(self): super(CGraphicAttrTree, self)._InitSignal() GetSignal().NEW_GRAPHIC.connect(self.S_NewItem)
def _InitSignal(self): GetSignal().UI_FOCUS_NODE.connect(self.S_FocusNode)
def _InitSignal(self): super(CVariableAttrTree, self)._InitSignal() GetSignal().NEW_VARIABLE.connect(self.S_NewItem)
def _AddRunLine(self, lineID): if lineID not in self.m_LineList: self.m_LineList.append(lineID) GetSignal().LINE_RUN_STATUE.emit(lineID, True)
def enterEvent(self, event): super(CPinUI, self).enterEvent(event) GetSignal().UI_LINE_CONNECT.emit(self.m_GraphicID, self.m_PinID) event.accept()
def S_OpenBlueprint(self): GetSignal().UI_OPEN_BLUEPRINT.emit()
def mouseReleaseEvent(self, event): super(CTypeButton, self).mouseReleaseEvent(event) if event.button() == Qt.LeftButton: GetSignal().UI_LINE_RELEASE.emit(self.m_GraphicID) event.accept()
def S_Save(self): GetSignal().UI_SAVE_BLUEPRINT.emit(self.m_BPID)
def _InitSignal(self): GetSignal().UI_VARIABLE_CHANGE_ATTR.connect(self.S_ChangeVarAttr)
def Stop(self): for lineID in self.m_LineList: GetSignal().LINE_RUN_STATUE.emit(lineID, False) self.m_Statue = BLUEPRINT_STOP