diff -r 0688db995ddf -r 4a8400732001 Viewer.py --- a/Viewer.py Tue Jul 17 12:25:50 2007 +0200 +++ b/Viewer.py Wed Jul 18 11:51:30 2007 +0200 @@ -120,6 +120,9 @@ self.DrawGrid = True self.current_id = 0 + # Initialize Block, Wire and Comment numbers + self.block_id = self.wire_id = self.comment_id = 0 + # Initialize Viewer mode to Selection mode self.Mode = MODE_SELECTION self.SavedMode = False @@ -153,14 +156,60 @@ return dc #------------------------------------------------------------------------------- +# Element management functions +#------------------------------------------------------------------------------- + + def AddBlock(self, block): + self.block_id += 1 + self.Blocks[block] = self.block_id + + def AddWire(self, wire): + self.wire_id += 1 + self.Wires[wire] = self.wire_id + + def AddComment(self, comment): + self.comment_id += 1 + self.Comments[comment] = self.comment_id + + def IsBlock(self, block): + return self.Blocks.get(block, False) + + def IsWire(self, wire): + return self.Wires.get(wire, False) + + def IsComment(self, comment): + return self.Comments.get(comment, False) + + def RemoveBlock(self, block): + self.Blocks.pop(block) + + def RemoveWire(self, wire): + self.Wires.pop(wire) + + def RemoveComment(self, comment): + self.Comments.pop(comment) + + def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): + blocks = self.Blocks.keys() + wires = self.Wires.keys() + comments = self.Comments.keys() + if sort_blocks: + blocks.sort(lambda x,y:self.Blocks[x].__cmp__(self.Blocks[y])) + if sort_wires: + wires.sort(lambda x,y:self.Wires[x].__cmp__(self.Wires[y])) + if sort_comments: + comments.sort(lambda x,y:self.Comments[x].__cmp__(self.Comments[y])) + return blocks + wires + comments + +#------------------------------------------------------------------------------- # Reset functions #------------------------------------------------------------------------------- # Resets Viewer lists def ResetView(self): - self.Blocks = [] - self.Wires = [] - self.Elements = [] + self.Blocks = {} + self.Wires = {} + self.Comments = {} self.SelectedElement = None # Changes Viewer mode @@ -197,14 +246,14 @@ instance = self.Controler.GetCurrentElementEditingInstanceInfos(exclude=ids) if instance: self.loadInstance(instance, ids) - self.RefreshScrollBar() + self.RefreshScrollBars() self.Refresh() - def RefreshScrollBar(self): + def RefreshScrollBars(self): xstart, ystart = self.GetViewStart() window_size = self.GetClientSize() maxx = maxy = 0 - for element in self.Elements: + for element in self.GetElements(): posx, posy = element.GetPosition() width, height = element.GetSize() maxx = max(maxx, posx + width) @@ -226,8 +275,7 @@ variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"]) variable.SetPosition(instance["x"], instance["y"]) variable.SetSize(instance["width"], instance["height"]) - self.Blocks.append(variable) - self.Elements.append(variable) + self.AddBlock(variable) connectors = variable.GetConnectors() connectors["output"].SetPosition(wxPoint(*instance["connector"]["position"])) if instance["connector"]["negated"]: @@ -238,8 +286,7 @@ variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"]) variable.SetPosition(instance["x"], instance["y"]) variable.SetSize(instance["width"], instance["height"]) - self.Blocks.append(variable) - self.Elements.append(variable) + self.AddBlock(variable) connectors = variable.GetConnectors() connectors["input"].SetPosition(wxPoint(*instance["connector"]["position"])) if instance["connector"]["negated"]: @@ -251,8 +298,7 @@ variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"]) variable.SetPosition(instance["x"], instance["y"]) variable.SetSize(instance["width"], instance["height"]) - self.Blocks.append(variable) - self.Elements.append(variable) + self.AddBlock(variable) connectors = variable.GetConnectors() connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) @@ -269,16 +315,14 @@ connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"]) connection.SetPosition(instance["x"], instance["y"]) connection.SetSize(instance["width"], instance["height"]) - self.Blocks.append(connection) - self.Elements.append(connection) + self.AddBlock(connection) connector = connection.GetConnector() connector.SetPosition(wxPoint(*instance["connector"]["position"])) elif instance["type"] == "connection": connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"]) connection.SetPosition(instance["x"], instance["y"]) connection.SetSize(instance["width"], instance["height"]) - self.Blocks.append(connection) - self.Elements.append(connection) + self.AddBlock(connection) connector = connection.GetConnector() connector.SetPosition(wxPoint(*instance["connector"]["position"])) self.CreateWires(connector, instance["connector"]["links"], ids) @@ -286,20 +330,18 @@ comment = Comment(self, instance["content"], instance["id"]) comment.SetPosition(instance["x"], instance["y"]) comment.SetSize(instance["width"], instance["height"]) - self.Elements.append(comment) + self.AddComment(comment) elif instance["type"] == "leftPowerRail": leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) leftpowerrail.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(leftpowerrail) - self.Elements.append(leftpowerrail) + self.AddBlock(leftpowerrail) connectors = leftpowerrail.GetConnectors() for i, connector in enumerate(instance["connectors"]): connectors[i].SetPosition(wxPoint(*connector["position"])) elif instance["type"] == "rightPowerRail": rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) rightpowerrail.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(rightpowerrail) - self.Elements.append(rightpowerrail) + self.AddBlock(rightpowerrail) connectors = rightpowerrail.GetConnectors() for i, connector in enumerate(instance["connectors"]): connectors[i].SetPosition(wxPoint(*connector["position"])) @@ -323,8 +365,7 @@ contact_type = CONTACT_NORMAL contact = LD_Contact(self, contact_type, instance["name"], instance["id"]) contact.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(contact) - self.Elements.append(contact) + self.AddBlock(contact) connectors = contact.GetConnectors() connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) @@ -348,8 +389,7 @@ coil_type = COIL_NORMAL coil = LD_Coil(self, coil_type, instance["name"], instance["id"]) coil.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(coil) - self.Elements.append(coil) + self.AddBlock(coil) connectors = coil.GetConnectors() connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) @@ -362,8 +402,7 @@ step = SFC_Step(self, instance["name"], initial, instance["id"]) step.SetPosition(instance["x"], instance["y"]) step.SetSize(instance["width"], instance["height"]) - self.Blocks.append(step) - self.Elements.append(step) + self.AddBlock(step) if "output" in instance["connectors"]: step.AddOutput() if "action" in instance["connectors"]: @@ -379,8 +418,7 @@ elif instance["type"] == "transition": transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"]) transition.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(transition) - self.Elements.append(transition) + self.AddBlock(transition) connectors = transition.GetConnectors() connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) @@ -400,8 +438,7 @@ len(instance["connectors"]["inputs"]), instance["id"]) divergence.SetPosition(instance["x"], instance["y"]) divergence.SetSize(instance["width"], instance["height"]) - self.Blocks.append(divergence) - self.Elements.append(divergence) + self.AddBlock(divergence) connectors = divergence.GetConnectors() for i, input_connector in enumerate(instance["connectors"]["inputs"]): connector = connectors["inputs"][i] @@ -413,8 +450,7 @@ elif instance["type"] == "jump": jump = SFC_Jump(self, instance["target"], instance["id"]) jump.SetPosition(instance["x"], instance["y"]) - self.Blocks.append(jump) - self.Elements.append(jump) + self.AddBlock(jump) connector = jump.GetConnector() connector.SetPosition(wxPoint(*instance["connector"]["position"])) self.CreateWires(connector, instance["connector"]["links"], ids) @@ -422,8 +458,7 @@ actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"]) actionBlock.SetPosition(instance["x"], instance["y"]) actionBlock.SetSize(instance["width"], instance["height"]) - self.Blocks.append(actionBlock) - self.Elements.append(actionBlock) + self.AddBlock(actionBlock) connector = actionBlock.GetConnector() connector.SetPosition(wxPoint(*instance["connector"]["position"])) self.CreateWires(connector, instance["connector"]["links"], ids) @@ -434,8 +469,7 @@ block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"])) block.SetPosition(instance["x"], instance["y"]) block.SetSize(instance["width"], instance["height"]) - self.Blocks.append(block) - self.Elements.append(block) + self.AddBlock(block) connectors = block.GetConnectors() for i, input_connector in enumerate(instance["connectors"]["inputs"]): connector = connectors["inputs"][i] @@ -472,8 +506,7 @@ end_connector.Connect((wire, -1), False) wire.ConnectStartPoint(None, start_connector) wire.ConnectEndPoint(None, end_connector) - self.Wires.append(wire) - self.Elements.append(wire) + self.AddWire(wire) #------------------------------------------------------------------------------- # Search Element functions @@ -495,7 +528,7 @@ if self.SelectedElement and not (exclude_group and isinstance(self.SelectedElement, Graphic_Group)): if self.SelectedElement.HitTest(pos) or self.SelectedElement.TestHandle(pos) != (0, 0): return self.SelectedElement - for element in self.Elements: + for element in self.GetElements(): if element.HitTest(pos) or element.TestHandle(pos) != (0, 0): return element return None @@ -508,16 +541,18 @@ return None def FindElementById(self, id): - for element in self.Elements: + for element in self.Blocks: + if element.GetId() == id: + return element + for element in self.Comments: if element.GetId() == id: return element return None def SearchElements(self, bbox): elements = [] - for element in self.Elements: - element_bbox = element.GetBoundingBox() - if element_bbox.x >= bbox.x and element_bbox.y >= bbox.y and element_bbox.x + element_bbox.width <= bbox.x + bbox.width and element_bbox.y + element_bbox.height <= bbox.y + bbox.height: + for element in self.GetElements(): + if element.IsInSelection(bbox): elements.append(element) return elements @@ -611,42 +646,42 @@ #------------------------------------------------------------------------------- def OnNoModifierMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorNegated(False) event.Skip() def OnNegatedMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorNegated(True) event.Skip() def OnRisingEdgeMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorEdge("rising") event.Skip() def OnFallingEdgeMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.SetConnectorEdge("falling") event.Skip() def OnAddSegmentMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Wires: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.AddSegment() event.Skip() def OnDeleteSegmentMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Wires: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.SelectedElement.DeleteSegment() event.Skip() def OnAddBranchMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.AddDivergenceBranch(self.SelectedElement) event.Skip() def OnDeleteBranchMenu(self, event): - if self.SelectedElement and self.SelectedElement in self.Blocks: + if self.SelectedElement and self.IsBlock(self.SelectedElement): self.RemoveDivergenceBranch(self.SelectedElement) event.Skip() @@ -711,8 +746,7 @@ wire.Handle = (HANDLE_POINT, 0) wire.ProcessDragging(0, 0) wire.Handle = (HANDLE_POINT, 1) - self.Wires.append(wire) - self.Elements.append(wire) + self.AddWire(wire) if self.SelectedElement: self.SelectedElement.SetSelected(False) self.SelectedElement = wire @@ -767,10 +801,7 @@ self.ReleaseMouse() self.Refresh() elif self.Mode == MODE_WIRE and self.SelectedElement: - dc = self.GetLogicalDC() - pos = GetScaledEventPosition(event, dc, self.Scaling) - connector = self.FindBlockConnector(pos, False) - if connector and connector != self.SelectedElement.StartConnected: + if self.SelectedElement.EndConnected != None: self.SelectedElement.ResetPoints() self.SelectedElement.OnMotion(event, dc, self.Scaling) self.SelectedElement.GeneratePoints() @@ -834,7 +865,7 @@ move_window.y = 1 if move_window.x != 0 or move_window.y != 0: self.Scroll(xstart + move_window.x, ystart + move_window.y) - self.RefreshScrollBar() + self.RefreshScrollBars() event.Skip() #------------------------------------------------------------------------------- @@ -842,6 +873,9 @@ #------------------------------------------------------------------------------- def OnChar(self, event): + xpos, ypos = self.GetScrollPos(wxHORIZONTAL), self.GetScrollPos(wxVERTICAL) + xmax = self.GetScrollRange(wxHORIZONTAL) - self.GetScrollThumb(wxHORIZONTAL) + ymax = self.GetScrollRange(wxVERTICAL) - self.GetScrollThumb(wxVERTICAL) keycode = event.GetKeyCode() if self.Scaling: scaling = self.Scaling @@ -851,16 +885,35 @@ self.SelectedElement.Clean() self.SelectedElement.Delete() self.SelectedElement = None - elif keycode == WXK_LEFT and self.SelectedElement: - self.SelectedElement.Move(-scaling[0], 0) - elif keycode == WXK_RIGHT and self.SelectedElement: - self.SelectedElement.Move(scaling[0], 0) - elif keycode == WXK_UP and self.SelectedElement: - self.SelectedElement.Move(0, -scaling[1]) - elif keycode == WXK_DOWN and self.SelectedElement: - self.SelectedElement.Move(0, scaling[1]) + elif keycode == WXK_LEFT: + if event.ControlDown() and event.ShiftDown(): + self.Scroll(0, ypos) + elif event.ControlDown(): + self.Scroll(max(0, xpos - 1), ypos) + elif self.SelectedElement: + self.SelectedElement.Move(-scaling[0], 0) + elif keycode == WXK_RIGHT: + if event.ControlDown() and event.ShiftDown(): + self.Scroll(xmax, ypos) + elif event.ControlDown(): + self.Scroll(min(xpos + 1, xmax), ypos) + elif self.SelectedElement: + self.SelectedElement.Move(scaling[0], 0) + elif keycode == WXK_UP: + if event.ControlDown() and event.ShiftDown(): + self.Scroll(xpos, 0) + elif event.ControlDown(): + self.Scroll(xpos, max(0, ypos - 1)) + elif self.SelectedElement: + self.SelectedElement.Move(0, -scaling[1]) + elif keycode == WXK_DOWN: + if event.ControlDown() and event.ShiftDown(): + self.Scroll(xpos, ymax) + elif event.ControlDown(): + self.Scroll(xpos, min(ypos + 1, ymax)) + elif self.SelectedElement: + self.SelectedElement.Move(0, scaling[1]) self.Refresh() - event.Skip() #------------------------------------------------------------------------------- # Model adding functions @@ -879,10 +932,10 @@ block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"]) block.SetPosition(bbox.x, bbox.y) block.SetSize(values["width"], values["height"]) - self.Blocks.append(block) - self.Elements.append(block) + self.AddBlock(block) self.Controler.AddCurrentElementEditingBlock(id) self.RefreshBlockModel(block) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -904,10 +957,10 @@ variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id) variable.SetPosition(bbox.x, bbox.y) variable.SetSize(values["width"], values["height"]) - self.Blocks.append(variable) - self.Elements.append(variable) + self.AddBlock(variable) self.Controler.AddCurrentElementEditingVariable(id, values["type"]) self.RefreshVariableModel(variable) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -920,10 +973,10 @@ connection = FBD_Connector(self, values["type"], values["name"], id) connection.SetPosition(bbox.x, bbox.y) connection.SetSize(values["width"], values["height"]) - self.Blocks.append(connection) - self.Elements.append(connection) + self.AddBlock(connection) self.Controler.AddCurrentElementEditingConnection(id, values["type"]) self.RefreshConnectionModel(connection) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -936,9 +989,10 @@ comment.SetPosition(bbox.x, bbox.y) min_width, min_height = comment.GetMinSize() comment.SetSize(max(min_width,bbox.width),max(min_height,bbox.height)) - self.Elements.append(comment) + self.AddComment(comment) self.Controler.AddCurrentElementEditingComment(id) self.RefreshCommentModel(comment) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -959,10 +1013,10 @@ contact = LD_Contact(self, values["type"], values["name"], id) contact.SetPosition(bbox.x, bbox.y) contact.SetSize(values["width"], values["height"]) - self.Blocks.append(contact) - self.Elements.append(contact) + self.AddBlock(contact) self.Controler.AddCurrentElementEditingContact(id) self.RefreshContactModel(contact) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -986,10 +1040,10 @@ coil = LD_Coil(self, values["type"], values["name"], id) coil.SetPosition(bbox.x, bbox.y) coil.SetSize(values["width"], values["height"]) - self.Blocks.append(coil) - self.Elements.append(coil) + self.AddBlock(coil) self.Controler.AddCurrentElementEditingCoil(id) self.RefreshCoilModel(contact) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1002,10 +1056,10 @@ powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])]) powerrail.SetPosition(bbox.x, bbox.y) powerrail.SetSize(values["width"], values["height"]) - self.Blocks.append(powerrail) - self.Elements.append(powerrail) + self.AddBlock(powerrail) self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) self.RefreshPowerRailModel(powerrail) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1019,10 +1073,10 @@ transition.SetPosition(bbox.x, bbox.y) min_width, min_height = transition.GetMinSize() transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) - self.Blocks.append(transition) - self.Elements.append(transition) + self.AddBlock(transition) self.Controler.AddCurrentElementEditingTransition(id) self.RefreshTransitionModel(transition) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1036,10 +1090,10 @@ divergence.SetPosition(bbox.x, bbox.y) min_width, min_height = divergence.GetMinSize() divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) - self.Blocks.append(divergence) - self.Elements.append(divergence) + self.AddBlock(divergence) self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) self.RefreshDivergenceModel(divergence) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1062,6 +1116,7 @@ block.SetSize(values["width"], values["height"]) block.SetType(values["type"], values["extension"]) self.RefreshBlockModel(block) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1090,6 +1145,7 @@ self.Controler.RemoveCurrentElementEditingInstance(id) self.Controler.AddCurrentElementEditingVariable(id, values["type"]) self.RefreshVariableModel(variable) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1109,6 +1165,7 @@ self.Controler.RemoveCurrentElementEditingInstance(id) self.Controler.AddCurrentElementEditingConnection(id, values["type"]) self.RefreshConnectionModel(connection) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1130,6 +1187,7 @@ contact.SetType(values["type"]) contact.SetSize(values["width"], values["height"]) self.RefreshContactModel(contact) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1154,6 +1212,7 @@ coil.SetType(values["type"]) coil.SetSize(values["width"], values["height"]) self.RefreshContactModel(coil) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() @@ -1170,43 +1229,46 @@ self.Controler.RemoveCurrentElementEditingInstance(id) self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) self.RefreshPowerRailModel(powerrail) + self.RefreshScrollBars() self.Refresh() dialog.Destroy() - - - def AddNewTransition(self, bbox): - dialog = TransitionContentDialog(self.Parent) - dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) - if dialog.ShowModal() == wxID_OK: - id = self.GetNewId() - values = dialog.GetValues() - transition = SFC_Transition(self, values["type"], values["value"], id) - transition.SetPosition(bbox.x, bbox.y) - min_width, min_height = transition.GetMinSize() - transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) - self.Blocks.append(transition) - self.Elements.append(transition) - self.Controler.AddCurrentElementEditingTransition(id) - self.RefreshTransitionModel(transition) - self.Refresh() - dialog.Destroy() - - def AddNewDivergence(self, bbox): - dialog = DivergenceCreateDialog(self.Parent) - dialog.SetMinSize((bbox.width, bbox.height)) - if dialog.ShowModal() == wxID_OK: - id = self.GetNewId() - values = dialog.GetValues() - divergence = SFC_Divergence(self, values["type"], values["number"], id) - divergence.SetPosition(bbox.x, bbox.y) - min_width, min_height = divergence.GetMinSize() - divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) - self.Blocks.append(divergence) - self.Elements.append(divergence) - self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) - self.RefreshDivergenceModel(divergence) - self.Refresh() - dialog.Destroy() +## +## +## def AddNewTransition(self, bbox): +## dialog = TransitionContentDialog(self.Parent) +## dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) +## if dialog.ShowModal() == wxID_OK: +## id = self.GetNewId() +## values = dialog.GetValues() +## transition = SFC_Transition(self, values["type"], values["value"], id) +## transition.SetPosition(bbox.x, bbox.y) +## min_width, min_height = transition.GetMinSize() +## transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) +## self.Blocks.append(transition) +## self.Elements.append(transition) +## self.Controler.AddCurrentElementEditingTransition(id) +## self.RefreshTransitionModel(transition) +## self.RefreshScrollBars() +## self.Refresh() +## dialog.Destroy() +## +## def AddNewDivergence(self, bbox): +## dialog = DivergenceCreateDialog(self.Parent) +## dialog.SetMinSize((bbox.width, bbox.height)) +## if dialog.ShowModal() == wxID_OK: +## id = self.GetNewId() +## values = dialog.GetValues() +## divergence = SFC_Divergence(self, values["type"], values["number"], id) +## divergence.SetPosition(bbox.x, bbox.y) +## min_width, min_height = divergence.GetMinSize() +## divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) +## self.Blocks.append(divergence) +## self.Elements.append(divergence) +## self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) +## self.RefreshDivergenceModel(divergence) +## self.RefreshScrollBars() +## self.Refresh() +## dialog.Destroy() #------------------------------------------------------------------------------- # Model update functions @@ -1335,8 +1397,7 @@ if element not in elements: elements.append(element) block.Clean() - self.Blocks.remove(block) - self.Elements.remove(block) + self.RemoveBlock(block) self.Controler.RemoveCurrentElementEditingInstance(block.GetId()) for element in elements: element.RefreshModel() @@ -1348,8 +1409,7 @@ else: elements = [] variable.Clean() - self.Blocks.remove(variable) - self.Elements.remove(variable) + self.RemoveBlock(variable) self.Controler.RemoveCurrentElementEditingInstance(variable.GetId()) for element in elements: element.RefreshModel() @@ -1360,22 +1420,20 @@ else: elements = [] connection.Clean() - self.Blocks.remove(connection) - self.Elements.remove(connection) + self.RemoveBlock(connection) self.Controler.RemoveCurrentElementEditingInstance(connection.GetId()) for element in elements: element.RefreshModel() def DeleteComment(self, comment): - self.Elements.remove(comment) + self.RemoveComment(comment) self.Controler.RemoveCurrentElementEditingInstance(comment.GetId()) def DeleteWire(self, wire): if wire in self.Wires: connected = wire.GetConnected() wire.Clean() - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) for connector in connected: connector.RefreshParentBlock() @@ -1383,8 +1441,7 @@ connectors = contact.GetConnectors() elements = connectors["output"].GetConnectedBlocks() contact.Clean() - self.Blocks.remove(contact) - self.Elements.remove(contact) + self.RemoveBlock(contact) self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) for element in elements: element.RefreshModel() @@ -1393,8 +1450,7 @@ connectors = coil.GetConnectors() elements = connectors["output"].GetConnectedBlocks() coil.Clean() - self.Blocks.remove(coil) - self.Elements.remove(coil) + self.RemoveBlock(coil) self.Controler.RemoveCurrentElementEditingInstance(coil.GetId()) for element in elements: element.RefreshModel() @@ -1407,8 +1463,7 @@ if element not in elements: elements.append(element) powerrrail.Clean() - self.Blocks.remove(powerrrail) - self.Elements.remove(powerrrail) + self.RemoveBlock(powerrrail) self.Controler.RemoveCurrentElementEditingInstance(powerrrail.GetId()) for element in elements: element.RefreshModel() @@ -1425,8 +1480,7 @@ if element not in elements: elements.append(element) step.Clean() - self.Blocks.remove(step) - self.Elements.remove(step) + self.RemoveBlock(step) self.Controler.RemoveCurrentElementEditingInstance(step.GetId()) for element in elements: element.RefreshModel() @@ -1439,8 +1493,7 @@ if element not in elements: elements.append(element) transition.Clean() - self.Blocks.remove(transition) - self.Elements.remove(transition) + self.RemoveBlock(transition) self.Controler.RemoveCurrentElementEditingInstance(transition.GetId()) for element in elements: element.RefreshModel() @@ -1453,22 +1506,19 @@ if element not in elements: elements.append(element) divergence.Clean() - self.Blocks.remove(divergence) - self.Elements.remove(divergence) + self.RemoveBlock(divergence) self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId()) for element in elements: element.RefreshModel() def DeleteJump(self, jump): jump.Clean() - self.Blocks.remove(jump) - self.Elements.remove(jump) + self.RemoveBlock(jump) self.Controler.RemoveCurrentElementEditingInstance(jump.GetId()) def DeleteActionBlock(self, actionblock): actionblock.Clean() - self.Blocks.remove(actionblock) - self.Elements.remove(actionblock) + self.RemoveBlock(actionblock) self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId()) @@ -1490,7 +1540,7 @@ #------------------------------------------------------------------------------- def OnMoveWindow(self, event): - self.RefreshScrollBar() + self.RefreshScrollBars() event.Skip() def OnPaint(self, event): @@ -1503,12 +1553,15 @@ dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height) for i in xrange(1, height / self.Scaling[1] + 1): dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1]) + for comment in self.Comments: + if comment != self.SelectedElement: + comment.Draw(dc) for wire in self.Wires: if wire != self.SelectedElement: wire.Draw(dc) - for element in self.Elements: - if element not in self.Wires and element != self.SelectedElement: - element.Draw(dc) + for block in self.Blocks: + if block != self.SelectedElement: + block.Draw(dc) if self.SelectedElement: self.SelectedElement.Draw(dc) if self.rubberBand.IsShown():