Viewer.py
changeset 144 b67a5de5a24a
parent 140 06d28f03f6f4
child 145 4fb225afddf4
equal deleted inserted replaced
143:015a34da60eb 144:b67a5de5a24a
   102                 self.ParentWindow.AddBlock(block)
   102                 self.ParentWindow.AddBlock(block)
   103                 self.ParentWindow.Controler.AddEditedElementBlock(self.ParentWindow.GetTagName(), id, values[0], blockname)
   103                 self.ParentWindow.Controler.AddEditedElementBlock(self.ParentWindow.GetTagName(), id, values[0], blockname)
   104                 self.ParentWindow.RefreshBlockModel(block)
   104                 self.ParentWindow.RefreshBlockModel(block)
   105                 self.ParentWindow.RefreshBuffer()
   105                 self.ParentWindow.RefreshBuffer()
   106                 self.ParentWindow.RefreshScrollBars()
   106                 self.ParentWindow.RefreshScrollBars()
   107                 self.ParentWindow.ParentWindow.RefreshEditor()
   107                 self.ParentWindow.ParentWindow.RefreshVariablePanel(self.TagName)
   108                 self.ParentWindow.Refresh()
   108                 self.ParentWindow.Refresh()
   109         elif values[1] != "location":
   109         elif values[1] != "location":
   110             if values[3] == self.ParentWindow.GetTagName():
   110             if values[3] == self.ParentWindow.GetTagName():
   111                 id = self.ParentWindow.GetNewId()
   111                 id = self.ParentWindow.GetNewId()
   112                 if values[1] == "Output":
   112                 if values[1] == "Output":
   295         self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
   295         self.Bind(wx.EVT_LEFT_DCLICK, self.OnViewerLeftDClick)
   296         self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
   296         self.Bind(wx.EVT_RIGHT_UP, self.OnViewerRightUp)
   297         self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
   297         self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveViewer)
   298         self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
   298         self.Bind(wx.EVT_MOTION, self.OnViewerMotion)
   299         self.Bind(wx.EVT_CHAR, self.OnChar)
   299         self.Bind(wx.EVT_CHAR, self.OnChar)
   300         if wx.VERSION < (2, 7, 0):
   300         self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
   301             self.Bind(wx.EVT_SCROLLWIN, self.OnMoveWindow)
   301         self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   302             self.Bind(wx.EVT_SIZE, self.OnMoveWindow)
   302     
       
   303     def GetScrolledRect(self, rect):
       
   304         rect.x, rect.y = self.CalcScrolledPosition(rect.x, rect.y)
       
   305         return rect
   303     
   306     
   304     def SetTagName(self, tagname):
   307     def SetTagName(self, tagname):
   305         self.TagName = tagname
   308         self.TagName = tagname
   306         
   309         
   307     def GetTagName(self):
   310     def GetTagName(self):
   407             self.SavedMode = True
   410             self.SavedMode = True
   408         # Reset selection
   411         # Reset selection
   409         if self.Mode != MODE_SELECTION and self.SelectedElement:
   412         if self.Mode != MODE_SELECTION and self.SelectedElement:
   410             self.SelectedElement.SetSelected(False)
   413             self.SelectedElement.SetSelected(False)
   411             self.SelectedElement = None
   414             self.SelectedElement = None
   412             self.Refresh(False)
       
   413     
   415     
   414     # Return current drawing mode
   416     # Return current drawing mode
   415     def GetDrawingMode(self):
   417     def GetDrawingMode(self):
   416         return self.ParentWindow.GetDrawingMode()
   418         return self.ParentWindow.GetDrawingMode()
   417     
   419     
   448             if not wire.IsConnectedCompatible():
   450             if not wire.IsConnectedCompatible():
   449                 to_delete.append(wire)
   451                 to_delete.append(wire)
   450         for wire in to_delete:
   452         for wire in to_delete:
   451             wire.Delete()
   453             wire.Delete()
   452     
   454     
   453         self.Refresh(False)
   455         self.Refresh()
   454     
   456     
   455     def RefreshScrollBars(self):
   457     def RefreshScrollBars(self):
   456         xstart, ystart = self.GetViewStart()
   458         xstart, ystart = self.GetViewStart()
   457         window_size = self.GetClientSize()
   459         window_size = self.GetClientSize()
   458         maxx = maxy = 0
   460         maxx = maxy = 0
   459         for element in self.GetElements():
   461         for element in self.GetElements():
   460             posx, posy = element.GetPosition()
   462             bbox = element.GetBoundingBox()
   461             width, height = element.GetSize()
   463             maxx = max(maxx, bbox.x + bbox.width)
   462             maxx = max(maxx, posx + width)
   464             maxy = max(maxy, bbox.y + bbox.height)
   463             maxy = max(maxy, posy + height)
       
   464         maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0])
   465         maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0])
   465         maxy = max(maxy + WINDOW_BORDER, ystart * SCROLLBAR_UNIT + window_size[1])
   466         maxy = max(maxy + WINDOW_BORDER, ystart * SCROLLBAR_UNIT + window_size[1])
   466         if self.rubberBand.IsShown():
   467         if self.rubberBand.IsShown():
   467             extent = self.rubberBand.GetCurrentExtent()
   468             extent = self.rubberBand.GetCurrentExtent()
   468             maxx = max(maxx, extent.x + extent.width)
   469             maxx = max(maxx, extent.x + extent.width)
  1015                         self.SelectedElement.RefreshModel()
  1016                         self.SelectedElement.RefreshModel()
  1016                         self.SelectedElement.SetSelected(True)
  1017                         self.SelectedElement.SetSelected(True)
  1017                         element = self.SelectedElement
  1018                         element = self.SelectedElement
  1018                         self.RefreshBuffer()
  1019                         self.RefreshBuffer()
  1019                     else:
  1020                     else:
       
  1021                         rect = self.SelectedElement.GetRedrawRect()
  1020                         self.SelectedElement.Delete()
  1022                         self.SelectedElement.Delete()
  1021                         element = None
  1023                         element = None
  1022                     self.Refresh(False)
  1024                         self.RefreshRect(self.GetScrolledRect(rect))
  1023                 elif connector:
  1025                 elif connector:
  1024                     self.DrawingWire = True
  1026                     self.DrawingWire = True
  1025                     pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
  1027                     pos = GetScaledEventPosition(event, self.GetLogicalDC(), self.Scaling)
  1026                     if (connector.GetDirection() == EAST):
  1028                     if (connector.GetDirection() == EAST):
  1027                         wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST])
  1029                         wire = Wire(self, [wx.Point(pos.x, pos.y), EAST], [wx.Point(pos.x, pos.y), WEST])
  1033                     wire.Handle = (HANDLE_POINT, 1)
  1035                     wire.Handle = (HANDLE_POINT, 1)
  1034                     self.AddWire(wire)
  1036                     self.AddWire(wire)
  1035                     if self.SelectedElement:
  1037                     if self.SelectedElement:
  1036                         self.SelectedElement.SetSelected(False)
  1038                         self.SelectedElement.SetSelected(False)
  1037                     self.SelectedElement = wire
  1039                     self.SelectedElement = wire
       
  1040                     self.SelectedElement.Refresh()
  1038                 else:
  1041                 else:
  1039                     if self.SelectedElement and self.SelectedElement != element:
  1042                     if self.SelectedElement and self.SelectedElement != element:
  1040                         self.SelectedElement.SetSelected(False)
  1043                         self.SelectedElement.SetSelected(False)
  1041                         self.SelectedElement = None
  1044                         self.SelectedElement = None
  1042                         self.Refresh(False)
       
  1043                     if element:
  1045                     if element:
  1044                         self.SelectedElement = element
  1046                         self.SelectedElement = element
  1045                         self.SelectedElement.OnLeftDown(event, dc, self.Scaling)
  1047                         self.SelectedElement.OnLeftDown(event, dc, self.Scaling)
  1046                         self.Refresh(False)
  1048                         self.SelectedElement.Refresh()
  1047                     else:
  1049                     else:
  1048                         self.rubberBand.Reset()
  1050                         self.rubberBand.Reset()
  1049                         self.rubberBand.OnLeftDown(event, dc, self.Scaling)
  1051                         self.rubberBand.OnLeftDown(event, dc, self.Scaling)
  1050         elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, 
  1052         elif self.Mode in [MODE_BLOCK, MODE_VARIABLE, MODE_CONNECTION, MODE_COMMENT, 
  1051                            MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, 
  1053                            MODE_CONTACT, MODE_COIL, MODE_POWERRAIL, MODE_INITIALSTEP, 
  1060                 elements = self.SearchElements(self.rubberBand.GetCurrentExtent())
  1062                 elements = self.SearchElements(self.rubberBand.GetCurrentExtent())
  1061                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
  1063                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)
  1062                 if len(elements) == 1:
  1064                 if len(elements) == 1:
  1063                     self.SelectedElement = elements[0]
  1065                     self.SelectedElement = elements[0]
  1064                     self.SelectedElement.SetSelected(True)
  1066                     self.SelectedElement.SetSelected(True)
  1065                     self.Refresh(False)
       
  1066                 elif len(elements) > 1:
  1067                 elif len(elements) > 1:
  1067                     self.SelectedElement = Graphic_Group(self)
  1068                     self.SelectedElement = Graphic_Group(self)
  1068                     self.SelectedElement.SetElements(elements)
  1069                     self.SelectedElement.SetElements(elements)
  1069                     self.SelectedElement.SetSelected(True)
  1070                     self.SelectedElement.SetSelected(True)
  1070                     self.Refresh(False)
       
  1071             else:
  1071             else:
  1072                 bbox = self.rubberBand.GetCurrentExtent()
  1072                 bbox = self.rubberBand.GetCurrentExtent()
  1073                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)                
  1073                 self.rubberBand.OnLeftUp(event, self.GetLogicalDC(), self.Scaling)                
  1074                 if self.Mode == MODE_BLOCK:
  1074                 if self.Mode == MODE_BLOCK:
  1075                     wx.CallAfter(self.AddNewBlock, bbox)
  1075                     wx.CallAfter(self.AddNewBlock, bbox)
  1108                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1108                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1109                     self.SelectedElement.GeneratePoints()
  1109                     self.SelectedElement.GeneratePoints()
  1110                     self.SelectedElement.RefreshModel()
  1110                     self.SelectedElement.RefreshModel()
  1111                     self.SelectedElement.SetSelected(True)
  1111                     self.SelectedElement.SetSelected(True)
  1112                     self.RefreshBuffer()
  1112                     self.RefreshBuffer()
  1113                 elif connector is None:
  1113                 elif connector is None or self.SelectedElement.GetDragging():
  1114                     self.DrawingWire = False
  1114                     self.DrawingWire = False
       
  1115                     rect = self.SelectedElement.GetRedrawRect()
  1115                     self.SelectedElement.Delete()
  1116                     self.SelectedElement.Delete()
  1116                     self.SelectedElement = None
  1117                     self.SelectedElement = None
  1117                 self.Refresh(False)
  1118                     self.RefreshRect(self.GetScrolledRect(rect))
  1118             else:
  1119             else:
  1119                 self.SelectedElement.OnLeftUp(event, dc, self.Scaling)
  1120                 self.SelectedElement.OnLeftUp(event, dc, self.Scaling)
  1120                 wx.CallAfter(self.SetCursor, wx.NullCursor)
  1121                 wx.CallAfter(self.SetCursor, wx.NullCursor)
  1121                 self.Refresh(False)
  1122                 self.SelectedElement.Refresh()
  1122         if self.Mode != MODE_SELECTION and not self.SavedMode:
  1123         if self.Mode != MODE_SELECTION and not self.SavedMode:
  1123             wx.CallAfter(self.ParentWindow.ResetCurrentMode)
  1124             wx.CallAfter(self.ParentWindow.ResetCurrentMode)
  1124         event.Skip()
  1125         event.Skip()
  1125     
  1126     
  1126     def OnViewerRightUp(self, event):
  1127     def OnViewerRightUp(self, event):
  1132                 self.SelectedElement.SetSelected(False)
  1133                 self.SelectedElement.SetSelected(False)
  1133             self.SelectedElement = element
  1134             self.SelectedElement = element
  1134             self.SelectedElement.SetSelected(True)
  1135             self.SelectedElement.SetSelected(True)
  1135             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
  1136             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
  1136             wx.CallAfter(self.SetCursor, wx.NullCursor)
  1137             wx.CallAfter(self.SetCursor, wx.NullCursor)
  1137             self.Refresh(False)
       
  1138         else:
  1138         else:
  1139             self.PopupDefaultMenu(False)
  1139             self.PopupDefaultMenu(False)
  1140         event.Skip()
  1140         event.Skip()
  1141     
  1141     
  1142     def OnViewerLeftDClick(self, event):
  1142     def OnViewerLeftDClick(self, event):
  1143         if self.Mode == MODE_SELECTION and self.SelectedElement:
  1143         if self.Mode == MODE_SELECTION and self.SelectedElement:
  1144             if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames():
  1144             if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames():
  1145                 self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
  1145                 self.ParentWindow.EditProjectElement(ITEM_POU, self.SelectedElement.GetType())
  1146             else:
  1146             else:
  1147                 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1147                 self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1148                 self.Refresh(False)
       
  1149         event.Skip()
  1148         event.Skip()
  1150     
  1149     
  1151     def OnViewerMotion(self, event):
  1150     def OnViewerMotion(self, event):
  1152         refresh = False
  1151         refresh = False
  1153         dc = self.GetLogicalDC()
  1152         dc = self.GetLogicalDC()
  1154         pos = GetScaledEventPosition(event, dc, self.Scaling)
  1153         pos = GetScaledEventPosition(event, dc, self.Scaling)
  1155         if not event.Dragging():
  1154         if not event.Dragging():
  1156             highlighted = self.FindElement(pos) 
  1155             highlighted = self.FindElement(pos) 
  1157             if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
  1156             if self.HighlightedElement is not None and self.HighlightedElement != highlighted:
       
  1157                 rect = self.HighlightedElement.GetRedrawRect()
  1158                 self.HighlightedElement.SetHighlighted(False)
  1158                 self.HighlightedElement.SetHighlighted(False)
  1159                 self.HighlightedElement = None
  1159                 self.HighlightedElement = None
  1160                 refresh = True
  1160             if highlighted is not None and self.HighlightedElement != highlighted:
  1161             if highlighted is not None:
       
  1162                 highlighted.SetHighlighted(True)
  1161                 highlighted.SetHighlighted(True)
  1163                 refresh = True
       
  1164             self.HighlightedElement = highlighted
  1162             self.HighlightedElement = highlighted
  1165         if self.rubberBand.IsShown():
  1163         if self.rubberBand.IsShown():
  1166             self.rubberBand.OnMotion(event, dc, self.Scaling)
  1164             self.rubberBand.OnMotion(event, dc, self.Scaling)
  1167         elif self.Mode == MODE_SELECTION and self.SelectedElement:
  1165         elif self.Mode == MODE_SELECTION and self.SelectedElement:
  1168             if self.DrawingWire:
  1166             if self.DrawingWire:
  1169                 connector = self.FindBlockConnector(pos, False)
  1167                 connector = self.FindBlockConnector(pos, False)
  1170                 if not connector or self.SelectedElement.EndConnected == None:
  1168                 if not connector or self.SelectedElement.EndConnected == None:
  1171                     self.SelectedElement.ResetPoints()
  1169                     self.SelectedElement.ResetPoints()
  1172                     self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1170                     movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
  1173                     self.SelectedElement.GeneratePoints()
  1171                     self.SelectedElement.GeneratePoints()
  1174                     refresh = True
  1172                     if movex != 0 or movey != 0:
  1175             elif self.SelectedElement.OnMotion(event, dc, self.Scaling):
  1173                         self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)))
  1176                 refresh = True
  1174             else:
       
  1175                 movex, movey = self.SelectedElement.OnMotion(event, dc, self.Scaling)
       
  1176                 if movex != 0 or movey != 0:
       
  1177                     self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(movex, movey)))
  1177         self.UpdateScrollPos(event)
  1178         self.UpdateScrollPos(event)
  1178         if refresh:
       
  1179             self.Refresh(False)
       
  1180         event.Skip()
  1179         event.Skip()
  1181 
  1180 
  1182     def OnLeaveViewer(self, event):
  1181     def OnLeaveViewer(self, event):
  1183         if self.HighlightedElement is not None:
  1182         if self.SelectedElement and self.SelectedElement.GetDragging():
       
  1183             event.Skip()
       
  1184         elif self.HighlightedElement is not None:
  1184             self.HighlightedElement.SetHighlighted(False)
  1185             self.HighlightedElement.SetHighlighted(False)
  1185             self.HighlightedElement = None
  1186             self.HighlightedElement = None
  1186             self.Refresh(False)
       
  1187         event.Skip()
  1187         event.Skip()
  1188 
  1188 
  1189     def UpdateScrollPos(self, event):
  1189     def UpdateScrollPos(self, event):
  1190         if (event.Dragging() and self.SelectedElement) or self.rubberBand.IsShown():
  1190         if (event.Dragging() and self.SelectedElement) or self.rubberBand.IsShown():
  1191             position = event.GetPosition()
  1191             position = event.GetPosition()
  1216         if self.Scaling:
  1216         if self.Scaling:
  1217             scaling = self.Scaling
  1217             scaling = self.Scaling
  1218         else:
  1218         else:
  1219             scaling = (8, 8)
  1219             scaling = (8, 8)
  1220         if keycode == wx.WXK_DELETE and self.SelectedElement:
  1220         if keycode == wx.WXK_DELETE and self.SelectedElement:
  1221             self.SelectedElement.Clean()
  1221             rect = self.SelectedElement.GetRedrawRect(1, 1)
  1222             self.SelectedElement.Delete()
  1222             self.SelectedElement.Delete()
  1223             self.SelectedElement = None
  1223             self.SelectedElement = None
  1224             self.RefreshBuffer()
  1224             self.RefreshBuffer()
  1225             self.RefreshScrollBars()
  1225             self.RefreshScrollBars()
  1226             self.SetCursor(wx.NullCursor)
  1226             self.SetCursor(wx.NullCursor)
  1227             self.Refresh(False)
  1227             self.RefreshRect(self.GetScrolledRect(rect))
  1228         elif keycode == wx.WXK_RETURN and self.SelectedElement:
  1228         elif keycode == wx.WXK_RETURN and self.SelectedElement:
  1229             self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1229             self.SelectedElement.OnLeftDClick(event, self.GetLogicalDC(), self.Scaling)
  1230         elif keycode == wx.WXK_LEFT:
  1230         elif keycode == wx.WXK_LEFT:
  1231             if event.ControlDown() and event.ShiftDown():
  1231             if event.ControlDown() and event.ShiftDown():
  1232                 self.Scroll(0, ypos)
  1232                 self.Scroll(0, ypos)
  1235             elif self.SelectedElement:
  1235             elif self.SelectedElement:
  1236                 self.SelectedElement.Move(-scaling[0], 0)
  1236                 self.SelectedElement.Move(-scaling[0], 0)
  1237                 self.SelectedElement.RefreshModel()
  1237                 self.SelectedElement.RefreshModel()
  1238                 self.RefreshBuffer()
  1238                 self.RefreshBuffer()
  1239                 self.RefreshScrollBars()
  1239                 self.RefreshScrollBars()
  1240                 self.Refresh(False)
  1240                 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(-scaling[0], 0)))
  1241         elif keycode == wx.WXK_RIGHT:
  1241         elif keycode == wx.WXK_RIGHT:
  1242             if event.ControlDown() and event.ShiftDown():
  1242             if event.ControlDown() and event.ShiftDown():
  1243                 self.Scroll(xmax, ypos)
  1243                 self.Scroll(xmax, ypos)
  1244             elif event.ControlDown():
  1244             elif event.ControlDown():
  1245                 event.Skip()
  1245                 event.Skip()
  1246             elif self.SelectedElement:
  1246             elif self.SelectedElement:
  1247                 self.SelectedElement.Move(scaling[0], 0)
  1247                 self.SelectedElement.Move(scaling[0], 0)
  1248                 self.SelectedElement.RefreshModel()
  1248                 self.SelectedElement.RefreshModel()
  1249                 self.RefreshBuffer()
  1249                 self.RefreshBuffer()
  1250                 self.RefreshScrollBars()
  1250                 self.RefreshScrollBars()
  1251                 self.Refresh(False)
  1251                 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(scaling[0], 0)))
  1252         elif keycode == wx.WXK_UP:
  1252         elif keycode == wx.WXK_UP:
  1253             if event.ControlDown() and event.ShiftDown():
  1253             if event.ControlDown() and event.ShiftDown():
  1254                 self.Scroll(xpos, 0)
  1254                 self.Scroll(xpos, 0)
  1255             elif event.ControlDown():
  1255             elif event.ControlDown():
  1256                 event.Skip()
  1256                 event.Skip()
  1257             elif self.SelectedElement:
  1257             elif self.SelectedElement:
  1258                 self.SelectedElement.Move(0, -scaling[1])
  1258                 self.SelectedElement.Move(0, -scaling[1])
  1259                 self.SelectedElement.RefreshModel()
  1259                 self.SelectedElement.RefreshModel()
  1260                 self.RefreshBuffer()
  1260                 self.RefreshBuffer()
  1261                 self.RefreshScrollBars()
  1261                 self.RefreshScrollBars()
  1262                 self.Refresh(False)
  1262                 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, -scaling[1])))
  1263         elif keycode == wx.WXK_DOWN:
  1263         elif keycode == wx.WXK_DOWN:
  1264             if event.ControlDown() and event.ShiftDown():
  1264             if event.ControlDown() and event.ShiftDown():
  1265                 self.Scroll(xpos, ymax)
  1265                 self.Scroll(xpos, ymax)
  1266             elif event.ControlDown():
  1266             elif event.ControlDown():
  1267                 event.Skip()
  1267                 event.Skip()
  1268             elif self.SelectedElement:
  1268             elif self.SelectedElement:
  1269                 self.SelectedElement.Move(0, scaling[1])
  1269                 self.SelectedElement.Move(0, scaling[1])
  1270                 self.SelectedElement.RefreshModel()
  1270                 self.SelectedElement.RefreshModel()
  1271                 self.RefreshBuffer()
  1271                 self.RefreshBuffer()
  1272                 self.RefreshScrollBars()
  1272                 self.RefreshScrollBars()
  1273                 self.Refresh(False)
  1273                 self.RefreshRect(self.GetScrolledRect(self.SelectedElement.GetRedrawRect(0, scaling[1])))
  1274         elif keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging:
  1274         elif keycode == wx.WXK_SPACE and self.SelectedElement is not None and self.SelectedElement.Dragging:
  1275             self.CopyBlock(self.SelectedElement, self.SelectedElement.Pos)
  1275             self.CopyBlock(self.SelectedElement, wx.Point(*self.SelectedElement.GetPosition()))
  1276             self.RefreshBuffer()
  1276             self.RefreshBuffer()
  1277             self.RefreshScrollBars()
  1277             self.RefreshScrollBars()
  1278             self.Refresh()
  1278             self.ParentWindow.RefreshVariablePanel(self.TagName)
       
  1279             self.SelectedElement.Refresh()
  1279         else:
  1280         else:
  1280             event.Skip()
  1281             event.Skip()
  1281 
  1282 
  1282 #-------------------------------------------------------------------------------
  1283 #-------------------------------------------------------------------------------
  1283 #                          Model adding functions
  1284 #                          Model adding functions
  1301             self.AddBlock(block)
  1302             self.AddBlock(block)
  1302             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1303             self.Controler.AddEditedElementBlock(self.TagName, id, values["type"], values.get("name", None))
  1303             self.RefreshBlockModel(block)
  1304             self.RefreshBlockModel(block)
  1304             self.RefreshBuffer()
  1305             self.RefreshBuffer()
  1305             self.RefreshScrollBars()
  1306             self.RefreshScrollBars()
  1306             self.ParentWindow.RefreshEditor()
  1307             self.ParentWindow.RefreshVariablePanel(self.TagName)
  1307             self.Refresh(False)
  1308             block.Refresh()
  1308         dialog.Destroy()
  1309         dialog.Destroy()
  1309     
  1310     
  1310     def AddNewVariable(self, bbox):
  1311     def AddNewVariable(self, bbox):
  1311         dialog = VariablePropertiesDialog(self.ParentWindow)
  1312         dialog = VariablePropertiesDialog(self.ParentWindow)
  1312         dialog.SetMinVariableSize((bbox.width, bbox.height))
  1313         dialog.SetMinVariableSize((bbox.width, bbox.height))
  1329             self.AddBlock(variable)
  1330             self.AddBlock(variable)
  1330             self.Controler.AddEditedElementVariable(self.TagName, id, values["type"])
  1331             self.Controler.AddEditedElementVariable(self.TagName, id, values["type"])
  1331             self.RefreshVariableModel(variable)
  1332             self.RefreshVariableModel(variable)
  1332             self.RefreshBuffer()
  1333             self.RefreshBuffer()
  1333             self.RefreshScrollBars()
  1334             self.RefreshScrollBars()
  1334             self.Refresh(False)
  1335             variable.Refresh()
  1335         dialog.Destroy()
  1336         dialog.Destroy()
  1336 
  1337 
  1337     def AddNewConnection(self, bbox):
  1338     def AddNewConnection(self, bbox):
  1338         dialog = ConnectionPropertiesDialog(self.ParentWindow)
  1339         dialog = ConnectionPropertiesDialog(self.ParentWindow)
  1339         dialog.SetMinConnectionSize((bbox.width, bbox.height))
  1340         dialog.SetMinConnectionSize((bbox.width, bbox.height))
  1346             self.AddBlock(connection)
  1347             self.AddBlock(connection)
  1347             self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1348             self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1348             self.RefreshConnectionModel(connection)
  1349             self.RefreshConnectionModel(connection)
  1349             self.RefreshBuffer()
  1350             self.RefreshBuffer()
  1350             self.RefreshScrollBars()
  1351             self.RefreshScrollBars()
  1351             self.Refresh(False)
  1352             connection.Refresh()
  1352         dialog.Destroy()
  1353         dialog.Destroy()
  1353 
  1354 
  1354     def AddNewComment(self, bbox):
  1355     def AddNewComment(self, bbox):
  1355         if wx.VERSION >= (2, 5, 0):
  1356         if wx.VERSION >= (2, 5, 0):
  1356             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE)
  1357             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", "", wx.OK|wx.CANCEL|wx.TE_MULTILINE)
  1366             self.AddComment(comment)
  1367             self.AddComment(comment)
  1367             self.Controler.AddEditedElementComment(self.TagName, id)
  1368             self.Controler.AddEditedElementComment(self.TagName, id)
  1368             self.RefreshCommentModel(comment)
  1369             self.RefreshCommentModel(comment)
  1369             self.RefreshBuffer()
  1370             self.RefreshBuffer()
  1370             self.RefreshScrollBars()
  1371             self.RefreshScrollBars()
  1371             self.Refresh(False)
  1372             comment.Refresh()
  1372         dialog.Destroy()
  1373         dialog.Destroy()
  1373 
  1374 
  1374     def AddNewContact(self, bbox):
  1375     def AddNewContact(self, bbox):
  1375         dialog = LDElementDialog(self.ParentWindow, "contact")
  1376         dialog = LDElementDialog(self.ParentWindow, "contact")
  1376         varlist = []
  1377         varlist = []
  1391             self.AddBlock(contact)
  1392             self.AddBlock(contact)
  1392             self.Controler.AddEditedElementContact(self.TagName, id)
  1393             self.Controler.AddEditedElementContact(self.TagName, id)
  1393             self.RefreshContactModel(contact)
  1394             self.RefreshContactModel(contact)
  1394             self.RefreshBuffer()
  1395             self.RefreshBuffer()
  1395             self.RefreshScrollBars()
  1396             self.RefreshScrollBars()
  1396             self.Refresh(False)
  1397             contact.Refresh()
  1397         dialog.Destroy()
  1398         dialog.Destroy()
  1398 
  1399 
  1399     def AddNewCoil(self, bbox):
  1400     def AddNewCoil(self, bbox):
  1400         dialog = LDElementDialog(self.ParentWindow, "coil")
  1401         dialog = LDElementDialog(self.ParentWindow, "coil")
  1401         varlist = []
  1402         varlist = []
  1419             self.AddBlock(coil)
  1420             self.AddBlock(coil)
  1420             self.Controler.AddEditedElementCoil(self.TagName, id)
  1421             self.Controler.AddEditedElementCoil(self.TagName, id)
  1421             self.RefreshCoilModel(coil)
  1422             self.RefreshCoilModel(coil)
  1422             self.RefreshBuffer()
  1423             self.RefreshBuffer()
  1423             self.RefreshScrollBars()
  1424             self.RefreshScrollBars()
  1424             self.Refresh(False)
  1425             coil.Refresh()
  1425         dialog.Destroy()
  1426         dialog.Destroy()
  1426 
  1427 
  1427     def AddNewPowerRail(self, bbox):
  1428     def AddNewPowerRail(self, bbox):
  1428         dialog = LDPowerRailDialog(self.ParentWindow)
  1429         dialog = LDPowerRailDialog(self.ParentWindow)
  1429         dialog.SetMinSize((bbox.width, bbox.height))
  1430         dialog.SetMinSize((bbox.width, bbox.height))
  1436             self.AddBlock(powerrail)
  1437             self.AddBlock(powerrail)
  1437             self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1438             self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1438             self.RefreshPowerRailModel(powerrail)
  1439             self.RefreshPowerRailModel(powerrail)
  1439             self.RefreshBuffer()
  1440             self.RefreshBuffer()
  1440             self.RefreshScrollBars()
  1441             self.RefreshScrollBars()
  1441             self.Refresh(False)
  1442             powerrail.Refresh()
  1442         dialog.Destroy()
  1443         dialog.Destroy()
  1443 
  1444 
  1444     def AddNewStep(self, bbox, initial = False):
  1445     def AddNewStep(self, bbox, initial = False):
  1445         dialog = StepContentDialog(self.ParentWindow, initial)
  1446         dialog = StepContentDialog(self.ParentWindow, initial)
  1446         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1447         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1469             self.AddBlock(step)
  1470             self.AddBlock(step)
  1470             self.Controler.AddEditedElementStep(self.TagName, id)
  1471             self.Controler.AddEditedElementStep(self.TagName, id)
  1471             self.RefreshStepModel(step)
  1472             self.RefreshStepModel(step)
  1472             self.RefreshBuffer()
  1473             self.RefreshBuffer()
  1473             self.RefreshScrollBars()
  1474             self.RefreshScrollBars()
  1474             self.Refresh(False)
  1475             step.Refresh()
  1475         dialog.Destroy()
  1476         dialog.Destroy()
  1476 
  1477 
  1477     def AddNewTransition(self, bbox):
  1478     def AddNewTransition(self, bbox):
  1478         dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE)
  1479         dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE)
  1479         dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName))
  1480         dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName))
  1487             self.AddBlock(transition)
  1488             self.AddBlock(transition)
  1488             self.Controler.AddEditedElementTransition(self.TagName, id)
  1489             self.Controler.AddEditedElementTransition(self.TagName, id)
  1489             self.RefreshTransitionModel(transition)
  1490             self.RefreshTransitionModel(transition)
  1490             self.RefreshBuffer()
  1491             self.RefreshBuffer()
  1491             self.RefreshScrollBars()
  1492             self.RefreshScrollBars()
  1492             self.Refresh(False)
  1493             transition.Refresh()
  1493         dialog.Destroy()
  1494         dialog.Destroy()
  1494 
  1495 
  1495     def AddNewDivergence(self, bbox):
  1496     def AddNewDivergence(self, bbox):
  1496         dialog = DivergenceCreateDialog(self.ParentWindow)
  1497         dialog = DivergenceCreateDialog(self.ParentWindow)
  1497         dialog.SetMinSize((bbox.width, bbox.height))
  1498         dialog.SetMinSize((bbox.width, bbox.height))
  1505             self.AddBlock(divergence)
  1506             self.AddBlock(divergence)
  1506             self.Controler.AddEditedElementDivergence(self.TagName, id, values["type"])
  1507             self.Controler.AddEditedElementDivergence(self.TagName, id, values["type"])
  1507             self.RefreshDivergenceModel(divergence)
  1508             self.RefreshDivergenceModel(divergence)
  1508             self.RefreshBuffer()
  1509             self.RefreshBuffer()
  1509             self.RefreshScrollBars()
  1510             self.RefreshScrollBars()
  1510             self.Refresh(False)
  1511             divergence.Refresh()
  1511         dialog.Destroy()
  1512         dialog.Destroy()
  1512 
  1513 
  1513     def AddNewJump(self, bbox):
  1514     def AddNewJump(self, bbox):
  1514         choices = []
  1515         choices = []
  1515         for block in self.Blocks:
  1516         for block in self.Blocks:
  1526             self.AddBlock(jump)
  1527             self.AddBlock(jump)
  1527             self.Controler.AddEditedElementJump(self.TagName, id)
  1528             self.Controler.AddEditedElementJump(self.TagName, id)
  1528             self.RefreshJumpModel(jump)
  1529             self.RefreshJumpModel(jump)
  1529             self.RefreshBuffer()
  1530             self.RefreshBuffer()
  1530             self.RefreshScrollBars()
  1531             self.RefreshScrollBars()
  1531             self.Refresh()
  1532             jump.Refresh()
  1532         dialog.Destroy()
  1533         dialog.Destroy()
  1533 
  1534 
  1534     def AddNewActionBlock(self, bbox):
  1535     def AddNewActionBlock(self, bbox):
  1535         dialog = ActionBlockDialog(self.ParentWindow)
  1536         dialog = ActionBlockDialog(self.ParentWindow)
  1536         dialog.SetQualifierList(self.Controler.GetQualifierTypes())
  1537         dialog.SetQualifierList(self.Controler.GetQualifierTypes())
  1546             self.AddBlock(actionblock)
  1547             self.AddBlock(actionblock)
  1547             self.Controler.AddEditedElementActionBlock(self.TagName, id)
  1548             self.Controler.AddEditedElementActionBlock(self.TagName, id)
  1548             self.RefreshActionBlockModel(actionblock)
  1549             self.RefreshActionBlockModel(actionblock)
  1549             self.RefreshBuffer()
  1550             self.RefreshBuffer()
  1550             self.RefreshScrollBars()
  1551             self.RefreshScrollBars()
  1551             self.Refresh()
  1552             actionblock.Refresh()
  1552         dialog.Destroy()
  1553         dialog.Destroy()
  1553 
  1554 
  1554 #-------------------------------------------------------------------------------
  1555 #-------------------------------------------------------------------------------
  1555 #                          Edit element content functions
  1556 #                          Edit element content functions
  1556 #-------------------------------------------------------------------------------
  1557 #-------------------------------------------------------------------------------
  1577             self.RefreshBlockModel(block)
  1578             self.RefreshBlockModel(block)
  1578             if old_values["executionOrder"] != new_values["executionOrder"]:
  1579             if old_values["executionOrder"] != new_values["executionOrder"]:
  1579                 self.RefreshView()
  1580                 self.RefreshView()
  1580             self.RefreshBuffer()
  1581             self.RefreshBuffer()
  1581             self.RefreshScrollBars()
  1582             self.RefreshScrollBars()
  1582             self.ParentWindow.RefreshEditor()
  1583             self.ParentWindow.RefreshVariablePanel(self.TagName)
  1583             self.Refresh(False)
  1584             block.Refresh()
  1584         dialog.Destroy()
  1585         dialog.Destroy()
  1585 
  1586 
  1586     def EditVariableContent(self, variable):
  1587     def EditVariableContent(self, variable):
  1587         dialog = VariablePropertiesDialog(self.ParentWindow)
  1588         dialog = VariablePropertiesDialog(self.ParentWindow)
  1588         dialog.SetMinVariableSize(variable.GetSize())
  1589         dialog.SetMinVariableSize(variable.GetSize())
  1612             self.RefreshVariableModel(variable)
  1613             self.RefreshVariableModel(variable)
  1613             if old_values["executionOrder"] != new_values["executionOrder"]:
  1614             if old_values["executionOrder"] != new_values["executionOrder"]:
  1614                 self.RefreshView()
  1615                 self.RefreshView()
  1615             self.RefreshBuffer()
  1616             self.RefreshBuffer()
  1616             self.RefreshScrollBars()
  1617             self.RefreshScrollBars()
  1617             self.Refresh(False)
  1618             variable.Refresh()
  1618         dialog.Destroy()
  1619         dialog.Destroy()
  1619 
  1620 
  1620     def EditConnectionContent(self, connection):
  1621     def EditConnectionContent(self, connection):
  1621         dialog = ConnectionPropertiesDialog(self.ParentWindow)
  1622         dialog = ConnectionPropertiesDialog(self.ParentWindow)
  1622         dialog.SetMinConnectionSize(connection.GetSize())
  1623         dialog.SetMinConnectionSize(connection.GetSize())
  1633                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1634                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1634                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1635                 self.Controler.AddEditedElementConnection(self.TagName, id, values["type"])
  1635             self.RefreshConnectionModel(connection)
  1636             self.RefreshConnectionModel(connection)
  1636             self.RefreshBuffer()
  1637             self.RefreshBuffer()
  1637             self.RefreshScrollBars()
  1638             self.RefreshScrollBars()
  1638             self.Refresh(False)
  1639             connection.Refresh()
  1639         dialog.Destroy()
  1640         dialog.Destroy()
  1640 
  1641 
  1641     def EditContactContent(self, contact):
  1642     def EditContactContent(self, contact):
  1642         dialog = LDElementDialog(self.ParentWindow, "contact")
  1643         dialog = LDElementDialog(self.ParentWindow, "contact")
  1643         varlist = []
  1644         varlist = []
  1656             contact.SetType(values["type"])
  1657             contact.SetType(values["type"])
  1657             contact.SetSize(values["width"], values["height"])
  1658             contact.SetSize(values["width"], values["height"])
  1658             self.RefreshContactModel(contact)
  1659             self.RefreshContactModel(contact)
  1659             self.RefreshBuffer()
  1660             self.RefreshBuffer()
  1660             self.RefreshScrollBars()
  1661             self.RefreshScrollBars()
  1661             self.Refresh(False)
  1662             contact.Refresh()
  1662         dialog.Destroy()
  1663         dialog.Destroy()
  1663 
  1664 
  1664     def EditCoilContent(self, coil):
  1665     def EditCoilContent(self, coil):
  1665         dialog = LDElementDialog(self.ParentWindow, "coil")
  1666         dialog = LDElementDialog(self.ParentWindow, "coil")
  1666         varlist = []
  1667         varlist = []
  1682             coil.SetType(values["type"])
  1683             coil.SetType(values["type"])
  1683             coil.SetSize(values["width"], values["height"])
  1684             coil.SetSize(values["width"], values["height"])
  1684             self.RefreshCoilModel(coil)
  1685             self.RefreshCoilModel(coil)
  1685             self.RefreshBuffer()
  1686             self.RefreshBuffer()
  1686             self.RefreshScrollBars()
  1687             self.RefreshScrollBars()
  1687             self.Refresh(False)
  1688             coil.Refresh()
  1688         dialog.Destroy()
  1689         dialog.Destroy()
  1689 
  1690 
  1690     def EditPowerRailContent(self, powerrail):
  1691     def EditPowerRailContent(self, powerrail):
  1691         dialog = LDPowerRailDialog(self.ParentWindow, powerrail.GetType(), len(powerrail.GetConnectors()))
  1692         dialog = LDPowerRailDialog(self.ParentWindow, powerrail.GetType(), len(powerrail.GetConnectors()))
  1692         dialog.SetMinSize(powerrail.GetSize())
  1693         dialog.SetMinSize(powerrail.GetSize())
  1700                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1701                 self.Controler.RemoveEditedElementInstance(self.TagName, id)
  1701                 self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1702                 self.Controler.AddEditedElementPowerRail(self.TagName, id, values["type"])
  1702             self.RefreshPowerRailModel(powerrail)
  1703             self.RefreshPowerRailModel(powerrail)
  1703             self.RefreshBuffer()
  1704             self.RefreshBuffer()
  1704             self.RefreshScrollBars()
  1705             self.RefreshScrollBars()
  1705             self.Refresh(False)
  1706             powerrail.Refresh()
  1706         dialog.Destroy()
  1707         dialog.Destroy()
  1707 
  1708 
  1708     def EditStepContent(self, step):
  1709     def EditStepContent(self, step):
  1709         dialog = StepContentDialog(self.ParentWindow, step.GetInitial())
  1710         dialog = StepContentDialog(self.ParentWindow, step.GetInitial())
  1710         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1711         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1734                 step.RemoveAction()
  1735                 step.RemoveAction()
  1735             step.UpdateSize(values["width"], values["height"])
  1736             step.UpdateSize(values["width"], values["height"])
  1736             step.RefreshModel()
  1737             step.RefreshModel()
  1737             self.RefreshBuffer()
  1738             self.RefreshBuffer()
  1738             self.RefreshScrollBars()
  1739             self.RefreshScrollBars()
  1739             self.Refresh(False)
  1740             step.Refresh()
  1740         
  1741         
  1741     def EditTransitionContent(self, transition):
  1742     def EditTransitionContent(self, transition):
  1742         dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE)
  1743         dialog = TransitionContentDialog(self.ParentWindow, self.GetDrawingMode() == FREEDRAWING_MODE)
  1743         dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName))
  1744         dialog.SetTransitions(self.Controler.GetEditedElementTransitions(self.TagName))
  1744         dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()})
  1745         dialog.SetValues({"type":transition.GetType(),"value":transition.GetCondition(), "priority":transition.GetPriority()})
  1748             transition.SetType(values["type"],values["value"])
  1749             transition.SetType(values["type"],values["value"])
  1749             transition.SetPriority(values["priority"])
  1750             transition.SetPriority(values["priority"])
  1750             transition.RefreshModel()
  1751             transition.RefreshModel()
  1751             self.RefreshBuffer()
  1752             self.RefreshBuffer()
  1752             self.RefreshScrollBars()
  1753             self.RefreshScrollBars()
  1753             self.Refresh(False)
  1754             transition.Refresh()
  1754         dialog.Destroy()
  1755         dialog.Destroy()
  1755 
  1756 
  1756     def EditJumpContent(self, jump):
  1757     def EditJumpContent(self, jump):
  1757         choices = []
  1758         choices = []
  1758         for block in self.Blocks:
  1759         for block in self.Blocks:
  1764             value = dialog.GetStringSelection()
  1765             value = dialog.GetStringSelection()
  1765             jump.SetTarget(value)
  1766             jump.SetTarget(value)
  1766             jump.RefreshModel()
  1767             jump.RefreshModel()
  1767             self.RefreshBuffer()
  1768             self.RefreshBuffer()
  1768             self.RefreshScrollBars()
  1769             self.RefreshScrollBars()
  1769             self.Refresh(False)
  1770             jump.Refresh()
  1770         dialog.Destroy()
  1771         dialog.Destroy()
  1771 
  1772 
  1772     def EditActionBlockContent(self, actionblock):
  1773     def EditActionBlockContent(self, actionblock):
  1773         dialog = ActionBlockDialog(self.ParentWindow)
  1774         dialog = ActionBlockDialog(self.ParentWindow)
  1774         dialog.SetQualifierList(self.Controler.GetQualifierTypes())
  1775         dialog.SetQualifierList(self.Controler.GetQualifierTypes())
  1779             actions = dialog.GetValues()
  1780             actions = dialog.GetValues()
  1780             actionblock.SetActions(actions)
  1781             actionblock.SetActions(actions)
  1781             actionblock.RefreshModel()
  1782             actionblock.RefreshModel()
  1782             self.RefreshBuffer()
  1783             self.RefreshBuffer()
  1783             self.RefreshScrollBars()
  1784             self.RefreshScrollBars()
  1784             self.Refresh(False)
  1785             actionblock.Refresh()
  1785         dialog.Destroy()
  1786         dialog.Destroy()
  1786 
  1787 
  1787     def EditCommentContent(self, comment):
  1788     def EditCommentContent(self, comment):
  1788         if wx.VERSION >= (2, 5, 0):
  1789         if wx.VERSION >= (2, 5, 0):
  1789             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE)
  1790             dialog = wx.TextEntryDialog(self.ParentWindow, "Edit comment", "Please enter comment text", comment.GetContent(), wx.OK|wx.CANCEL|wx.TE_MULTILINE)
  1793             value = dialog.GetValue()
  1794             value = dialog.GetValue()
  1794             comment.SetContent(value)
  1795             comment.SetContent(value)
  1795             comment.RefreshModel()
  1796             comment.RefreshModel()
  1796             self.RefreshBuffer()
  1797             self.RefreshBuffer()
  1797             self.RefreshScrollBars()
  1798             self.RefreshScrollBars()
  1798             self.Refresh(False)
  1799             comment.Refresh()
  1799         dialog.Destroy()
  1800         dialog.Destroy()
  1800 
  1801 
  1801 #-------------------------------------------------------------------------------
  1802 #-------------------------------------------------------------------------------
  1802 #                          Model update functions
  1803 #                          Model update functions
  1803 #-------------------------------------------------------------------------------
  1804 #-------------------------------------------------------------------------------
  1931         block.Clean()
  1932         block.Clean()
  1932         self.RemoveBlock(block)
  1933         self.RemoveBlock(block)
  1933         self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId())
  1934         self.Controler.RemoveEditedElementInstance(self.TagName, block.GetId())
  1934         for element in elements:
  1935         for element in elements:
  1935             element.RefreshModel()
  1936             element.RefreshModel()
  1936         wx.CallAfter(self.ParentWindow.RefreshEditor)
  1937         wx.CallAfter(self.ParentWindow.RefreshVariablePanel, self.TagName)
  1937 
  1938 
  1938     def DeleteVariable(self, variable):
  1939     def DeleteVariable(self, variable):
  1939         connectors = variable.GetConnectors()
  1940         connectors = variable.GetConnectors()
  1940         if connectors["output"]:
  1941         if connectors["output"]:
  1941             elements = connectors["output"].GetConnectedBlocks()
  1942             elements = connectors["output"].GetConnectedBlocks()
  2060 #-------------------------------------------------------------------------------
  2061 #-------------------------------------------------------------------------------
  2061     
  2062     
  2062     def Cut(self):
  2063     def Cut(self):
  2063         if self.IsBlock(self.SelectedElement):
  2064         if self.IsBlock(self.SelectedElement):
  2064             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
  2065             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
       
  2066             rect = self.SelectedElement.GetRedrawRect(1, 1)
  2065             self.SelectedElement.Delete()
  2067             self.SelectedElement.Delete()
  2066             self.RefreshBuffer()
  2068             self.SelectedElement = None
  2067             self.RefreshScrollBars()
  2069             self.RefreshBuffer()
  2068             self.Refresh()
  2070             self.RefreshScrollBars()
       
  2071             self.RefreshRect(self.GetScrolledRect(rect))
  2069         
  2072         
  2070     def Copy(self):
  2073     def Copy(self):
  2071         if self.IsBlock(self.SelectedElement):
  2074         if self.IsBlock(self.SelectedElement):
  2072             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
  2075             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone())
  2073     
  2076             
  2074     def Paste(self):
  2077     def Paste(self):
  2075         element = self.ParentWindow.GetCopyBuffer()
  2078         element = self.ParentWindow.GetCopyBuffer()
  2076         if element is not None and self.CanAddBlock(element):
  2079         if element is not None and self.CanAddBlock(element):
  2077             block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30)))
  2080             block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30)))
  2078             if self.SelectedElement is not None:
  2081             if self.SelectedElement is not None:
  2079                 self.SelectedElement.SetSelected(False)
  2082                 self.SelectedElement.SetSelected(False)
  2080             self.SelectedElement = block
  2083             self.SelectedElement = block
  2081             self.SelectedElement.SetSelected(True)
  2084             self.SelectedElement.SetSelected(True)
  2082             self.RefreshBuffer()
  2085             self.RefreshBuffer()
  2083             self.RefreshScrollBars()
  2086             self.RefreshScrollBars()
  2084             self.Refresh()
  2087             self.ParentWindow.RefreshVariablePanel(self.TagName)
  2085 
  2088 
  2086     def CanAddBlock(self, block):
  2089     def CanAddBlock(self, block):
  2087         if self.CurrentLanguage == "SFC":
  2090         if self.CurrentLanguage == "SFC":
  2088             return True
  2091             return True
  2089         elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)):
  2092         elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)):
  2092             return True
  2095             return True
  2093         return False
  2096         return False
  2094 
  2097 
  2095     def CopyBlock(self, element, pos):
  2098     def CopyBlock(self, element, pos):
  2096         id = self.GetNewId()
  2099         id = self.GetNewId()
  2097         block = element.Clone(id, pos)
  2100         if isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step):
       
  2101             if isinstance(element, FBD_Block):
       
  2102                 names = [varname.upper() for varname in self.Controler.GetEditedElementVariables(self.TagName)]
       
  2103                 format = "Block%d"
       
  2104             elif isinstance(element, SFC_Step):
       
  2105                 names = [block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)]
       
  2106                 format = "Step%d"
       
  2107             i = 1
       
  2108             while (format%i).upper() in names:
       
  2109                 i += 1
       
  2110             name = format%i
       
  2111             block = element.Clone(id, name, pos)
       
  2112         else:
       
  2113             name = None
       
  2114             block = element.Clone(id, pos=pos)
  2098         self.AddBlock(block)
  2115         self.AddBlock(block)
  2099         if isinstance(block, Comment):
  2116         if isinstance(block, Comment):
  2100             self.Controler.AddEditedElementComment(self.TagName, id)
  2117             self.Controler.AddEditedElementComment(self.TagName, id)
  2101             self.RefreshCommentModel(comment)
  2118             self.RefreshCommentModel(block)
  2102         elif isinstance(block, FBD_Block):
  2119         elif isinstance(block, FBD_Block):
  2103             self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), None)
  2120             self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), name)
  2104             self.RefreshBlockModel(block)
  2121             self.RefreshBlockModel(block)
  2105         elif isinstance(block, FBD_Variable):
  2122         elif isinstance(block, FBD_Variable):
  2106             self.Controler.AddEditedElementVariable(self.TagName, id, block.GetType())
  2123             self.Controler.AddEditedElementVariable(self.TagName, id, block.GetType())
  2107             self.RefreshVariableModel(block)
  2124             self.RefreshVariableModel(block)
  2108         elif isinstance(block, FBD_Connector):
  2125         elif isinstance(block, FBD_Connector):
  2154             for i in xrange(1, width / self.Scaling[0] + 1):
  2171             for i in xrange(1, width / self.Scaling[0] + 1):
  2155                 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height)
  2172                 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height)
  2156             for i in xrange(1, height / self.Scaling[1] + 1):
  2173             for i in xrange(1, height / self.Scaling[1] + 1):
  2157                 dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1])
  2174                 dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1])
  2158         
  2175         
  2159         # Draw highlighted elements
       
  2160         for comment in self.Comments:
       
  2161             comment.DrawHighlightment(dc)
       
  2162         for wire in self.Wires:
       
  2163             wire.DrawHighlightment(dc)
       
  2164         for block in self.Blocks:
       
  2165             block.DrawHighlightment(dc)
       
  2166         
       
  2167         # Draw all elements
  2176         # Draw all elements
  2168         for comment in self.Comments:
  2177         for comment in self.Comments:
  2169             if comment != self.SelectedElement:
  2178             if comment != self.SelectedElement:
  2170                 comment.Draw(dc)
  2179                 comment.Draw(dc)
  2171         for wire in self.Wires:
  2180         for wire in self.Wires:
  2172             if wire != self.SelectedElement:
  2181             if wire != self.SelectedElement:
  2173                 wire.Draw(dc)
  2182                 wire.Draw(dc)
  2174         for block in self.Blocks:
  2183         for block in self.Blocks:
  2175             if block != self.SelectedElement:
  2184             if block != self.SelectedElement:
  2176                 block.Draw(dc)
  2185                 block.Draw(dc)
       
  2186         
  2177         if self.SelectedElement:
  2187         if self.SelectedElement:
  2178             self.SelectedElement.Draw(dc)
  2188             self.SelectedElement.Draw(dc)
  2179         
  2189         
  2180         if self.rubberBand.IsShown():
  2190         if self.rubberBand.IsShown():
  2181             self.rubberBand.Draw(dc)
  2191             self.rubberBand.Draw(dc)