Viewer.py
changeset 118 0c53d6a36013
parent 114 06454545e5d0
child 121 40b91ba978db
equal deleted inserted replaced
117:bbe0697cf1ea 118:0c53d6a36013
    47 [ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1,
    47 [ID_FBDVIEWERCONTEXTUALMENUITEMS0, ID_FBDVIEWERCONTEXTUALMENUITEMS1,
    48  ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3,
    48  ID_FBDVIEWERCONTEXTUALMENUITEMS2, ID_FBDVIEWERCONTEXTUALMENUITEMS3,
    49  ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6,
    49  ID_FBDVIEWERCONTEXTUALMENUITEMS5, ID_FBDVIEWERCONTEXTUALMENUITEMS6,
    50  ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9,
    50  ID_FBDVIEWERCONTEXTUALMENUITEMS8, ID_FBDVIEWERCONTEXTUALMENUITEMS9,
    51  ID_FBDVIEWERCONTEXTUALMENUITEMS11, ID_FBDVIEWERCONTEXTUALMENUITEMS12,
    51  ID_FBDVIEWERCONTEXTUALMENUITEMS11, ID_FBDVIEWERCONTEXTUALMENUITEMS12,
    52 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(10)]
    52  ID_FBDVIEWERCONTEXTUALMENUITEMS14, ID_FBDVIEWERCONTEXTUALMENUITEMS15,
       
    53 ] = [wx.NewId() for _init_coll_ContextualMenu_Items in range(12)]
    53 
    54 
    54 
    55 
    55 class ViewerDropTarget(wx.TextDropTarget):
    56 class ViewerDropTarget(wx.TextDropTarget):
    56     
    57     
    57     def __init__(self, parent):
    58     def __init__(self, parent):
   153               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   154               kind=wx.ITEM_NORMAL, text=u'Add Divergence Branch')
   154         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9,
   155         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS9,
   155               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   156               kind=wx.ITEM_NORMAL, text=u'Delete Divergence Branch')
   156         parent.AppendSeparator()
   157         parent.AppendSeparator()
   157         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11,
   158         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS11,
       
   159               kind=wx.ITEM_NORMAL, text=u'Clear Execution Order')
       
   160         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS12,
       
   161               kind=wx.ITEM_NORMAL, text=u'Reset Execution Order')
       
   162         parent.AppendSeparator()
       
   163         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS14,
   158               kind=wx.ITEM_NORMAL, text=u'Edit Block')
   164               kind=wx.ITEM_NORMAL, text=u'Edit Block')
   159         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS12,
   165         AppendMenu(parent, help='', id=ID_FBDVIEWERCONTEXTUALMENUITEMS15,
   160               kind=wx.ITEM_NORMAL, text=u'Delete')
   166               kind=wx.ITEM_NORMAL, text=u'Delete')
   161         # Link menu event to corresponding called functions
   167         # Link menu event to corresponding called functions
   162         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   168         self.Bind(wx.EVT_MENU, self.OnNoModifierMenu,
   163               id=ID_FBDVIEWERCONTEXTUALMENUITEMS0)
   169               id=ID_FBDVIEWERCONTEXTUALMENUITEMS0)
   164         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   170         self.Bind(wx.EVT_MENU, self.OnNegatedMenu,
   173               id=ID_FBDVIEWERCONTEXTUALMENUITEMS6)
   179               id=ID_FBDVIEWERCONTEXTUALMENUITEMS6)
   174         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   180         self.Bind(wx.EVT_MENU, self.OnAddBranchMenu,
   175               id=ID_FBDVIEWERCONTEXTUALMENUITEMS8)
   181               id=ID_FBDVIEWERCONTEXTUALMENUITEMS8)
   176         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   182         self.Bind(wx.EVT_MENU, self.OnDeleteBranchMenu,
   177               id=ID_FBDVIEWERCONTEXTUALMENUITEMS9)
   183               id=ID_FBDVIEWERCONTEXTUALMENUITEMS9)
       
   184         self.Bind(wx.EVT_MENU, self.OnClearExecutionOrderMenu,
       
   185               id=ID_FBDVIEWERCONTEXTUALMENUITEMS11)
       
   186         self.Bind(wx.EVT_MENU, self.OnResetExecutionOrderMenu,
       
   187               id=ID_FBDVIEWERCONTEXTUALMENUITEMS12)
   178         self.Bind(wx.EVT_MENU, self.OnEditBlockMenu,
   188         self.Bind(wx.EVT_MENU, self.OnEditBlockMenu,
   179               id=ID_FBDVIEWERCONTEXTUALMENUITEMS11)
   189               id=ID_FBDVIEWERCONTEXTUALMENUITEMS14)
   180         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   190         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   181               id=ID_FBDVIEWERCONTEXTUALMENUITEMS12)
   191               id=ID_FBDVIEWERCONTEXTUALMENUITEMS15)
   182     
   192     
   183     # Create and initialize Contextual Menu
   193     # Create and initialize Contextual Menu
   184     def _init_menus(self):
   194     def _init_menus(self):
   185         self.ContextualMenu = wx.Menu(title='')
   195         self.ContextualMenu = wx.Menu(title='')
   186         
   196         
   386     # Load instance from given informations
   396     # Load instance from given informations
   387     def loadInstance(self, instance, ids):
   397     def loadInstance(self, instance, ids):
   388         ids.append(instance["id"])
   398         ids.append(instance["id"])
   389         self.current_id = max(self.current_id, instance["id"]) 
   399         self.current_id = max(self.current_id, instance["id"]) 
   390         if instance["type"] == "input":
   400         if instance["type"] == "input":
   391             variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"])
   401             variable = FBD_Variable(self, INPUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"])
   392             variable.SetPosition(instance["x"], instance["y"])
   402             variable.SetPosition(instance["x"], instance["y"])
   393             variable.SetSize(instance["width"], instance["height"])
   403             variable.SetSize(instance["width"], instance["height"])
   394             self.AddBlock(variable)
   404             self.AddBlock(variable)
   395             connectors = variable.GetConnectors()
   405             connectors = variable.GetConnectors()
   396             connectors["output"].SetPosition(wx.Point(*instance["connector"]["position"]))
   406             connectors["output"].SetPosition(wx.Point(*instance["connector"]["position"]))
   397             if instance["connector"]["negated"]:
   407             if instance["connector"]["negated"]:
   398                 connectors["output"].SetNegated(True)
   408                 connectors["output"].SetNegated(True)
   399             if instance["connector"]["edge"]:
   409             if instance["connector"]["edge"]:
   400                 connectors["output"].SetEdge(instance["connector"]["edge"])
   410                 connectors["output"].SetEdge(instance["connector"]["edge"])
   401         elif instance["type"] == "output":
   411         elif instance["type"] == "output":
   402             variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"])
   412             variable = FBD_Variable(self, OUTPUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"])
   403             variable.SetPosition(instance["x"], instance["y"])
   413             variable.SetPosition(instance["x"], instance["y"])
   404             variable.SetSize(instance["width"], instance["height"])
   414             variable.SetSize(instance["width"], instance["height"])
   405             self.AddBlock(variable)
   415             self.AddBlock(variable)
   406             connectors = variable.GetConnectors()
   416             connectors = variable.GetConnectors()
   407             connectors["input"].SetPosition(wx.Point(*instance["connector"]["position"]))
   417             connectors["input"].SetPosition(wx.Point(*instance["connector"]["position"]))
   409                 connectors["input"].SetNegated(True)
   419                 connectors["input"].SetNegated(True)
   410             if instance["connector"]["edge"]:
   420             if instance["connector"]["edge"]:
   411                 connectors["input"].SetEdge(instance["connector"]["edge"])
   421                 connectors["input"].SetEdge(instance["connector"]["edge"])
   412             self.CreateWires(connectors["input"], instance["connector"]["links"], ids)
   422             self.CreateWires(connectors["input"], instance["connector"]["links"], ids)
   413         elif instance["type"] == "inout":
   423         elif instance["type"] == "inout":
   414             variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"])
   424             variable = FBD_Variable(self, INOUT, instance["name"], instance["value_type"], instance["id"], instance["executionOrder"])
   415             variable.SetPosition(instance["x"], instance["y"])
   425             variable.SetPosition(instance["x"], instance["y"])
   416             variable.SetSize(instance["width"], instance["height"])
   426             variable.SetSize(instance["width"], instance["height"])
   417             self.AddBlock(variable)
   427             self.AddBlock(variable)
   418             connectors = variable.GetConnectors()
   428             connectors = variable.GetConnectors()
   419             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   429             connectors["output"].SetPosition(wx.Point(*instance["connectors"]["output"]["position"]))
   597                 elif output["edge"]:
   607                 elif output["edge"]:
   598                     connectors["outputs"].append((output["name"], None, output["edge"]))
   608                     connectors["outputs"].append((output["name"], None, output["edge"]))
   599                 else:
   609                 else:
   600                     connectors["outputs"].append((output["name"], None, "none"))
   610                     connectors["outputs"].append((output["name"], None, "none"))
   601             if instance["name"] != None:
   611             if instance["name"] != None:
   602                 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors)
   612                 block = FBD_Block(self, instance["type"], instance["name"], instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors, executionOrder=instance["executionOrder"])
   603             else:
   613             else:
   604                 block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors)
   614                 block = FBD_Block(self, instance["type"], "", instance["id"], len(instance["connectors"]["inputs"]), connectors=connectors, executionOrder=instance["executionOrder"])
   605             block.SetPosition(instance["x"], instance["y"])
   615             block.SetPosition(instance["x"], instance["y"])
   606             block.SetSize(instance["width"], instance["height"])
   616             block.SetSize(instance["width"], instance["height"])
   607             self.AddBlock(block)
   617             self.AddBlock(block)
   608             connectors = block.GetConnectors()
   618             connectors = block.GetConnectors()
   609             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   619             for i, input_connector in enumerate(instance["connectors"]["inputs"]):
   696 #-------------------------------------------------------------------------------
   706 #-------------------------------------------------------------------------------
   697 
   707 
   698     def PopupBlockMenu(self, connector = None):
   708     def PopupBlockMenu(self, connector = None):
   699         if connector is not None and connector.IsCompatible("BOOL"):
   709         if connector is not None and connector.IsCompatible("BOOL"):
   700             type = self.Controler.GetCurrentElementEditingType()
   710             type = self.Controler.GetCurrentElementEditingType()
   701             self.ContextualMenu.FindItemByPosition(0).Enable(True)
   711             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, True)
   702             self.ContextualMenu.FindItemByPosition(1).Enable(True)
   712             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, True)
   703             self.ContextualMenu.FindItemByPosition(2).Enable(type != "function")
   713             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, type != "function")
   704             self.ContextualMenu.FindItemByPosition(3).Enable(type != "function")
   714             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, type != "function")
   705         else:
   715         else:
   706             self.ContextualMenu.FindItemByPosition(0).Enable(False)
   716             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False)
   707             self.ContextualMenu.FindItemByPosition(1).Enable(False)
   717             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False)
   708             self.ContextualMenu.FindItemByPosition(2).Enable(False)
   718             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False)
   709             self.ContextualMenu.FindItemByPosition(3).Enable(False)
   719             self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False)
   710         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   720         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False)
   711         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   721         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False)
   712         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   722         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False)
   713         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   723         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False)
   714         self.ContextualMenu.FindItemByPosition(11).Enable(self.SelectedElement.GetType() in self.Controler.GetProjectPouNames())
   724         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, self.SelectedElement.GetType() in self.Controler.GetProjectPouNames())
       
   725         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True)
   715         if connector:
   726         if connector:
   716             if connector.IsNegated():
   727             if connector.IsNegated():
   717                 self.ContextualMenu.FindItemByPosition(1).Check(True)
   728                 self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS1, True)
   718             elif connector.GetEdge() == "rising":
   729             elif connector.GetEdge() == "rising":
   719                 self.ContextualMenu.FindItemByPosition(2).Check(True)
   730                 self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS2, True)
   720             elif connector.GetEdge() == "falling":
   731             elif connector.GetEdge() == "falling":
   721                 self.ContextualMenu.FindItemByPosition(3).Check(True)
   732                 self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS3, True)
   722             else:
   733             else:
   723                 self.ContextualMenu.FindItemByPosition(0).Check(True)
   734                 self.ContextualMenu.Check(ID_FBDVIEWERCONTEXTUALMENUITEMS0, True)
   724         self.PopupMenu(self.ContextualMenu)
   735         self.PopupMenu(self.ContextualMenu)
   725     
   736     
   726     def PopupWireMenu(self):
   737     def PopupWireMenu(self):
   727         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   738         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False)
   728         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   739         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False)
   729         self.ContextualMenu.FindItemByPosition(2).Enable(False)
   740         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False)
   730         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   741         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False)
   731         self.ContextualMenu.FindItemByPosition(5).Enable(True)
   742         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, True)
   732         self.ContextualMenu.FindItemByPosition(6).Enable(True)
   743         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, True)
   733         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   744         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False)
   734         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   745         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False)
   735         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   746         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False)
       
   747         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True)
   736         self.PopupMenu(self.ContextualMenu)
   748         self.PopupMenu(self.ContextualMenu)
   737     
   749     
   738     def PopupDivergenceMenu(self, connector):
   750     def PopupDivergenceMenu(self, connector):
   739         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   751         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False)
   740         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   752         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False)
   741         self.ContextualMenu.FindItemByPosition(2).Enable(False)
   753         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False)
   742         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   754         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False)
   743         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   755         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False)
   744         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   756         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False)
   745         self.ContextualMenu.FindItemByPosition(8).Enable(True)
   757         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, True)
   746         self.ContextualMenu.FindItemByPosition(9).Enable(connector)
   758         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, connector)
   747         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   759         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False)
       
   760         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, True)
   748         self.PopupMenu(self.ContextualMenu)
   761         self.PopupMenu(self.ContextualMenu)
   749     
   762     
   750     def PopupDefaultMenu(self):
   763     def PopupDefaultMenu(self, block = True):
   751         self.ContextualMenu.FindItemByPosition(0).Enable(False)
   764         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS0, False)
   752         self.ContextualMenu.FindItemByPosition(1).Enable(False)
   765         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS1, False)
   753         self.ContextualMenu.FindItemByPosition(2).Enable(False)
   766         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS2, False)
   754         self.ContextualMenu.FindItemByPosition(3).Enable(False)
   767         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS3, False)
   755         self.ContextualMenu.FindItemByPosition(5).Enable(False)
   768         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS5, False)
   756         self.ContextualMenu.FindItemByPosition(6).Enable(False)
   769         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS6, False)
   757         self.ContextualMenu.FindItemByPosition(8).Enable(False)
   770         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS8, False)
   758         self.ContextualMenu.FindItemByPosition(9).Enable(False)
   771         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS9, False)
   759         self.ContextualMenu.FindItemByPosition(11).Enable(False)
   772         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS14, False)
       
   773         self.ContextualMenu.Enable(ID_FBDVIEWERCONTEXTUALMENUITEMS15, block)
   760         self.PopupMenu(self.ContextualMenu)
   774         self.PopupMenu(self.ContextualMenu)
   761 
   775 
   762 #-------------------------------------------------------------------------------
   776 #-------------------------------------------------------------------------------
   763 #                            Menu items functions
   777 #                            Menu items functions
   764 #-------------------------------------------------------------------------------
   778 #-------------------------------------------------------------------------------
   818         if self.SelectedElement:
   832         if self.SelectedElement:
   819             self.SelectedElement.Delete()
   833             self.SelectedElement.Delete()
   820             self.SelectedElement = None
   834             self.SelectedElement = None
   821             self.RefreshBuffer()
   835             self.RefreshBuffer()
   822         event.Skip()
   836         event.Skip()
       
   837 
       
   838     def OnClearExecutionOrderMenu(self, event):
       
   839         self.Controler.ClearCurrentExecutionOrder()
       
   840         self.RefreshBuffer()
       
   841         self.RefreshView()
       
   842         
       
   843     def OnResetExecutionOrderMenu(self, event):
       
   844         self.Controler.ResetCurrentExecutionOrder()
       
   845         self.RefreshBuffer()
       
   846         self.RefreshView()
   823 
   847 
   824 #-------------------------------------------------------------------------------
   848 #-------------------------------------------------------------------------------
   825 #                          Mouse event functions
   849 #                          Mouse event functions
   826 #-------------------------------------------------------------------------------
   850 #-------------------------------------------------------------------------------
   827 
   851 
   960             self.SelectedElement.SetSelected(True)
   984             self.SelectedElement.SetSelected(True)
   961             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
   985             self.SelectedElement.OnRightUp(event, self.GetLogicalDC(), self.Scaling)
   962             wx.CallAfter(self.SetCursor, wx.NullCursor)
   986             wx.CallAfter(self.SetCursor, wx.NullCursor)
   963             self.ReleaseMouse()
   987             self.ReleaseMouse()
   964             self.Refresh(False)
   988             self.Refresh(False)
       
   989         else:
       
   990             self.PopupDefaultMenu(False)
   965         event.Skip()
   991         event.Skip()
   966     
   992     
   967     def OnViewerLeftDClick(self, event):
   993     def OnViewerLeftDClick(self, event):
   968         if self.Mode == MODE_SELECTION and self.SelectedElement:
   994         if self.Mode == MODE_SELECTION and self.SelectedElement:
   969             if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames():
   995             if event.ControlDown() and self.IsBlock(self.SelectedElement) and self.SelectedElement.GetType() in self.Controler.GetProjectPouNames():
  1359 
  1385 
  1360     def EditBlockContent(self, block):
  1386     def EditBlockContent(self, block):
  1361         dialog = BlockPropertiesDialog(self.ParentWindow)
  1387         dialog = BlockPropertiesDialog(self.ParentWindow)
  1362         dialog.SetBlockList(self.Controler.GetBlockTypes())
  1388         dialog.SetBlockList(self.Controler.GetBlockTypes())
  1363         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1389         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1364         dialog.SetPouElementNames(self.Controler.GetCurrentElementEditingVariables())
  1390         variable_names = self.Controler.GetCurrentElementEditingVariables()
       
  1391         if block.GetName() != "":
       
  1392             variable_names.remove(block.GetName())
       
  1393         dialog.SetPouElementNames(variable_names)
  1365         dialog.SetMinBlockSize(block.GetSize())
  1394         dialog.SetMinBlockSize(block.GetSize())
  1366         values = {"name" : block.GetName(), "type" : block.GetType(), "inputs" : block.GetInputTypes()}
  1395         old_values = {"name" : block.GetName(), "type" : block.GetType(), "inputs" : block.GetInputTypes(), 
  1367         values["extension"] = block.GetExtension()
  1396             "executionOrder" : block.GetExecutionOrder(), "extension" : block.GetExtension()}
  1368         dialog.SetValues(values)
  1397         dialog.SetValues(old_values)
  1369         if dialog.ShowModal() == wx.ID_OK:
  1398         if dialog.ShowModal() == wx.ID_OK:
  1370             values = dialog.GetValues()
  1399             new_values = dialog.GetValues()
  1371             if "name" in values:
  1400             if "name" in new_values:
  1372                 block.SetName(values["name"])
  1401                 block.SetName(new_values["name"])
  1373             block.SetSize(values["width"], values["height"])
  1402             block.SetSize(new_values["width"], new_values["height"])
  1374             block.SetType(values["type"], values["extension"])
  1403             block.SetType(new_values["type"], new_values["extension"])
       
  1404             block.SetExecutionOrder(new_values["executionOrder"])
  1375             self.RefreshBlockModel(block)
  1405             self.RefreshBlockModel(block)
       
  1406             if old_values["executionOrder"] != new_values["executionOrder"]:
       
  1407                 self.RefreshView()
  1376             self.RefreshBuffer()
  1408             self.RefreshBuffer()
  1377             self.RefreshScrollBars()
  1409             self.RefreshScrollBars()
  1378             self.ParentWindow.RefreshEditor()
  1410             self.ParentWindow.RefreshEditor()
  1379             self.Refresh(False)
  1411             self.Refresh(False)
  1380         dialog.Destroy()
  1412         dialog.Destroy()
  1390                     varlist.append((var["Name"], var["Class"], var["Type"]))
  1422                     varlist.append((var["Name"], var["Class"], var["Type"]))
  1391         returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
  1423         returntype = self.Controler.GetCurrentElementEditingInterfaceReturnType()
  1392         if returntype:
  1424         if returntype:
  1393             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1425             varlist.append((self.Controler.GetCurrentElementEditingName(), "Output", returntype))
  1394         dialog.SetVariables(varlist)
  1426         dialog.SetVariables(varlist)
  1395         values = {"name" : variable.GetName(), "type" : variable.GetType()}
  1427         old_values = {"name" : variable.GetName(), "type" : variable.GetType(), 
  1396         dialog.SetValues(values)
  1428             "executionOrder" : variable.GetExecutionOrder()}
  1397         if dialog.ShowModal() == wx.ID_OK:
  1429         dialog.SetValues(old_values)
  1398             old_type = variable.GetType()
  1430         if dialog.ShowModal() == wx.ID_OK:
  1399             values = dialog.GetValues()
  1431             new_values = dialog.GetValues()
  1400             variable.SetName(values["name"])
  1432             variable.SetName(new_values["name"])
  1401             variable.SetType(values["type"], values["value_type"])
  1433             variable.SetType(new_values["type"], new_values["value_type"])
  1402             variable.SetSize(values["width"], values["height"])
  1434             variable.SetSize(new_values["width"], new_values["height"])
  1403             if old_type != values["type"]:
  1435             variable.SetExecutionOrder(new_values["executionOrder"])
       
  1436             if old_values["type"] != new_values["type"]:
  1404                 id = variable.GetId()
  1437                 id = variable.GetId()
  1405                 self.Controler.RemoveCurrentElementEditingInstance(id)
  1438                 self.Controler.RemoveCurrentElementEditingInstance(id)
  1406                 self.Controler.AddCurrentElementEditingVariable(id, values["type"])
  1439                 self.Controler.AddCurrentElementEditingVariable(id, new_values["type"])
  1407             self.RefreshVariableModel(variable)
  1440             self.RefreshVariableModel(variable)
       
  1441             if old_values["executionOrder"] != new_values["executionOrder"]:
       
  1442                 self.RefreshView()
  1408             self.RefreshBuffer()
  1443             self.RefreshBuffer()
  1409             self.RefreshScrollBars()
  1444             self.RefreshScrollBars()
  1410             self.Refresh(False)
  1445             self.Refresh(False)
  1411         dialog.Destroy()
  1446         dialog.Destroy()
  1412 
  1447 
  1598     def RefreshBlockModel(self, block):
  1633     def RefreshBlockModel(self, block):
  1599         blockid = block.GetId()
  1634         blockid = block.GetId()
  1600         infos = {}
  1635         infos = {}
  1601         infos["type"] = block.GetType()
  1636         infos["type"] = block.GetType()
  1602         infos["name"] = block.GetName()
  1637         infos["name"] = block.GetName()
       
  1638         infos["executionOrder"] = block.GetExecutionOrder()
  1603         infos["x"], infos["y"] = block.GetPosition()
  1639         infos["x"], infos["y"] = block.GetPosition()
  1604         infos["width"], infos["height"] = block.GetSize()
  1640         infos["width"], infos["height"] = block.GetSize()
  1605         infos["connectors"] = block.GetConnectors()
  1641         infos["connectors"] = block.GetConnectors()
  1606         self.Controler.SetCurrentElementEditingBlockInfos(blockid, infos)
  1642         self.Controler.SetCurrentElementEditingBlockInfos(blockid, infos)
  1607     
  1643     
  1608     def RefreshVariableModel(self, variable):
  1644     def RefreshVariableModel(self, variable):
  1609         variableid = variable.GetId()
  1645         variableid = variable.GetId()
  1610         infos = {}
  1646         infos = {}
  1611         infos["name"] = variable.GetName()
  1647         infos["name"] = variable.GetName()
       
  1648         infos["executionOrder"] = variable.GetExecutionOrder()
  1612         infos["x"], infos["y"] = variable.GetPosition()
  1649         infos["x"], infos["y"] = variable.GetPosition()
  1613         infos["width"], infos["height"] = variable.GetSize()
  1650         infos["width"], infos["height"] = variable.GetSize()
  1614         infos["connectors"] = variable.GetConnectors()
  1651         infos["connectors"] = variable.GetConnectors()
  1615         self.Controler.SetCurrentElementEditingVariableInfos(variableid, infos)
  1652         self.Controler.SetCurrentElementEditingVariableInfos(variableid, infos)
  1616 
  1653 
  1617     def RefreshConnectionModel(self, connection):
  1654     def RefreshConnectionModel(self, connection):
  1618         connectionid = connection.GetId()
  1655         connectionid = connection.GetId()
  1619         infos = {}
  1656         infos = {}
  1620         infos["name"] = connection.GetName()
  1657         infos["name"] = connection.GetName()
       
  1658         infos["executionOrder"] = connection.GetExecutionOrder()
  1621         infos["x"], infos["y"] = connection.GetPosition()
  1659         infos["x"], infos["y"] = connection.GetPosition()
  1622         infos["width"], infos["height"] = connection.GetSize()
  1660         infos["width"], infos["height"] = connection.GetSize()
  1623         infos["connector"] = connection.GetConnector()
  1661         infos["connector"] = connection.GetConnector()
  1624         self.Controler.SetCurrentElementEditingConnectionInfos(connectionid, infos)
  1662         self.Controler.SetCurrentElementEditingConnectionInfos(connectionid, infos)
  1625 
  1663