diff -r 0688db995ddf -r 4a8400732001 LDViewer.py --- a/LDViewer.py Tue Jul 17 12:25:50 2007 +0200 +++ b/LDViewer.py Wed Jul 18 11:51:30 2007 +0200 @@ -173,7 +173,7 @@ def __init__(self, parent, window, controler): Viewer.__init__(self, parent, window, controler) self.Rungs = [] - self.Comments = [] + self.RungComments = [] #------------------------------------------------------------------------------- # Refresh functions @@ -183,12 +183,12 @@ Viewer.RefreshView(self) for i, rung in enumerate(self.Rungs): bbox = rung.GetBoundingBox() - if i < len(self.Comments): - pos = self.Comments[i].GetPosition() + if i < len(self.RungComments): + pos = self.RungComments[i].GetPosition() if pos[1] > bbox.y: - self.Comment.insert(i, None) + self.RungComments.insert(i, None) else: - self.Comment.insert(i, None) + self.RungComments.insert(i, None) def loadInstance(self, instance, ids): Viewer.loadInstance(self, instance, ids) @@ -232,14 +232,14 @@ pos = element.GetPosition() i = 0 inserted = False - while i < len(self.Comments) and not inserted: - ipos = self.Comments[i].GetPosition() + while i < len(self.RungComments) and not inserted: + ipos = self.RungComments[i].GetPosition() if pos[1] < ipos[1]: - self.Comments.insert(i, element) + self.RungComments.insert(i, element) inserted = True i += 1 if not inserted: - self.Comments.append(element) + self.RungComments.append(element) #------------------------------------------------------------------------------- # Search Element functions @@ -256,7 +256,7 @@ return Viewer.FindElement(self, pos) elements = [] - for element in self.Elements: + for element in self.GetElements(sort_wires=True): if element.HitTest(pos) or element.TestHandle(pos) != (0, 0): elements.append(element) if len(elements) == 1: @@ -264,7 +264,7 @@ elif len(elements) > 1: group = Graphic_Group(self) for element in elements: - if element in self.Blocks: + if self.IsBlock(element): return element group.SelectElement(element) return group @@ -276,8 +276,7 @@ elements = [] for element in self.Blocks: - 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: + if element.IsInSelection(bbox): elements.append(element) return elements @@ -293,24 +292,24 @@ pos = event.GetLogicalPosition(dc) element = self.FindElement(pos) if self.SelectedElement: - if self.SelectedElement in self.Elements: + if not isinstance(self.SelectedElement, Graphic_Group): if self.SelectedElement != element: - if self.SelectedElement in self.Wires: + if self.IsWire(self.SelectedElement): self.SelectedElement.SetSelectedSegment(None) else: self.SelectedElement.SetSelected(False) else: self.SelectedElement = None - elif element and element not in self.Elements: + elif element and isinstance(element, Graphic_Group): if self.SelectedElement.GetElements() != element.GetElements(): for elt in self.SelectedElement.GetElements(): - if elt in self.Wires: + if self.IsWire(elt): elt.SetSelectedSegment(None) self.SelectedElement.SetSelected(False) self.SelectedElement = None else: for elt in self.SelectedElement.GetElements(): - if elt in self.Wires: + if self.IsWire(elt): elt.SetSelectedSegment(None) self.SelectedElement.SetSelected(False) self.SelectedElement = None @@ -338,8 +337,8 @@ self.Refresh() elif self.Mode == MODE_SELECTION and self.SelectedElement: dc = self.GetLogicalDC() - if self.SelectedElement in self.Elements: - if self.SelectedElement in self.Wires: + if not isinstance(self.SelectedElement, Graphic_Group): + if self.IsWire(self.SelectedElement): result = self.SelectedElement.TestSegment(event.GetLogicalPosition(dc), True) if result and result[1] in [EAST, WEST]: self.SelectedElement.SetSelectedSegment(result[0]) @@ -347,7 +346,7 @@ self.SelectedElement.OnLeftUp(event, dc, self.Scaling) else: for element in self.SelectedElement.GetElements(): - if element in self.Wires: + if self.IsWire(element): result = element.TestSegment(event.GetLogicalPosition(dc), True) if result and result[1] in [EAST, WEST]: element.SetSelectedSegment(result[0]) @@ -369,7 +368,7 @@ if self.SelectedElement and self.SelectedElement != element: self.SelectedElement.SetSelected(False) self.SelectedElement = element - if self.SelectedElement in self.Wires: + if self.IsWire(self.SelectedElement): self.SelectedElement.SetSelectedSegment(0) else: self.SelectedElement.SetSelected(True) @@ -390,6 +389,8 @@ def OnViewerMotion(self, event): if self.GetDrawingMode() == FREEDRAWING_MODE: Viewer.OnViewerMotion(self, event) + elif self.rubberBand.IsShown(): + self.rubberBand.OnMotion(event, self.GetLogicalDC(), self.Scaling) event.Skip() #------------------------------------------------------------------------------- @@ -402,14 +403,14 @@ else: keycode = event.GetKeyCode() if keycode == WXK_DELETE and self.SelectedElement: - if self.SelectedElement in self.Blocks: + if self.IsBlock(self.SelectedElement): self.SelectedElement.Delete() - elif self.SelectedElement in self.Wires: + elif self.IsWire(self.SelectedElement): self.DeleteWire(self.SelectedElement) - elif self.SelectedElement not in self.Elements: + elif isinstance(self.SelectedElement, Graphic_Group): all_wires = True for element in self.SelectedElement.GetElements(): - all_wires &= element in self.Wires + all_wires &= self.IsWire(element) if all_wires: self.DeleteWire(self.SelectedElement) else: @@ -421,7 +422,7 @@ # Adding element functions #------------------------------------------------------------------------------- - def AddRung(self): + def AddLadderRung(self): dialog = LDElementDialog(self.Parent, "coil") varlist = [] vars = self.Controler.GetCurrentElementEditingInterfaceVars() @@ -447,8 +448,8 @@ comment = Comment(self, "Commentaire", id) comment.SetPosition(startx, starty) comment.SetSize(LD_COMMENT_DEFAULTSIZE[0], LD_COMMENT_DEFAULTSIZE[1]) - self.Elements.append(comment) - self.Comments.append(comment) + self.AddComment(comment) + self.RungComments.append(comment) self.Controler.AddCurrentElementEditingComment(id) self.RefreshCommentModel(comment) starty += LD_COMMENT_DEFAULTSIZE[1] + LD_OFFSET[1] @@ -456,8 +457,7 @@ id = self.GetNewId() leftpowerrail = LD_PowerRail(self, LEFTRAIL, id) leftpowerrail.SetPosition(startx, starty) - self.Elements.append(leftpowerrail) - self.Blocks.append(leftpowerrail) + self.AddBlock(leftpowerrail) rung.SelectElement(leftpowerrail) self.Controler.AddCurrentElementEditingPowerRail(id, LEFTRAIL) self.RefreshPowerRailModel(leftpowerrail) @@ -465,8 +465,7 @@ id = self.GetNewId() coil = LD_Coil(self, values["type"], values["name"], id) coil.SetPosition(startx, starty + (LD_LINE_SIZE - LD_ELEMENT_SIZE[1]) / 2) - self.Elements.append(coil) - self.Blocks.append(coil) + self.AddBlock(coil) rung.SelectElement(coil) self.Controler.AddCurrentElementEditingCoil(id) # Create Wire between LeftPowerRail and Coil @@ -477,15 +476,13 @@ 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.AddWires(wire) rung.SelectElement(wire) # Create RightPowerRail id = self.GetNewId() rightpowerrail = LD_PowerRail(self, RIGHTRAIL, id) rightpowerrail.SetPosition(startx, starty) - self.Elements.append(rightpowerrail) - self.Blocks.append(rightpowerrail) + self.AddBlock(rightpowerrail) rung.SelectElement(rightpowerrail) self.Controler.AddCurrentElementEditingPowerRail(id, RIGHTRAIL) # Create Wire between LeftPowerRail and Coil @@ -496,21 +493,20 @@ 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.AddWires(wire) rung.SelectElement(wire) self.RefreshPosition(coil) self.Rungs.append(rung) self.Refresh() - def AddContact(self): + def AddLadderContact(self): wires = [] - if self.SelectedElement in self.Wires: + if self.IsWire(self.SelectedElement): left_element = self.SelectedElement.EndConnected if not isinstance(left_element.GetParentBlock(), LD_Coil): wires.append(self.SelectedElement) - elif self.SelectedElement and self.SelectedElement not in self.Elements: - if False not in [element in self.Wires for element in self.SelectedElement.GetElements()]: + elif self.SelectedElement and isinstance(self.SelectedElement,Graphic_Group): + if False not in [self.IsWire(element) for element in self.SelectedElement.GetElements()]: for element in self.SelectedElement.GetElements(): wires.append(element) if len(wires) > 0: @@ -529,8 +525,7 @@ id = self.GetNewId() contact = LD_Contact(self, values["type"], values["name"], id) contact.SetPosition(0, points[0].y - (LD_ELEMENT_SIZE[1] + 1) / 2) - self.Elements.append(contact) - self.Blocks.append(contact) + self.AddBlock(contact) self.Controler.AddCurrentElementEditingContact(id) rungindex = self.FindRung(wires[0]) rung = self.Rungs[rungindex] @@ -557,8 +552,7 @@ wire.SetSelectedSegment(None) wire.Clean() rung.SelectElement(wire) - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) wires = [] right_wires = [] for i, left_element in enumerate(left_elements): @@ -578,8 +572,7 @@ wire.ConnectEndPoint(None, connectors["output"]) right_wires.reverse() for wire in wires: - self.Wires.append(wire) - self.Elements.append(wire) + self.AddWire(wire) rung.SelectElement(wire) self.RefreshPosition(contact) if len(right_wires) > 1: @@ -601,11 +594,11 @@ message.ShowModal() message.Destroy() - def AddBranch(self): + def AddLadderBranch(self): blocks = [] - if self.SelectedElement in self.Blocks: + if self.IsBlock(self.SelectedElement): blocks = [self.SelectedElement] - elif self.SelectedElement not in self.Elements: + elif isinstance(self.SelectedElement, Graphic_Group): elements = self.SelectedElement.GetElements() for element in elements: blocks.append(element) @@ -764,8 +757,7 @@ coil = LD_Coil(self, values["type"], values["name"], id) pos = blocks[0].GetPosition() coil.SetPosition(pos[0], pos[1] + LD_LINE_SIZE) - self.Elements.append(coil) - self.Blocks.append(coil) + self.AddBlock(coil) rung.SelectElement(coil) self.Controler.AddCurrentElementEditingCoil(id) coil_connectors = coil.GetConnectors() @@ -775,8 +767,7 @@ coil_connectors["output"].Connect((wire, -1), False) wire.ConnectStartPoint(None, connectors[index + 1]) wire.ConnectEndPoint(None, coil_connectors["output"]) - self.Wires.append(wire) - self.Elements.append(wire) + self.AddWire(wire) rung.SelectElement(wire) left_elements.reverse() for i, left_element in enumerate(left_elements): @@ -805,8 +796,7 @@ new_wire.ConnectEndPoint(None, left_element) wires.reverse() for wire in wires: - self.Wires.append(wire) - self.Elements.append(wire) + self.AddWire(wire) rung.SelectElement(wire) right_elements.reverse() for block in blocks: @@ -827,7 +817,7 @@ message.ShowModal() message.Destroy() - def AddBlock(self): + def AddLadderBlock(self): message = wxMessageDialog(self, "This option isn't available yet!", "Warning", wxOK|wxICON_EXCLAMATION) message.ShowModal() message.Destroy() @@ -851,13 +841,11 @@ for wire in input_wires: wire.Clean() rung.SelectElement(wire) - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) for wire in output_wires: wire.Clean() rung.SelectElement(wire) - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) rung.SelectElement(contact) contact.Clean() left_elements.reverse() @@ -876,8 +864,7 @@ wire_removed.append(wire) for wire in wire_removed: wire.Clean() - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) rung.SelectElement(wire) wires = [] for left_element, left_index in left_elements: @@ -890,14 +877,12 @@ wire.ConnectEndPoint(None, left_element) wires.reverse() for wire in wires: - self.Wires.append(wire) - self.Elements.append(wire) + self.RemoveWire(wire) rung.SelectElement(wire) right_elements.reverse() for right_element, right_index in right_elements: self.RefreshPosition(right_element.GetParentBlock()) - self.Blocks.remove(contact) - self.Elements.remove(contact) + self.RemoveBlock(contact) self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) rung.RefreshBoundingBox() new_bbox = rung.GetBoundingBox() @@ -912,11 +897,9 @@ element.Clean() for wire in input_wires: wire.Clean() - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) rung.SelectElement(wire) - self.Blocks.remove(element) - self.Elements.remove(element) + self.RemoveBlock(element) self.Controler.RemoveCurrentElementEditingInstance(element.GetId()) for left_element in left_elements: block = left_element.GetParentBlock() @@ -962,18 +945,16 @@ self.RecursiveDeletion(coil, rung) else: for element in rung.GetElements(): - if element in self.Wires: + if self.IsWire(element): element.Clean() - self.Wires.remove(element) - self.Elements.remove(element) + self.RemoveWire(element) for element in rung.GetElements(): - if element in self.Blocks: + if self.IsBlock(element): self.Controler.RemoveCurrentElementEditingInstance(element.GetId()) - self.Blocks.remove(element) - self.Elements.remove(element) + self.RemoveBlock(element) self.Controler.RemoveCurrentElementEditingInstance(self.Comments[rungindex].GetId()) - self.Elements.remove(self.Comments[rungindex]) - self.Comments.pop(rungindex) + self.RemoveComment(self.RungComments[rungindex]) + self.RungComments.pop(rungindex) self.Rungs.pop(rungindex) if rungindex < len(self.Rungs): next_bbox = self.Rungs[rungindex].GetBoundingBox() @@ -987,11 +968,11 @@ wires = [] left_elements = [] right_elements = [] - if wire in self.Wires: + if self.IsWire(wire): wires = [wire] - elif wire not in self.Elements: + elif isinstance(wire, Graphic_Group): for element in wire.GetElements(): - if element in self.Wires: + if self.IsWire(element): wires.append(element) else: wires = [] @@ -1009,8 +990,7 @@ right_elements.append(wire.StartConnected) if connections == (False, False) or connections == (False, True) and isinstance(left_block, LD_PowerRail): wire.Clean() - self.Wires.remove(wire) - self.Elements.remove(wire) + self.RemoveWire(wire) rung.SelectElement(wire) for left_element in left_elements: left_block = left_element.GetParentBlock() @@ -1153,11 +1133,11 @@ def RefreshRungs(self, movey, fromidx): if movey != 0: for i in xrange(fromidx, len(self.Rungs)): - self.Comments[i].Move(0, movey) - self.Comments[i].RefreshModel() + self.RungComments[i].Move(0, movey) + self.RungComments[i].RefreshModel() self.Rungs[i].Move(0, movey) for element in self.Rungs[i].GetElements(): - if element in self.Blocks: + if self.IsBlock(element): self.RefreshPosition(element) #-------------------------------------------------------------------------------