158 if not parts: |
158 if not parts: |
159 parts = 1 |
159 parts = 1 |
160 element_tree[element]["weight"] = max(1, weight / parts) |
160 element_tree[element]["weight"] = max(1, weight / parts) |
161 |
161 |
162 |
162 |
163 #------------------------------------------------------------------------------- |
163 # ------------------------------------------------------------------------------- |
164 # Ladder Diagram Graphic elements Viewer class |
164 # Ladder Diagram Graphic elements Viewer class |
165 #------------------------------------------------------------------------------- |
165 # ------------------------------------------------------------------------------- |
166 |
166 |
167 |
167 |
168 class LD_Viewer(Viewer): |
168 class LD_Viewer(Viewer): |
169 """ |
169 """ |
170 Class derived from Viewer class that implements a Viewer of Ladder Diagram |
170 Class derived from Viewer class that implements a Viewer of Ladder Diagram |
174 Viewer.__init__(self, parent, tagname, window, controler, debug, instancepath) |
174 Viewer.__init__(self, parent, tagname, window, controler, debug, instancepath) |
175 self.Rungs = [] |
175 self.Rungs = [] |
176 self.RungComments = [] |
176 self.RungComments = [] |
177 self.CurrentLanguage = "LD" |
177 self.CurrentLanguage = "LD" |
178 |
178 |
179 #------------------------------------------------------------------------------- |
179 # ------------------------------------------------------------------------------- |
180 # Refresh functions |
180 # Refresh functions |
181 #------------------------------------------------------------------------------- |
181 # ------------------------------------------------------------------------------- |
182 |
182 |
183 def ResetView(self): |
183 def ResetView(self): |
184 self.Rungs = [] |
184 self.Rungs = [] |
185 self.RungComments = [] |
185 self.RungComments = [] |
186 Viewer.ResetView(self) |
186 Viewer.ResetView(self) |
256 inserted = True |
256 inserted = True |
257 i += 1 |
257 i += 1 |
258 if not inserted: |
258 if not inserted: |
259 self.RungComments.append(element) |
259 self.RungComments.append(element) |
260 |
260 |
261 #------------------------------------------------------------------------------- |
261 # ------------------------------------------------------------------------------- |
262 # Search Element functions |
262 # Search Element functions |
263 #------------------------------------------------------------------------------- |
263 # ------------------------------------------------------------------------------- |
264 |
264 |
265 def FindRung(self, element): |
265 def FindRung(self, element): |
266 for i, rung in enumerate(self.Rungs): |
266 for i, rung in enumerate(self.Rungs): |
267 if rung.IsElementIn(element): |
267 if rung.IsElementIn(element): |
268 return i |
268 return i |
300 for element in self.Blocks.values() + self.Comments.values(): |
300 for element in self.Blocks.values() + self.Comments.values(): |
301 if element.IsInSelection(bbox): |
301 if element.IsInSelection(bbox): |
302 elements.append(element) |
302 elements.append(element) |
303 return elements |
303 return elements |
304 |
304 |
305 #------------------------------------------------------------------------------- |
305 # ------------------------------------------------------------------------------- |
306 # Mouse event functions |
306 # Mouse event functions |
307 #------------------------------------------------------------------------------- |
307 # ------------------------------------------------------------------------------- |
308 |
308 |
309 def OnViewerLeftDown(self, event): |
309 def OnViewerLeftDown(self, event): |
310 if self.GetDrawingMode() == FREEDRAWING_MODE: |
310 if self.GetDrawingMode() == FREEDRAWING_MODE: |
311 Viewer.OnViewerLeftDown(self, event) |
311 Viewer.OnViewerLeftDown(self, event) |
312 elif self.Mode == MODE_SELECTION: |
312 elif self.Mode == MODE_SELECTION: |
390 self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
390 self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling) |
391 self.SelectedElement.Refresh() |
391 self.SelectedElement.Refresh() |
392 wx.CallAfter(self.SetCurrentCursor, 0) |
392 wx.CallAfter(self.SetCurrentCursor, 0) |
393 event.Skip() |
393 event.Skip() |
394 |
394 |
395 #------------------------------------------------------------------------------- |
395 # ------------------------------------------------------------------------------- |
396 # Keyboard event functions |
396 # Keyboard event functions |
397 #------------------------------------------------------------------------------- |
397 # ------------------------------------------------------------------------------- |
398 |
398 |
399 def OnChar(self, event): |
399 def OnChar(self, event): |
400 if self.GetDrawingMode() == FREEDRAWING_MODE: |
400 if self.GetDrawingMode() == FREEDRAWING_MODE: |
401 Viewer.OnChar(self, event) |
401 Viewer.OnChar(self, event) |
402 else: |
402 else: |
441 elif event.ControlDown(): |
441 elif event.ControlDown(): |
442 self.Scroll(xpos, min(ypos + 1, ymax)) |
442 self.Scroll(xpos, min(ypos + 1, ymax)) |
443 else: |
443 else: |
444 event.Skip() |
444 event.Skip() |
445 |
445 |
446 #------------------------------------------------------------------------------- |
446 # ------------------------------------------------------------------------------- |
447 # Model adding functions from Drop Target |
447 # Model adding functions from Drop Target |
448 #------------------------------------------------------------------------------- |
448 # ------------------------------------------------------------------------------- |
449 |
449 |
450 def AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type): |
450 def AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type): |
451 if var_type == "BOOL": |
451 if var_type == "BOOL": |
452 id = self.GetNewId() |
452 id = self.GetNewId() |
453 if var_class == INPUT: |
453 if var_class == INPUT: |
481 self.RefreshVisibleElements() |
481 self.RefreshVisibleElements() |
482 self.Refresh(False) |
482 self.Refresh(False) |
483 else: |
483 else: |
484 Viewer.AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type) |
484 Viewer.AddVariableBlock(self, x, y, scaling, var_class, var_name, var_type) |
485 |
485 |
486 #------------------------------------------------------------------------------- |
486 # ------------------------------------------------------------------------------- |
487 # Adding element functions |
487 # Adding element functions |
488 #------------------------------------------------------------------------------- |
488 # ------------------------------------------------------------------------------- |
489 |
489 |
490 def AddLadderRung(self): |
490 def AddLadderRung(self): |
491 dialog = LDElementDialog(self.ParentWindow, self.Controler, "coil") |
491 dialog = LDElementDialog(self.ParentWindow, self.Controler, "coil") |
492 dialog.SetPreviewFont(self.GetFont()) |
492 dialog.SetPreviewFont(self.GetFont()) |
493 varlist = [] |
493 varlist = [] |
899 def AddLadderBlock(self): |
899 def AddLadderBlock(self): |
900 message = wx.MessageDialog(self, _("This option isn't available yet!"), _("Warning"), wx.OK | wx.ICON_EXCLAMATION) |
900 message = wx.MessageDialog(self, _("This option isn't available yet!"), _("Warning"), wx.OK | wx.ICON_EXCLAMATION) |
901 message.ShowModal() |
901 message.ShowModal() |
902 message.Destroy() |
902 message.Destroy() |
903 |
903 |
904 #------------------------------------------------------------------------------- |
904 # ------------------------------------------------------------------------------- |
905 # Delete element functions |
905 # Delete element functions |
906 #------------------------------------------------------------------------------- |
906 # ------------------------------------------------------------------------------- |
907 |
907 |
908 def DeleteContact(self, contact): |
908 def DeleteContact(self, contact): |
909 if self.GetDrawingMode() == FREEDRAWING_MODE: |
909 if self.GetDrawingMode() == FREEDRAWING_MODE: |
910 Viewer.DeleteContact(self, contact) |
910 Viewer.DeleteContact(self, contact) |
911 else: |
911 else: |
1087 rung.RefreshBoundingBox() |
1087 rung.RefreshBoundingBox() |
1088 new_bbox = rung.GetBoundingBox() |
1088 new_bbox = rung.GetBoundingBox() |
1089 self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1) |
1089 self.RefreshRungs(new_bbox.height - old_bbox.height, rungindex + 1) |
1090 self.SelectedElement = None |
1090 self.SelectedElement = None |
1091 |
1091 |
1092 #------------------------------------------------------------------------------- |
1092 # ------------------------------------------------------------------------------- |
1093 # Refresh element position functions |
1093 # Refresh element position functions |
1094 #------------------------------------------------------------------------------- |
1094 # ------------------------------------------------------------------------------- |
1095 |
1095 |
1096 def RefreshPosition(self, element, recursive=True): |
1096 def RefreshPosition(self, element, recursive=True): |
1097 # If element is LeftPowerRail, no need to update position |
1097 # If element is LeftPowerRail, no need to update position |
1098 if isinstance(element, LD_PowerRail) and element.GetType() == LEFTRAIL: |
1098 if isinstance(element, LD_PowerRail) and element.GetType() == LEFTRAIL: |
1099 element.RefreshModel() |
1099 element.RefreshModel() |
1192 self.Rungs[i].Move(0, movey) |
1192 self.Rungs[i].Move(0, movey) |
1193 for element in self.Rungs[i].GetElements(): |
1193 for element in self.Rungs[i].GetElements(): |
1194 if self.IsBlock(element): |
1194 if self.IsBlock(element): |
1195 self.RefreshPosition(element) |
1195 self.RefreshPosition(element) |
1196 |
1196 |
1197 #------------------------------------------------------------------------------- |
1197 # ------------------------------------------------------------------------------- |
1198 # Edit element content functions |
1198 # Edit element content functions |
1199 #------------------------------------------------------------------------------- |
1199 # ------------------------------------------------------------------------------- |
1200 |
1200 |
1201 def EditPowerRailContent(self, powerrail): |
1201 def EditPowerRailContent(self, powerrail): |
1202 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1202 if self.GetDrawingMode() == FREEDRAWING_MODE: |
1203 Viewer.EditPowerRailContent(self, powerrail) |
1203 Viewer.EditPowerRailContent(self, powerrail) |