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