--- 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)
#-------------------------------------------------------------------------------