151 dc = wxClientDC(self) |
154 dc = wxClientDC(self) |
152 self.DoPrepareDC(dc) |
155 self.DoPrepareDC(dc) |
153 return dc |
156 return dc |
154 |
157 |
155 #------------------------------------------------------------------------------- |
158 #------------------------------------------------------------------------------- |
|
159 # Element management functions |
|
160 #------------------------------------------------------------------------------- |
|
161 |
|
162 def AddBlock(self, block): |
|
163 self.block_id += 1 |
|
164 self.Blocks[block] = self.block_id |
|
165 |
|
166 def AddWire(self, wire): |
|
167 self.wire_id += 1 |
|
168 self.Wires[wire] = self.wire_id |
|
169 |
|
170 def AddComment(self, comment): |
|
171 self.comment_id += 1 |
|
172 self.Comments[comment] = self.comment_id |
|
173 |
|
174 def IsBlock(self, block): |
|
175 return self.Blocks.get(block, False) |
|
176 |
|
177 def IsWire(self, wire): |
|
178 return self.Wires.get(wire, False) |
|
179 |
|
180 def IsComment(self, comment): |
|
181 return self.Comments.get(comment, False) |
|
182 |
|
183 def RemoveBlock(self, block): |
|
184 self.Blocks.pop(block) |
|
185 |
|
186 def RemoveWire(self, wire): |
|
187 self.Wires.pop(wire) |
|
188 |
|
189 def RemoveComment(self, comment): |
|
190 self.Comments.pop(comment) |
|
191 |
|
192 def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False): |
|
193 blocks = self.Blocks.keys() |
|
194 wires = self.Wires.keys() |
|
195 comments = self.Comments.keys() |
|
196 if sort_blocks: |
|
197 blocks.sort(lambda x,y:self.Blocks[x].__cmp__(self.Blocks[y])) |
|
198 if sort_wires: |
|
199 wires.sort(lambda x,y:self.Wires[x].__cmp__(self.Wires[y])) |
|
200 if sort_comments: |
|
201 comments.sort(lambda x,y:self.Comments[x].__cmp__(self.Comments[y])) |
|
202 return blocks + wires + comments |
|
203 |
|
204 #------------------------------------------------------------------------------- |
156 # Reset functions |
205 # Reset functions |
157 #------------------------------------------------------------------------------- |
206 #------------------------------------------------------------------------------- |
158 |
207 |
159 # Resets Viewer lists |
208 # Resets Viewer lists |
160 def ResetView(self): |
209 def ResetView(self): |
161 self.Blocks = [] |
210 self.Blocks = {} |
162 self.Wires = [] |
211 self.Wires = {} |
163 self.Elements = [] |
212 self.Comments = {} |
164 self.SelectedElement = None |
213 self.SelectedElement = None |
165 |
214 |
166 # Changes Viewer mode |
215 # Changes Viewer mode |
167 def SetMode(self, mode): |
216 def SetMode(self, mode): |
168 if self.Mode != mode or mode == MODE_SELECTION: |
217 if self.Mode != mode or mode == MODE_SELECTION: |
195 # Load Blocks until they are all loaded |
244 # Load Blocks until they are all loaded |
196 while instance: |
245 while instance: |
197 instance = self.Controler.GetCurrentElementEditingInstanceInfos(exclude=ids) |
246 instance = self.Controler.GetCurrentElementEditingInstanceInfos(exclude=ids) |
198 if instance: |
247 if instance: |
199 self.loadInstance(instance, ids) |
248 self.loadInstance(instance, ids) |
200 self.RefreshScrollBar() |
249 self.RefreshScrollBars() |
201 self.Refresh() |
250 self.Refresh() |
202 |
251 |
203 def RefreshScrollBar(self): |
252 def RefreshScrollBars(self): |
204 xstart, ystart = self.GetViewStart() |
253 xstart, ystart = self.GetViewStart() |
205 window_size = self.GetClientSize() |
254 window_size = self.GetClientSize() |
206 maxx = maxy = 0 |
255 maxx = maxy = 0 |
207 for element in self.Elements: |
256 for element in self.GetElements(): |
208 posx, posy = element.GetPosition() |
257 posx, posy = element.GetPosition() |
209 width, height = element.GetSize() |
258 width, height = element.GetSize() |
210 maxx = max(maxx, posx + width) |
259 maxx = max(maxx, posx + width) |
211 maxy = max(maxy, posy + height) |
260 maxy = max(maxy, posy + height) |
212 maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0]) |
261 maxx = max(maxx + WINDOW_BORDER, xstart * SCROLLBAR_UNIT + window_size[0]) |
224 self.current_id = max(self.current_id, instance["id"]) |
273 self.current_id = max(self.current_id, instance["id"]) |
225 if instance["type"] == "input": |
274 if instance["type"] == "input": |
226 variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"]) |
275 variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"]) |
227 variable.SetPosition(instance["x"], instance["y"]) |
276 variable.SetPosition(instance["x"], instance["y"]) |
228 variable.SetSize(instance["width"], instance["height"]) |
277 variable.SetSize(instance["width"], instance["height"]) |
229 self.Blocks.append(variable) |
278 self.AddBlock(variable) |
230 self.Elements.append(variable) |
|
231 connectors = variable.GetConnectors() |
279 connectors = variable.GetConnectors() |
232 connectors["output"].SetPosition(wxPoint(*instance["connector"]["position"])) |
280 connectors["output"].SetPosition(wxPoint(*instance["connector"]["position"])) |
233 if instance["connector"]["negated"]: |
281 if instance["connector"]["negated"]: |
234 connectors["output"].SetNegated(True) |
282 connectors["output"].SetNegated(True) |
235 if instance["connector"]["edge"]: |
283 if instance["connector"]["edge"]: |
236 connectors["output"].SetEdge(instance["connector"]["edge"]) |
284 connectors["output"].SetEdge(instance["connector"]["edge"]) |
237 elif instance["type"] == "output": |
285 elif instance["type"] == "output": |
238 variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"]) |
286 variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"]) |
239 variable.SetPosition(instance["x"], instance["y"]) |
287 variable.SetPosition(instance["x"], instance["y"]) |
240 variable.SetSize(instance["width"], instance["height"]) |
288 variable.SetSize(instance["width"], instance["height"]) |
241 self.Blocks.append(variable) |
289 self.AddBlock(variable) |
242 self.Elements.append(variable) |
|
243 connectors = variable.GetConnectors() |
290 connectors = variable.GetConnectors() |
244 connectors["input"].SetPosition(wxPoint(*instance["connector"]["position"])) |
291 connectors["input"].SetPosition(wxPoint(*instance["connector"]["position"])) |
245 if instance["connector"]["negated"]: |
292 if instance["connector"]["negated"]: |
246 connectors["input"].SetNegated(True) |
293 connectors["input"].SetNegated(True) |
247 if instance["connector"]["edge"]: |
294 if instance["connector"]["edge"]: |
249 self.CreateWires(connectors["input"], instance["connector"]["links"], ids) |
296 self.CreateWires(connectors["input"], instance["connector"]["links"], ids) |
250 elif instance["type"] == "inout": |
297 elif instance["type"] == "inout": |
251 variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"]) |
298 variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"]) |
252 variable.SetPosition(instance["x"], instance["y"]) |
299 variable.SetPosition(instance["x"], instance["y"]) |
253 variable.SetSize(instance["width"], instance["height"]) |
300 variable.SetSize(instance["width"], instance["height"]) |
254 self.Blocks.append(variable) |
301 self.AddBlock(variable) |
255 self.Elements.append(variable) |
|
256 connectors = variable.GetConnectors() |
302 connectors = variable.GetConnectors() |
257 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
303 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
258 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
304 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
259 if instance["connectors"]["output"]["negated"]: |
305 if instance["connectors"]["output"]["negated"]: |
260 connectors["output"].SetNegated(True) |
306 connectors["output"].SetNegated(True) |
267 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
313 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
268 elif instance["type"] == "continuation": |
314 elif instance["type"] == "continuation": |
269 connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"]) |
315 connection = FBD_Connector(self, CONTINUATION, instance["name"], instance["id"]) |
270 connection.SetPosition(instance["x"], instance["y"]) |
316 connection.SetPosition(instance["x"], instance["y"]) |
271 connection.SetSize(instance["width"], instance["height"]) |
317 connection.SetSize(instance["width"], instance["height"]) |
272 self.Blocks.append(connection) |
318 self.AddBlock(connection) |
273 self.Elements.append(connection) |
|
274 connector = connection.GetConnector() |
319 connector = connection.GetConnector() |
275 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
320 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
276 elif instance["type"] == "connection": |
321 elif instance["type"] == "connection": |
277 connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"]) |
322 connection = FBD_Connector(self, CONNECTOR, instance["name"], instance["id"]) |
278 connection.SetPosition(instance["x"], instance["y"]) |
323 connection.SetPosition(instance["x"], instance["y"]) |
279 connection.SetSize(instance["width"], instance["height"]) |
324 connection.SetSize(instance["width"], instance["height"]) |
280 self.Blocks.append(connection) |
325 self.AddBlock(connection) |
281 self.Elements.append(connection) |
|
282 connector = connection.GetConnector() |
326 connector = connection.GetConnector() |
283 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
327 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
284 self.CreateWires(connector, instance["connector"]["links"], ids) |
328 self.CreateWires(connector, instance["connector"]["links"], ids) |
285 elif instance["type"] == "comment": |
329 elif instance["type"] == "comment": |
286 comment = Comment(self, instance["content"], instance["id"]) |
330 comment = Comment(self, instance["content"], instance["id"]) |
287 comment.SetPosition(instance["x"], instance["y"]) |
331 comment.SetPosition(instance["x"], instance["y"]) |
288 comment.SetSize(instance["width"], instance["height"]) |
332 comment.SetSize(instance["width"], instance["height"]) |
289 self.Elements.append(comment) |
333 self.AddComment(comment) |
290 elif instance["type"] == "leftPowerRail": |
334 elif instance["type"] == "leftPowerRail": |
291 leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
335 leftpowerrail = LD_PowerRail(self, LEFTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
292 leftpowerrail.SetPosition(instance["x"], instance["y"]) |
336 leftpowerrail.SetPosition(instance["x"], instance["y"]) |
293 self.Blocks.append(leftpowerrail) |
337 self.AddBlock(leftpowerrail) |
294 self.Elements.append(leftpowerrail) |
|
295 connectors = leftpowerrail.GetConnectors() |
338 connectors = leftpowerrail.GetConnectors() |
296 for i, connector in enumerate(instance["connectors"]): |
339 for i, connector in enumerate(instance["connectors"]): |
297 connectors[i].SetPosition(wxPoint(*connector["position"])) |
340 connectors[i].SetPosition(wxPoint(*connector["position"])) |
298 elif instance["type"] == "rightPowerRail": |
341 elif instance["type"] == "rightPowerRail": |
299 rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
342 rightpowerrail = LD_PowerRail(self, RIGHTRAIL, instance["id"], [True for i in range(len(instance["connectors"]))]) |
300 rightpowerrail.SetPosition(instance["x"], instance["y"]) |
343 rightpowerrail.SetPosition(instance["x"], instance["y"]) |
301 self.Blocks.append(rightpowerrail) |
344 self.AddBlock(rightpowerrail) |
302 self.Elements.append(rightpowerrail) |
|
303 connectors = rightpowerrail.GetConnectors() |
345 connectors = rightpowerrail.GetConnectors() |
304 for i, connector in enumerate(instance["connectors"]): |
346 for i, connector in enumerate(instance["connectors"]): |
305 connectors[i].SetPosition(wxPoint(*connector["position"])) |
347 connectors[i].SetPosition(wxPoint(*connector["position"])) |
306 self.CreateWires(connectors[i], connector["links"], ids) |
348 self.CreateWires(connectors[i], connector["links"], ids) |
307 elif instance["type"] == "contact": |
349 elif instance["type"] == "contact": |
321 contact_type = CONTACT_FALLING |
363 contact_type = CONTACT_FALLING |
322 else: |
364 else: |
323 contact_type = CONTACT_NORMAL |
365 contact_type = CONTACT_NORMAL |
324 contact = LD_Contact(self, contact_type, instance["name"], instance["id"]) |
366 contact = LD_Contact(self, contact_type, instance["name"], instance["id"]) |
325 contact.SetPosition(instance["x"], instance["y"]) |
367 contact.SetPosition(instance["x"], instance["y"]) |
326 self.Blocks.append(contact) |
368 self.AddBlock(contact) |
327 self.Elements.append(contact) |
|
328 connectors = contact.GetConnectors() |
369 connectors = contact.GetConnectors() |
329 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
370 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
330 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
371 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
331 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
372 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
332 elif instance["type"] == "coil": |
373 elif instance["type"] == "coil": |
346 coil_type = COIL_RESET |
387 coil_type = COIL_RESET |
347 else: |
388 else: |
348 coil_type = COIL_NORMAL |
389 coil_type = COIL_NORMAL |
349 coil = LD_Coil(self, coil_type, instance["name"], instance["id"]) |
390 coil = LD_Coil(self, coil_type, instance["name"], instance["id"]) |
350 coil.SetPosition(instance["x"], instance["y"]) |
391 coil.SetPosition(instance["x"], instance["y"]) |
351 self.Blocks.append(coil) |
392 self.AddBlock(coil) |
352 self.Elements.append(coil) |
|
353 connectors = coil.GetConnectors() |
393 connectors = coil.GetConnectors() |
354 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
394 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
355 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
395 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
356 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
396 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
357 elif instance["type"] == "step": |
397 elif instance["type"] == "step": |
377 if connectors["action"]: |
416 if connectors["action"]: |
378 connectors["action"].SetPosition(wxPoint(*instance["connectors"]["action"]["position"])) |
417 connectors["action"].SetPosition(wxPoint(*instance["connectors"]["action"]["position"])) |
379 elif instance["type"] == "transition": |
418 elif instance["type"] == "transition": |
380 transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"]) |
419 transition = SFC_Transition(self, instance["condition_type"], instance["condition"], instance["id"]) |
381 transition.SetPosition(instance["x"], instance["y"]) |
420 transition.SetPosition(instance["x"], instance["y"]) |
382 self.Blocks.append(transition) |
421 self.AddBlock(transition) |
383 self.Elements.append(transition) |
|
384 connectors = transition.GetConnectors() |
422 connectors = transition.GetConnectors() |
385 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
423 connectors["input"].SetPosition(wxPoint(*instance["connectors"]["input"]["position"])) |
386 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
424 self.CreateWires(connectors["input"], instance["connectors"]["input"]["links"], ids) |
387 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
425 connectors["output"].SetPosition(wxPoint(*instance["connectors"]["output"]["position"])) |
388 elif instance["type"] in ["selectionDivergence", "selectionConvergence", "simultaneousDivergence", "simultaneousConvergence"]: |
426 elif instance["type"] in ["selectionDivergence", "selectionConvergence", "simultaneousDivergence", "simultaneousConvergence"]: |
398 else: |
436 else: |
399 divergence = SFC_Divergence(self, SIMULTANEOUS_CONVERGENCE, |
437 divergence = SFC_Divergence(self, SIMULTANEOUS_CONVERGENCE, |
400 len(instance["connectors"]["inputs"]), instance["id"]) |
438 len(instance["connectors"]["inputs"]), instance["id"]) |
401 divergence.SetPosition(instance["x"], instance["y"]) |
439 divergence.SetPosition(instance["x"], instance["y"]) |
402 divergence.SetSize(instance["width"], instance["height"]) |
440 divergence.SetSize(instance["width"], instance["height"]) |
403 self.Blocks.append(divergence) |
441 self.AddBlock(divergence) |
404 self.Elements.append(divergence) |
|
405 connectors = divergence.GetConnectors() |
442 connectors = divergence.GetConnectors() |
406 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
443 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
407 connector = connectors["inputs"][i] |
444 connector = connectors["inputs"][i] |
408 connector.SetPosition(wxPoint(*input_connector["position"])) |
445 connector.SetPosition(wxPoint(*input_connector["position"])) |
409 self.CreateWires(connector, input_connector["links"], ids) |
446 self.CreateWires(connector, input_connector["links"], ids) |
411 connector = connectors["outputs"][i] |
448 connector = connectors["outputs"][i] |
412 connector.SetPosition(wxPoint(*output_connector["position"])) |
449 connector.SetPosition(wxPoint(*output_connector["position"])) |
413 elif instance["type"] == "jump": |
450 elif instance["type"] == "jump": |
414 jump = SFC_Jump(self, instance["target"], instance["id"]) |
451 jump = SFC_Jump(self, instance["target"], instance["id"]) |
415 jump.SetPosition(instance["x"], instance["y"]) |
452 jump.SetPosition(instance["x"], instance["y"]) |
416 self.Blocks.append(jump) |
453 self.AddBlock(jump) |
417 self.Elements.append(jump) |
|
418 connector = jump.GetConnector() |
454 connector = jump.GetConnector() |
419 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
455 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
420 self.CreateWires(connector, instance["connector"]["links"], ids) |
456 self.CreateWires(connector, instance["connector"]["links"], ids) |
421 elif instance["type"] == "actionBlock": |
457 elif instance["type"] == "actionBlock": |
422 actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"]) |
458 actionBlock = SFC_ActionBlock(self, instance["actions"], instance["id"]) |
423 actionBlock.SetPosition(instance["x"], instance["y"]) |
459 actionBlock.SetPosition(instance["x"], instance["y"]) |
424 actionBlock.SetSize(instance["width"], instance["height"]) |
460 actionBlock.SetSize(instance["width"], instance["height"]) |
425 self.Blocks.append(actionBlock) |
461 self.AddBlock(actionBlock) |
426 self.Elements.append(actionBlock) |
|
427 connector = actionBlock.GetConnector() |
462 connector = actionBlock.GetConnector() |
428 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
463 connector.SetPosition(wxPoint(*instance["connector"]["position"])) |
429 self.CreateWires(connector, instance["connector"]["links"], ids) |
464 self.CreateWires(connector, instance["connector"]["links"], ids) |
430 else: |
465 else: |
431 if instance["name"] != None: |
466 if instance["name"] != None: |
432 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"])) |
467 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"])) |
433 else: |
468 else: |
434 block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"])) |
469 block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"])) |
435 block.SetPosition(instance["x"], instance["y"]) |
470 block.SetPosition(instance["x"], instance["y"]) |
436 block.SetSize(instance["width"], instance["height"]) |
471 block.SetSize(instance["width"], instance["height"]) |
437 self.Blocks.append(block) |
472 self.AddBlock(block) |
438 self.Elements.append(block) |
|
439 connectors = block.GetConnectors() |
473 connectors = block.GetConnectors() |
440 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
474 for i, input_connector in enumerate(instance["connectors"]["inputs"]): |
441 connector = connectors["inputs"][i] |
475 connector = connectors["inputs"][i] |
442 connector.SetPosition(wxPoint(*input_connector["position"])) |
476 connector.SetPosition(wxPoint(*input_connector["position"])) |
443 if input_connector["negated"]: |
477 if input_connector["negated"]: |
470 wire.SetPoints(points) |
504 wire.SetPoints(points) |
471 start_connector.Connect((wire, 0), False) |
505 start_connector.Connect((wire, 0), False) |
472 end_connector.Connect((wire, -1), False) |
506 end_connector.Connect((wire, -1), False) |
473 wire.ConnectStartPoint(None, start_connector) |
507 wire.ConnectStartPoint(None, start_connector) |
474 wire.ConnectEndPoint(None, end_connector) |
508 wire.ConnectEndPoint(None, end_connector) |
475 self.Wires.append(wire) |
509 self.AddWire(wire) |
476 self.Elements.append(wire) |
|
477 |
510 |
478 #------------------------------------------------------------------------------- |
511 #------------------------------------------------------------------------------- |
479 # Search Element functions |
512 # Search Element functions |
480 #------------------------------------------------------------------------------- |
513 #------------------------------------------------------------------------------- |
481 |
514 |
506 if result: |
539 if result: |
507 return result |
540 return result |
508 return None |
541 return None |
509 |
542 |
510 def FindElementById(self, id): |
543 def FindElementById(self, id): |
511 for element in self.Elements: |
544 for element in self.Blocks: |
|
545 if element.GetId() == id: |
|
546 return element |
|
547 for element in self.Comments: |
512 if element.GetId() == id: |
548 if element.GetId() == id: |
513 return element |
549 return element |
514 return None |
550 return None |
515 |
551 |
516 def SearchElements(self, bbox): |
552 def SearchElements(self, bbox): |
517 elements = [] |
553 elements = [] |
518 for element in self.Elements: |
554 for element in self.GetElements(): |
519 element_bbox = element.GetBoundingBox() |
555 if element.IsInSelection(bbox): |
520 if element_bbox.x >= bbox.x and element_bbox.y >= bbox.y and element_bbox.x + element_bbox.width <= bbox.x + bbox.width and element_bbox.y + element_bbox.height <= bbox.y + bbox.height: |
|
521 elements.append(element) |
556 elements.append(element) |
522 return elements |
557 return elements |
523 |
558 |
524 #------------------------------------------------------------------------------- |
559 #------------------------------------------------------------------------------- |
525 # Popup menu functions |
560 # Popup menu functions |
609 #------------------------------------------------------------------------------- |
644 #------------------------------------------------------------------------------- |
610 # Menu items functions |
645 # Menu items functions |
611 #------------------------------------------------------------------------------- |
646 #------------------------------------------------------------------------------- |
612 |
647 |
613 def OnNoModifierMenu(self, event): |
648 def OnNoModifierMenu(self, event): |
614 if self.SelectedElement and self.SelectedElement in self.Blocks: |
649 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
615 self.SelectedElement.SetConnectorNegated(False) |
650 self.SelectedElement.SetConnectorNegated(False) |
616 event.Skip() |
651 event.Skip() |
617 |
652 |
618 def OnNegatedMenu(self, event): |
653 def OnNegatedMenu(self, event): |
619 if self.SelectedElement and self.SelectedElement in self.Blocks: |
654 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
620 self.SelectedElement.SetConnectorNegated(True) |
655 self.SelectedElement.SetConnectorNegated(True) |
621 event.Skip() |
656 event.Skip() |
622 |
657 |
623 def OnRisingEdgeMenu(self, event): |
658 def OnRisingEdgeMenu(self, event): |
624 if self.SelectedElement and self.SelectedElement in self.Blocks: |
659 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
625 self.SelectedElement.SetConnectorEdge("rising") |
660 self.SelectedElement.SetConnectorEdge("rising") |
626 event.Skip() |
661 event.Skip() |
627 |
662 |
628 def OnFallingEdgeMenu(self, event): |
663 def OnFallingEdgeMenu(self, event): |
629 if self.SelectedElement and self.SelectedElement in self.Blocks: |
664 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
630 self.SelectedElement.SetConnectorEdge("falling") |
665 self.SelectedElement.SetConnectorEdge("falling") |
631 event.Skip() |
666 event.Skip() |
632 |
667 |
633 def OnAddSegmentMenu(self, event): |
668 def OnAddSegmentMenu(self, event): |
634 if self.SelectedElement and self.SelectedElement in self.Wires: |
669 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
635 self.SelectedElement.AddSegment() |
670 self.SelectedElement.AddSegment() |
636 event.Skip() |
671 event.Skip() |
637 |
672 |
638 def OnDeleteSegmentMenu(self, event): |
673 def OnDeleteSegmentMenu(self, event): |
639 if self.SelectedElement and self.SelectedElement in self.Wires: |
674 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
640 self.SelectedElement.DeleteSegment() |
675 self.SelectedElement.DeleteSegment() |
641 event.Skip() |
676 event.Skip() |
642 |
677 |
643 def OnAddBranchMenu(self, event): |
678 def OnAddBranchMenu(self, event): |
644 if self.SelectedElement and self.SelectedElement in self.Blocks: |
679 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
645 self.AddDivergenceBranch(self.SelectedElement) |
680 self.AddDivergenceBranch(self.SelectedElement) |
646 event.Skip() |
681 event.Skip() |
647 |
682 |
648 def OnDeleteBranchMenu(self, event): |
683 def OnDeleteBranchMenu(self, event): |
649 if self.SelectedElement and self.SelectedElement in self.Blocks: |
684 if self.SelectedElement and self.IsBlock(self.SelectedElement): |
650 self.RemoveDivergenceBranch(self.SelectedElement) |
685 self.RemoveDivergenceBranch(self.SelectedElement) |
651 event.Skip() |
686 event.Skip() |
652 |
687 |
653 def OnDeleteMenu(self, event): |
688 def OnDeleteMenu(self, event): |
654 if self.SelectedElement: |
689 if self.SelectedElement: |
709 wire = Wire(self, [wxPoint(pos.x, pos.y), WEST], [wxPoint(pos.x, pos.y), EAST]) |
744 wire = Wire(self, [wxPoint(pos.x, pos.y), WEST], [wxPoint(pos.x, pos.y), EAST]) |
710 wire.oldPos = pos |
745 wire.oldPos = pos |
711 wire.Handle = (HANDLE_POINT, 0) |
746 wire.Handle = (HANDLE_POINT, 0) |
712 wire.ProcessDragging(0, 0) |
747 wire.ProcessDragging(0, 0) |
713 wire.Handle = (HANDLE_POINT, 1) |
748 wire.Handle = (HANDLE_POINT, 1) |
714 self.Wires.append(wire) |
749 self.AddWire(wire) |
715 self.Elements.append(wire) |
|
716 if self.SelectedElement: |
750 if self.SelectedElement: |
717 self.SelectedElement.SetSelected(False) |
751 self.SelectedElement.SetSelected(False) |
718 self.SelectedElement = wire |
752 self.SelectedElement = wire |
719 elif self.SelectedElement: |
753 elif self.SelectedElement: |
720 self.SelectedElement.SetSelected(False) |
754 self.SelectedElement.SetSelected(False) |
765 self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
799 self.SelectedElement.OnLeftUp(event, self.GetLogicalDC(), self.Scaling) |
766 wxCallAfter(self.SetCursor, wxNullCursor) |
800 wxCallAfter(self.SetCursor, wxNullCursor) |
767 self.ReleaseMouse() |
801 self.ReleaseMouse() |
768 self.Refresh() |
802 self.Refresh() |
769 elif self.Mode == MODE_WIRE and self.SelectedElement: |
803 elif self.Mode == MODE_WIRE and self.SelectedElement: |
770 dc = self.GetLogicalDC() |
804 if self.SelectedElement.EndConnected != None: |
771 pos = GetScaledEventPosition(event, dc, self.Scaling) |
|
772 connector = self.FindBlockConnector(pos, False) |
|
773 if connector and connector != self.SelectedElement.StartConnected: |
|
774 self.SelectedElement.ResetPoints() |
805 self.SelectedElement.ResetPoints() |
775 self.SelectedElement.OnMotion(event, dc, self.Scaling) |
806 self.SelectedElement.OnMotion(event, dc, self.Scaling) |
776 self.SelectedElement.GeneratePoints() |
807 self.SelectedElement.GeneratePoints() |
777 self.SelectedElement.RefreshModel() |
808 self.SelectedElement.RefreshModel() |
778 self.SelectedElement.SetSelected(True) |
809 self.SelectedElement.SetSelected(True) |
832 move_window.y = -1 |
863 move_window.y = -1 |
833 elif position.y > window_size[1] - SCROLL_ZONE: |
864 elif position.y > window_size[1] - SCROLL_ZONE: |
834 move_window.y = 1 |
865 move_window.y = 1 |
835 if move_window.x != 0 or move_window.y != 0: |
866 if move_window.x != 0 or move_window.y != 0: |
836 self.Scroll(xstart + move_window.x, ystart + move_window.y) |
867 self.Scroll(xstart + move_window.x, ystart + move_window.y) |
837 self.RefreshScrollBar() |
868 self.RefreshScrollBars() |
838 event.Skip() |
869 event.Skip() |
839 |
870 |
840 #------------------------------------------------------------------------------- |
871 #------------------------------------------------------------------------------- |
841 # Keyboard event functions |
872 # Keyboard event functions |
842 #------------------------------------------------------------------------------- |
873 #------------------------------------------------------------------------------- |
843 |
874 |
844 def OnChar(self, event): |
875 def OnChar(self, event): |
|
876 xpos, ypos = self.GetScrollPos(wxHORIZONTAL), self.GetScrollPos(wxVERTICAL) |
|
877 xmax = self.GetScrollRange(wxHORIZONTAL) - self.GetScrollThumb(wxHORIZONTAL) |
|
878 ymax = self.GetScrollRange(wxVERTICAL) - self.GetScrollThumb(wxVERTICAL) |
845 keycode = event.GetKeyCode() |
879 keycode = event.GetKeyCode() |
846 if self.Scaling: |
880 if self.Scaling: |
847 scaling = self.Scaling |
881 scaling = self.Scaling |
848 else: |
882 else: |
849 scaling = (8, 8) |
883 scaling = (8, 8) |
850 if keycode == WXK_DELETE and self.SelectedElement: |
884 if keycode == WXK_DELETE and self.SelectedElement: |
851 self.SelectedElement.Clean() |
885 self.SelectedElement.Clean() |
852 self.SelectedElement.Delete() |
886 self.SelectedElement.Delete() |
853 self.SelectedElement = None |
887 self.SelectedElement = None |
854 elif keycode == WXK_LEFT and self.SelectedElement: |
888 elif keycode == WXK_LEFT: |
855 self.SelectedElement.Move(-scaling[0], 0) |
889 if event.ControlDown() and event.ShiftDown(): |
856 elif keycode == WXK_RIGHT and self.SelectedElement: |
890 self.Scroll(0, ypos) |
857 self.SelectedElement.Move(scaling[0], 0) |
891 elif event.ControlDown(): |
858 elif keycode == WXK_UP and self.SelectedElement: |
892 self.Scroll(max(0, xpos - 1), ypos) |
859 self.SelectedElement.Move(0, -scaling[1]) |
893 elif self.SelectedElement: |
860 elif keycode == WXK_DOWN and self.SelectedElement: |
894 self.SelectedElement.Move(-scaling[0], 0) |
861 self.SelectedElement.Move(0, scaling[1]) |
895 elif keycode == WXK_RIGHT: |
|
896 if event.ControlDown() and event.ShiftDown(): |
|
897 self.Scroll(xmax, ypos) |
|
898 elif event.ControlDown(): |
|
899 self.Scroll(min(xpos + 1, xmax), ypos) |
|
900 elif self.SelectedElement: |
|
901 self.SelectedElement.Move(scaling[0], 0) |
|
902 elif keycode == WXK_UP: |
|
903 if event.ControlDown() and event.ShiftDown(): |
|
904 self.Scroll(xpos, 0) |
|
905 elif event.ControlDown(): |
|
906 self.Scroll(xpos, max(0, ypos - 1)) |
|
907 elif self.SelectedElement: |
|
908 self.SelectedElement.Move(0, -scaling[1]) |
|
909 elif keycode == WXK_DOWN: |
|
910 if event.ControlDown() and event.ShiftDown(): |
|
911 self.Scroll(xpos, ymax) |
|
912 elif event.ControlDown(): |
|
913 self.Scroll(xpos, min(ypos + 1, ymax)) |
|
914 elif self.SelectedElement: |
|
915 self.SelectedElement.Move(0, scaling[1]) |
862 self.Refresh() |
916 self.Refresh() |
863 event.Skip() |
|
864 |
917 |
865 #------------------------------------------------------------------------------- |
918 #------------------------------------------------------------------------------- |
866 # Model adding functions |
919 # Model adding functions |
867 #------------------------------------------------------------------------------- |
920 #------------------------------------------------------------------------------- |
868 |
921 |
877 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"]) |
930 block = FBD_Block(self, values["type"], values["name"], id, values["extension"], values["inputs"]) |
878 else: |
931 else: |
879 block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"]) |
932 block = FBD_Block(self, values["type"], "", id, values["extension"], values["inputs"]) |
880 block.SetPosition(bbox.x, bbox.y) |
933 block.SetPosition(bbox.x, bbox.y) |
881 block.SetSize(values["width"], values["height"]) |
934 block.SetSize(values["width"], values["height"]) |
882 self.Blocks.append(block) |
935 self.AddBlock(block) |
883 self.Elements.append(block) |
|
884 self.Controler.AddCurrentElementEditingBlock(id) |
936 self.Controler.AddCurrentElementEditingBlock(id) |
885 self.RefreshBlockModel(block) |
937 self.RefreshBlockModel(block) |
|
938 self.RefreshScrollBars() |
886 self.Refresh() |
939 self.Refresh() |
887 dialog.Destroy() |
940 dialog.Destroy() |
888 |
941 |
889 def AddNewVariable(self, bbox): |
942 def AddNewVariable(self, bbox): |
890 dialog = VariablePropertiesDialog(self.Parent) |
943 dialog = VariablePropertiesDialog(self.Parent) |
902 id = self.GetNewId() |
955 id = self.GetNewId() |
903 values = dialog.GetValues() |
956 values = dialog.GetValues() |
904 variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id) |
957 variable = FBD_Variable(self, values["type"], values["name"], values["value_type"], id) |
905 variable.SetPosition(bbox.x, bbox.y) |
958 variable.SetPosition(bbox.x, bbox.y) |
906 variable.SetSize(values["width"], values["height"]) |
959 variable.SetSize(values["width"], values["height"]) |
907 self.Blocks.append(variable) |
960 self.AddBlock(variable) |
908 self.Elements.append(variable) |
|
909 self.Controler.AddCurrentElementEditingVariable(id, values["type"]) |
961 self.Controler.AddCurrentElementEditingVariable(id, values["type"]) |
910 self.RefreshVariableModel(variable) |
962 self.RefreshVariableModel(variable) |
|
963 self.RefreshScrollBars() |
911 self.Refresh() |
964 self.Refresh() |
912 dialog.Destroy() |
965 dialog.Destroy() |
913 |
966 |
914 def AddNewConnection(self, bbox): |
967 def AddNewConnection(self, bbox): |
915 dialog = ConnectionPropertiesDialog(self.Parent) |
968 dialog = ConnectionPropertiesDialog(self.Parent) |
918 id = self.GetNewId() |
971 id = self.GetNewId() |
919 values = dialog.GetValues() |
972 values = dialog.GetValues() |
920 connection = FBD_Connector(self, values["type"], values["name"], id) |
973 connection = FBD_Connector(self, values["type"], values["name"], id) |
921 connection.SetPosition(bbox.x, bbox.y) |
974 connection.SetPosition(bbox.x, bbox.y) |
922 connection.SetSize(values["width"], values["height"]) |
975 connection.SetSize(values["width"], values["height"]) |
923 self.Blocks.append(connection) |
976 self.AddBlock(connection) |
924 self.Elements.append(connection) |
|
925 self.Controler.AddCurrentElementEditingConnection(id, values["type"]) |
977 self.Controler.AddCurrentElementEditingConnection(id, values["type"]) |
926 self.RefreshConnectionModel(connection) |
978 self.RefreshConnectionModel(connection) |
|
979 self.RefreshScrollBars() |
927 self.Refresh() |
980 self.Refresh() |
928 dialog.Destroy() |
981 dialog.Destroy() |
929 |
982 |
930 def AddNewComment(self, bbox): |
983 def AddNewComment(self, bbox): |
931 dialog = wxTextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wxOK|wxCANCEL|wxTE_MULTILINE) |
984 dialog = wxTextEntryDialog(self.Parent, "Add a new comment", "Please enter comment text", "", wxOK|wxCANCEL|wxTE_MULTILINE) |
934 id = self.GetNewId() |
987 id = self.GetNewId() |
935 comment = Comment(self, value, id) |
988 comment = Comment(self, value, id) |
936 comment.SetPosition(bbox.x, bbox.y) |
989 comment.SetPosition(bbox.x, bbox.y) |
937 min_width, min_height = comment.GetMinSize() |
990 min_width, min_height = comment.GetMinSize() |
938 comment.SetSize(max(min_width,bbox.width),max(min_height,bbox.height)) |
991 comment.SetSize(max(min_width,bbox.width),max(min_height,bbox.height)) |
939 self.Elements.append(comment) |
992 self.AddComment(comment) |
940 self.Controler.AddCurrentElementEditingComment(id) |
993 self.Controler.AddCurrentElementEditingComment(id) |
941 self.RefreshCommentModel(comment) |
994 self.RefreshCommentModel(comment) |
|
995 self.RefreshScrollBars() |
942 self.Refresh() |
996 self.Refresh() |
943 dialog.Destroy() |
997 dialog.Destroy() |
944 |
998 |
945 def AddNewContact(self, bbox): |
999 def AddNewContact(self, bbox): |
946 dialog = LDElementDialog(self.Parent, "contact") |
1000 dialog = LDElementDialog(self.Parent, "contact") |
957 id = self.GetNewId() |
1011 id = self.GetNewId() |
958 values = dialog.GetValues() |
1012 values = dialog.GetValues() |
959 contact = LD_Contact(self, values["type"], values["name"], id) |
1013 contact = LD_Contact(self, values["type"], values["name"], id) |
960 contact.SetPosition(bbox.x, bbox.y) |
1014 contact.SetPosition(bbox.x, bbox.y) |
961 contact.SetSize(values["width"], values["height"]) |
1015 contact.SetSize(values["width"], values["height"]) |
962 self.Blocks.append(contact) |
1016 self.AddBlock(contact) |
963 self.Elements.append(contact) |
|
964 self.Controler.AddCurrentElementEditingContact(id) |
1017 self.Controler.AddCurrentElementEditingContact(id) |
965 self.RefreshContactModel(contact) |
1018 self.RefreshContactModel(contact) |
|
1019 self.RefreshScrollBars() |
966 self.Refresh() |
1020 self.Refresh() |
967 dialog.Destroy() |
1021 dialog.Destroy() |
968 |
1022 |
969 def AddNewCoil(self, bbox): |
1023 def AddNewCoil(self, bbox): |
970 dialog = LDElementDialog(self.Parent, "coil") |
1024 dialog = LDElementDialog(self.Parent, "coil") |
984 id = self.GetNewId() |
1038 id = self.GetNewId() |
985 values = dialog.GetValues() |
1039 values = dialog.GetValues() |
986 coil = LD_Coil(self, values["type"], values["name"], id) |
1040 coil = LD_Coil(self, values["type"], values["name"], id) |
987 coil.SetPosition(bbox.x, bbox.y) |
1041 coil.SetPosition(bbox.x, bbox.y) |
988 coil.SetSize(values["width"], values["height"]) |
1042 coil.SetSize(values["width"], values["height"]) |
989 self.Blocks.append(coil) |
1043 self.AddBlock(coil) |
990 self.Elements.append(coil) |
|
991 self.Controler.AddCurrentElementEditingCoil(id) |
1044 self.Controler.AddCurrentElementEditingCoil(id) |
992 self.RefreshCoilModel(contact) |
1045 self.RefreshCoilModel(contact) |
|
1046 self.RefreshScrollBars() |
993 self.Refresh() |
1047 self.Refresh() |
994 dialog.Destroy() |
1048 dialog.Destroy() |
995 |
1049 |
996 def AddNewPowerRail(self, bbox): |
1050 def AddNewPowerRail(self, bbox): |
997 dialog = LDPowerRailDialog(self.Parent) |
1051 dialog = LDPowerRailDialog(self.Parent) |
1000 id = self.GetNewId() |
1054 id = self.GetNewId() |
1001 values = dialog.GetValues() |
1055 values = dialog.GetValues() |
1002 powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])]) |
1056 powerrail = LD_PowerRail(self, values["type"], id, [True for i in xrange(values["number"])]) |
1003 powerrail.SetPosition(bbox.x, bbox.y) |
1057 powerrail.SetPosition(bbox.x, bbox.y) |
1004 powerrail.SetSize(values["width"], values["height"]) |
1058 powerrail.SetSize(values["width"], values["height"]) |
1005 self.Blocks.append(powerrail) |
1059 self.AddBlock(powerrail) |
1006 self.Elements.append(powerrail) |
|
1007 self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) |
1060 self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) |
1008 self.RefreshPowerRailModel(powerrail) |
1061 self.RefreshPowerRailModel(powerrail) |
|
1062 self.RefreshScrollBars() |
1009 self.Refresh() |
1063 self.Refresh() |
1010 dialog.Destroy() |
1064 dialog.Destroy() |
1011 |
1065 |
1012 def AddNewTransition(self, bbox): |
1066 def AddNewTransition(self, bbox): |
1013 dialog = TransitionContentDialog(self.Parent) |
1067 dialog = TransitionContentDialog(self.Parent) |
1017 values = dialog.GetValues() |
1071 values = dialog.GetValues() |
1018 transition = SFC_Transition(self, values["type"], values["value"], id) |
1072 transition = SFC_Transition(self, values["type"], values["value"], id) |
1019 transition.SetPosition(bbox.x, bbox.y) |
1073 transition.SetPosition(bbox.x, bbox.y) |
1020 min_width, min_height = transition.GetMinSize() |
1074 min_width, min_height = transition.GetMinSize() |
1021 transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1075 transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1022 self.Blocks.append(transition) |
1076 self.AddBlock(transition) |
1023 self.Elements.append(transition) |
|
1024 self.Controler.AddCurrentElementEditingTransition(id) |
1077 self.Controler.AddCurrentElementEditingTransition(id) |
1025 self.RefreshTransitionModel(transition) |
1078 self.RefreshTransitionModel(transition) |
|
1079 self.RefreshScrollBars() |
1026 self.Refresh() |
1080 self.Refresh() |
1027 dialog.Destroy() |
1081 dialog.Destroy() |
1028 |
1082 |
1029 def AddNewDivergence(self, bbox): |
1083 def AddNewDivergence(self, bbox): |
1030 dialog = DivergenceCreateDialog(self.Parent) |
1084 dialog = DivergenceCreateDialog(self.Parent) |
1034 values = dialog.GetValues() |
1088 values = dialog.GetValues() |
1035 divergence = SFC_Divergence(self, values["type"], values["number"], id) |
1089 divergence = SFC_Divergence(self, values["type"], values["number"], id) |
1036 divergence.SetPosition(bbox.x, bbox.y) |
1090 divergence.SetPosition(bbox.x, bbox.y) |
1037 min_width, min_height = divergence.GetMinSize() |
1091 min_width, min_height = divergence.GetMinSize() |
1038 divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1092 divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1039 self.Blocks.append(divergence) |
1093 self.AddBlock(divergence) |
1040 self.Elements.append(divergence) |
|
1041 self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) |
1094 self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) |
1042 self.RefreshDivergenceModel(divergence) |
1095 self.RefreshDivergenceModel(divergence) |
|
1096 self.RefreshScrollBars() |
1043 self.Refresh() |
1097 self.Refresh() |
1044 dialog.Destroy() |
1098 dialog.Destroy() |
1045 |
1099 |
1046 |
1100 |
1047 #------------------------------------------------------------------------------- |
1101 #------------------------------------------------------------------------------- |
1168 if old_type != values["type"]: |
1227 if old_type != values["type"]: |
1169 id = powerrail.GetId() |
1228 id = powerrail.GetId() |
1170 self.Controler.RemoveCurrentElementEditingInstance(id) |
1229 self.Controler.RemoveCurrentElementEditingInstance(id) |
1171 self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) |
1230 self.Controler.AddCurrentElementEditingPowerRail(id, values["type"]) |
1172 self.RefreshPowerRailModel(powerrail) |
1231 self.RefreshPowerRailModel(powerrail) |
|
1232 self.RefreshScrollBars() |
1173 self.Refresh() |
1233 self.Refresh() |
1174 dialog.Destroy() |
1234 dialog.Destroy() |
1175 |
1235 ## |
1176 |
1236 ## |
1177 def AddNewTransition(self, bbox): |
1237 ## def AddNewTransition(self, bbox): |
1178 dialog = TransitionContentDialog(self.Parent) |
1238 ## dialog = TransitionContentDialog(self.Parent) |
1179 dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1239 ## dialog.SetTransitions(self.Controler.GetCurrentElementEditingTransitions()) |
1180 if dialog.ShowModal() == wxID_OK: |
1240 ## if dialog.ShowModal() == wxID_OK: |
1181 id = self.GetNewId() |
1241 ## id = self.GetNewId() |
1182 values = dialog.GetValues() |
1242 ## values = dialog.GetValues() |
1183 transition = SFC_Transition(self, values["type"], values["value"], id) |
1243 ## transition = SFC_Transition(self, values["type"], values["value"], id) |
1184 transition.SetPosition(bbox.x, bbox.y) |
1244 ## transition.SetPosition(bbox.x, bbox.y) |
1185 min_width, min_height = transition.GetMinSize() |
1245 ## min_width, min_height = transition.GetMinSize() |
1186 transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1246 ## transition.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1187 self.Blocks.append(transition) |
1247 ## self.Blocks.append(transition) |
1188 self.Elements.append(transition) |
1248 ## self.Elements.append(transition) |
1189 self.Controler.AddCurrentElementEditingTransition(id) |
1249 ## self.Controler.AddCurrentElementEditingTransition(id) |
1190 self.RefreshTransitionModel(transition) |
1250 ## self.RefreshTransitionModel(transition) |
1191 self.Refresh() |
1251 ## self.RefreshScrollBars() |
1192 dialog.Destroy() |
1252 ## self.Refresh() |
1193 |
1253 ## dialog.Destroy() |
1194 def AddNewDivergence(self, bbox): |
1254 ## |
1195 dialog = DivergenceCreateDialog(self.Parent) |
1255 ## def AddNewDivergence(self, bbox): |
1196 dialog.SetMinSize((bbox.width, bbox.height)) |
1256 ## dialog = DivergenceCreateDialog(self.Parent) |
1197 if dialog.ShowModal() == wxID_OK: |
1257 ## dialog.SetMinSize((bbox.width, bbox.height)) |
1198 id = self.GetNewId() |
1258 ## if dialog.ShowModal() == wxID_OK: |
1199 values = dialog.GetValues() |
1259 ## id = self.GetNewId() |
1200 divergence = SFC_Divergence(self, values["type"], values["number"], id) |
1260 ## values = dialog.GetValues() |
1201 divergence.SetPosition(bbox.x, bbox.y) |
1261 ## divergence = SFC_Divergence(self, values["type"], values["number"], id) |
1202 min_width, min_height = divergence.GetMinSize() |
1262 ## divergence.SetPosition(bbox.x, bbox.y) |
1203 divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1263 ## min_width, min_height = divergence.GetMinSize() |
1204 self.Blocks.append(divergence) |
1264 ## divergence.SetSize(max(bbox.width, min_width), max(bbox.height, min_height)) |
1205 self.Elements.append(divergence) |
1265 ## self.Blocks.append(divergence) |
1206 self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) |
1266 ## self.Elements.append(divergence) |
1207 self.RefreshDivergenceModel(divergence) |
1267 ## self.Controler.AddCurrentElementEditingDivergence(id, values["type"]) |
1208 self.Refresh() |
1268 ## self.RefreshDivergenceModel(divergence) |
1209 dialog.Destroy() |
1269 ## self.RefreshScrollBars() |
|
1270 ## self.Refresh() |
|
1271 ## dialog.Destroy() |
1210 |
1272 |
1211 #------------------------------------------------------------------------------- |
1273 #------------------------------------------------------------------------------- |
1212 # Model update functions |
1274 # Model update functions |
1213 #------------------------------------------------------------------------------- |
1275 #------------------------------------------------------------------------------- |
1214 |
1276 |
1346 if connectors["output"]: |
1407 if connectors["output"]: |
1347 elements = connectors["output"].GetConnectedBlocks() |
1408 elements = connectors["output"].GetConnectedBlocks() |
1348 else: |
1409 else: |
1349 elements = [] |
1410 elements = [] |
1350 variable.Clean() |
1411 variable.Clean() |
1351 self.Blocks.remove(variable) |
1412 self.RemoveBlock(variable) |
1352 self.Elements.remove(variable) |
|
1353 self.Controler.RemoveCurrentElementEditingInstance(variable.GetId()) |
1413 self.Controler.RemoveCurrentElementEditingInstance(variable.GetId()) |
1354 for element in elements: |
1414 for element in elements: |
1355 element.RefreshModel() |
1415 element.RefreshModel() |
1356 |
1416 |
1357 def DeleteConnection(self, connection): |
1417 def DeleteConnection(self, connection): |
1358 if connection.GetType() == CONTINUATION: |
1418 if connection.GetType() == CONTINUATION: |
1359 elements = connection.GetConnector().GetConnectedBlocks() |
1419 elements = connection.GetConnector().GetConnectedBlocks() |
1360 else: |
1420 else: |
1361 elements = [] |
1421 elements = [] |
1362 connection.Clean() |
1422 connection.Clean() |
1363 self.Blocks.remove(connection) |
1423 self.RemoveBlock(connection) |
1364 self.Elements.remove(connection) |
|
1365 self.Controler.RemoveCurrentElementEditingInstance(connection.GetId()) |
1424 self.Controler.RemoveCurrentElementEditingInstance(connection.GetId()) |
1366 for element in elements: |
1425 for element in elements: |
1367 element.RefreshModel() |
1426 element.RefreshModel() |
1368 |
1427 |
1369 def DeleteComment(self, comment): |
1428 def DeleteComment(self, comment): |
1370 self.Elements.remove(comment) |
1429 self.RemoveComment(comment) |
1371 self.Controler.RemoveCurrentElementEditingInstance(comment.GetId()) |
1430 self.Controler.RemoveCurrentElementEditingInstance(comment.GetId()) |
1372 |
1431 |
1373 def DeleteWire(self, wire): |
1432 def DeleteWire(self, wire): |
1374 if wire in self.Wires: |
1433 if wire in self.Wires: |
1375 connected = wire.GetConnected() |
1434 connected = wire.GetConnected() |
1376 wire.Clean() |
1435 wire.Clean() |
1377 self.Wires.remove(wire) |
1436 self.RemoveWire(wire) |
1378 self.Elements.remove(wire) |
|
1379 for connector in connected: |
1437 for connector in connected: |
1380 connector.RefreshParentBlock() |
1438 connector.RefreshParentBlock() |
1381 |
1439 |
1382 def DeleteContact(self, contact): |
1440 def DeleteContact(self, contact): |
1383 connectors = contact.GetConnectors() |
1441 connectors = contact.GetConnectors() |
1384 elements = connectors["output"].GetConnectedBlocks() |
1442 elements = connectors["output"].GetConnectedBlocks() |
1385 contact.Clean() |
1443 contact.Clean() |
1386 self.Blocks.remove(contact) |
1444 self.RemoveBlock(contact) |
1387 self.Elements.remove(contact) |
|
1388 self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) |
1445 self.Controler.RemoveCurrentElementEditingInstance(contact.GetId()) |
1389 for element in elements: |
1446 for element in elements: |
1390 element.RefreshModel() |
1447 element.RefreshModel() |
1391 |
1448 |
1392 def DeleteCoil(self, coil): |
1449 def DeleteCoil(self, coil): |
1393 connectors = coil.GetConnectors() |
1450 connectors = coil.GetConnectors() |
1394 elements = connectors["output"].GetConnectedBlocks() |
1451 elements = connectors["output"].GetConnectedBlocks() |
1395 coil.Clean() |
1452 coil.Clean() |
1396 self.Blocks.remove(coil) |
1453 self.RemoveBlock(coil) |
1397 self.Elements.remove(coil) |
|
1398 self.Controler.RemoveCurrentElementEditingInstance(coil.GetId()) |
1454 self.Controler.RemoveCurrentElementEditingInstance(coil.GetId()) |
1399 for element in elements: |
1455 for element in elements: |
1400 element.RefreshModel() |
1456 element.RefreshModel() |
1401 |
1457 |
1402 def DeletePowerRail(self, powerrail): |
1458 def DeletePowerRail(self, powerrail): |
1451 for output in connectors["outputs"]: |
1504 for output in connectors["outputs"]: |
1452 for element in output.GetConnectedBlocks(): |
1505 for element in output.GetConnectedBlocks(): |
1453 if element not in elements: |
1506 if element not in elements: |
1454 elements.append(element) |
1507 elements.append(element) |
1455 divergence.Clean() |
1508 divergence.Clean() |
1456 self.Blocks.remove(divergence) |
1509 self.RemoveBlock(divergence) |
1457 self.Elements.remove(divergence) |
|
1458 self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId()) |
1510 self.Controler.RemoveCurrentElementEditingInstance(divergence.GetId()) |
1459 for element in elements: |
1511 for element in elements: |
1460 element.RefreshModel() |
1512 element.RefreshModel() |
1461 |
1513 |
1462 def DeleteJump(self, jump): |
1514 def DeleteJump(self, jump): |
1463 jump.Clean() |
1515 jump.Clean() |
1464 self.Blocks.remove(jump) |
1516 self.RemoveBlock(jump) |
1465 self.Elements.remove(jump) |
|
1466 self.Controler.RemoveCurrentElementEditingInstance(jump.GetId()) |
1517 self.Controler.RemoveCurrentElementEditingInstance(jump.GetId()) |
1467 |
1518 |
1468 def DeleteActionBlock(self, actionblock): |
1519 def DeleteActionBlock(self, actionblock): |
1469 actionblock.Clean() |
1520 actionblock.Clean() |
1470 self.Blocks.remove(actionblock) |
1521 self.RemoveBlock(actionblock) |
1471 self.Elements.remove(actionblock) |
|
1472 self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId()) |
1522 self.Controler.RemoveCurrentElementEditingInstance(actionblock.GetId()) |
1473 |
1523 |
1474 |
1524 |
1475 #------------------------------------------------------------------------------- |
1525 #------------------------------------------------------------------------------- |
1476 # Editing functions |
1526 # Editing functions |
1501 width, height = dc.GetSize() |
1551 width, height = dc.GetSize() |
1502 for i in xrange(1, width / self.Scaling[0] + 1): |
1552 for i in xrange(1, width / self.Scaling[0] + 1): |
1503 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height) |
1553 dc.DrawLine(i * self.Scaling[0], 0, i * self.Scaling[0], height) |
1504 for i in xrange(1, height / self.Scaling[1] + 1): |
1554 for i in xrange(1, height / self.Scaling[1] + 1): |
1505 dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1]) |
1555 dc.DrawLine(0, i * self.Scaling[1], width, i * self.Scaling[1]) |
|
1556 for comment in self.Comments: |
|
1557 if comment != self.SelectedElement: |
|
1558 comment.Draw(dc) |
1506 for wire in self.Wires: |
1559 for wire in self.Wires: |
1507 if wire != self.SelectedElement: |
1560 if wire != self.SelectedElement: |
1508 wire.Draw(dc) |
1561 wire.Draw(dc) |
1509 for element in self.Elements: |
1562 for block in self.Blocks: |
1510 if element not in self.Wires and element != self.SelectedElement: |
1563 if block != self.SelectedElement: |
1511 element.Draw(dc) |
1564 block.Draw(dc) |
1512 if self.SelectedElement: |
1565 if self.SelectedElement: |
1513 self.SelectedElement.Draw(dc) |
1566 self.SelectedElement.Draw(dc) |
1514 if self.rubberBand.IsShown(): |
1567 if self.rubberBand.IsShown(): |
1515 self.rubberBand.Draw() |
1568 self.rubberBand.Draw() |
1516 event.Skip() |
1569 event.Skip() |