editors/LDViewer.py
changeset 1782 5b6ad7a7fd9d
parent 1779 6cf16e5bfbf9
child 1832 0f1081928d65
equal deleted inserted replaced
1781:b112bfdde5cc 1782:5b6ad7a7fd9d
   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)