Viewer.py
changeset 283 c4199b88cf60
parent 279 2ad276084038
child 290 56c4fe6b7012
equal deleted inserted replaced
282:a18ddbbc5c58 283:c4199b88cf60
   442     def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False):
   442     def GetElements(self, sort_blocks=False, sort_wires=False, sort_comments=False):
   443         blocks = self.Blocks.keys()
   443         blocks = self.Blocks.keys()
   444         wires = self.Wires.keys()
   444         wires = self.Wires.keys()
   445         comments = self.Comments.keys()
   445         comments = self.Comments.keys()
   446         if sort_blocks:
   446         if sort_blocks:
   447             blocks.sort(lambda x,y:self.Blocks[x].__cmp__(self.Blocks[y]))
   447             blocks.sort(lambda x, y: cmp(self.Blocks[x], self.Blocks[y]))
   448         if sort_wires:
   448         if sort_wires:
   449             wires.sort(lambda x,y:self.Wires[x].__cmp__(self.Wires[y]))
   449             wires.sort(lambda x, y: cmp(self.Wires[x], self.Wires[y]))
   450         if sort_comments:
   450         if sort_comments:
   451             comments.sort(lambda x,y:self.Comments[x].__cmp__(self.Comments[y]))
   451             comments.sort(lambda x, y: cmp(self.Comments[x], self.Comments[y]))
   452         return blocks + wires + comments
   452         return blocks + wires + comments
   453 
   453 
   454     def RefreshVisibleElements(self, xp = None, yp = None):
   454     def RefreshVisibleElements(self, xp = None, yp = None):
   455         x, y = self.CalcUnscrolledPosition(0, 0)
   455         x, y = self.CalcUnscrolledPosition(0, 0)
   456         if xp is not None:
   456         if xp is not None:
  2428 #-------------------------------------------------------------------------------
  2428 #-------------------------------------------------------------------------------
  2429 #                            Editing functions
  2429 #                            Editing functions
  2430 #-------------------------------------------------------------------------------
  2430 #-------------------------------------------------------------------------------
  2431     
  2431     
  2432     def Cut(self):
  2432     def Cut(self):
  2433         if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement)):
  2433         if not self.Debug and (self.IsBlock(self.SelectedElement) or self.IsComment(self.SelectedElement) or isinstance(self.SelectedElement, Graphic_Group)):
  2434             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self))
  2434             self.ParentWindow.SetCopyBuffer(self.SelectedElement.Clone(self))
  2435             rect = self.SelectedElement.GetRedrawRect(1, 1)
  2435             rect = self.SelectedElement.GetRedrawRect(1, 1)
  2436             self.SelectedElement.Delete()
  2436             self.SelectedElement.Delete()
  2437             self.SelectedElement = None
  2437             self.SelectedElement = None
  2438             self.RefreshBuffer()
  2438             self.RefreshBuffer()
  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 #-------------------------------------------------------------------------------