PLCOpenEditor.py
changeset 163 e4949f54c5d6
parent 159 76b2facf14a2
child 171 e3d47b4bbd5d
equal deleted inserted replaced
162:e746ff4aa8be 163:e4949f54c5d6
    72 
    72 
    73 [ID_PLCOPENEDITOREDITMENUITEMS0, ID_PLCOPENEDITOREDITMENUITEMS1, 
    73 [ID_PLCOPENEDITOREDITMENUITEMS0, ID_PLCOPENEDITOREDITMENUITEMS1, 
    74  ID_PLCOPENEDITOREDITMENUITEMS2, ID_PLCOPENEDITOREDITMENUITEMS4, 
    74  ID_PLCOPENEDITOREDITMENUITEMS2, ID_PLCOPENEDITOREDITMENUITEMS4, 
    75  ID_PLCOPENEDITOREDITMENUITEMS5, ID_PLCOPENEDITOREDITMENUITEMS6, 
    75  ID_PLCOPENEDITOREDITMENUITEMS5, ID_PLCOPENEDITOREDITMENUITEMS6, 
    76  ID_PLCOPENEDITOREDITMENUITEMS8, ID_PLCOPENEDITOREDITMENUITEMS9, 
    76  ID_PLCOPENEDITOREDITMENUITEMS8, ID_PLCOPENEDITOREDITMENUITEMS9, 
    77  ID_PLCOPENEDITOREDITMENUITEMS11, ID_PLCOPENEDITOREDITMENUITEMS12, 
    77  ID_PLCOPENEDITOREDITMENUITEMS10, ID_PLCOPENEDITOREDITMENUITEMS11, 
    78  ID_PLCOPENEDITOREDITMENUITEMS14, ID_PLCOPENEDITOREDITMENUITEMS15, 
    78  ID_PLCOPENEDITOREDITMENUITEMS12, ID_PLCOPENEDITOREDITMENUITEMS13, 
    79 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(12)]
    79  ID_PLCOPENEDITOREDITMENUITEMS14,
       
    80 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(13)]
    80 
    81 
    81 [ID_PLCOPENEDITORSFCMENUITEMS0, ID_PLCOPENEDITORSFCMENUITEMS1, 
    82 [ID_PLCOPENEDITORSFCMENUITEMS0, ID_PLCOPENEDITORSFCMENUITEMS1, 
    82  ID_PLCOPENEDITORSFCMENUITEMS2, ID_PLCOPENEDITORSFCMENUITEMS3, 
    83  ID_PLCOPENEDITORSFCMENUITEMS2, ID_PLCOPENEDITORSFCMENUITEMS3, 
    83 ] = [wx.NewId() for _init_coll_SFCMenu_Items in range(4)]
    84 ] = [wx.NewId() for _init_coll_SFCMenu_Items in range(4)]
    84 
    85 
   144     base_class = wx.Frame
   145     base_class = wx.Frame
   145 
   146 
   146 class PLCOpenEditor(base_class):
   147 class PLCOpenEditor(base_class):
   147     _custom_classes = {'wx.SashWindow' : ['Viewer']}
   148     _custom_classes = {'wx.SashWindow' : ['Viewer']}
   148     
   149     
       
   150     CopyBuffer = None
       
   151     
   149     if wx.VERSION < (2, 6, 0):
   152     if wx.VERSION < (2, 6, 0):
   150         def Bind(self, event, function, id = None):
   153         def Bind(self, event, function, id = None):
   151             if id is not None:
   154             if id is not None:
   152                 event(self, id, function)
   155                 event(self, id, function)
   153             else:
   156             else:
   166         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS5,
   169         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS5,
   167               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   170               kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C')
   168         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS6,
   171         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS6,
   169               kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
   172               kind=wx.ITEM_NORMAL, text=u'Paste\tCTRL+V')
   170         parent.AppendSeparator()
   173         parent.AppendSeparator()
   171         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS8,
   174         addmenu = wx.Menu(title='')
   172               kind=wx.ITEM_NORMAL, text=u'Add Data Type')
   175         parent.AppendMenu(ID_PLCOPENEDITOREDITMENUITEMS8, "Add Element", addmenu)
   173         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS9,
   176         AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS9,
   174               kind=wx.ITEM_NORMAL, text=u'Remove Data Type')
   177               kind=wx.ITEM_NORMAL, text=u'Data Type')
   175         parent.AppendSeparator()
   178         AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS10,
   176         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS11,
   179               kind=wx.ITEM_NORMAL, text=u'Function')
   177               kind=wx.ITEM_NORMAL, text=u'Add POU')
   180         AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS11,
   178         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS12,
   181               kind=wx.ITEM_NORMAL, text=u'Function Block')
   179               kind=wx.ITEM_NORMAL, text=u'Remove POU')
   182         AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS12,
   180         parent.AppendSeparator()
   183               kind=wx.ITEM_NORMAL, text=u'Program')
       
   184         AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUITEMS13,
       
   185               kind=wx.ITEM_NORMAL, text=u'Configuration')
   181         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS14,
   186         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS14,
   182               kind=wx.ITEM_NORMAL, text=u'Add Configuration')
   187               kind=wx.ITEM_NORMAL, text=u'Delete')
   183         AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUITEMS15,
       
   184               kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
       
   185         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   188         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   186               id=ID_PLCOPENEDITOREDITMENUITEMS0)
   189               id=ID_PLCOPENEDITOREDITMENUITEMS0)
   187         self.Bind(wx.EVT_MENU, self.OnUndoMenu,
   190         self.Bind(wx.EVT_MENU, self.OnUndoMenu,
   188               id=ID_PLCOPENEDITOREDITMENUITEMS1)
   191               id=ID_PLCOPENEDITOREDITMENUITEMS1)
   189         self.Bind(wx.EVT_MENU, self.OnRedoMenu,
   192         self.Bind(wx.EVT_MENU, self.OnRedoMenu,
   193         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   196         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   194               id=ID_PLCOPENEDITOREDITMENUITEMS5)
   197               id=ID_PLCOPENEDITOREDITMENUITEMS5)
   195         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   198         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   196               id=ID_PLCOPENEDITOREDITMENUITEMS6)
   199               id=ID_PLCOPENEDITOREDITMENUITEMS6)
   197         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   200         self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu,
   198               id=ID_PLCOPENEDITOREDITMENUITEMS8)
       
   199         self.Bind(wx.EVT_MENU, self.OnRemoveDataTypeMenu,
       
   200               id=ID_PLCOPENEDITOREDITMENUITEMS9)
   201               id=ID_PLCOPENEDITOREDITMENUITEMS9)
   201         self.Bind(wx.EVT_MENU, self.OnAddPouMenu,
   202         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"),
       
   203               id=ID_PLCOPENEDITOREDITMENUITEMS10)
       
   204         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"),
   202               id=ID_PLCOPENEDITOREDITMENUITEMS11)
   205               id=ID_PLCOPENEDITOREDITMENUITEMS11)
   203         self.Bind(wx.EVT_MENU, self.OnRemovePouMenu,
   206         self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("program"),
   204               id=ID_PLCOPENEDITOREDITMENUITEMS12)
   207               id=ID_PLCOPENEDITOREDITMENUITEMS12)
   205         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
   208         self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu,
       
   209               id=ID_PLCOPENEDITOREDITMENUITEMS13)
       
   210         self.Bind(wx.EVT_MENU, self.OnDeleteMenu,
   206               id=ID_PLCOPENEDITOREDITMENUITEMS14)
   211               id=ID_PLCOPENEDITOREDITMENUITEMS14)
   207         self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu,
       
   208               id=ID_PLCOPENEDITOREDITMENUITEMS15)
       
   209 
   212 
   210     def _init_coll_menuBar1_Menus(self, parent):
   213     def _init_coll_menuBar1_Menus(self, parent):
   211         if self.ModeSolo:
   214         if self.ModeSolo:
   212             parent.Append(menu=self.FileMenu, title=u'File')
   215             parent.Append(menu=self.FileMenu, title=u'File')
   213         parent.Append(menu=self.EditMenu, title=u'Edit')
   216         parent.Append(menu=self.EditMenu, title=u'Edit')
   214         parent.Append(menu=self.HelpMenu, title=u'Help')
   217         parent.Append(menu=self.HelpMenu, title=u'Help')
   215 
       
   216     def _init_coll_ConfigMenu_Items(self, parent):
       
   217         AppendMenu(parent, help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS0,
       
   218               kind=wx.ITEM_NORMAL, text=u'Add Resource')
       
   219         AppendMenu(parent, help='', id=ID_PLCOPENEDITORCONFIGMENUITEMS1,
       
   220               kind=wx.ITEM_NORMAL, text=u'Remove Resource')
       
   221         self.Bind(wx.EVT_MENU, self.OnAddResourceMenu,
       
   222               id=ID_PLCOPENEDITORCONFIGMENUITEMS0)
       
   223         self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu,
       
   224               id=ID_PLCOPENEDITORCONFIGMENUITEMS1)
       
   225 
   218 
   226     def _init_coll_HelpMenu_Items(self, parent):
   219     def _init_coll_HelpMenu_Items(self, parent):
   227         AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS0, 
   220         AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS0, 
   228             kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   221             kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   229         AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS1,
   222         AppendMenu(parent, help='', id=ID_PLCOPENEDITORHELPMENUITEMS1,
   275         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu,
   268         self.Bind(wx.EVT_MENU, self.OnPropertiesMenu,
   276               id=ID_PLCOPENEDITORFILEMENUITEMS9)
   269               id=ID_PLCOPENEDITORFILEMENUITEMS9)
   277         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   270         self.Bind(wx.EVT_MENU, self.OnQuitMenu,
   278               id=ID_PLCOPENEDITORFILEMENUITEMS11)
   271               id=ID_PLCOPENEDITORFILEMENUITEMS11)
   279 
   272 
   280     def _init_coll_SFCMenu_Items(self, parent):
       
   281         AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS0,
       
   282               kind=wx.ITEM_NORMAL, text=u'Add Transition')
       
   283         AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS1,
       
   284               kind=wx.ITEM_NORMAL, text=u'Add Action')
       
   285         AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS2,
       
   286               kind=wx.ITEM_NORMAL, text=u'Remove Transition')
       
   287         AppendMenu(parent, help='', id=ID_PLCOPENEDITORSFCMENUITEMS3,
       
   288               kind=wx.ITEM_NORMAL, text=u'Remove Action')
       
   289         self.Bind(wx.EVT_MENU, self.OnAddPouTransitionMenu,
       
   290               id=ID_PLCOPENEDITORSFCMENUITEMS0)
       
   291         self.Bind(wx.EVT_MENU, self.OnAddPouActionMenu,
       
   292               id=ID_PLCOPENEDITORSFCMENUITEMS1)
       
   293         self.Bind(wx.EVT_MENU, self.OnRemovePouTransitionMenu,
       
   294               id=ID_PLCOPENEDITORSFCMENUITEMS2)
       
   295         self.Bind(wx.EVT_MENU, self.OnRemovePouActionMenu,
       
   296               id=ID_PLCOPENEDITORSFCMENUITEMS3)
       
   297 
       
   298     def _init_utils(self):
   273     def _init_utils(self):
   299         self.menuBar1 = wx.MenuBar()
   274         self.menuBar1 = wx.MenuBar()
   300 
   275 
   301         if self.ModeSolo:
   276         if self.ModeSolo:
   302             self.FileMenu = wx.Menu(title='')
   277             self.FileMenu = wx.Menu(title='')
   303         else:
   278         else:
   304             self.FileMenu = None
   279             self.FileMenu = None
   305         self.EditMenu = wx.Menu(title='')
   280         self.EditMenu = wx.Menu(title='')
   306         self.HelpMenu = wx.Menu(title='')
   281         self.HelpMenu = wx.Menu(title='')
   307         self.SFCMenu = wx.Menu(title='')
   282         
   308         self.ConfigMenu = wx.Menu(title='')
       
   309 
       
   310         self._init_coll_menuBar1_Menus(self.menuBar1)
   283         self._init_coll_menuBar1_Menus(self.menuBar1)
   311         if self.ModeSolo:
   284         if self.ModeSolo:
   312             self._init_coll_FileMenu_Items(self.FileMenu)
   285             self._init_coll_FileMenu_Items(self.FileMenu)
   313         self._init_coll_EditMenu_Items(self.EditMenu)
   286         self._init_coll_EditMenu_Items(self.EditMenu)
   314         self._init_coll_HelpMenu_Items(self.HelpMenu)
   287         self._init_coll_HelpMenu_Items(self.HelpMenu)
   315         self._init_coll_SFCMenu_Items(self.SFCMenu)
   288         
   316         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
       
   317 
       
   318     def _init_ctrls(self, prnt):
   289     def _init_ctrls(self, prnt):
   319         if wx.VERSION >= (2, 8, 0):
   290         if wx.VERSION >= (2, 8, 0):
   320             wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', 
   291             wx.aui.AuiMDIParentFrame.__init__(self, winid=ID_PLCOPENEDITOR, name=u'PLCOpenEditor', 
   321                   parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   292                   parent=prnt, pos=wx.DefaultPosition, size=wx.Size(1000, 600),
   322                   style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor')
   293                   style=wx.DEFAULT_FRAME_STYLE|wx.SUNKEN_BORDER|wx.CLIP_CHILDREN, title=u'PLCOpenEditor')
   449             self.ProjectTree.AssignImageList(self.TreeImageList)
   420             self.ProjectTree.AssignImageList(self.TreeImageList)
   450         
   421         
   451         self.CurrentToolBar = []
   422         self.CurrentToolBar = []
   452         self.CurrentLanguage = ""
   423         self.CurrentLanguage = ""
   453         self.SelectedItem = None
   424         self.SelectedItem = None
   454         self.CopyBuffer = None
       
   455         self.DrawingMode = FREEDRAWING_MODE
   425         self.DrawingMode = FREEDRAWING_MODE
   456         #self.DrawingMode = DRIVENDRAWING_MODE
   426         #self.DrawingMode = DRIVENDRAWING_MODE
   457         
   427         
   458         if not self.ModeSolo or fileOpen is not None:
   428         if not self.ModeSolo or fileOpen is not None:
   459             self.RefreshProjectTree()
   429             self.RefreshProjectTree()
   463         self.RefreshTitle()
   433         self.RefreshTitle()
   464         self.RefreshToolBar()
   434         self.RefreshToolBar()
   465 
   435 
   466     def ResetSelectedItem(self):
   436     def ResetSelectedItem(self):
   467         self.SelectedItem = None
   437         self.SelectedItem = None
   468 
       
   469     def GetPageCount(self):
       
   470         if wx.VERSION >= (2, 8, 0):
       
   471             notebook = self.GetNotebook()
       
   472             if notebook is not None:
       
   473                 return notebook.GetPageCount()
       
   474             else:
       
   475                 return 0
       
   476         else:
       
   477             return self.TabsOpened.GetPageCount()
       
   478     
       
   479     def GetPage(self, idx):
       
   480         if wx.VERSION >= (2, 8, 0):
       
   481             notebook = self.GetNotebook()
       
   482             if notebook is not None:
       
   483                 return notebook.GetPage(idx).GetViewer()
       
   484             else:
       
   485                 return None
       
   486         else:
       
   487             return self.TabsOpened.GetPage(idx)
       
   488 
       
   489     def GetPageSelection(self):
       
   490         if wx.VERSION >= (2, 8, 0):
       
   491             notebook = self.GetNotebook()
       
   492             if notebook is not None:
       
   493                 return notebook.GetSelection()
       
   494             else:
       
   495                 return -1
       
   496         else:
       
   497             return self.TabsOpened.GetSelection()
       
   498 
       
   499     def SetPageSelection(self, idx):
       
   500         if wx.VERSION >= (2, 8, 0):
       
   501             notebook = self.GetNotebook()
       
   502             if notebook is not None:
       
   503                 notebook.SetSelection(idx)
       
   504         else:
       
   505             self.TabsOpened.SetSelection(idx)
       
   506 
       
   507     def DeletePage(self, idx):
       
   508         if wx.VERSION >= (2, 8, 0):
       
   509             notebook = self.GetNotebook()
       
   510             if notebook is not None:
       
   511                 notebook.DeletePage(idx)
       
   512         else:
       
   513             self.TabsOpened.DeletePage(idx)
       
   514 
       
   515     def DeleteAllPages(self):
       
   516         if wx.VERSION >= (2, 8, 0):
       
   517             notebook = self.GetNotebook()
       
   518             if notebook is not None:
       
   519                 for idx in xrange(notebook.GetPageCount()):
       
   520                     notebook.DeletePage(0)
       
   521         else:
       
   522             self.TabsOpened.DeleteAllPages()
       
   523 
       
   524     def SetPageText(self, idx, text):
       
   525         if wx.VERSION >= (2, 8, 0):
       
   526             notebook = self.GetNotebook()
       
   527             if notebook is not None:
       
   528                 return notebook.SetPageText(idx, text)
       
   529         else:
       
   530             return self.TabsOpened.SetPageText(idx, text)
       
   531 
       
   532     def GetPageText(self, idx):
       
   533         if wx.VERSION >= (2, 8, 0):
       
   534             notebook = self.GetNotebook()
       
   535             if notebook is not None:
       
   536                 return notebook.GetPageText(idx)
       
   537             else:
       
   538                 return ""
       
   539         else:
       
   540             return self.TabsOpened.GetPageText(idx)
       
   541 
   438 
   542     def OnPageClose(self, event):
   439     def OnPageClose(self, event):
   543         selected = self.GetPageSelection()
   440         selected = self.GetPageSelection()
   544         if selected >= 0:
   441         if selected >= 0:
   545             tagname = self.GetPage(selected).GetTagName()
   442             tagname = self.GetPage(selected).GetTagName()
   554             self.RefreshEditMenu()
   451             self.RefreshEditMenu()
   555             self.RefreshToolBar()
   452             self.RefreshToolBar()
   556         event.Skip()
   453         event.Skip()
   557 
   454 
   558     def GetCopyBuffer(self):
   455     def GetCopyBuffer(self):
   559         return self.CopyBuffer
   456         return PLCOpenEditor.CopyBuffer
   560     
   457     
   561     def SetCopyBuffer(self, element):
   458     def SetCopyBuffer(self, element):
   562         self.CopyBuffer = element
   459         PLCOpenEditor.CopyBuffer = element
   563         self.RefreshEditMenu()
   460         self.RefreshEditMenu()
   564 
   461 
   565     def GetDrawingMode(self):
   462     def GetDrawingMode(self):
   566         return self.DrawingMode
   463         return self.DrawingMode
   567 
   464 
   568     def RefreshTitle(self):
   465     def RefreshTitle(self):
   569         if self.Controler.HasOpenedProject() > 0:
   466         if self.Controler.HasOpenedProject() > 0:
   570             self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename())
   467             self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename())
   571         else:
   468         else:
   572             self.SetTitle("PLCOpenEditor")
   469             self.SetTitle("PLCOpenEditor")
   573 
       
   574     def RefreshFileMenu(self):
       
   575         if self.FileMenu:
       
   576             if self.Controler.HasOpenedProject():
       
   577                 if self.GetPageCount() > 0:
       
   578                     self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, True)
       
   579                 else:
       
   580                     self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False)
       
   581                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, True)
       
   582                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, True)
       
   583                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, True)
       
   584                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, True)
       
   585                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, True)
       
   586             else:
       
   587                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False)
       
   588                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, False)
       
   589                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, False)
       
   590                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, False)
       
   591                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, False)
       
   592                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, False)
       
   593 
       
   594     def RefreshEditMenu(self):
       
   595         if self.EditMenu:
       
   596             if self.Controler.HasOpenedProject():
       
   597                 undo, redo = self.Controler.GetBufferState()
       
   598                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, undo)
       
   599                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo)
       
   600             else:
       
   601                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False)
       
   602                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False)
       
   603             if self.Controler.HasOpenedProject():
       
   604                 if self.GetPageCount() > 0:
       
   605                     self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True)
       
   606                 else:
       
   607                     self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
       
   608                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True)
       
   609                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, True)
       
   610                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS11, True)
       
   611                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS12, True)
       
   612                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, True)
       
   613                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS15, True)
       
   614             else:
       
   615                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
       
   616                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False)
       
   617                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS9, False)
       
   618                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS11, False)
       
   619                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS12, False)
       
   620                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, False)
       
   621                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS15, False)
       
   622             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True)
       
   623             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True)
       
   624             if self.CopyBuffer is not None:
       
   625                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True)
       
   626             else:
       
   627                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False)
       
   628 
       
   629     def RefreshEditor(self, variablepanel = True):
       
   630         selected = self.GetPageSelection()
       
   631         if selected != -1:
       
   632             window = self.GetPage(selected)
       
   633             window.RefreshView()
       
   634             if variablepanel:
       
   635                 self.RefreshVariablePanel(window.GetTagName())
       
   636 
       
   637     def RefreshVariablePanel(self, tagname):
       
   638         self.VariablePanelIndexer.RefreshVariablePanel(tagname)
       
   639 
   470 
   640     def ShowProperties(self):
   471     def ShowProperties(self):
   641         old_values = self.Controler.GetProjectProperties()
   472         old_values = self.Controler.GetProjectProperties()
   642         dialog = ProjectDialog(self)
   473         dialog = ProjectDialog(self)
   643         dialog.SetValues(old_values)
   474         dialog.SetValues(old_values)
   675             else:
   506             else:
   676                 event.Veto()
   507                 event.Veto()
   677         else:
   508         else:
   678             event.Skip()
   509             event.Skip()
   679 
   510 
       
   511 #-------------------------------------------------------------------------------
       
   512 #                            Notebook Unified Functions
       
   513 #-------------------------------------------------------------------------------
       
   514 
       
   515     def GetPageCount(self):
       
   516         if wx.VERSION >= (2, 8, 0):
       
   517             notebook = self.GetNotebook()
       
   518             if notebook is not None:
       
   519                 return notebook.GetPageCount()
       
   520             else:
       
   521                 return 0
       
   522         else:
       
   523             return self.TabsOpened.GetPageCount()
       
   524     
       
   525     def GetPage(self, idx):
       
   526         if wx.VERSION >= (2, 8, 0):
       
   527             notebook = self.GetNotebook()
       
   528             if notebook is not None:
       
   529                 return notebook.GetPage(idx).GetViewer()
       
   530             else:
       
   531                 return None
       
   532         else:
       
   533             return self.TabsOpened.GetPage(idx)
       
   534 
       
   535     def GetPageSelection(self):
       
   536         if wx.VERSION >= (2, 8, 0):
       
   537             notebook = self.GetNotebook()
       
   538             if notebook is not None:
       
   539                 return notebook.GetSelection()
       
   540             else:
       
   541                 return -1
       
   542         else:
       
   543             return self.TabsOpened.GetSelection()
       
   544 
       
   545     def SetPageSelection(self, idx):
       
   546         if wx.VERSION >= (2, 8, 0):
       
   547             notebook = self.GetNotebook()
       
   548             if notebook is not None:
       
   549                 notebook.SetSelection(idx)
       
   550         else:
       
   551             self.TabsOpened.SetSelection(idx)
       
   552 
       
   553     def DeletePage(self, idx):
       
   554         if wx.VERSION >= (2, 8, 0):
       
   555             notebook = self.GetNotebook()
       
   556             if notebook is not None:
       
   557                 notebook.DeletePage(idx)
       
   558         else:
       
   559             self.TabsOpened.DeletePage(idx)
       
   560 
       
   561     def DeleteAllPages(self):
       
   562         if wx.VERSION >= (2, 8, 0):
       
   563             notebook = self.GetNotebook()
       
   564             if notebook is not None:
       
   565                 for idx in xrange(notebook.GetPageCount()):
       
   566                     notebook.DeletePage(0)
       
   567         else:
       
   568             self.TabsOpened.DeleteAllPages()
       
   569 
       
   570     def SetPageText(self, idx, text):
       
   571         if wx.VERSION >= (2, 8, 0):
       
   572             notebook = self.GetNotebook()
       
   573             if notebook is not None:
       
   574                 return notebook.SetPageText(idx, text)
       
   575         else:
       
   576             return self.TabsOpened.SetPageText(idx, text)
       
   577 
       
   578     def GetPageText(self, idx):
       
   579         if wx.VERSION >= (2, 8, 0):
       
   580             notebook = self.GetNotebook()
       
   581             if notebook is not None:
       
   582                 return notebook.GetPageText(idx)
       
   583             else:
       
   584                 return ""
       
   585         else:
       
   586             return self.TabsOpened.GetPageText(idx)
       
   587 
       
   588 
       
   589 #-------------------------------------------------------------------------------
       
   590 #                            File Menu Functions
       
   591 #-------------------------------------------------------------------------------
       
   592 
       
   593     def RefreshFileMenu(self):
       
   594         if self.FileMenu:
       
   595             if self.Controler.HasOpenedProject():
       
   596                 if self.GetPageCount() > 0:
       
   597                     self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, True)
       
   598                 else:
       
   599                     self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False)
       
   600                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, True)
       
   601                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, True)
       
   602                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, True)
       
   603                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, True)
       
   604                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, True)
       
   605             else:
       
   606                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS2, False)
       
   607                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS3, False)
       
   608                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS5, False)
       
   609                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS6, False)
       
   610                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS7, False)
       
   611                 self.FileMenu.Enable(ID_PLCOPENEDITORFILEMENUITEMS9, False)
       
   612 
   680     def OnNewProjectMenu(self, event):
   613     def OnNewProjectMenu(self, event):
   681         dialog = ProjectDialog(self)
   614         dialog = ProjectDialog(self)
   682         if dialog.ShowModal() == wx.ID_OK:
   615         if dialog.ShowModal() == wx.ID_OK:
   683             properties = dialog.GetValues()
   616             properties = dialog.GetValues()
   684             self.Controler.CreateNewProject(properties)
   617             self.Controler.CreateNewProject(properties)
   820 
   753 
   821     def OnQuitMenu(self, event):
   754     def OnQuitMenu(self, event):
   822         self.Close()
   755         self.Close()
   823         event.Skip()
   756         event.Skip()
   824 
   757 
   825     def ResetCurrentMode(self):
   758 
       
   759 #-------------------------------------------------------------------------------
       
   760 #                          Edit Project Menu Functions
       
   761 #-------------------------------------------------------------------------------
       
   762 
       
   763     def RefreshEditMenu(self):
       
   764         if self.EditMenu:
       
   765             if self.Controler.HasOpenedProject():
       
   766                 undo, redo = self.Controler.GetBufferState()
       
   767                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, undo)
       
   768                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, redo)
       
   769             else:
       
   770                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS1, False)
       
   771                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS2, False)
       
   772             if self.Controler.HasOpenedProject():
       
   773                 if self.GetPageCount() > 0:
       
   774                     self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, True)
       
   775                 else:
       
   776                     self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
       
   777                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, True)
       
   778                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, True)
       
   779             else:
       
   780                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS0, False)
       
   781                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS8, False)
       
   782                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS14, False)
       
   783             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS4, True)
       
   784             self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS5, True)
       
   785             if self.CopyBuffer is not None:
       
   786                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, True)
       
   787             else:
       
   788                 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUITEMS6, False)
       
   789 
       
   790     def OnRefreshMenu(self, event):
   826         selected = self.GetPageSelection()
   791         selected = self.GetPageSelection()
   827         if selected != -1:
   792         if selected != -1:
   828             window = self.GetPage(selected)
   793             window = self.GetPage(selected)
   829             window.SetMode(MODE_SELECTION)
   794             window.RefreshView()
   830         if wx.VERSION < (2, 8, 0):
   795             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
   831             ToolBar = self.ToolBar
   796         event.Skip()
   832         else:
   797 
   833             ToolBar = self.Panes["ToolBar"]
   798     def OnUndoMenu(self, event):
   834         if ToolBar:
   799         self.Controler.LoadPrevious()
   835             ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
   800         idxs = range(self.GetPageCount())
   836         
   801         idxs.reverse()
   837     def ResetToolToggle(self, id):
   802         for idx in idxs:
   838         if wx.VERSION < (2, 8, 0):
   803             tagname = self.GetPage(idx).GetTagName()
   839             tool = self.ToolBar.FindById(id)
   804             if self.Controler.GetEditedElement(tagname) is None:
   840         else:
   805                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
   841             tool = self.Panes["ToolBar"].FindById(id)
   806                 self.DeletePage(idx)
   842         tool.SetToggle(False)
   807         selected = self.GetPageSelection()        
   843 
   808         if selected != -1:
   844     def OnSelectionTool(self, event):
   809             window = self.GetPage(selected)
       
   810             window.RefreshView()
       
   811             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
       
   812         self.RefreshTitle()
       
   813         self.RefreshEditMenu()
       
   814         self.RefreshProjectTree()
       
   815         event.Skip()
       
   816     
       
   817     def OnRedoMenu(self, event):
       
   818         self.Controler.LoadNext()
       
   819         idxs = range(self.GetPageCount())
       
   820         idxs.reverse()
       
   821         for idx in idxs:
       
   822             tagname = self.GetPage(idx).GetTagName()
       
   823             if self.Controler.GetEditedElement(tagname) is None:
       
   824                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
       
   825                 self.DeletePage(idx)
   845         selected = self.GetPageSelection()
   826         selected = self.GetPageSelection()
   846         if selected != -1:
   827         if selected != -1:
   847             self.GetPage(selected).SetMode(MODE_SELECTION)
   828             window = self.GetPage(selected)
   848         event.Skip()
   829             window.RefreshView()
   849     
   830             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
   850     def OnCommentTool(self, event):
   831         self.RefreshTitle()
   851         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT)
   832         self.RefreshEditMenu()
       
   833         self.RefreshProjectTree()
       
   834         event.Skip()
       
   835 
       
   836     def OnCutMenu(self, event):
   852         selected = self.GetPageSelection()
   837         selected = self.GetPageSelection()
   853         if selected != -1:
   838         if selected != -1:
   854             self.GetPage(selected).SetMode(MODE_COMMENT)
   839             try:
   855         event.Skip()
   840                 self.GetPage(selected).Cut()
   856     
   841             except:
   857     def OnVariableTool(self, event):
   842                 pass
   858         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE)
   843         event.Skip()
       
   844     
       
   845     def OnCopyMenu(self, event):
   859         selected = self.GetPageSelection()
   846         selected = self.GetPageSelection()
   860         if selected != -1:
   847         if selected != -1:
   861             self.GetPage(selected).SetMode(MODE_VARIABLE)
   848             try:
   862         event.Skip()
   849                 self.GetPage(selected).Copy()
   863     
   850             except:
   864     def OnBlockTool(self, event):
   851                 pass
   865         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARBLOCK)
   852         event.Skip()
       
   853     
       
   854     def OnPasteMenu(self, event):
   866         selected = self.GetPageSelection()
   855         selected = self.GetPageSelection()
   867         if selected != -1:
   856         if selected != -1:
   868             self.GetPage(selected).SetMode(MODE_BLOCK)
   857             try:
   869         event.Skip()
   858                 self.GetPage(selected).Paste()
   870         
   859             except:
   871     def OnConnectionTool(self, event):
   860                 pass
   872         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION)
   861         event.Skip()
   873         selected = self.GetPageSelection()
   862     
   874         if selected != -1:
   863     def OnDeleteMenu(self, event):
   875             self.GetPage(selected).SetMode(MODE_CONNECTION)
   864         window = self.FindFocus()
   876         event.Skip()
   865         if window == self.ProjectTree:
   877 
   866             selected = self.ProjectTree.GetSelection()
   878     def OnPowerRailTool(self, event):
   867             if selected.IsOk():
   879         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL)
   868                 type = self.ProjectTree.GetPyData(selected)
   880         selected = self.GetPageSelection()
   869                 tagname = ""
   881         if selected != -1:
   870                 if type == ITEM_DATATYPE:
   882             self.GetPage(selected).SetMode(MODE_POWERRAIL)
   871                     name = self.ProjectTree.GetItemText(selected)
   883         event.Skip()
   872                     if not self.Controler.DataTypeIsUsed(name):
   884 
   873                         self.Controler.ProjectRemoveDataType(name)
   885     def OnRungTool(self, event):
   874                         tagname = self.Controler.ComputeDataTypeName(name)
   886         selected = self.GetPageSelection()
   875                     else:
   887         if selected != -1:
   876                         message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
   888             self.GetPage(selected).AddLadderRung()
   877                         message.ShowModal()
   889         event.Skip()
   878                         message.Destroy()
   890     
   879                 elif type == ITEM_POU:
   891     def OnCoilTool(self, event):
   880                     name = self.ProjectTree.GetItemText(selected)
   892         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL)
   881                     if not self.Controler.DataTypeIsUsed(name):
   893         selected = self.GetPageSelection()
   882                         self.Controler.ProjectRemoveDataType(name)
   894         if selected != -1:
   883                         tagname = self.Controler.ComputeDataTypeName(name)
   895             self.GetPage(selected).SetMode(MODE_COIL)
   884                     else:
   896         event.Skip()
   885                         message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
   897     
   886                         message.ShowModal()
   898     def OnContactTool(self, event):
   887                         message.Destroy()
   899         if self.DrawingMode == FREEDRAWING_MODE:
   888                 elif type in [ITEM_TRANSITION, ITEM_ACTION]:
   900             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT)
   889                     item = self.ProjectTree.GetItemParent(selected)
   901         selected = self.GetPageSelection()
   890                     item_type = self.ProjectTree.GetPyData(item)
   902         if selected != -1:
   891                     while item_type != ITEM_POU:
   903             if self.DrawingMode == FREEDRAWING_MODE:
   892                         item = self.ProjectTree.GetItemParent(item)
   904                 self.GetPage(selected).SetMode(MODE_CONTACT)
   893                         item_type = self.ProjectTree.GetPyData(item)
   905             else:
   894                     pou_name = self.ProjectTree.GetItemText(item)
   906                 self.GetPage(selected).AddLadderContact()
   895                     if type == ITEM_TRANSITION:
   907         event.Skip()
   896                         transition = self.ProjectTree.GetItemText(selected)
   908     
   897                         self.Controler.ProjectRemovePouTransition(pou_name, transition)
   909     def OnBranchTool(self, event): 
   898                         tagname = self.Controler.ComputePouTransitionName(pou_name, transition)
   910         selected = self.GetPageSelection()
   899                     elif type == ITEM_ACTION:
   911         if selected != -1:
   900                         action = self.ProjectTree.GetItemText(selected)
   912             self.GetPage(selected).AddLadderBranch()
   901                         self.Controler.ProjectRemovePouAction(pou_name, action)
   913         event.Skip()    
   902                         tagname = self.Controler.ComputePouActionName(pou_name, action)
   914     
   903                 elif type == ITEM_CONFIGURATION:
   915     def OnInitialStepTool(self, event):
   904                     name = self.ProjectTree.GetItemText(selected)
   916         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP)
   905                     self.Controler.ProjectRemoveConfiguration(name)
   917         selected = self.GetPageSelection()
   906                     tagname = self.Controler.ComputeConfigurationName(name)
   918         if selected != -1:
   907                 elif type == ITEM_RESOURCE:
   919             self.GetPage(selected).SetMode(MODE_INITIALSTEP)
   908                     resource = self.ProjectTree.GetItemText(selected)
   920         event.Skip()
   909                     item = self.ProjectTree.GetItemParent(selected)
   921     
   910                     item_type = self.ProjectTree.GetPyData(item)
   922     def OnStepTool(self, event):
   911                     while item_type != ITEM_CONFIGURATION:
   923         if self.GetDrawingMode() == FREEDRAWING_MODE:
   912                         item = self.ProjectTree.GetItemParent(item)
   924             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP)
   913                         item_type = self.ProjectTree.GetPyData(item)
   925         selected = self.GetPageSelection()
   914                     config_name = self.ProjectTree.GetItemText(item)
   926         if selected != -1:
   915                     self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
   927             if self.GetDrawingMode() == FREEDRAWING_MODE:
   916                     tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected)
   928                 self.GetPage(selected).SetMode(MODE_STEP)
   917                 idx = self.IsOpened(tagname)
   929             else:
   918                 if idx is not None:
   930                 self.GetPage(selected).AddStep()
   919                     self.VariablePanelIndexer.RemoveVariablePanel(tagname)
   931         event.Skip()
   920                     self.DeletePage(idx)
   932 
   921                 self.RefreshTitle()
   933     def OnActionBlockTool(self, event):
   922                 self.RefreshEditMenu()
   934         if self.GetDrawingMode() == FREEDRAWING_MODE:
   923                 self.RefreshProjectTree()
   935             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK)
   924                 self.RefreshToolBar()
   936         selected = self.GetPageSelection()
   925         elif isinstance(window, (Viewer, TextViewer)):
   937         if selected != -1:
   926             event = wx.KeyEvent(wx.EVT_CHAR._getEvtType())
   938             if self.GetDrawingMode() == FREEDRAWING_MODE:
   927             event.m_keyCode = wx.WXK_DELETE
   939                 self.GetPage(selected).SetMode(MODE_ACTION)
   928             window.ProcessEvent(event)
   940             else:
   929         event.Skip()
   941                 self.GetPage(selected).AddStepAction()
   930 
   942         event.Skip()
   931 
   943 
   932 #-------------------------------------------------------------------------------
   944     def OnTransitionTool(self, event):
   933 #                      Project Editor Panels Management Functions
   945         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION)
   934 #-------------------------------------------------------------------------------
   946         selected = self.GetPageSelection()
   935     
   947         if selected != -1:
       
   948             self.GetPage(selected).SetMode(MODE_TRANSITION)
       
   949         event.Skip()
       
   950 
       
   951     def OnDivergenceTool(self, event):
       
   952         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
   953             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE)
       
   954         selected = self.GetPageSelection()
       
   955         if selected != -1:
       
   956             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
   957                 self.GetPage(selected).SetMode(MODE_DIVERGENCE)
       
   958             else:
       
   959                 self.GetPage(selected).AddDivergence()
       
   960         event.Skip()
       
   961     
       
   962     def OnJumpTool(self, event):
       
   963         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
   964             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP)
       
   965         selected = self.GetPageSelection()
       
   966         if selected != -1:
       
   967             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
   968                 self.GetPage(selected).SetMode(MODE_JUMP)
       
   969             else:
       
   970                 self.GetPage(selected).AddJump()
       
   971         event.Skip()
       
   972         
       
   973     def OnPouSelectedChanged(self, event):
   936     def OnPouSelectedChanged(self, event):
   974         if wx.VERSION < (2, 8, 0) or event.GetActive():
   937         if wx.VERSION < (2, 8, 0) or event.GetActive():
   975             old_selected = self.GetPageSelection()
   938             old_selected = self.GetPageSelection()
   976             if old_selected >= 0:
   939             if old_selected >= 0:
   977                 self.GetPage(old_selected).ResetBuffer()
   940                 self.GetPage(old_selected).ResetBuffer()
  1002                 self.RefreshFileMenu()
   965                 self.RefreshFileMenu()
  1003                 self.RefreshEditMenu()
   966                 self.RefreshEditMenu()
  1004                 self.RefreshToolBar()
   967                 self.RefreshToolBar()
  1005         event.Skip()
   968         event.Skip()
  1006 
   969 
       
   970     def RefreshEditor(self, variablepanel = True):
       
   971         selected = self.GetPageSelection()
       
   972         if selected != -1:
       
   973             window = self.GetPage(selected)
       
   974             window.RefreshView()
       
   975             if variablepanel:
       
   976                 self.RefreshVariablePanel(window.GetTagName())
       
   977 
       
   978     def RefreshVariablePanel(self, tagname):
       
   979         self.VariablePanelIndexer.RefreshVariablePanel(tagname)
       
   980 
       
   981     def RefreshEditorNames(self, old_tagname, new_tagname):
       
   982         for i in xrange(self.GetPageCount()):
       
   983             editor = self.GetPage(i)
       
   984             if editor.GetTagName() == old_tagname:
       
   985                 editor.SetTagName(new_tagname)
       
   986         self.VariablePanelIndexer.UpdateVariablePanelTagName(old_tagname, new_tagname)
       
   987 
       
   988     def IsOpened(self, tagname):
       
   989         for idx in xrange(self.GetPageCount()):
       
   990             if self.GetPage(idx).IsViewing(tagname):
       
   991                 return idx
       
   992         return None
       
   993 
       
   994     def RefreshPageTitles(self):
       
   995         for idx in xrange(self.GetPageCount()):
       
   996             window = self.GetPage(idx)
       
   997             words = window.GetTagName().split("::")
       
   998             self.SetPageText(idx, "-".join(words[1:]))
       
   999 
       
  1000 
       
  1001 #-------------------------------------------------------------------------------
       
  1002 #                         Project Tree Management Functions
       
  1003 #-------------------------------------------------------------------------------
       
  1004 
       
  1005     def RefreshProjectTree(self):
       
  1006         infos = self.Controler.GetProjectInfos()
       
  1007         root = self.ProjectTree.GetRootItem()
       
  1008         if not root.IsOk():
       
  1009             root = self.ProjectTree.AddRoot(infos["name"])
       
  1010         self.GenerateTreeBranch(root, infos)
       
  1011         self.ProjectTree.Expand(self.ProjectTree.GetRootItem())
       
  1012 
       
  1013     def GenerateTreeBranch(self, root, infos):
       
  1014         to_delete = []
       
  1015         self.ProjectTree.SetItemText(root, infos["name"])
       
  1016         self.ProjectTree.SetPyData(root, infos["type"])
       
  1017         if infos["type"] == ITEM_POU and wx.Platform != '__WXMSW__':
       
  1018             self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"])))
       
  1019         if wx.VERSION >= (2, 6, 0):
       
  1020             item, root_cookie = self.ProjectTree.GetFirstChild(root)
       
  1021         else:
       
  1022             item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
       
  1023         for values in infos["values"]:
       
  1024             if not item.IsOk():
       
  1025                 item = self.ProjectTree.AppendItem(root, "")
       
  1026                 if wx.Platform != '__WXMSW__':
       
  1027                     item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
       
  1028             self.GenerateTreeBranch(item, values)
       
  1029             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
       
  1030         while item.IsOk():
       
  1031             to_delete.append(item)
       
  1032             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
       
  1033         for item in to_delete:
       
  1034             self.ProjectTree.Delete(item)
       
  1035 
  1007     def SelectProjectTreeItem(self, root, items):
  1036     def SelectProjectTreeItem(self, root, items):
  1008         found = False
  1037         found = False
  1009         if self.ProjectTree:
  1038         if self.ProjectTree:
  1010             if wx.VERSION >= (2, 6, 0):
  1039             if wx.VERSION >= (2, 6, 0):
  1011                 item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1040                 item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1036                 dragSource = wx.DropSource(self.ProjectTree)
  1065                 dragSource = wx.DropSource(self.ProjectTree)
  1037                 dragSource.SetData(data)
  1066                 dragSource.SetData(data)
  1038                 dragSource.DoDragDrop()
  1067                 dragSource.DoDragDrop()
  1039             self.ResetSelectedItem()
  1068             self.ResetSelectedItem()
  1040 
  1069 
  1041     def RefreshEditorNames(self, old_tagname, new_tagname):
  1070     def OnProjectTreeItemBeginEdit(self, event):
  1042         for i in xrange(self.GetPageCount()):
  1071         selected = event.GetItem()
  1043             editor = self.GetPage(i)
  1072         if self.ProjectTree.GetPyData(selected) == ITEM_UNEDITABLE:
  1044             if editor.GetTagName() == old_tagname:
  1073             event.Veto()
  1045                 editor.SetTagName(new_tagname)
  1074         else:
  1046         self.VariablePanelIndexer.UpdateVariablePanelTagName(old_tagname, new_tagname)
  1075             event.Skip()
  1047 
  1076 
  1048     def OnProjectTreeItemEndEdit(self, event):
  1077     def OnProjectTreeItemEndEdit(self, event):
  1049         message = None
  1078         message = None
  1050         abort = False
  1079         abort = False
  1051         new_name = event.GetLabel()
  1080         new_name = event.GetLabel()
  1171                 wx.CallAfter(self.RefreshProjectTree)
  1200                 wx.CallAfter(self.RefreshProjectTree)
  1172                 selected = self.GetPageSelection()
  1201                 selected = self.GetPageSelection()
  1173                 if selected != -1:
  1202                 if selected != -1:
  1174                     self.GetPage(selected).RefreshView()
  1203                     self.GetPage(selected).RefreshView()
  1175                 event.Skip()
  1204                 event.Skip()
  1176 
       
  1177     def OnProjectTreeItemBeginEdit(self, event):
       
  1178         selected = event.GetItem()
       
  1179         if self.ProjectTree.GetPyData(selected) == ITEM_UNEDITABLE:
       
  1180             event.Veto()
       
  1181         else:
       
  1182             event.Skip()
       
  1183     
  1205     
  1184     def OnProjectTreeItemActivated(self, event):
  1206     def OnProjectTreeItemActivated(self, event):
  1185         selected = event.GetItem()
  1207         selected = event.GetItem()
  1186         if self.ProjectTree.IsExpanded(selected):
  1208         if self.ProjectTree.IsExpanded(selected):
  1187             self.ProjectTree.Collapse(selected)
  1209             self.ProjectTree.Collapse(selected)
  1264         if self.ProjectTree.GetPyData(event.GetItem()) != ITEM_UNEDITABLE and self.SelectedItem is None:
  1286         if self.ProjectTree.GetPyData(event.GetItem()) != ITEM_UNEDITABLE and self.SelectedItem is None:
  1265             self.SelectedItem = event.GetItem()
  1287             self.SelectedItem = event.GetItem()
  1266             event.Veto()
  1288             event.Veto()
  1267         else:
  1289         else:
  1268             event.Skip()
  1290             event.Skip()
  1269     
       
  1270     def IsOpened(self, tagname):
       
  1271         for idx in xrange(self.GetPageCount()):
       
  1272             if self.GetPage(idx).IsViewing(tagname):
       
  1273                 return idx
       
  1274         return None
       
  1275     
  1291     
  1276     def EditProjectElement(self, elementtype, tagname, onlyopened = False):
  1292     def EditProjectElement(self, elementtype, tagname, onlyopened = False):
  1277         openedidx = self.IsOpened(tagname)
  1293         openedidx = self.IsOpened(tagname)
  1278         if openedidx is not None:
  1294         if openedidx is not None:
  1279             old_selected = self.GetPageSelection()
  1295             old_selected = self.GetPageSelection()
  1370                     self.RefreshEditMenu()
  1386                     self.RefreshEditMenu()
  1371                     self.RefreshToolBar()
  1387                     self.RefreshToolBar()
  1372     
  1388     
  1373     def OnProjectTreeRightUp(self, event):
  1389     def OnProjectTreeRightUp(self, event):
  1374         if wx.Platform == '__WXMSW__':
  1390         if wx.Platform == '__WXMSW__':
  1375             cursor_pos = event.GetPoint()
  1391             item = event.GetItem()
  1376         else:
  1392         else:
  1377             cursor_pos = event.GetPosition()
  1393             item = self.ProjectTree.GetSelection()
  1378         selected = self.ProjectTree.GetSelection()
  1394         name = self.ProjectTree.GetItemText(item)
  1379         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1395         type = self.ProjectTree.GetPyData(item)
  1380             name = self.ProjectTree.GetItemText(selected)
  1396         if type == ITEM_POU:
       
  1397             menu = wx.Menu(title='')
  1381             if self.Controler.GetPouBodyType(name) == "SFC":
  1398             if self.Controler.GetPouBodyType(name) == "SFC":
  1382                 self.PopupMenuXY(self.SFCMenu, cursor_pos.x, cursor_pos.y)
  1399                 new_id = wx.NewId()
  1383         elif self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
  1400                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition")
  1384             self.PopupMenu(self.ConfigMenu)
  1401                 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(name), id=new_id)
  1385         event.Skip()
  1402                 new_id = wx.NewId()
  1386 
  1403                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action")
  1387     def RefreshProjectTree(self):
  1404                 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(name), id=new_id)
  1388         infos = self.Controler.GetProjectInfos()
  1405                 menu.AppendSeparator()
  1389         root = self.ProjectTree.GetRootItem()
  1406             new_id = wx.NewId()
  1390         if not root.IsOk():
  1407             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete")
  1391             root = self.ProjectTree.AddRoot(infos["name"])
  1408             self.Bind(wx.EVT_MENU, self.OnRemovePouMenu, id=new_id)
  1392         self.GenerateTreeBranch(root, infos)
  1409             self.PopupMenu(menu)
  1393         self.ProjectTree.Expand(self.ProjectTree.GetRootItem())
  1410         elif type == ITEM_CONFIGURATION:
  1394 
  1411             menu = wx.Menu(title='')
  1395     def GenerateTreeBranch(self, root, infos):
  1412             new_id = wx.NewId()
  1396         to_delete = []
  1413             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Resource")
  1397         self.ProjectTree.SetItemText(root, infos["name"])
  1414             self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(name), id=new_id)
  1398         self.ProjectTree.SetPyData(root, infos["type"])
  1415             new_id = wx.NewId()
  1399         if infos["type"] == ITEM_POU and wx.Platform != '__WXMSW__':
  1416             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete")
  1400             self.ProjectTree.SetItemImage(root, LANGUAGES.index(self.Controler.GetPouBodyType(infos["name"])))
  1417             self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu, id=new_id)
  1401         if wx.VERSION >= (2, 5, 0):
  1418             self.PopupMenu(menu)
  1402             item, root_cookie = self.ProjectTree.GetFirstChild(root)
  1419         elif type in [ITEM_DATATYPE, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE]:
  1403         else:
  1420             menu = wx.Menu(title='')
  1404             item, root_cookie = self.ProjectTree.GetFirstChild(root, 0)
  1421             new_id = wx.NewId()
  1405         for values in infos["values"]:
  1422             AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Delete")
  1406             if not item.IsOk():
  1423             if type == ITEM_DATATYPE:
  1407                 item = self.ProjectTree.AppendItem(root, "")
  1424                 self.Bind(wx.EVT_MENU, self.OnRemoveDataTypeMenu, id=new_id)
  1408                 if wx.Platform != '__WXMSW__':
  1425             elif type == ITEM_TRANSITION:
  1409                     item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
  1426                 self.Bind(wx.EVT_MENU, self.OnRemoveTransitionMenu, id=new_id)
  1410             self.GenerateTreeBranch(item, values)
  1427             elif type == ITEM_ACTION:
  1411             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
  1428                 self.Bind(wx.EVT_MENU, self.OnRemoveActionMenu, id=new_id)
  1412         while item.IsOk():
  1429             elif type == ITEM_RESOURCE:
  1413             to_delete.append(item)
  1430                 self.Bind(wx.EVT_MENU, self.OnRemoveResourceMenu, id=new_id)
  1414             item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
  1431             self.PopupMenu(menu)
  1415         for item in to_delete:
  1432         elif type == ITEM_UNEDITABLE:
  1416             self.ProjectTree.Delete(item)
  1433             if name == "Data Types":
  1417     
  1434                 menu = wx.Menu(title='')
       
  1435                 new_id = wx.NewId()
       
  1436                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add DataType")
       
  1437                 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, id=new_id)
       
  1438                 self.PopupMenu(menu)
       
  1439             elif name in ["Functions", "Function Blocks", "Programs"]:
       
  1440                 menu = wx.Menu(title='')
       
  1441                 new_id = wx.NewId()
       
  1442                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Pou")
       
  1443                 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction({"Functions" : "function", "Function Blocks" : "functionBlock", "Programs" : "program"}[name]), id=new_id)
       
  1444                 self.PopupMenu(menu)
       
  1445             elif name == "Configurations":
       
  1446                 menu = wx.Menu(title='')
       
  1447                 new_id = wx.NewId()
       
  1448                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Configuration")
       
  1449                 self.Bind(wx.EVT_MENU, self.OnAddConfigurationMenu, id=new_id)
       
  1450                 self.PopupMenu(menu)
       
  1451             elif name == "Transitions":
       
  1452                 menu = wx.Menu(title='')
       
  1453                 new_id = wx.NewId()
       
  1454                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Transition")
       
  1455                 parent = self.ProjectTree.GetItemParent(item)
       
  1456                 parent_type = self.ProjectTree.GetPyData(parent)
       
  1457                 while parent_type != ITEM_POU:
       
  1458                     parent = self.ProjectTree.GetItemParent(parent)
       
  1459                     parent_type = self.ProjectTree.GetPyData(parent)
       
  1460                 self.Bind(wx.EVT_MENU, self.GenerateAddTransitionFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
       
  1461                 self.PopupMenu(menu)
       
  1462             elif name == "Actions":
       
  1463                 menu = wx.Menu(title='')
       
  1464                 new_id = wx.NewId()
       
  1465                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Action")
       
  1466                 parent = self.ProjectTree.GetItemParent(item)
       
  1467                 parent_type = self.ProjectTree.GetPyData(parent)
       
  1468                 while parent_type != ITEM_POU:
       
  1469                     parent = self.ProjectTree.GetItemParent(parent)
       
  1470                     parent_type = self.ProjectTree.GetPyData(parent)
       
  1471                 self.Bind(wx.EVT_MENU, self.GenerateAddActionFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
       
  1472                 self.PopupMenu(menu)
       
  1473             elif name == "Resources":
       
  1474                 menu = wx.Menu(title='')
       
  1475                 new_id = wx.NewId()
       
  1476                 AppendMenu(menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text="Add Resource")
       
  1477                 parent = self.ProjectTree.GetItemParent(item)
       
  1478                 parent_type = self.ProjectTree.GetPyData(parent)
       
  1479                 while parent_type != ITEM_CONFIGURATION:
       
  1480                     parent = self.ProjectTree.GetItemParent(parent)
       
  1481                     parent_type = self.ProjectTree.GetPyData(parent)
       
  1482                 self.Bind(wx.EVT_MENU, self.GenerateAddResourceFunction(self.ProjectTree.GetItemText(parent)), id=new_id)
       
  1483                 self.PopupMenu(menu)
       
  1484         event.Skip()
       
  1485 
       
  1486 
       
  1487 #-------------------------------------------------------------------------------
       
  1488 #                          ToolBar Management Functions
       
  1489 #-------------------------------------------------------------------------------
       
  1490 
  1418     def ResetToolBar(self):
  1491     def ResetToolBar(self):
  1419         for item in self.CurrentToolBar:
  1492         for item in self.CurrentToolBar:
  1420             if wx.VERSION >= (2, 6, 0):
  1493             if wx.VERSION >= (2, 6, 0):
  1421                 self.Unbind(wx.EVT_MENU, id=item)
  1494                 self.Unbind(wx.EVT_MENU, id=item)
  1422             else:
  1495             else:
  1463         elif not language:
  1536         elif not language:
  1464             self.ResetToolBar()
  1537             self.ResetToolBar()
  1465             self.CurrentLanguage = language
  1538             self.CurrentLanguage = language
  1466         self.ResetCurrentMode()
  1539         self.ResetCurrentMode()
  1467 
  1540 
  1468     def RefreshPageTitles(self):
  1541 
  1469         for idx in xrange(self.GetPageCount()):
  1542 #-------------------------------------------------------------------------------
  1470             window = self.GetPage(idx)
  1543 #                           Tool Bar Items Functions
  1471             words = window.GetTagName().split("::")
  1544 #-------------------------------------------------------------------------------
  1472             self.SetPageText(idx, "-".join(words[1:]))
  1545 
  1473     
  1546     def ResetCurrentMode(self):
  1474     def OnRefreshMenu(self, event):
       
  1475         selected = self.GetPageSelection()
  1547         selected = self.GetPageSelection()
  1476         if selected != -1:
  1548         if selected != -1:
  1477             window = self.GetPage(selected)
  1549             window = self.GetPage(selected)
  1478             window.RefreshView()
  1550             window.SetMode(MODE_SELECTION)
  1479             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
  1551         if wx.VERSION < (2, 8, 0):
  1480         event.Skip()
  1552             ToolBar = self.ToolBar
  1481 
  1553         else:
  1482     def OnUndoMenu(self, event):
  1554             ToolBar = self.Panes["ToolBar"]
  1483         self.Controler.LoadPrevious()
  1555         if ToolBar:
       
  1556             ToolBar.ToggleTool(ID_PLCOPENEDITORTOOLBARSELECTION, True)
       
  1557         
       
  1558     def ResetToolToggle(self, id):
       
  1559         if wx.VERSION < (2, 8, 0):
       
  1560             tool = self.ToolBar.FindById(id)
       
  1561         else:
       
  1562             tool = self.Panes["ToolBar"].FindById(id)
       
  1563         tool.SetToggle(False)
       
  1564 
       
  1565     def OnSelectionTool(self, event):
  1484         selected = self.GetPageSelection()
  1566         selected = self.GetPageSelection()
  1485         if selected != -1:
  1567         if selected != -1:
  1486             window = self.GetPage(selected)
  1568             self.GetPage(selected).SetMode(MODE_SELECTION)
  1487             window.RefreshView()
  1569         event.Skip()
  1488             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
  1570     
  1489         self.RefreshTitle()
  1571     def OnCommentTool(self, event):
  1490         self.RefreshEditMenu()
  1572         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOMMENT)
  1491         self.RefreshProjectTree()
       
  1492         event.Skip()
       
  1493     
       
  1494     def OnRedoMenu(self, event):
       
  1495         self.Controler.LoadNext()
       
  1496         selected = self.GetPageSelection()
  1573         selected = self.GetPageSelection()
  1497         if selected != -1:
  1574         if selected != -1:
  1498             window = self.GetPage(selected)
  1575             self.GetPage(selected).SetMode(MODE_COMMENT)
  1499             window.RefreshView()
  1576         event.Skip()
  1500             self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName())
  1577     
  1501         self.RefreshTitle()
  1578     def OnVariableTool(self, event):
  1502         self.RefreshEditMenu()
  1579         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARVARIABLE)
  1503         self.RefreshProjectTree()
       
  1504         event.Skip()
       
  1505 
       
  1506     def OnCutMenu(self, event):
       
  1507         selected = self.GetPageSelection()
  1580         selected = self.GetPageSelection()
  1508         if selected != -1:
  1581         if selected != -1:
  1509             try:
  1582             self.GetPage(selected).SetMode(MODE_VARIABLE)
  1510                 self.GetPage(selected).Cut()
  1583         event.Skip()
  1511             except:
  1584     
  1512                 pass
  1585     def OnBlockTool(self, event):
  1513         event.Skip()
  1586         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARBLOCK)
  1514     
       
  1515     def OnCopyMenu(self, event):
       
  1516         selected = self.GetPageSelection()
  1587         selected = self.GetPageSelection()
  1517         if selected != -1:
  1588         if selected != -1:
  1518             try:
  1589             self.GetPage(selected).SetMode(MODE_BLOCK)
  1519                 self.GetPage(selected).Copy()
  1590         event.Skip()
  1520             except:
  1591         
  1521                 pass
  1592     def OnConnectionTool(self, event):
  1522         event.Skip()
  1593         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONNECTION)
  1523     
       
  1524     def OnPasteMenu(self, event):
       
  1525         selected = self.GetPageSelection()
  1594         selected = self.GetPageSelection()
  1526         if selected != -1:
  1595         if selected != -1:
  1527             try:
  1596             self.GetPage(selected).SetMode(MODE_CONNECTION)
  1528                 self.GetPage(selected).Paste()
  1597         event.Skip()
  1529             except:
  1598 
  1530                 pass
  1599     def OnPowerRailTool(self, event):
  1531         event.Skip()
  1600         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARPOWERRAIL)
  1532     
  1601         selected = self.GetPageSelection()
       
  1602         if selected != -1:
       
  1603             self.GetPage(selected).SetMode(MODE_POWERRAIL)
       
  1604         event.Skip()
       
  1605 
       
  1606     def OnRungTool(self, event):
       
  1607         selected = self.GetPageSelection()
       
  1608         if selected != -1:
       
  1609             self.GetPage(selected).AddLadderRung()
       
  1610         event.Skip()
       
  1611     
       
  1612     def OnCoilTool(self, event):
       
  1613         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCOIL)
       
  1614         selected = self.GetPageSelection()
       
  1615         if selected != -1:
       
  1616             self.GetPage(selected).SetMode(MODE_COIL)
       
  1617         event.Skip()
       
  1618     
       
  1619     def OnContactTool(self, event):
       
  1620         if self.DrawingMode == FREEDRAWING_MODE:
       
  1621             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARCONTACT)
       
  1622         selected = self.GetPageSelection()
       
  1623         if selected != -1:
       
  1624             if self.DrawingMode == FREEDRAWING_MODE:
       
  1625                 self.GetPage(selected).SetMode(MODE_CONTACT)
       
  1626             else:
       
  1627                 self.GetPage(selected).AddLadderContact()
       
  1628         event.Skip()
       
  1629     
       
  1630     def OnBranchTool(self, event): 
       
  1631         selected = self.GetPageSelection()
       
  1632         if selected != -1:
       
  1633             self.GetPage(selected).AddLadderBranch()
       
  1634         event.Skip()    
       
  1635     
       
  1636     def OnInitialStepTool(self, event):
       
  1637         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARINITIALSTEP)
       
  1638         selected = self.GetPageSelection()
       
  1639         if selected != -1:
       
  1640             self.GetPage(selected).SetMode(MODE_INITIALSTEP)
       
  1641         event.Skip()
       
  1642     
       
  1643     def OnStepTool(self, event):
       
  1644         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1645             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARSTEP)
       
  1646         selected = self.GetPageSelection()
       
  1647         if selected != -1:
       
  1648             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1649                 self.GetPage(selected).SetMode(MODE_STEP)
       
  1650             else:
       
  1651                 self.GetPage(selected).AddStep()
       
  1652         event.Skip()
       
  1653 
       
  1654     def OnActionBlockTool(self, event):
       
  1655         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1656             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARACTIONBLOCK)
       
  1657         selected = self.GetPageSelection()
       
  1658         if selected != -1:
       
  1659             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1660                 self.GetPage(selected).SetMode(MODE_ACTION)
       
  1661             else:
       
  1662                 self.GetPage(selected).AddStepAction()
       
  1663         event.Skip()
       
  1664 
       
  1665     def OnTransitionTool(self, event):
       
  1666         self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARTRANSITION)
       
  1667         selected = self.GetPageSelection()
       
  1668         if selected != -1:
       
  1669             self.GetPage(selected).SetMode(MODE_TRANSITION)
       
  1670         event.Skip()
       
  1671 
       
  1672     def OnDivergenceTool(self, event):
       
  1673         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1674             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARDIVERGENCE)
       
  1675         selected = self.GetPageSelection()
       
  1676         if selected != -1:
       
  1677             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1678                 self.GetPage(selected).SetMode(MODE_DIVERGENCE)
       
  1679             else:
       
  1680                 self.GetPage(selected).AddDivergence()
       
  1681         event.Skip()
       
  1682     
       
  1683     def OnJumpTool(self, event):
       
  1684         if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1685             self.ResetToolToggle(ID_PLCOPENEDITORTOOLBARJUMP)
       
  1686         selected = self.GetPageSelection()
       
  1687         if selected != -1:
       
  1688             if self.GetDrawingMode() == FREEDRAWING_MODE:
       
  1689                 self.GetPage(selected).SetMode(MODE_JUMP)
       
  1690             else:
       
  1691                 self.GetPage(selected).AddJump()
       
  1692         event.Skip()
       
  1693 
       
  1694 
       
  1695 #-------------------------------------------------------------------------------
       
  1696 #                         Add Project Elements Functions
       
  1697 #-------------------------------------------------------------------------------
       
  1698 
  1533     def OnAddDataTypeMenu(self, event):
  1699     def OnAddDataTypeMenu(self, event):
  1534         dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL)
  1700         dialog = DataTypeDialog(self, "Add a new data type", "Please enter data type name", "", wx.OK|wx.CANCEL)
  1535         dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames())
  1701         dialog.SetDataTypeNames(self.Controler.GetProjectDataTypeNames())
  1536         if dialog.ShowModal() == wx.ID_OK:
  1702         if dialog.ShowModal() == wx.ID_OK:
  1537             self.Controler.ProjectAddDataType(dialog.GetValue())
  1703             self.Controler.ProjectAddDataType(dialog.GetValue())
  1538             self.RefreshTitle()
  1704             self.RefreshTitle()
  1539             self.RefreshEditMenu()
  1705             self.RefreshEditMenu()
  1540             self.RefreshProjectTree()
  1706             self.RefreshProjectTree()
  1541         dialog.Destroy()
  1707         dialog.Destroy()
  1542         event.Skip()
  1708         event.Skip()
  1543         
  1709 
  1544     def OnRemoveDataTypeMenu(self, event):
  1710     def GenerateAddPouFunction(self, pou_type):
  1545         datatypes = self.Controler.GetProjectDataTypeNames()
  1711         def OnAddPouMenu(event):
  1546         dialog = wx.SingleChoiceDialog(self, "Select Data Type to remove:", "Data Type Remove", datatypes, wx.OK|wx.CANCEL)
  1712             dialog = PouDialog(self, pou_type)
  1547         if dialog.ShowModal() == wx.ID_OK:
  1713             dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1548             selected = dialog.GetStringSelection()
  1714             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1549             if not self.Controler.DataTypeIsUsed(selected):
  1715             if dialog.ShowModal() == wx.ID_OK:
  1550                 self.Controler.ProjectRemoveDataType(selected)
  1716                 values = dialog.GetValues()
  1551                 tagname = self.Controler.ComputeDataTypeName(selected)
  1717                 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
  1552                 idx = self.IsOpened(tagname)
       
  1553                 if idx is not None:
       
  1554                     self.DeletePage(idx)
       
  1555                 self.RefreshTitle()
  1718                 self.RefreshTitle()
  1556                 self.RefreshEditMenu()
  1719                 self.RefreshEditMenu()
  1557                 self.RefreshProjectTree()
  1720                 self.RefreshProjectTree()
  1558                 self.RefreshToolBar()
  1721             dialog.Destroy()
  1559             else:
  1722             event.Skip()
  1560                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1723         return OnAddPouMenu
  1561                 message.ShowModal()
  1724 
  1562                 message.Destroy()
  1725     def GenerateAddTransitionFunction(self, pou_name):
  1563         event.Skip()
  1726         def OnAddTransitionMenu(event):
  1564     
  1727             dialog = PouTransitionDialog(self)
  1565     def OnAddPouMenu(self, event):
  1728             dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1566         dialog = PouDialog(self)
  1729             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name))
  1567         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1730             if dialog.ShowModal() == wx.ID_OK: 
  1568         dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1731                 values = dialog.GetValues()
  1569         if dialog.ShowModal() == wx.ID_OK:
  1732                 self.Controler.ProjectAddPouTransition(pou_name, values["transitionName"], values["language"])
  1570             values = dialog.GetValues()
       
  1571             self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"])
       
  1572             self.RefreshTitle()
       
  1573             self.RefreshEditMenu()
       
  1574             self.RefreshProjectTree()
       
  1575         dialog.Destroy()
       
  1576         event.Skip()
       
  1577 
       
  1578     def OnRemovePouMenu(self, event):
       
  1579         pous = self.Controler.GetProjectPouNames()
       
  1580         dialog = wx.SingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wx.OK|wx.CANCEL)
       
  1581         if dialog.ShowModal() == wx.ID_OK:
       
  1582             selected = dialog.GetStringSelection()
       
  1583             if not self.Controler.PouIsUsed(selected):
       
  1584                 self.Controler.ProjectRemovePou(selected)
       
  1585                 tagname = self.Controler.ComputePouName(selected)
       
  1586                 idx = self.IsOpened(tagname)
       
  1587                 if idx is not None:
       
  1588                     self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
       
  1589                     self.DeletePage(idx)
       
  1590                 self.RefreshTitle()
  1733                 self.RefreshTitle()
  1591                 self.RefreshEditMenu()
  1734                 self.RefreshEditMenu()
  1592                 self.RefreshProjectTree()
  1735                 self.RefreshProjectTree()
  1593                 self.RefreshToolBar()
  1736             dialog.Destroy()
  1594             else:
  1737             event.Skip()
  1595                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1738         return OnAddTransitionMenu
  1596                 message.ShowModal()
  1739 
  1597                 message.Destroy()
  1740     def GenerateAddActionFunction(self, pou_name):
  1598         event.Skip()
  1741         def OnAddActionMenu(event):
       
  1742             dialog = PouActionDialog(self)
       
  1743             dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
  1744             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pou_name))
       
  1745             if dialog.ShowModal() == wx.ID_OK:
       
  1746                 values = dialog.GetValues()
       
  1747                 self.Controler.ProjectAddPouAction(pou_name, values["actionName"], values["language"])
       
  1748                 self.RefreshTitle()
       
  1749                 self.RefreshEditMenu()
       
  1750                 self.RefreshProjectTree()
       
  1751             dialog.Destroy()
       
  1752             event.Skip()
       
  1753         return OnAddActionMenu
  1599 
  1754 
  1600     def OnAddConfigurationMenu(self, event):
  1755     def OnAddConfigurationMenu(self, event):
  1601         dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration")
  1756         dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration")
  1602         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1757         dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1603         dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1758         dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1608             self.RefreshEditMenu()
  1763             self.RefreshEditMenu()
  1609             self.RefreshProjectTree()
  1764             self.RefreshProjectTree()
  1610         dialog.Destroy()
  1765         dialog.Destroy()
  1611         event.Skip()
  1766         event.Skip()
  1612 
  1767 
  1613     def OnRemoveConfigurationMenu(self, event):
  1768     def GenerateAddResourceFunction(self, config_name):
  1614         configs = self.Controler.GetProjectConfigNames()
  1769         def OnAddResourceMenu(self, event):
  1615         dialog = wx.SingleChoiceDialog(self, "Please select a configuration", "Remove configuration", configs, wx.OK|wx.CANCEL)
       
  1616         if dialog.ShowModal() == wx.ID_OK:
       
  1617             selected = dialog.GetStringSelection()
       
  1618             self.Controler.ProjectRemoveConfiguration(selected)
       
  1619             tagname = self.Controler.ComputeConfigurationName(selected)
       
  1620             idx = self.IsOpened(tagname)
       
  1621             if idx is not None:
       
  1622                 self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
       
  1623                 self.DeletePage(idx)
       
  1624             self.RefreshTitle()
       
  1625             self.RefreshEditMenu()
       
  1626             self.RefreshProjectTree()
       
  1627         event.Skip()
       
  1628 
       
  1629     def OnAddPouTransitionMenu(self, event):
       
  1630         selected = self.ProjectTree.GetSelection()
       
  1631         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
       
  1632             pouname = self.ProjectTree.GetItemText(selected)
       
  1633             if self.Controler.GetPouBodyType(pouname) == "SFC":
       
  1634                 dialog = PouTransitionDialog(self)
       
  1635                 dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
  1636                 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pouname))
       
  1637                 if dialog.ShowModal() == wx.ID_OK: 
       
  1638                     values = dialog.GetValues()
       
  1639                     self.Controler.ProjectAddPouTransition(pouname, values["transitionName"], values["language"])
       
  1640                     self.RefreshTitle()
       
  1641                     self.RefreshEditMenu()
       
  1642                     self.RefreshProjectTree()
       
  1643                 dialog.Destroy()
       
  1644         event.Skip()
       
  1645 
       
  1646     def OnRemovePouTransitionMenu(self, event):
       
  1647         selected = self.ProjectTree.GetSelection()
       
  1648         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
       
  1649             pouname = self.ProjectTree.GetItemText(selected)
       
  1650             if self.Controler.GetPouBodyType(pouname) == "SFC":
       
  1651                 transitions = self.Controler.GetPouTransitions(pouname)
       
  1652                 dialog = wx.SingleChoiceDialog(self, "Select Transition to remove:", "Remove transition", transitions, wx.OK|wx.CANCEL)
       
  1653                 if dialog.ShowModal() == wx.ID_OK: 
       
  1654                     selected = dialog.GetStringSelection()
       
  1655                     self.Controler.ProjectRemovePouTransition(pouname, selected)
       
  1656                     tagname = self.Controler.ComputePouTransitionName(pouname, selected)
       
  1657                     idx = self.IsOpened(tagname)
       
  1658                     if idx is not None:
       
  1659                         self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
       
  1660                         self.DeletePage(idx)
       
  1661                     self.RefreshTitle()
       
  1662                     self.RefreshEditMenu()
       
  1663                     self.RefreshProjectTree()
       
  1664                 dialog.Destroy()
       
  1665         event.Skip()
       
  1666 
       
  1667     def OnAddPouActionMenu(self, event):
       
  1668         selected = self.ProjectTree.GetSelection()
       
  1669         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
       
  1670             pouname = self.ProjectTree.GetItemText(selected)
       
  1671             if self.Controler.GetPouBodyType(pouname) == "SFC":
       
  1672                 dialog = PouActionDialog(self)
       
  1673                 dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
  1674                 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(pouname))
       
  1675                 if dialog.ShowModal() == wx.ID_OK:
       
  1676                     values = dialog.GetValues()
       
  1677                     self.Controler.ProjectAddPouAction(pouname, values["actionName"], values["language"])
       
  1678                     self.RefreshTitle()
       
  1679                     self.RefreshEditMenu()
       
  1680                     self.RefreshProjectTree()
       
  1681                 dialog.Destroy()
       
  1682         event.Skip()
       
  1683 
       
  1684     def OnRemovePouActionMenu(self, event):
       
  1685         selected = self.ProjectTree.GetSelection()
       
  1686         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
       
  1687             pouname = self.ProjectTree.GetItemText(selected)
       
  1688             if self.Controler.GetPouBodyType(pouname) == "SFC":
       
  1689                 actions = self.Controler.GetPouActions(pouname)
       
  1690                 dialog = wx.SingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wx.OK|wx.CANCEL)
       
  1691                 if dialog.ShowModal() == wx.ID_OK: 
       
  1692                     selected = dialog.GetStringSelection()
       
  1693                     self.Controler.ProjectRemovePouAction(pouname, selected)
       
  1694                     tagname = self.Controler.ComputePouActionName(pouname, selected)
       
  1695                     idx = self.IsOpened(tagname)
       
  1696                     if idx is not None:
       
  1697                         self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
       
  1698                         self.DeletePage(idx)
       
  1699                     self.RefreshTitle()
       
  1700                     self.RefreshEditMenu()
       
  1701                     self.RefreshProjectTree()
       
  1702                 dialog.Destroy()
       
  1703         event.Skip()
       
  1704 
       
  1705     def OnAddResourceMenu(self, event):
       
  1706         selected = self.ProjectTree.GetSelection()
       
  1707         if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
       
  1708             config_name = self.ProjectTree.GetItemText(selected)
       
  1709             dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource")
  1770             dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource")
  1710             dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1771             dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1711             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1772             dialog.SetPouElementNames(self.Controler.GetProjectPouVariables())
  1712             if dialog.ShowModal() == wx.ID_OK:
  1773             if dialog.ShowModal() == wx.ID_OK:
  1713                 value = dialog.GetValue()
  1774                 value = dialog.GetValue()
  1714                 self.Controler.ProjectAddConfigurationResource(config_name, value)
  1775                 self.Controler.ProjectAddConfigurationResource(config_name, value)
  1715                 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected)
  1776                 self.RefreshTitle()
       
  1777                 self.RefreshEditMenu()
       
  1778                 self.RefreshProjectTree()
       
  1779             dialog.Destroy()
       
  1780             event.Skip()
       
  1781         return OnAddResourceMenu
       
  1782 
       
  1783 
       
  1784 #-------------------------------------------------------------------------------
       
  1785 #                        Remove Project Elements Functions
       
  1786 #-------------------------------------------------------------------------------
       
  1787 
       
  1788     def OnRemoveDataTypeMenu(self, event):
       
  1789         selected = self.ProjectTree.GetSelection()
       
  1790         if self.ProjectTree.GetPyData(selected) == ITEM_DATATYPE:
       
  1791             name = self.ProjectTree.GetItemText(selected)
       
  1792             if not self.Controler.DataTypeIsUsed(name):
       
  1793                 self.Controler.ProjectRemoveDataType(name)
       
  1794                 tagname = self.Controler.ComputeDataTypeName(name)
  1716                 idx = self.IsOpened(tagname)
  1795                 idx = self.IsOpened(tagname)
  1717                 if idx is not None:
  1796                 if idx is not None:
  1718                     self.VariablePanelIndexer.RemoveVariablePanel(self.GetPage(idx).GetTagName())
       
  1719                     self.DeletePage(idx)
  1797                     self.DeletePage(idx)
  1720                 self.RefreshTitle()
  1798                 self.RefreshTitle()
  1721                 self.RefreshEditMenu()
  1799                 self.RefreshEditMenu()
  1722                 self.RefreshProjectTree()
  1800                 self.RefreshProjectTree()
  1723             dialog.Destroy()
  1801                 self.RefreshToolBar()
  1724         event.Skip()
  1802             else:
  1725 
  1803                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
  1726     def OnRemoveResourceMenu(self, event):
  1804                 message.ShowModal()
       
  1805                 message.Destroy()
       
  1806         event.Skip()
       
  1807 
       
  1808     def OnRemovePouMenu(self, event):
  1727         selected = self.ProjectTree.GetSelection()
  1809         selected = self.ProjectTree.GetSelection()
  1728         if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION:
  1810         if self.ProjectTree.GetPyData(selected) == ITEM_POU: 
  1729             config_name = self.ProjectTree.GetItemText(selected)
  1811             name = self.ProjectTree.GetItemText(selected)
  1730             infos = self.Controler.GetProjectInfos()
  1812             if not self.Controler.PouIsUsed(name):
  1731             resources = []
  1813                 self.Controler.ProjectRemovePou(name)
  1732             for config in infos["configs"]:
  1814                 tagname = self.Controler.ComputePouName(name)
  1733                 if config["name"] == config_name:
  1815                 idx = self.IsOpened(tagname)
  1734                     resources = config["resources"]
  1816                 if idx is not None:
  1735             dialog = wx.SingleChoiceDialog(self, "Select Resource to remove:", "Remove resource", resources, wx.OK|wx.CANCEL)
  1817                     self.VariablePanelIndexer.RemoveVariablePanel(tagname)
  1736             if dialog.ShowModal() == wx.ID_OK:
  1818                     self.DeletePage(idx)
  1737                 resource = dialog.GetStringSelection()
       
  1738                 self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
       
  1739                 self.RefreshTitle()
  1819                 self.RefreshTitle()
  1740                 self.RefreshEditMenu()
  1820                 self.RefreshEditMenu()
  1741                 self.RefreshProjectTree()
  1821                 self.RefreshProjectTree()
  1742             dialog.Destroy()
  1822                 self.RefreshToolBar()
       
  1823             else:
       
  1824                 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR)
       
  1825                 message.ShowModal()
       
  1826                 message.Destroy()
       
  1827         event.Skip()
       
  1828 
       
  1829     def OnRemoveConfigurationMenu(self, event):
       
  1830         selected = self.ProjectTree.GetSelection()
       
  1831         if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: 
       
  1832             name = self.ProjectTree.GetItemText(selected)
       
  1833             self.Controler.ProjectRemoveConfiguration(name)
       
  1834             tagname = self.Controler.ComputeConfigurationName(name)
       
  1835             idx = self.IsOpened(tagname)
       
  1836             if idx is not None:
       
  1837                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
       
  1838                 self.DeletePage(idx)
       
  1839             self.RefreshTitle()
       
  1840             self.RefreshEditMenu()
       
  1841             self.RefreshProjectTree()
       
  1842         event.Skip()
       
  1843 
       
  1844     def OnRemoveTransitionMenu(self, event):
       
  1845         selected = self.ProjectTree.GetSelection()
       
  1846         if self.ProjectTree.GetPyData(selected) == ITEM_TRANSITION: 
       
  1847             transition = self.ProjectTree.GetItemText(selected)
       
  1848             item = self.ProjectTree.GetItemParent(selected)
       
  1849             item_type = self.ProjectTree.GetPyData(item)
       
  1850             while item_type != ITEM_POU:
       
  1851                 item = self.ProjectTree.GetItemParent(item)
       
  1852                 item_type = self.ProjectTree.GetPyData(item)
       
  1853             pou_name = self.ProjectTree.GetItemText(item)
       
  1854             self.Controler.ProjectRemovePouTransition(pou_name, transition)
       
  1855             tagname = self.Controler.ComputePouTransitionName(pou_name, transition)
       
  1856             idx = self.IsOpened(tagname)
       
  1857             if idx is not None:
       
  1858                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
       
  1859                 self.DeletePage(idx)
       
  1860             self.RefreshTitle()
       
  1861             self.RefreshEditMenu()
       
  1862             self.RefreshProjectTree()
       
  1863         event.Skip()
       
  1864 
       
  1865     def OnRemoveActionMenu(self, event):
       
  1866         selected = self.ProjectTree.GetSelection()
       
  1867         if self.ProjectTree.GetPyData(selected) == ITEM_ACTION: 
       
  1868             transition = self.ProjectTree.GetItemText(selected)
       
  1869             item = self.ProjectTree.GetItemParent(selected)
       
  1870             item_type = self.ProjectTree.GetPyData(item)
       
  1871             while item_type != ITEM_POU:
       
  1872                 item = self.ProjectTree.GetItemParent(item)
       
  1873                 item_type = self.ProjectTree.GetPyData(item)
       
  1874             pou_name = self.ProjectTree.GetItemText(item)
       
  1875             self.Controler.ProjectRemovePouAction(pou_name, action)
       
  1876             tagname = self.Controler.ComputePouActionName(pou_name, action)
       
  1877             idx = self.IsOpened(tagname)
       
  1878             if idx is not None:
       
  1879                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
       
  1880                 self.DeletePage(idx)
       
  1881             self.RefreshTitle()
       
  1882             self.RefreshEditMenu()
       
  1883             self.RefreshProjectTree()
       
  1884         event.Skip()
       
  1885 
       
  1886     def OnRemoveResourceMenu(self, event):
       
  1887         selected = self.ProjectTree.GetSelection()
       
  1888         if self.ProjectTree.GetPyData(selected) == ITEM_RESOURCE:
       
  1889             resource = self.ProjectTree.GetItemText(selected)
       
  1890             item = self.ProjectTree.GetItemParent(selected)
       
  1891             item_type = self.ProjectTree.GetPyData(item)
       
  1892             while item_type != ITEM_CONFIGURATION:
       
  1893                 item = self.ProjectTree.GetItemParent(item)
       
  1894                 item_type = self.ProjectTree.GetPyData(item)
       
  1895             config_name = self.ProjectTree.GetItemText(item)
       
  1896             self.Controler.ProjectRemoveConfigurationResource(config_name, resource)
       
  1897             tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected)
       
  1898             idx = self.IsOpened(tagname)
       
  1899             if idx is not None:
       
  1900                 self.VariablePanelIndexer.RemoveVariablePanel(tagname)
       
  1901                 self.DeletePage(idx)
       
  1902             self.RefreshTitle()
       
  1903             self.RefreshEditMenu()
       
  1904             self.RefreshProjectTree()
  1743         event.Skip()
  1905         event.Skip()
  1744 
  1906 
  1745     def OnPLCOpenMenu(self, event):
  1907     def OnPLCOpenMenu(self, event):
  1746         result = OpenPDFDoc()
  1908         result = OpenPDFDoc()
  1747         if type(result) == StringType:
  1909         if type(result) == StringType:
  1785         self.SetSizer(self.ScalingPanelSizer)
  1947         self.SetSizer(self.ScalingPanelSizer)
  1786 
  1948 
  1787     def _init_ctrls(self, prnt):
  1949     def _init_ctrls(self, prnt):
  1788         wx.Panel.__init__(self, id=ID_SCALINGPANEL,
  1950         wx.Panel.__init__(self, id=ID_SCALINGPANEL,
  1789               name='ScalingPanel', parent=prnt, pos=wx.Point(0, 0),
  1951               name='ScalingPanel', parent=prnt, pos=wx.Point(0, 0),
  1790               size=wx.Size(0, 0), style=0)
  1952               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
  1791         
  1953         
  1792         self.staticText1 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT1,
  1954         self.staticText1 = wx.StaticText(id=ID_SCALINGPANELSTATICTEXT1,
  1793               label='X Scale:', name='staticText1', parent=self,
  1955               label='X Scale:', name='staticText1', parent=self,
  1794               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
  1956               pos=wx.Point(0, 0), size=wx.Size(150, 17), style=0)
  1795         
  1957         
  2333         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  2495         self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  2334         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  2496         self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
  2335             
  2497             
  2336         self._init_sizers()
  2498         self._init_sizers()
  2337 
  2499 
  2338     def __init__(self, parent):
  2500     def __init__(self, parent, pou_type = None):
  2339         self._init_ctrls(parent)
  2501         self._init_ctrls(parent)
  2340         
  2502         
  2341         for option in ["function","functionBlock","program"]:
  2503         for option in ["function", "functionBlock", "program"]:
  2342             self.PouType.Append(option)
  2504             self.PouType.Append(option)
       
  2505         if pou_type is not None:
       
  2506             self.PouType.SetStringSelection(pou_type)
  2343         self.RefreshLanguage()
  2507         self.RefreshLanguage()
  2344 
  2508 
  2345         self.PouNames = []
  2509         self.PouNames = []
  2346         self.PouElementNames = []
  2510         self.PouElementNames = []
  2347 
  2511