2440 self.ParentWindow.RefreshVariablePanel(self.TagName) |
2440 self.ParentWindow.RefreshVariablePanel(self.TagName) |
2441 self.ParentWindow.RefreshInstancesTree() |
2441 self.ParentWindow.RefreshInstancesTree() |
2442 self.RefreshRect(self.GetScrolledRect(rect), False) |
2442 self.RefreshRect(self.GetScrolledRect(rect), False) |
2443 |
2443 |
2444 def Copy(self): |
2444 def Copy(self): |
2445 if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)): |
2445 if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)): |
2446 self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) |
2446 self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self)) |
2447 |
2447 |
2448 def Paste(self): |
2448 def Paste(self): |
2449 element = self.ParentWindow.GetCopyBuffer() |
2449 element = self.ParentWindow.GetCopyBuffer() |
2450 if not self.Debug and element is not None and self.CanAddBlock(element): |
2450 if not self.Debug and element is not None and self.CanAddElement(element): |
2451 block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30))) |
2451 block = self.CopyBlock(element, wx.Point(*self.CalcUnscrolledPosition(30, 30))) |
2452 if self.SelectedElement is not None: |
2452 if self.SelectedElement is not None: |
2453 self.SelectedElement.SetSelected(False) |
2453 self.SelectedElement.SetSelected(False) |
2454 self.SelectedElement = block |
2454 self.SelectedElement = block |
2455 self.SelectedElement.SetSelected(True) |
2455 self.SelectedElement.SetSelected(True) |
2456 self.RefreshBuffer() |
2456 self.RefreshBuffer() |
2457 self.RefreshScrollBars() |
2457 self.RefreshScrollBars() |
2458 self.RefreshVisibleElements() |
2458 self.RefreshVisibleElements() |
2459 self.ParentWindow.RefreshVariablePanel(self.TagName) |
2459 self.ParentWindow.RefreshVariablePanel(self.TagName) |
2460 self.ParentWindow.RefreshInstancesTree() |
2460 self.ParentWindow.RefreshInstancesTree() |
2461 |
2461 else: |
2462 def CanAddBlock(self, block): |
2462 message = wx.MessageDialog(self, "You can't paste the element in buffer here!", "Error", wx.OK|wx.ICON_ERROR) |
2463 if self.CurrentLanguage == "SFC": |
2463 message.ShowModal() |
|
2464 message.Destroy() |
|
2465 |
|
2466 def CanAddElement(self, block): |
|
2467 if isinstance(block, Graphic_Group): |
|
2468 return block.CanAddBlocks(self) |
|
2469 elif self.CurrentLanguage == "SFC": |
2464 return True |
2470 return True |
2465 elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)): |
2471 elif self.CurrentLanguage == "LD" and not isinstance(block, (SFC_Step, SFC_Transition, SFC_Divergence, SFC_Jump, SFC_ActionBlock)): |
2466 return True |
2472 return True |
2467 elif self.CurrentLanguage == "FBD" and isinstance(block, (FBD_Block, FBD_Variable, FBD_Connector, Comment)): |
2473 elif self.CurrentLanguage == "FBD" and isinstance(block, (FBD_Block, FBD_Variable, FBD_Connector, Comment)): |
2468 return True |
2474 return True |
2469 return False |
2475 return False |
2470 |
2476 |
|
2477 def GenerateNewName(self, element): |
|
2478 if isinstance(element, FBD_Block): |
|
2479 names = [varname.upper() for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)] |
|
2480 format = "Block%d" |
|
2481 elif isinstance(element, SFC_Step): |
|
2482 names = [block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)] |
|
2483 format = "Step%d" |
|
2484 i = 1 |
|
2485 while (format%i).upper() in names: |
|
2486 i += 1 |
|
2487 return format%i |
|
2488 |
|
2489 def IsNamedElement(self, element): |
|
2490 return isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step) |
|
2491 |
2471 def CopyBlock(self, element, pos): |
2492 def CopyBlock(self, element, pos): |
2472 id = self.GetNewId() |
2493 id = self.GetNewId() |
2473 if isinstance(element, FBD_Block) and element.GetName() != "" or isinstance(element, SFC_Step): |
2494 if isinstance(element, Graphic_Group): |
2474 if isinstance(element, FBD_Block): |
2495 block = element.Clone(self, pos=pos) |
2475 names = [varname.upper() for varname in self.Controler.GetEditedElementVariables(self.TagName, self.Debug)] |
|
2476 format = "Block%d" |
|
2477 elif isinstance(element, SFC_Step): |
|
2478 names = [block.GetName().upper() for block in self.Blocks if isinstance(block, SFC_Step)] |
|
2479 format = "Step%d" |
|
2480 i = 1 |
|
2481 while (format%i).upper() in names: |
|
2482 i += 1 |
|
2483 name = format%i |
|
2484 block = element.Clone(self, id, name, pos) |
|
2485 else: |
2496 else: |
2486 name = None |
2497 if self.IsNamedElement(element): |
2487 block = element.Clone(self, id, pos=pos) |
2498 name = self.GenerateNewName(element) |
|
2499 block = element.Clone(self, id, name, pos) |
|
2500 else: |
|
2501 name = None |
|
2502 block = element.Clone(self, id, pos=pos) |
|
2503 self.AddBlockInModel(block) |
|
2504 return block |
|
2505 |
|
2506 def AddBlockInModel(self, block): |
2488 if isinstance(block, Comment): |
2507 if isinstance(block, Comment): |
2489 self.AddComment(block) |
2508 self.AddComment(block) |
2490 self.Controler.AddEditedElementComment(self.TagName, id) |
2509 self.Controler.AddEditedElementComment(self.TagName, block.GetId()) |
2491 self.RefreshCommentModel(block) |
2510 self.RefreshCommentModel(block) |
2492 else: |
2511 else: |
2493 self.AddBlock(block) |
2512 self.AddBlock(block) |
2494 if isinstance(block, FBD_Block): |
2513 if isinstance(block, FBD_Block): |
2495 self.Controler.AddEditedElementBlock(self.TagName, id, block.GetType(), name) |
2514 self.Controler.AddEditedElementBlock(self.TagName, block.GetId(), block.GetType(), block.GetName()) |
2496 self.RefreshBlockModel(block) |
2515 self.RefreshBlockModel(block) |
2497 elif isinstance(block, FBD_Variable): |
2516 elif isinstance(block, FBD_Variable): |
2498 self.Controler.AddEditedElementVariable(self.TagName, id, block.GetType()) |
2517 self.Controler.AddEditedElementVariable(self.TagName, block.GetId(), block.GetType()) |
2499 self.RefreshVariableModel(block) |
2518 self.RefreshVariableModel(block) |
2500 elif isinstance(block, FBD_Connector): |
2519 elif isinstance(block, FBD_Connector): |
2501 self.Controler.AddEditedElementConnection(self.TagName, id, block.GetType()) |
2520 self.Controler.AddEditedElementConnection(self.TagName, block.GetId(), block.GetType()) |
2502 self.RefreshConnectionModel(block) |
2521 self.RefreshConnectionModel(block) |
2503 elif isinstance(block, LD_Contact): |
2522 elif isinstance(block, LD_Contact): |
2504 self.Controler.AddEditedElementContact(self.TagName, id) |
2523 self.Controler.AddEditedElementContact(self.TagName, block.GetId()) |
2505 self.RefreshContactModel(block) |
2524 self.RefreshContactModel(block) |
2506 elif isinstance(block, LD_Coil): |
2525 elif isinstance(block, LD_Coil): |
2507 self.Controler.AddEditedElementCoil(self.TagName, id) |
2526 self.Controler.AddEditedElementCoil(self.TagName, block.GetId()) |
2508 self.RefreshCoilModel(block) |
2527 self.RefreshCoilModel(block) |
2509 elif isinstance(block, LD_PowerRail): |
2528 elif isinstance(block, LD_PowerRail): |
2510 self.Controler.AddEditedElementPowerRail(self.TagName, id, block.GetType()) |
2529 self.Controler.AddEditedElementPowerRail(self.TagName, block.GetId(), block.GetType()) |
2511 self.RefreshPowerRailModel(block) |
2530 self.RefreshPowerRailModel(block) |
2512 elif isinstance(block, SFC_Step): |
2531 elif isinstance(block, SFC_Step): |
2513 self.Controler.AddEditedElementStep(self.TagName, id) |
2532 self.Controler.AddEditedElementStep(self.TagName, block.GetId()) |
2514 self.RefreshStepModel(block) |
2533 self.RefreshStepModel(block) |
2515 elif isinstance(block, SFC_Transition): |
2534 elif isinstance(block, SFC_Transition): |
2516 self.Controler.AddEditedElementTransition(self.TagName, id) |
2535 self.Controler.AddEditedElementTransition(self.TagName, block.GetId()) |
2517 self.RefreshTransitionModel(block) |
2536 self.RefreshTransitionModel(block) |
2518 elif isinstance(block, SFC_Divergence): |
2537 elif isinstance(block, SFC_Divergence): |
2519 self.Controler.AddEditedElementDivergence(self.TagName, id, block.GetType()) |
2538 self.Controler.AddEditedElementDivergence(self.TagName, block.GetId(), block.GetType()) |
2520 self.RefreshDivergenceModel(block) |
2539 self.RefreshDivergenceModel(block) |
2521 elif isinstance(block, SFC_Jump): |
2540 elif isinstance(block, SFC_Jump): |
2522 self.Controler.AddEditedElementJump(self.TagName, id) |
2541 self.Controler.AddEditedElementJump(self.TagName, block.GetId()) |
2523 self.RefreshJumpModel(block) |
2542 self.RefreshJumpModel(block) |
2524 elif isinstance(block, SFC_ActionBlock): |
2543 elif isinstance(block, SFC_ActionBlock): |
2525 self.Controler.AddEditedElementActionBlock(self.TagName, id) |
2544 self.Controler.AddEditedElementActionBlock(self.TagName, block.GetId()) |
2526 self.RefreshActionBlockModel(block) |
2545 self.RefreshActionBlockModel(block) |
2527 return block |
|
2528 |
2546 |
2529 |
2547 |
2530 #------------------------------------------------------------------------------- |
2548 #------------------------------------------------------------------------------- |
2531 # Errors showing functions |
2549 # Errors showing functions |
2532 #------------------------------------------------------------------------------- |
2550 #------------------------------------------------------------------------------- |