Viewer.py
changeset 145 4fb225afddf4
parent 144 b67a5de5a24a
child 154 203c4acdaf27
equal deleted inserted replaced
144:b67a5de5a24a 145:4fb225afddf4
    66         wx.TextDropTarget.__init__(self)
    66         wx.TextDropTarget.__init__(self)
    67         self.ParentWindow = parent
    67         self.ParentWindow = parent
    68     
    68     
    69     def OnDropText(self, x, y, data):
    69     def OnDropText(self, x, y, data):
    70         x, y = self.ParentWindow.CalcUnscrolledPosition(x, y)
    70         x, y = self.ParentWindow.CalcUnscrolledPosition(x, y)
       
    71         scaling = self.ParentWindow.Scaling
    71         values = eval(data)
    72         values = eval(data)
    72         if values[1] == "program":
    73         if values[1] == "program":
    73             message = wx.MessageDialog(self.ParentWindow, "Programs can't be used by other POUs!", "Error", wx.OK|wx.ICON_ERROR)
    74             message = wx.MessageDialog(self.ParentWindow, "Programs can't be used by other POUs!", "Error", wx.OK|wx.ICON_ERROR)
    74             message.ShowModal()
    75             message.ShowModal()
    75             message.Destroy()
    76             message.Destroy()
    94                     if dialog.ShowModal():
    95                     if dialog.ShowModal():
    95                         blockname = dialog.GetValue()
    96                         blockname = dialog.GetValue()
    96                     dialog.Destroy()
    97                     dialog.Destroy()
    97                 id = self.ParentWindow.GetNewId()
    98                 id = self.ParentWindow.GetNewId()
    98                 block = FBD_Block(self.ParentWindow, values[0], blockname, id)
    99                 block = FBD_Block(self.ParentWindow, values[0], blockname, id)
       
   100                 width, height = block.GetMinSize()
       
   101                 if scaling is not None:
       
   102                     x = round(float(x) / float(scaling[0])) * scaling[0]
       
   103                     y = round(float(y) / float(scaling[1])) * scaling[1]
       
   104                     width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
       
   105                     height = round(float(height) / float(scaling[1]) + 0.5) * scaling[1]
    99                 block.SetPosition(x, y)
   106                 block.SetPosition(x, y)
   100                 width, height = block.GetMinSize()
       
   101                 block.SetSize(width, height)
   107                 block.SetSize(width, height)
   102                 self.ParentWindow.AddBlock(block)
   108                 self.ParentWindow.AddBlock(block)
   103                 self.ParentWindow.Controler.AddEditedElementBlock(self.ParentWindow.GetTagName(), id, values[0], blockname)
   109                 self.ParentWindow.Controler.AddEditedElementBlock(self.ParentWindow.GetTagName(), id, values[0], blockname)
   104                 self.ParentWindow.RefreshBlockModel(block)
   110                 self.ParentWindow.RefreshBlockModel(block)
   105                 self.ParentWindow.RefreshBuffer()
   111                 self.ParentWindow.RefreshBuffer()
   106                 self.ParentWindow.RefreshScrollBars()
   112                 self.ParentWindow.RefreshScrollBars()
   107                 self.ParentWindow.ParentWindow.RefreshVariablePanel(self.TagName)
   113                 self.ParentWindow.ParentWindow.RefreshVariablePanel(self.ParentWindow.GetTagName())
   108                 self.ParentWindow.Refresh()
   114                 self.ParentWindow.Refresh()
   109         elif values[1] != "location":
   115         elif values[1] != "location":
   110             if values[3] == self.ParentWindow.GetTagName():
   116             if values[3] == self.ParentWindow.GetTagName():
   111                 id = self.ParentWindow.GetNewId()
   117                 id = self.ParentWindow.GetNewId()
   112                 if values[1] == "Output":
   118                 if values[1] == "Output":
   114                 elif values[1] == "InOut":
   120                 elif values[1] == "InOut":
   115                     var_type = INPUT
   121                     var_type = INPUT
   116                 else:
   122                 else:
   117                     var_type = INPUT
   123                     var_type = INPUT
   118                 variable = FBD_Variable(self.ParentWindow, var_type, values[0], values[2], id)
   124                 variable = FBD_Variable(self.ParentWindow, var_type, values[0], values[2], id)
       
   125                 width, height = variable.GetMinSize()
       
   126                 if scaling is not None:
       
   127                     x = round(float(x) / float(scaling[0])) * scaling[0]
       
   128                     y = round(float(y) / float(scaling[1])) * scaling[1]
       
   129                     width = round(float(width) / float(scaling[0]) + 0.5) * scaling[0]
       
   130                     height = round(float(height) / float(scaling[1]) + 0.5) * scaling[1]
   119                 variable.SetPosition(x, y)
   131                 variable.SetPosition(x, y)
   120                 width, height = variable.GetMinSize()
       
   121                 variable.SetSize(width, height)
   132                 variable.SetSize(width, height)
   122                 self.ParentWindow.AddBlock(variable)
   133                 self.ParentWindow.AddBlock(variable)
   123                 self.ParentWindow.Controler.AddEditedElementVariable(self.ParentWindow.TagName, id, var_type)
   134                 self.ParentWindow.Controler.AddEditedElementVariable(self.ParentWindow.GetTagName(), id, var_type)
   124                 self.ParentWindow.RefreshVariableModel(variable)
   135                 self.ParentWindow.RefreshVariableModel(variable)
   125                 self.ParentWindow.RefreshBuffer()
   136                 self.ParentWindow.RefreshBuffer()
   126                 self.ParentWindow.RefreshScrollBars()
   137                 self.ParentWindow.RefreshScrollBars()
   127                 self.ParentWindow.Refresh()
   138                 self.ParentWindow.Refresh()
   128             else:
   139             else:
   267         # Adding a rubberband to Viewer
   278         # Adding a rubberband to Viewer
   268         self.rubberBand = RubberBand(drawingSurface=self)
   279         self.rubberBand = RubberBand(drawingSurface=self)
   269         self.SetBackgroundColour(wx.Colour(255,255,255))
   280         self.SetBackgroundColour(wx.Colour(255,255,255))
   270         self.ResetView()
   281         self.ResetView()
   271         self.Scaling = None
   282         self.Scaling = None
   272         #self.Scaling = (8, 8)
       
   273         self.DrawGrid = True
   283         self.DrawGrid = True
       
   284         self.GridBrush = wx.TRANSPARENT_BRUSH
   274         self.DrawingWire = False
   285         self.DrawingWire = False
   275         self.current_id = 0
   286         self.current_id = 0
   276         self.TagName = tagname
   287         self.TagName = tagname
   277         
   288         
   278         # Initialize Block, Wire and Comment numbers
   289         # Initialize Block, Wire and Comment numbers
   291         # Link Viewer event to corresponding methods
   302         # Link Viewer event to corresponding methods
   292         self.Bind(wx.EVT_PAINT, self.OnPaint)
   303         self.Bind(wx.EVT_PAINT, self.OnPaint)
   293         self.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown)
   304         self.Bind(wx.EVT_LEFT_DOWN, self.OnViewerLeftDown)
   294         self.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp)
   305         self.Bind(wx.EVT_LEFT_UP, self.OnViewerLeftUp)
   295         self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
   306         self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
       
   307         self.Bind(wx.EVT_RIGHT_DOWN, self.OnViewerRightDown)
   296         self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
   308         self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
   297         self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
   309         self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
   298         self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
   310         self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
   299         self.Bind(wx.EVT_CHAR, self.OnChar)
   311         self.Bind(wx.EVT_CHAR, self.OnChar)
   300         self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
   312         self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
   301         self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   313         self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   302     
   314     
   303     def GetScrolledRect(self, rect):
   315     def GetScrolledRect(self, rect):
   304         rect.x, rect.y = self.CalcScrolledPosition(rect.x, rect.y)
   316         rect.x, rect.y = self.CalcScrolledPosition(rect.x, rect.y)
   305         return rect
   317         return rect
       
   318     
       
   319     def GetScaling(self):
       
   320         return self.Scaling
   306     
   321     
   307     def SetTagName(self, tagname):
   322     def SetTagName(self, tagname):
   308         self.TagName = tagname
   323         self.TagName = tagname
   309         
   324         
   310     def GetTagName(self):
   325     def GetTagName(self):
   421     def RefreshBuffer(self):
   436     def RefreshBuffer(self):
   422         self.Controler.BufferProject()
   437         self.Controler.BufferProject()
   423         self.ParentWindow.RefreshTitle()
   438         self.ParentWindow.RefreshTitle()
   424         self.ParentWindow.RefreshEditMenu()
   439         self.ParentWindow.RefreshEditMenu()
   425 
   440 
       
   441     # Refresh the current scaling
       
   442     def RefreshScaling(self, refresh=True):
       
   443         properties = self.Controler.GetProjectProperties()
       
   444         scaling = properties["scaling"][self.CurrentLanguage]
       
   445         if scaling != (0, 0):
       
   446             self.Scaling = scaling
       
   447             if self.DrawGrid:
       
   448                 bitmap = wx.EmptyBitmap(*scaling)
       
   449                 dc = wx.MemoryDC(bitmap)
       
   450                 dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
       
   451                 dc.Clear()
       
   452                 dc.SetPen(wx.Pen(wx.Colour(180, 180, 180)))
       
   453                 dc.DrawPoint(0, 0)
       
   454                 self.GridBrush = wx.BrushFromBitmap(bitmap)
       
   455             else:
       
   456                 self.GridBrush = wx.TRANSPARENT_BRUSH
       
   457         else:
       
   458             self.Scaling = None
       
   459             self.GridBrush = wx.TRANSPARENT_BRUSH
       
   460         if refresh:
       
   461             self.Refresh()
       
   462         
       
   463         
   426 #-------------------------------------------------------------------------------
   464 #-------------------------------------------------------------------------------
   427 #                          Refresh functions
   465 #                          Refresh functions
   428 #-------------------------------------------------------------------------------
   466 #-------------------------------------------------------------------------------
   429 
   467 
   430     def ResetBuffer(self):
   468     def ResetBuffer(self):
   569                 contact_type = CONTACT_FALLING
   607                 contact_type = CONTACT_FALLING
   570             else:
   608             else:
   571                 contact_type = CONTACT_NORMAL
   609                 contact_type = CONTACT_NORMAL
   572             contact = LD_Contact(self, contact_type, instance["name"], instance["id"])
   610             contact = LD_Contact(self, contact_type, instance["name"], instance["id"])
   573             contact.SetPosition(instance["x"], instance["y"])
   611             contact.SetPosition(instance["x"], instance["y"])
       
   612             contact.SetSize(instance["width"], instance["height"])
   574             self.AddBlock(contact)
   613             self.AddBlock(contact)
   575             connectors = contact.GetConnectors()
   614             connectors = contact.GetConnectors()
   576             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   615             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   577             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   616             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   578             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   617             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   593                 coil_type = COIL_RESET
   632                 coil_type = COIL_RESET
   594             else:
   633             else:
   595                 coil_type = COIL_NORMAL
   634                 coil_type = COIL_NORMAL
   596             coil = LD_Coil(self, coil_type, instance["name"], instance["id"])
   635             coil = LD_Coil(self, coil_type, instance["name"], instance["id"])
   597             coil.SetPosition(instance["x"], instance["y"])
   636             coil.SetPosition(instance["x"], instance["y"])
       
   637             coil.SetSize(instance["width"], instance["height"])
   598             self.AddBlock(coil)
   638             self.AddBlock(coil)
   599             connectors = coil.GetConnectors()
   639             connectors = coil.GetConnectors()
   600             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   640             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   601             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   641             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   602             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   642             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   622             if connectors["action"]:
   662             if connectors["action"]:
   623                 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"]))
   663                 connectors["action"].SetPosition(wx.Point(*instance["connectors"]["action"]["position"]))
   624         elif instance["type"] == "transition":
   664         elif instance["type"] == "transition":
   625             transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["priority"], instance["id"])
   665             transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["priority"], instance["id"])
   626             transition.SetPosition(instance["x"], instance["y"])
   666             transition.SetPosition(instance["x"], instance["y"])
       
   667             transition.SetSize(instance["width"], instance["height"])
   627             self.AddBlock(transition)
   668             self.AddBlock(transition)
   628             connectors = transition.GetConnectors()
   669             connectors = transition.GetConnectors()
   629             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   670             connectors["input"].SetPosition(wx.Point(*instance["connectors"]["input"]["position"]))
   630             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   671             self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids)
   631             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   672             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   656                 connector = connectors["outputs"][i]
   697                 connector = connectors["outputs"][i]
   657                 connector.SetPosition(wx.Point(*output_connector["position"]))
   698                 connector.SetPosition(wx.Point(*output_connector["position"]))
   658         elif instance["type"] == "jump":
   699         elif instance["type"] == "jump":
   659             jump = SFC_Jump(self, instance["target"], instance["id"])
   700             jump = SFC_Jump(self, instance["target"], instance["id"])
   660             jump.SetPosition(instance["x"], instance["y"])
   701             jump.SetPosition(instance["x"], instance["y"])
       
   702             jump.SetSize(instance["width"], instance["height"])
   661             self.AddBlock(jump)
   703             self.AddBlock(jump)
   662             connector = jump.GetConnector()
   704             connector = jump.GetConnector()
   663             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   705             connector.SetPosition(wx.Point(*instance["connector"]["position"]))
   664             self.CreateWires(connector, instance["connector"]["links"], ids)
   706             self.CreateWires(connector, instance["connector"]["links"], ids)
   665         elif instance["type"] == "actionBlock":
   707         elif instance["type"] == "actionBlock":
   875 
   917 
   876     def OnAlignLeftMenu(self, event):
   918     def OnAlignLeftMenu(self, event):
   877         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   919         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   878             self.SelectedElement.AlignElements(ALIGN_LEFT, None)
   920             self.SelectedElement.AlignElements(ALIGN_LEFT, None)
   879             self.RefreshBuffer()
   921             self.RefreshBuffer()
       
   922             self.Refresh()
   880         event.Skip()
   923         event.Skip()
   881     
   924     
   882     def OnAlignCenterMenu(self, event):
   925     def OnAlignCenterMenu(self, event):
   883         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   926         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   884             self.SelectedElement.AlignElements(ALIGN_CENTER, None)
   927             self.SelectedElement.AlignElements(ALIGN_CENTER, None)
   885             self.RefreshBuffer()
   928             self.RefreshBuffer()
       
   929             self.Refresh()
   886         event.Skip()
   930         event.Skip()
   887     
   931     
   888     def OnAlignRightMenu(self, event):
   932     def OnAlignRightMenu(self, event):
   889         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   933         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   890             self.SelectedElement.AlignElements(ALIGN_RIGHT, None)
   934             self.SelectedElement.AlignElements(ALIGN_RIGHT, None)
   891             self.RefreshBuffer()
   935             self.RefreshBuffer()
       
   936             self.Refresh()
   892         event.Skip()
   937         event.Skip()
   893     
   938     
   894     def OnAlignTopMenu(self, event):
   939     def OnAlignTopMenu(self, event):
   895         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   940         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   896             self.SelectedElement.AlignElements(None, ALIGN_TOP)
   941             self.SelectedElement.AlignElements(None, ALIGN_TOP)
   897             self.RefreshBuffer()
   942             self.RefreshBuffer()
       
   943             self.Refresh()
   898         event.Skip()
   944         event.Skip()
   899     
   945     
   900     def OnAlignMiddleMenu(self, event):
   946     def OnAlignMiddleMenu(self, event):
   901         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   947         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   902             self.SelectedElement.AlignElements(None, ALIGN_MIDDLE)
   948             self.SelectedElement.AlignElements(None, ALIGN_MIDDLE)
   903             self.RefreshBuffer()
   949             self.RefreshBuffer()
       
   950             self.Refresh()
   904         event.Skip()
   951         event.Skip()
   905     
   952     
   906     def OnAlignBottomMenu(self, event):
   953     def OnAlignBottomMenu(self, event):
   907         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   954         if self.SelectedElement and isinstance(self.SelectedElement, Graphic_Group):
   908             self.SelectedElement.AlignElements(None, ALIGN_BOTTOM)
   955             self.SelectedElement.AlignElements(None, ALIGN_BOTTOM)
   909             self.RefreshBuffer()
   956             self.RefreshBuffer()
       
   957             self.Refresh()
   910         event.Skip()
   958         event.Skip()
   911         
   959         
   912     def OnNoModifierMenu(self, event):
   960     def OnNoModifierMenu(self, event):
   913         if self.SelectedElement and self.IsBlock(self.SelectedElement):
   961         if self.SelectedElement and self.IsBlock(self.SelectedElement):
   914             self.SelectedElement.SetConnectorNegated(False)
   962             self.SelectedElement.SetConnectorNegated(False)
  1002                     elif len(elements) == 1:
  1050                     elif len(elements) == 1:
  1003                         self.SelectedElement = elements[0]
  1051                         self.SelectedElement = elements[0]
  1004                     self.SelectedElement.SetSelected(True)
  1052                     self.SelectedElement.SetSelected(True)
  1005             else:
  1053             else:
  1006                 element = self.FindElement(pos)
  1054                 element = self.FindElement(pos)
  1007                 connector = self.FindBlockConnector(pos)
  1055                 if element is None or element.TestHandle(pos) == (0, 0):
       
  1056                     connector = self.FindBlockConnector(pos)
       
  1057                 else:
       
  1058                     connector = None
  1008                 if self.DrawingWire:
  1059                 if self.DrawingWire:
  1009                     self.DrawingWire = False
  1060                     self.DrawingWire = False
  1010                     if connector:
  1061                     if connector:
  1011                         event.Dragging = lambda : True
  1062                         event.Dragging = lambda : True
  1012                         self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling)
  1063                         self.SelectedElement.OnMotion(event, self.GetLogicalDC(), self.Scaling)
  1018                         element = self.SelectedElement
  1069                         element = self.SelectedElement
  1019                         self.RefreshBuffer()
  1070                         self.RefreshBuffer()
  1020                     else:
  1071                     else:
  1021                         rect = self.SelectedElement.GetRedrawRect()
  1072                         rect = self.SelectedElement.GetRedrawRect()
  1022                         self.SelectedElement.Delete()
  1073                         self.SelectedElement.Delete()
       
  1074                         self.SelectedElement = None
  1023                         element = None
  1075                         element = None
  1024                         self.RefreshRect(self.GetScrolledRect(rect))
  1076                         self.RefreshRect(self.GetScrolledRect(rect))
  1025                 elif connector:
  1077                 elif connector:
  1026                     self.DrawingWire = True
  1078                     self.DrawingWire = True
  1027                     pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
  1079                     pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
  1029                         wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST])
  1081                         wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST])
  1030                     else:
  1082                     else:
  1031                         wire = Wire(self, [wx.Point(pos.x, pos.y), WEST], [wx.Point(pos.x, pos.y), EAST])
  1083                         wire = Wire(self, [wx.Point(pos.x, pos.y), WEST], [wx.Point(pos.x, pos.y), EAST])
  1032                     wire.oldPos = pos
  1084                     wire.oldPos = pos
  1033                     wire.Handle = (HANDLE_POINT, 0)
  1085                     wire.Handle = (HANDLE_POINT, 0)
  1034                     wire.ProcessDragging(0, 0)
  1086                     wire.ProcessDragging(0, 0, self.Scaling)
  1035                     wire.Handle = (HANDLE_POINT, 1)
  1087                     wire.Handle = (HANDLE_POINT, 1)
  1036                     self.AddWire(wire)
  1088                     self.AddWire(wire)
  1037                     if self.SelectedElement:
  1089                     if self.SelectedElement:
  1038                         self.SelectedElement.SetSelected(False)
  1090                         self.SelectedElement.SetSelected(False)
  1039                     self.SelectedElement = wire
  1091                     self.SelectedElement = wire
  1102             if self.DrawingWire:
  1154             if self.DrawingWire:
  1103                 pos = event.GetLogicalPosition(dc)
  1155                 pos = event.GetLogicalPosition(dc)
  1104                 connector = self.FindBlockConnector(pos)
  1156                 connector = self.FindBlockConnector(pos)
  1105                 if self.SelectedElement.EndConnected is not None:
  1157                 if self.SelectedElement.EndConnected is not None:
  1106                     self.DrawingWire = False
  1158                     self.DrawingWire = False
       
  1159                     self.SelectedElement.StartConnected.HighlightParentBlock(False)
       
  1160                     self.SelectedElement.EndConnected.HighlightParentBlock(False)
  1107                     self.SelectedElement.ResetPoints()
  1161                     self.SelectedElement.ResetPoints()
  1108                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1162                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1109                     self.SelectedElement.GeneratePoints()
  1163                     self.SelectedElement.GeneratePoints()
  1110                     self.SelectedElement.RefreshModel()
  1164                     self.SelectedElement.RefreshModel()
       
  1165                     if self.HighlightedElement is not None:
       
  1166                         self.HighlightedElement.SetHighlighted(False)
       
  1167                         self.HighlightedElement = None
       
  1168                     self.SelectedElement.SetHighlighted(True)
       
  1169                     self.HighlightedElement = self.SelectedElement
  1111                     self.SelectedElement.SetSelected(True)
  1170                     self.SelectedElement.SetSelected(True)
  1112                     self.RefreshBuffer()
  1171                     self.RefreshBuffer()
  1113                 elif connector is None or self.SelectedElement.GetDragging():
  1172                 elif connector is None or self.SelectedElement.GetDragging():
  1114                     self.DrawingWire = False
  1173                     self.DrawingWire = False
  1115                     rect = self.SelectedElement.GetRedrawRect()
  1174                     rect = self.SelectedElement.GetRedrawRect()
  1122                 self.SelectedElement.Refresh()
  1181                 self.SelectedElement.Refresh()
  1123         if self.Mode != MODE_SELECTION and not self.SavedMode:
  1182         if self.Mode != MODE_SELECTION and not self.SavedMode:
  1124             wx.CallAfter(self.ParentWindow.ResetCurrentMode)
  1183             wx.CallAfter(self.ParentWindow.ResetCurrentMode)
  1125         event.Skip()
  1184         event.Skip()
  1126     
  1185     
       
  1186     def OnViewerRightDown(self, event):
       
  1187         if self.Mode == MODE_SELECTION:
       
  1188             dc = self.GetLogicalDC()
       
  1189             pos = event.GetLogicalPosition(dc)
       
  1190             element = self.FindElement(pos)
       
  1191             if self.SelectedElement and self.SelectedElement != element:
       
  1192                 self.SelectedElement.SetSelected(False)
       
  1193                 self.SelectedElement = None
       
  1194             if element:
       
  1195                 self.SelectedElement = element
       
  1196                 self.SelectedElement.OnRightDown(event, dc, self.Scaling)
       
  1197                 self.SelectedElement.Refresh()
       
  1198         event.Skip()
       
  1199     
  1127     def OnViewerRightUp(self, event):
  1200     def OnViewerRightUp(self, event):
  1128         dc = self.GetLogicalDC()
  1201         dc = self.GetLogicalDC()
  1129         pos = event.GetLogicalPosition(dc)
  1202         if self.SelectedElement:
  1130         element = self.FindElement(pos)
  1203             self.SelectedElement.OnRightUp(event, dc, self.Scaling)
  1131         if element:
       
  1132             if self.SelectedElement and self.SelectedElement != element:
       
  1133                 self.SelectedElement.SetSelected(False)
       
  1134             self.SelectedElement = element
       
  1135             self.SelectedElement.SetSelected(True)
       
  1136             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
       
  1137             wx.CallAfter(self.SetCursor, wx.NullCursor)
  1204             wx.CallAfter(self.SetCursor, wx.NullCursor)
       
  1205             self.SelectedElement.Refresh()
  1138         else:
  1206         else:
  1139             self.PopupDefaultMenu(False)
  1207             self.PopupDefaultMenu(False)
  1140         event.Skip()
  1208         event.Skip()
  1141     
  1209     
  1142     def OnViewerLeftDClick(self, event):
  1210     def OnViewerLeftDClick(self, event):
  1152         dc = self.GetLogicalDC()
  1220         dc = self.GetLogicalDC()
  1153         pos = GetScaledEventPosition(event, dc, self.Scaling)
  1221         pos = GetScaledEventPosition(event, dc, self.Scaling)
  1154         if not event.Dragging():
  1222         if not event.Dragging():
  1155             highlighted = self.FindElement(pos) 
  1223             highlighted = self.FindElement(pos) 
  1156             if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1224             if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1157                 rect = self.HighlightedElement.GetRedrawRect()
       
  1158                 self.HighlightedElement.SetHighlighted(False)
  1225                 self.HighlightedElement.SetHighlighted(False)
  1159                 self.HighlightedElement = None
  1226                 self.HighlightedElement = None
  1160             if highlighted is not None and self.HighlightedElement != highlighted:
  1227             if highlighted is not None and self.HighlightedElement != highlighted:
  1161                 highlighted.SetHighlighted(True)
  1228                 highlighted.SetHighlighted(True)
  1162             self.HighlightedElement = highlighted
  1229             self.HighlightedElement = highlighted
  1282 
  1349 
  1283 #-------------------------------------------------------------------------------
  1350 #-------------------------------------------------------------------------------
  1284 #                          Model adding functions
  1351 #                          Model adding functions
  1285 #-------------------------------------------------------------------------------
  1352 #-------------------------------------------------------------------------------
  1286 
  1353 
       
  1354     def GetScaledSize(self, width, height):
       
  1355         if self.Scaling is not None:
       
  1356             width = round(float(width) / float(self.Scaling[0]) + 0.4) * self.Scaling[0]
       
  1357             height = round(float(height) / float(self.Scaling[1]) + 0.4) * self.Scaling[1]
       
  1358         return width, height
       
  1359 
  1287     def AddNewBlock(self, bbox):
  1360     def AddNewBlock(self, bbox):
  1288         dialog = BlockPropertiesDialog(self.ParentWindow)
  1361         dialog = BlockPropertiesDialog(self.ParentWindow)
  1289         dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName))
  1362         dialog.SetBlockList(self.Controler.GetBlockTypes(self.TagName))
  1290         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1363         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1291         dialog.SetPouElementNames(self.Controler.GetEditedElementVariables(self.TagName))
  1364         dialog.SetPouElementNames(self.Controler.GetEditedElementVariables(self.TagName))
  1296             if "name" in values:
  1369             if "name" in values:
  1297                 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"])
  1370                 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"])
  1298             else:
  1371             else:
  1299                 block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"])
  1372                 block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"])
  1300             block.SetPosition(bbox.x, bbox.y)
  1373             block.SetPosition(bbox.x, bbox.y)
  1301             block.SetSize(values["width"], values["height"])
  1374             block.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1302             self.AddBlock(block)
  1375             self.AddBlock(block)
  1303             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1376             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1304             self.RefreshBlockModel(block)
  1377             self.RefreshBlockModel(block)
  1305             self.RefreshBuffer()
  1378             self.RefreshBuffer()
  1306             self.RefreshScrollBars()
  1379             self.RefreshScrollBars()
  1324         if dialog.ShowModal() == wx.ID_OK:
  1397         if dialog.ShowModal() == wx.ID_OK:
  1325             id = self.GetNewId()
  1398             id = self.GetNewId()
  1326             values = dialog.GetValues()
  1399             values = dialog.GetValues()
  1327             variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id)
  1400             variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id)
  1328             variable.SetPosition(bbox.x, bbox.y)
  1401             variable.SetPosition(bbox.x, bbox.y)
  1329             variable.SetSize(values["width"], values["height"])
  1402             variable.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1330             self.AddBlock(variable)
  1403             self.AddBlock(variable)
  1331             self.Controler.AddEditedElementVariable(self.TagName, id, values["type"])
  1404             self.Controler.AddEditedElementVariable(self.TagName, id, values["type"])
  1332             self.RefreshVariableModel(variable)
  1405             self.RefreshVariableModel(variable)
  1333             self.RefreshBuffer()
  1406             self.RefreshBuffer()
  1334             self.RefreshScrollBars()
  1407             self.RefreshScrollBars()
  1341         if dialog.ShowModal() == wx.ID_OK:
  1414         if dialog.ShowModal() == wx.ID_OK:
  1342             id = self.GetNewId()
  1415             id = self.GetNewId()
  1343             values = dialog.GetValues()
  1416             values = dialog.GetValues()
  1344             connection = FBD_Connector(self, values["type"], values["name"], id)
  1417             connection = FBD_Connector(self, values["type"], values["name"], id)
  1345             connection.SetPosition(bbox.x, bbox.y)
  1418             connection.SetPosition(bbox.x, bbox.y)
  1346             connection.SetSize(values["width"], values["height"])
  1419             connection.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1347             self.AddBlock(connection)
  1420             self.AddBlock(connection)
  1348             self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1421             self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1349             self.RefreshConnectionModel(connection)
  1422             self.RefreshConnectionModel(connection)
  1350             self.RefreshBuffer()
  1423             self.RefreshBuffer()
  1351             self.RefreshScrollBars()
  1424             self.RefreshScrollBars()
  1361             value = dialog.GetValue()
  1434             value = dialog.GetValue()
  1362             id = self.GetNewId()
  1435             id = self.GetNewId()
  1363             comment = Comment(self, value, id)
  1436             comment = Comment(self, value, id)
  1364             comment.SetPosition(bbox.x, bbox.y)
  1437             comment.SetPosition(bbox.x, bbox.y)
  1365             min_width, min_height = comment.GetMinSize()
  1438             min_width, min_height = comment.GetMinSize()
  1366             comment.SetSize(max(min_width,bbox.width),max(min_height,bbox.height))
  1439             comment.SetSize(*self.GetScaledSize(max(min_width,bbox.width),max(min_height,bbox.height)))
  1367             self.AddComment(comment)
  1440             self.AddComment(comment)
  1368             self.Controler.AddEditedElementComment(self.TagName, id)
  1441             self.Controler.AddEditedElementComment(self.TagName, id)
  1369             self.RefreshCommentModel(comment)
  1442             self.RefreshCommentModel(comment)
  1370             self.RefreshBuffer()
  1443             self.RefreshBuffer()
  1371             self.RefreshScrollBars()
  1444             self.RefreshScrollBars()
  1386         if dialog.ShowModal() == wx.ID_OK:
  1459         if dialog.ShowModal() == wx.ID_OK:
  1387             id = self.GetNewId()
  1460             id = self.GetNewId()
  1388             values = dialog.GetValues()
  1461             values = dialog.GetValues()
  1389             contact = LD_Contact(self, values["type"], values["name"], id)
  1462             contact = LD_Contact(self, values["type"], values["name"], id)
  1390             contact.SetPosition(bbox.x, bbox.y)
  1463             contact.SetPosition(bbox.x, bbox.y)
  1391             contact.SetSize(values["width"], values["height"])
  1464             contact.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1392             self.AddBlock(contact)
  1465             self.AddBlock(contact)
  1393             self.Controler.AddEditedElementContact(self.TagName, id)
  1466             self.Controler.AddEditedElementContact(self.TagName, id)
  1394             self.RefreshContactModel(contact)
  1467             self.RefreshContactModel(contact)
  1395             self.RefreshBuffer()
  1468             self.RefreshBuffer()
  1396             self.RefreshScrollBars()
  1469             self.RefreshScrollBars()
  1414         if dialog.ShowModal() == wx.ID_OK:
  1487         if dialog.ShowModal() == wx.ID_OK:
  1415             id = self.GetNewId()
  1488             id = self.GetNewId()
  1416             values = dialog.GetValues()
  1489             values = dialog.GetValues()
  1417             coil = LD_Coil(self, values["type"], values["name"], id)
  1490             coil = LD_Coil(self, values["type"], values["name"], id)
  1418             coil.SetPosition(bbox.x, bbox.y)
  1491             coil.SetPosition(bbox.x, bbox.y)
  1419             coil.SetSize(values["width"], values["height"])
  1492             coil.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1420             self.AddBlock(coil)
  1493             self.AddBlock(coil)
  1421             self.Controler.AddEditedElementCoil(self.TagName, id)
  1494             self.Controler.AddEditedElementCoil(self.TagName, id)
  1422             self.RefreshCoilModel(coil)
  1495             self.RefreshCoilModel(coil)
  1423             self.RefreshBuffer()
  1496             self.RefreshBuffer()
  1424             self.RefreshScrollBars()
  1497             self.RefreshScrollBars()
  1431         if dialog.ShowModal() == wx.ID_OK:
  1504         if dialog.ShowModal() == wx.ID_OK:
  1432             id = self.GetNewId()
  1505             id = self.GetNewId()
  1433             values = dialog.GetValues()
  1506             values = dialog.GetValues()
  1434             powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])])
  1507             powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])])
  1435             powerrail.SetPosition(bbox.x, bbox.y)
  1508             powerrail.SetPosition(bbox.x, bbox.y)
  1436             powerrail.SetSize(values["width"], values["height"])
  1509             powerrail.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1437             self.AddBlock(powerrail)
  1510             self.AddBlock(powerrail)
  1438             self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1511             self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1439             self.RefreshPowerRailModel(powerrail)
  1512             self.RefreshPowerRailModel(powerrail)
  1440             self.RefreshBuffer()
  1513             self.RefreshBuffer()
  1441             self.RefreshScrollBars()
  1514             self.RefreshScrollBars()
  1464                 step.AddAction()    
  1537                 step.AddAction()    
  1465             else:
  1538             else:
  1466                 step.RemoveAction()
  1539                 step.RemoveAction()
  1467             step.SetPosition(bbox.x, bbox.y)
  1540             step.SetPosition(bbox.x, bbox.y)
  1468             min_width, min_height = step.GetMinSize()
  1541             min_width, min_height = step.GetMinSize()
  1469             step.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1542             step.SetSize(*self.GetScaledSize(max(bbox.width, min_width), max(bbox.height, min_height)))
  1470             self.AddBlock(step)
  1543             self.AddBlock(step)
  1471             self.Controler.AddEditedElementStep(self.TagName, id)
  1544             self.Controler.AddEditedElementStep(self.TagName, id)
  1472             self.RefreshStepModel(step)
  1545             self.RefreshStepModel(step)
  1473             self.RefreshBuffer()
  1546             self.RefreshBuffer()
  1474             self.RefreshScrollBars()
  1547             self.RefreshScrollBars()
  1482             id = self.GetNewId()
  1555             id = self.GetNewId()
  1483             values = dialog.GetValues()
  1556             values = dialog.GetValues()
  1484             transition = SFC_Transition(self, values["type"], values["value"], values["priority"], id)
  1557             transition = SFC_Transition(self, values["type"], values["value"], values["priority"], id)
  1485             transition.SetPosition(bbox.x, bbox.y)
  1558             transition.SetPosition(bbox.x, bbox.y)
  1486             min_width, min_height = transition.GetMinSize()
  1559             min_width, min_height = transition.GetMinSize()
  1487             transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1560             transition.SetSize(*self.GetScaledSize(max(bbox.width, min_width), max(bbox.height, min_height)))
  1488             self.AddBlock(transition)
  1561             self.AddBlock(transition)
  1489             self.Controler.AddEditedElementTransition(self.TagName, id)
  1562             self.Controler.AddEditedElementTransition(self.TagName, id)
  1490             self.RefreshTransitionModel(transition)
  1563             self.RefreshTransitionModel(transition)
  1491             self.RefreshBuffer()
  1564             self.RefreshBuffer()
  1492             self.RefreshScrollBars()
  1565             self.RefreshScrollBars()
  1500             id = self.GetNewId()
  1573             id = self.GetNewId()
  1501             values = dialog.GetValues()
  1574             values = dialog.GetValues()
  1502             divergence = SFC_Divergence(self, values["type"], values["number"], id)
  1575             divergence = SFC_Divergence(self, values["type"], values["number"], id)
  1503             divergence.SetPosition(bbox.x, bbox.y)
  1576             divergence.SetPosition(bbox.x, bbox.y)
  1504             min_width, min_height = divergence.GetMinSize(True)
  1577             min_width, min_height = divergence.GetMinSize(True)
  1505             divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1578             divergence.SetSize(*self.GetScaledSize(max(bbox.width, min_width), max(bbox.height, min_height)))
  1506             self.AddBlock(divergence)
  1579             self.AddBlock(divergence)
  1507             self.Controler.AddEditedElementDivergence(self.TagName, id, values["type"])
  1580             self.Controler.AddEditedElementDivergence(self.TagName, id, values["type"])
  1508             self.RefreshDivergenceModel(divergence)
  1581             self.RefreshDivergenceModel(divergence)
  1509             self.RefreshBuffer()
  1582             self.RefreshBuffer()
  1510             self.RefreshScrollBars()
  1583             self.RefreshScrollBars()
  1521             id = self.GetNewId()
  1594             id = self.GetNewId()
  1522             value = dialog.GetStringSelection()
  1595             value = dialog.GetStringSelection()
  1523             jump = SFC_Jump(self, value, id)
  1596             jump = SFC_Jump(self, value, id)
  1524             jump.SetPosition(bbox.x, bbox.y)
  1597             jump.SetPosition(bbox.x, bbox.y)
  1525             min_width, min_height = jump.GetMinSize()
  1598             min_width, min_height = jump.GetMinSize()
  1526             jump.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1599             jump.SetSize(*self.GetScaledSize(max(bbox.width, min_width), max(bbox.height, min_height)))
  1527             self.AddBlock(jump)
  1600             self.AddBlock(jump)
  1528             self.Controler.AddEditedElementJump(self.TagName, id)
  1601             self.Controler.AddEditedElementJump(self.TagName, id)
  1529             self.RefreshJumpModel(jump)
  1602             self.RefreshJumpModel(jump)
  1530             self.RefreshBuffer()
  1603             self.RefreshBuffer()
  1531             self.RefreshScrollBars()
  1604             self.RefreshScrollBars()
  1541             actions = dialog.GetValues()
  1614             actions = dialog.GetValues()
  1542             id = self.GetNewId()
  1615             id = self.GetNewId()
  1543             actionblock = SFC_ActionBlock(self, actions, id)
  1616             actionblock = SFC_ActionBlock(self, actions, id)
  1544             actionblock.SetPosition(bbox.x, bbox.y)
  1617             actionblock.SetPosition(bbox.x, bbox.y)
  1545             min_width, min_height = actionblock.GetMinSize()
  1618             min_width, min_height = actionblock.GetMinSize()
  1546             actionblock.SetSize(max(bbox.width, min_width), max(bbox.height, min_height))
  1619             actionblock.SetSize(*self.GetScaledSize(max(bbox.width, min_width), max(bbox.height, min_height)))
  1547             self.AddBlock(actionblock)
  1620             self.AddBlock(actionblock)
  1548             self.Controler.AddEditedElementActionBlock(self.TagName, id)
  1621             self.Controler.AddEditedElementActionBlock(self.TagName, id)
  1549             self.RefreshActionBlockModel(actionblock)
  1622             self.RefreshActionBlockModel(actionblock)
  1550             self.RefreshBuffer()
  1623             self.RefreshBuffer()
  1551             self.RefreshScrollBars()
  1624             self.RefreshScrollBars()
  1570         dialog.SetValues(old_values)
  1643         dialog.SetValues(old_values)
  1571         if dialog.ShowModal() == wx.ID_OK:
  1644         if dialog.ShowModal() == wx.ID_OK:
  1572             new_values = dialog.GetValues()
  1645             new_values = dialog.GetValues()
  1573             if "name" in new_values:
  1646             if "name" in new_values:
  1574                 block.SetName(new_values["name"])
  1647                 block.SetName(new_values["name"])
  1575             block.SetSize(new_values["width"], new_values["height"])
  1648             block.SetSize(*self.GetScaledSize(new_values["width"], new_values["height"]))
  1576             block.SetType(new_values["type"], new_values["extension"])
  1649             block.SetType(new_values["type"], new_values["extension"])
  1577             block.SetExecutionOrder(new_values["executionOrder"])
  1650             block.SetExecutionOrder(new_values["executionOrder"])
  1578             self.RefreshBlockModel(block)
  1651             self.RefreshBlockModel(block)
  1579             if old_values["executionOrder"] != new_values["executionOrder"]:
  1652             if old_values["executionOrder"] != new_values["executionOrder"]:
  1580                 self.RefreshView()
  1653                 self.RefreshView()
  1602         dialog.SetValues(old_values)
  1675         dialog.SetValues(old_values)
  1603         if dialog.ShowModal() == wx.ID_OK:
  1676         if dialog.ShowModal() == wx.ID_OK:
  1604             new_values = dialog.GetValues()
  1677             new_values = dialog.GetValues()
  1605             variable.SetName(new_values["name"])
  1678             variable.SetName(new_values["name"])
  1606             variable.SetType(new_values["type"], new_values["value_type"])
  1679             variable.SetType(new_values["type"], new_values["value_type"])
  1607             variable.SetSize(new_values["width"], new_values["height"])
  1680             variable.SetSize(*self.GetScaledSize(new_values["width"], new_values["height"]))
  1608             variable.SetExecutionOrder(new_values["executionOrder"])
  1681             variable.SetExecutionOrder(new_values["executionOrder"])
  1609             if old_values["type"] != new_values["type"]:
  1682             if old_values["type"] != new_values["type"]:
  1610                 id = variable.GetId()
  1683                 id = variable.GetId()
  1611                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1684                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1612                 self.Controler.AddEditedElementVariable(self.TagName, id, new_values["type"])
  1685                 self.Controler.AddEditedElementVariable(self.TagName, id, new_values["type"])
  1626         if dialog.ShowModal() == wx.ID_OK:
  1699         if dialog.ShowModal() == wx.ID_OK:
  1627             old_type = connection.GetType()
  1700             old_type = connection.GetType()
  1628             values = dialog.GetValues()
  1701             values = dialog.GetValues()
  1629             connection.SetName(values["name"])
  1702             connection.SetName(values["name"])
  1630             connection.SetType(values["type"])
  1703             connection.SetType(values["type"])
  1631             connection.SetSize(values["width"], values["height"])
  1704             connection.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1632             if old_type != values["type"]:
  1705             if old_type != values["type"]:
  1633                 id = connection.GetId()
  1706                 id = connection.GetId()
  1634                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1707                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1635                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1708                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1636             self.RefreshConnectionModel(connection)
  1709             self.RefreshConnectionModel(connection)
  1653         dialog.SetElementSize(contact.GetSize())
  1726         dialog.SetElementSize(contact.GetSize())
  1654         if dialog.ShowModal() == wx.ID_OK:
  1727         if dialog.ShowModal() == wx.ID_OK:
  1655             values = dialog.GetValues()
  1728             values = dialog.GetValues()
  1656             contact.SetName(values["name"])
  1729             contact.SetName(values["name"])
  1657             contact.SetType(values["type"])
  1730             contact.SetType(values["type"])
  1658             contact.SetSize(values["width"], values["height"])
  1731             contact.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1659             self.RefreshContactModel(contact)
  1732             self.RefreshContactModel(contact)
  1660             self.RefreshBuffer()
  1733             self.RefreshBuffer()
  1661             self.RefreshScrollBars()
  1734             self.RefreshScrollBars()
  1662             contact.Refresh()
  1735             contact.Refresh()
  1663         dialog.Destroy()
  1736         dialog.Destroy()
  1679         dialog.SetElementSize(coil.GetSize())
  1752         dialog.SetElementSize(coil.GetSize())
  1680         if dialog.ShowModal() == wx.ID_OK:
  1753         if dialog.ShowModal() == wx.ID_OK:
  1681             values = dialog.GetValues()
  1754             values = dialog.GetValues()
  1682             coil.SetName(values["name"])
  1755             coil.SetName(values["name"])
  1683             coil.SetType(values["type"])
  1756             coil.SetType(values["type"])
  1684             coil.SetSize(values["width"], values["height"])
  1757             coil.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1685             self.RefreshCoilModel(coil)
  1758             self.RefreshCoilModel(coil)
  1686             self.RefreshBuffer()
  1759             self.RefreshBuffer()
  1687             self.RefreshScrollBars()
  1760             self.RefreshScrollBars()
  1688             coil.Refresh()
  1761             coil.Refresh()
  1689         dialog.Destroy()
  1762         dialog.Destroy()
  1693         dialog.SetMinSize(powerrail.GetSize())
  1766         dialog.SetMinSize(powerrail.GetSize())
  1694         if dialog.ShowModal() == wx.ID_OK:
  1767         if dialog.ShowModal() == wx.ID_OK:
  1695             old_type = powerrail.GetType()
  1768             old_type = powerrail.GetType()
  1696             values = dialog.GetValues()
  1769             values = dialog.GetValues()
  1697             powerrail.SetType(values["type"], [True for i in xrange(values["number"])])
  1770             powerrail.SetType(values["type"], [True for i in xrange(values["number"])])
  1698             powerrail.SetSize(values["width"], values["height"])
  1771             powerrail.SetSize(*self.GetScaledSize(values["width"], values["height"]))
  1699             if old_type != values["type"]:
  1772             if old_type != values["type"]:
  1700                 id = powerrail.GetId()
  1773                 id = powerrail.GetId()
  1701                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1774                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1702                 self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1775                 self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1703             self.RefreshPowerRailModel(powerrail)
  1776             self.RefreshPowerRailModel(powerrail)
  1731                 step.RemoveOutput()
  1804                 step.RemoveOutput()
  1732             if values["action"]:
  1805             if values["action"]:
  1733                 step.AddAction()    
  1806                 step.AddAction()    
  1734             else:
  1807             else:
  1735                 step.RemoveAction()
  1808                 step.RemoveAction()
  1736             step.UpdateSize(values["width"], values["height"])
  1809             step.UpdateSize(*self.GetScaledSize(values["width"], values["height"]))
  1737             step.RefreshModel()
  1810             step.RefreshModel()
  1738             self.RefreshBuffer()
  1811             self.RefreshBuffer()
  1739             self.RefreshScrollBars()
  1812             self.RefreshScrollBars()
  1740             step.Refresh()
  1813             step.Refresh()
  1741         
  1814         
  1777         dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName))
  1850         dialog.SetVariableList(self.Controler.GetEditedElementInterfaceVars(self.TagName))
  1778         dialog.SetValues(actionblock.GetActions())
  1851         dialog.SetValues(actionblock.GetActions())
  1779         if dialog.ShowModal() == wx.ID_OK:
  1852         if dialog.ShowModal() == wx.ID_OK:
  1780             actions = dialog.GetValues()
  1853             actions = dialog.GetValues()
  1781             actionblock.SetActions(actions)
  1854             actionblock.SetActions(actions)
       
  1855             actionblock.SetSize(*self.GetScaledSize(*actionblock.GetSize()))
  1782             actionblock.RefreshModel()
  1856             actionblock.RefreshModel()
  1783             self.RefreshBuffer()
  1857             self.RefreshBuffer()
  1784             self.RefreshScrollBars()
  1858             self.RefreshScrollBars()
  1785             actionblock.Refresh()
  1859             actionblock.Refresh()
  1786         dialog.Destroy()
  1860         dialog.Destroy()
  1791         else:
  1865         else:
  1792             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL)
  1866             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL)
  1793         if dialog.ShowModal() == wx.ID_OK:
  1867         if dialog.ShowModal() == wx.ID_OK:
  1794             value = dialog.GetValue()
  1868             value = dialog.GetValue()
  1795             comment.SetContent(value)
  1869             comment.SetContent(value)
       
  1870             comment.SetSize(*self.GetScaledSize(*comment.GetSize()))
  1796             comment.RefreshModel()
  1871             comment.RefreshModel()
  1797             self.RefreshBuffer()
  1872             self.RefreshBuffer()
  1798             self.RefreshScrollBars()
  1873             self.RefreshScrollBars()
  1799             comment.Refresh()
  1874             comment.Refresh()
  1800         dialog.Destroy()
  1875         dialog.Destroy()
  1806     def RefreshBlockModel(self, block):
  1881     def RefreshBlockModel(self, block):
  1807         blockid = block.GetId()
  1882         blockid = block.GetId()
  1808         infos = {}
  1883         infos = {}
  1809         infos["type"] = block.GetType()
  1884         infos["type"] = block.GetType()
  1810         infos["name"] = block.GetName()
  1885         infos["name"] = block.GetName()
  1811         infos["executionOrder"] = block.GetExecutionOrder()
  1886         if self.CurrentLanguage == "FBD":
       
  1887             infos["executionOrder"] = block.GetExecutionOrder()
  1812         infos["x"], infos["y"] = block.GetPosition()
  1888         infos["x"], infos["y"] = block.GetPosition()
  1813         infos["width"], infos["height"] = block.GetSize()
  1889         infos["width"], infos["height"] = block.GetSize()
  1814         infos["connectors"] = block.GetConnectors()
  1890         infos["connectors"] = block.GetConnectors()
  1815         self.Controler.SetEditedElementBlockInfos(self.TagName, blockid, infos)
  1891         self.Controler.SetEditedElementBlockInfos(self.TagName, blockid, infos)
  1816     
  1892     
  1817     def RefreshVariableModel(self, variable):
  1893     def RefreshVariableModel(self, variable):
  1818         variableid = variable.GetId()
  1894         variableid = variable.GetId()
  1819         infos = {}
  1895         infos = {}
  1820         infos["name"] = variable.GetName()
  1896         infos["name"] = variable.GetName()
  1821         infos["executionOrder"] = variable.GetExecutionOrder()
  1897         if self.CurrentLanguage == "FBD":
       
  1898             infos["executionOrder"] = variable.GetExecutionOrder()
  1822         infos["x"], infos["y"] = variable.GetPosition()
  1899         infos["x"], infos["y"] = variable.GetPosition()
  1823         infos["width"], infos["height"] = variable.GetSize()
  1900         infos["width"], infos["height"] = variable.GetSize()
  1824         infos["connectors"] = variable.GetConnectors()
  1901         infos["connectors"] = variable.GetConnectors()
  1825         self.Controler.SetEditedElementVariableInfos(self.TagName, variableid, infos)
  1902         self.Controler.SetEditedElementVariableInfos(self.TagName, variableid, infos)
  1826 
  1903 
  1827     def RefreshConnectionModel(self, connection):
  1904     def RefreshConnectionModel(self, connection):
  1828         connectionid = connection.GetId()
  1905         connectionid = connection.GetId()
  1829         infos = {}
  1906         infos = {}
  1830         infos["name"] = connection.GetName()
  1907         infos["name"] = connection.GetName()
  1831         infos["executionOrder"] = connection.GetExecutionOrder()
       
  1832         infos["x"], infos["y"] = connection.GetPosition()
  1908         infos["x"], infos["y"] = connection.GetPosition()
  1833         infos["width"], infos["height"] = connection.GetSize()
  1909         infos["width"], infos["height"] = connection.GetSize()
  1834         infos["connector"] = connection.GetConnector()
  1910         infos["connector"] = connection.GetConnector()
  1835         self.Controler.SetEditedElementConnectionInfos(self.TagName, connectionid, infos)
  1911         self.Controler.SetEditedElementConnectionInfos(self.TagName, connectionid, infos)
  1836 
  1912 
  2161         self.RefreshScrollBars()
  2237         self.RefreshScrollBars()
  2162         event.Skip()
  2238         event.Skip()
  2163 
  2239 
  2164     def OnPaint(self, event):
  2240     def OnPaint(self, event):
  2165         dc = self.GetLogicalDC(True)
  2241         dc = self.GetLogicalDC(True)
       
  2242         dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
  2166         dc.Clear()
  2243         dc.Clear()
  2167         dc.SetPen(wx.Pen(wx.Colour(230, 230, 230)))
       
  2168         dc.BeginDrawing()
  2244         dc.BeginDrawing()
  2169         if self.Scaling and self.DrawGrid:
  2245         if self.Scaling and self.DrawGrid:
  2170             width, height = dc.GetSize()
  2246             dc.SetPen(wx.TRANSPARENT_PEN)
  2171             for i in xrange(1, width / self.Scaling[0] + 1):
  2247             dc.SetBrush(self.GridBrush)
  2172                 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height)
  2248             width, height = self.GetVirtualSize()
  2173             for i in xrange(1, height / self.Scaling[1] + 1):
  2249             dc.DrawRectangle(0, 0, width, height)
  2174                 dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1])
       
  2175         
  2250         
  2176         # Draw all elements
  2251         # Draw all elements
  2177         for comment in self.Comments:
  2252         for comment in self.Comments:
  2178             if comment != self.SelectedElement:
  2253             if comment != self.SelectedElement:
  2179                 comment.Draw(dc)
  2254                 comment.Draw(dc)