PLCOpenEditor.py
changeset 47 2b2f8d88e6d3
parent 46 4379e98a30aa
child 48 2675bf9b0a01
equal deleted inserted replaced
46:4379e98a30aa 47:2b2f8d88e6d3
    63 if len(args) > 1:
    63 if len(args) > 1:
    64     usage()
    64     usage()
    65     sys.exit()
    65     sys.exit()
    66 elif len(args) == 1:
    66 elif len(args) == 1:
    67     fileOpen = args[0]
    67     fileOpen = args[0]
    68 CWD = sys.path[0]
    68 CWD = ""
       
    69 for path in sys.path:
       
    70     if os.path.isfile(os.path.join(path, "PLCOpenEditor.py")):
       
    71         CWD = path
    69 
    72 
    70 [wxID_PLCOPENEDITOR, wxID_PLCOPENEDITORPROJECTTREE, 
    73 [wxID_PLCOPENEDITOR, wxID_PLCOPENEDITORPROJECTTREE, 
    71  wxID_PLCOPENEDITORSPLITTERWINDOW1, wxID_PLCOPENEDITOREDITORPANEL,
    74  wxID_PLCOPENEDITORSPLITTERWINDOW1, wxID_PLCOPENEDITOREDITORPANEL,
    72  wxID_PLCOPENEDITORTABSOPENED, wxID_PLCOPENEDITORTOOLBAR,
    75  wxID_PLCOPENEDITORTABSOPENED, wxID_PLCOPENEDITORTOOLBAR,
    73  wxID_PLCOPENEDITORDEFAULTTOOLBAR, wxID_PLCOPENEDITORSFCTOOLBAR, 
    76  wxID_PLCOPENEDITORDEFAULTTOOLBAR, wxID_PLCOPENEDITORSFCTOOLBAR, 
   202         self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu,
   205         self.Bind(wx.EVT_MENU, self.OnRemoveConfigurationMenu,
   203               id=wxID_PLCOPENEDITOREDITMENUITEMS12)
   206               id=wxID_PLCOPENEDITOREDITMENUITEMS12)
   204 
   207 
   205     def _init_coll_menuBar1_Menus(self, parent):
   208     def _init_coll_menuBar1_Menus(self, parent):
   206         # generated method, don't edit
   209         # generated method, don't edit
   207 
   210         
   208         parent.Append(menu=self.FileMenu, title=u'File')
   211         if self.ModeSolo:
       
   212             parent.Append(menu=self.FileMenu, title=u'File')
   209         parent.Append(menu=self.EditMenu, title=u'Edit')
   213         parent.Append(menu=self.EditMenu, title=u'Edit')
   210         parent.Append(menu=self.HelpMenu, title=u'Help')
   214         parent.Append(menu=self.HelpMenu, title=u'Help')
   211 
   215 
   212     def _init_coll_ConfigMenu_Items(self, parent):
   216     def _init_coll_ConfigMenu_Items(self, parent):
   213         # generated method, don't edit
   217         # generated method, don't edit
   228               kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   232               kind=wx.ITEM_NORMAL, text=u'PLCOpenEditor\tF1')
   229         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS1,
   233         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS1,
   230               kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
   234               kind=wx.ITEM_NORMAL, text=u'PLCOpen\tF2')
   231         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS2,
   235         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS2,
   232               kind=wx.ITEM_NORMAL, text=u'IEC 61131-3\tF3')
   236               kind=wx.ITEM_NORMAL, text=u'IEC 61131-3\tF3')
   233         parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS3,
   237         if self.ModeSolo:
   234               kind=wx.ITEM_NORMAL, text=u'About')
   238             parent.Append(help='', id=wxID_PLCOPENEDITORHELPMENUITEMS3,
       
   239                   kind=wx.ITEM_NORMAL, text=u'About')
   235         self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu,
   240         self.Bind(wx.EVT_MENU, self.OnPLCOpenMenu,
   236               id=wxID_PLCOPENEDITORHELPMENUITEMS1)
   241               id=wxID_PLCOPENEDITORHELPMENUITEMS1)
   237 
   242 
   238     def _init_coll_FileMenu_Items(self, parent):
   243     def _init_coll_FileMenu_Items(self, parent):
   239         # generated method, don't edit
   244         # generated method, don't edit
   300 
   305 
   301     def _init_utils(self):
   306     def _init_utils(self):
   302         # generated method, don't edit
   307         # generated method, don't edit
   303         self.menuBar1 = wx.MenuBar()
   308         self.menuBar1 = wx.MenuBar()
   304 
   309 
   305         self.FileMenu = wx.Menu(title=u'')
   310         if self.ModeSolo:
       
   311             self.FileMenu = wx.Menu(title=u'')
       
   312         else:
       
   313             self.FileMenu = None
   306 
   314 
   307         self.EditMenu = wx.Menu(title=u'')
   315         self.EditMenu = wx.Menu(title=u'')
   308 
   316 
   309         self.HelpMenu = wx.Menu(title='')
   317         self.HelpMenu = wx.Menu(title='')
   310 
   318 
   311         self.SFCMenu = wx.Menu(title='')
   319         self.SFCMenu = wx.Menu(title='')
   312 
   320 
   313         self.ConfigMenu = wx.Menu(title='')
   321         self.ConfigMenu = wx.Menu(title='')
   314 
   322 
   315         self._init_coll_menuBar1_Menus(self.menuBar1)
   323         self._init_coll_menuBar1_Menus(self.menuBar1)
   316         self._init_coll_FileMenu_Items(self.FileMenu)
   324         if self.ModeSolo:
       
   325             self._init_coll_FileMenu_Items(self.FileMenu)
   317         self._init_coll_EditMenu_Items(self.EditMenu)
   326         self._init_coll_EditMenu_Items(self.EditMenu)
   318         self._init_coll_HelpMenu_Items(self.HelpMenu)
   327         self._init_coll_HelpMenu_Items(self.HelpMenu)
   319         self._init_coll_SFCMenu_Items(self.SFCMenu)
   328         self._init_coll_SFCMenu_Items(self.SFCMenu)
   320         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
   329         self._init_coll_ConfigMenu_Items(self.ConfigMenu)
   321 
   330 
   404               id=wxID_PLCOPENEDITORPROJECTTREE)
   413               id=wxID_PLCOPENEDITORPROJECTTREE)
   405         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   414         self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnProjectTreeItemSelected,
   406               id=wxID_PLCOPENEDITORPROJECTTREE)
   415               id=wxID_PLCOPENEDITORPROJECTTREE)
   407         self.splitterWindow1.SplitVertically(self.ProjectTree, self.EditorPanel,
   416         self.splitterWindow1.SplitVertically(self.ProjectTree, self.EditorPanel,
   408               200)
   417               200)
   409               
   418         
   410         self._init_sizers()
   419         self._init_sizers()
   411 
   420 
   412     def __init__(self, parent):
   421     def __init__(self, parent, controler = None):
       
   422         self.ModeSolo = controler == None
   413         self._init_ctrls(parent)
   423         self._init_ctrls(parent)
   414         
   424         
   415         self.TreeImageList = wxImageList(16, 16)
   425         self.TreeImageList = wxImageList(16, 16)
   416         for language in LANGUAGES:
   426         for language in LANGUAGES:
   417             self.TreeImageList.Add(wxBitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   427             self.TreeImageList.Add(wxBitmap(os.path.join(CWD, 'Images/%s.png'%language)))
   418         self.ProjectTree.SetImageList(self.TreeImageList)
   428         self.ProjectTree.SetImageList(self.TreeImageList)
   419         
   429         
   420         self.Controler = PLCControler()
   430         if self.ModeSolo:
       
   431             self.Controler = PLCControler()
       
   432         else:
       
   433             self.Controler = controler
   421         
   434         
   422         if fileOpen:
   435         if fileOpen:
   423             self.Controler.OpenXMLFile(fileOpen)
   436             self.Controler.OpenXMLFile(fileOpen)
   424             self.RefreshProjectTree()
   437             self.RefreshProjectTree()
   425         
   438         
   610 
   623 
   611     def ResetCurrentMode(self):
   624     def ResetCurrentMode(self):
   612         selected = self.TabsOpened.GetSelection()
   625         selected = self.TabsOpened.GetSelection()
   613         if selected != -1:
   626         if selected != -1:
   614             window = self.TabsOpened.GetPage(selected)
   627             window = self.TabsOpened.GetPage(selected)
   615             if not isinstance(window, TextViewer):
   628             window.SetMode(MODE_SELECTION)
   616                 window.SetMode(MODE_SELECTION)
       
   617         self.ToolBar.ToggleTool(wxID_PLCOPENEDITORTOOLBARSELECTION, True)
   629         self.ToolBar.ToggleTool(wxID_PLCOPENEDITORTOOLBARSELECTION, True)
   618 
   630 
   619     def ResetToolToggle(self, id):
   631     def ResetToolToggle(self, id):
   620         tool = self.ToolBar.FindById(id)
   632         tool = self.ToolBar.FindById(id)
   621         tool.SetToggle(False)
   633         tool.SetToggle(False)
   668         event.Skip()
   680         event.Skip()
   669 
   681 
   670     def OnRungTool(self, event):
   682     def OnRungTool(self, event):
   671         selected = self.TabsOpened.GetSelection()
   683         selected = self.TabsOpened.GetSelection()
   672         if selected != -1:
   684         if selected != -1:
   673             self.TabsOpened.GetPage(selected).AddLadderRung()
   685             self.TabsOpened.GetPage(selected).Viewer.AddLadderRung()
   674         event.Skip()
   686         event.Skip()
   675     
   687     
   676     def OnCoilTool(self, event):
   688     def OnCoilTool(self, event):
   677         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCOIL)
   689         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARCOIL)
   678         selected = self.TabsOpened.GetSelection()
   690         selected = self.TabsOpened.GetSelection()
   686         selected = self.TabsOpened.GetSelection()
   698         selected = self.TabsOpened.GetSelection()
   687         if selected != -1:
   699         if selected != -1:
   688             if self.DrawingMode == FREEDRAWING_MODE:
   700             if self.DrawingMode == FREEDRAWING_MODE:
   689                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
   701                 self.TabsOpened.GetPage(selected).SetMode(MODE_CONTACT)
   690             else:
   702             else:
   691                 self.TabsOpened.GetPage(selected).AddLadderContact()
   703                 self.TabsOpened.GetPage(selected).Viewer.AddLadderContact()
   692         event.Skip()
   704         event.Skip()
   693     
   705     
   694     def OnBranchTool(self, event): 
   706     def OnBranchTool(self, event): 
   695         selected = self.TabsOpened.GetSelection()
   707         selected = self.TabsOpened.GetSelection()
   696         if selected != -1:
   708         if selected != -1:
   697             self.TabsOpened.GetPage(selected).AddLadderBranch()
   709             self.TabsOpened.GetPage(selected).Viewer.AddLadderBranch()
   698         event.Skip()    
   710         event.Skip()    
   699     
   711     
   700     def OnInitialStepTool(self, event):
   712     def OnInitialStepTool(self, event):
   701         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARINITIALSTEP)
   713         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARINITIALSTEP)
   702         selected = self.TabsOpened.GetSelection()
   714         selected = self.TabsOpened.GetSelection()
   710         selected = self.TabsOpened.GetSelection()
   722         selected = self.TabsOpened.GetSelection()
   711         if selected != -1:
   723         if selected != -1:
   712             if self.GetDrawingMode() == FREEDRAWING_MODE:
   724             if self.GetDrawingMode() == FREEDRAWING_MODE:
   713                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
   725                 self.TabsOpened.GetPage(selected).SetMode(MODE_STEP)
   714             else:
   726             else:
   715                 self.TabsOpened.GetPage(selected).AddStep()
   727                 self.TabsOpened.GetPage(selected).Viewer.AddStep()
   716         event.Skip()
   728         event.Skip()
   717 
   729 
   718     def OnActionBlockTool(self, event):
   730     def OnActionBlockTool(self, event):
   719         if self.GetDrawingMode() == FREEDRAWING_MODE:
   731         if self.GetDrawingMode() == FREEDRAWING_MODE:
   720             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARACTIONBLOCK)
   732             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARACTIONBLOCK)
   721         selected = self.TabsOpened.GetSelection()
   733         selected = self.TabsOpened.GetSelection()
   722         if selected != -1:
   734         if selected != -1:
   723             if self.GetDrawingMode() == FREEDRAWING_MODE:
   735             if self.GetDrawingMode() == FREEDRAWING_MODE:
   724                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
   736                 self.TabsOpened.GetPage(selected).SetMode(MODE_ACTION)
   725             else:
   737             else:
   726                 self.TabsOpened.GetPage(selected).AddStepAction()
   738                 self.TabsOpened.GetPage(selected).Viewer.AddStepAction()
   727         event.Skip()
   739         event.Skip()
   728 
   740 
   729     def OnTransitionTool(self, event):
   741     def OnTransitionTool(self, event):
   730         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARTRANSITION)
   742         self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARTRANSITION)
   731         selected = self.TabsOpened.GetSelection()
   743         selected = self.TabsOpened.GetSelection()
   739         selected = self.TabsOpened.GetSelection()
   751         selected = self.TabsOpened.GetSelection()
   740         if selected != -1:
   752         if selected != -1:
   741             if self.GetDrawingMode() == FREEDRAWING_MODE:
   753             if self.GetDrawingMode() == FREEDRAWING_MODE:
   742                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
   754                 self.TabsOpened.GetPage(selected).SetMode(MODE_DIVERGENCE)
   743             else:
   755             else:
   744                 self.TabsOpened.GetPage(selected).AddDivergence()
   756                 self.TabsOpened.GetPage(selected).Viewer.AddDivergence()
   745         event.Skip()
   757         event.Skip()
   746     
   758     
   747     def OnJumpTool(self, event):
   759     def OnJumpTool(self, event):
   748         if self.GetDrawingMode() == FREEDRAWING_MODE:
   760         if self.GetDrawingMode() == FREEDRAWING_MODE:
   749             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARJUMP)
   761             self.ResetToolToggle(wxID_PLCOPENEDITORTOOLBARJUMP)
   750         selected = self.TabsOpened.GetSelection()
   762         selected = self.TabsOpened.GetSelection()
   751         if selected != -1:
   763         if selected != -1:
   752             if self.GetDrawingMode() == FREEDRAWING_MODE:
   764             if self.GetDrawingMode() == FREEDRAWING_MODE:
   753                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
   765                 self.TabsOpened.GetPage(selected).SetMode(MODE_JUMP)
   754             else:
   766             else:
   755                 self.TabsOpened.GetPage(selected).AddJump()
   767                 self.TabsOpened.GetPage(selected).Viewer.AddJump()
   756         event.Skip()
   768         event.Skip()
   757         
   769         
   758     def OnPouSelectedChanged(self, event):
   770     def OnPouSelectedChanged(self, event):
   759         selected = event.GetSelection()
   771         selected = event.GetSelection()
   760         if selected >= 0:
   772         if selected >= 0:
   765             item, root_cookie = self.ProjectTree.GetFirstChild(root)
   777             item, root_cookie = self.ProjectTree.GetFirstChild(root)
   766             while item.IsOk() and not found:
   778             while item.IsOk() and not found:
   767                 if self.ProjectTree.GetItemText(item) == name:
   779                 if self.ProjectTree.GetItemText(item) == name:
   768                     self.ProjectTree.SelectItem(item)
   780                     self.ProjectTree.SelectItem(item)
   769                 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
   781                 item, root_cookie = self.ProjectTree.GetNextChild(root, root_cookie)
       
   782             self.TabsOpened.GetPage(selected).RefreshView()
   770             self.RefreshFileMenu()
   783             self.RefreshFileMenu()
   771             self.RefreshEditMenu()
   784             self.RefreshEditMenu()
   772             self.RefreshToolBar()
   785             self.RefreshToolBar()
   773         event.Skip()
   786         event.Skip()
   774 
   787 
   775     def OnProjectTreeBeginDrag(self, event):
   788     def OnProjectTreeBeginDrag(self, event):
   776         item = event.GetItem()
   789         item = event.GetItem()
   777         if self.ProjectTree.GetPyData(item) == ITEM_VARIABLE:
   790         if self.ProjectTree.GetPyData(item) == ITEM_POU:
   778             data = wxTextDataObject(self.ProjectTree.GetItemText(item))
   791             block_name = self.ProjectTree.GetItemText(item)
       
   792             block_type = self.Controler.GetPouType(block_name)
       
   793             data = wxTextDataObject(str((block_name, block_type)))
   779             dragSource = wxDropSource(self.ProjectTree)
   794             dragSource = wxDropSource(self.ProjectTree)
   780             dragSource.SetData(data)
   795             dragSource.SetData(data)
   781             dragSource.DoDragDrop()
   796             dragSource.DoDragDrop()
   782         event.Skip()
       
   783 
   797 
   784     def OnProjectTreeItemEndEdit(self, event):
   798     def OnProjectTreeItemEndEdit(self, event):
   785         message = None
   799         message = None
   786         abort = False
   800         abort = False
   787         new_name = event.GetLabel()
   801         new_name = event.GetLabel()
   873             self.ProjectTree.Expand(selected)
   887             self.ProjectTree.Expand(selected)
   874         name = self.ProjectTree.GetItemText(selected)
   888         name = self.ProjectTree.GetItemText(selected)
   875         data = self.ProjectTree.GetPyData(selected)
   889         data = self.ProjectTree.GetPyData(selected)
   876         if name == "Properties":
   890         if name == "Properties":
   877             self.ShowProperties()
   891             self.ShowProperties()
   878         elif data == ITEM_CLASS:
   892 ##        elif data == ITEM_CLASS:
   879             item = self.ProjectTree.GetItemParent(selected)
   893 ##            item = self.ProjectTree.GetItemParent(selected)
   880             item_type = self.ProjectTree.GetPyData(item)
   894 ##            item_type = self.ProjectTree.GetPyData(item)
   881             while item_type not in [ITEM_POU, ITEM_RESOURCE, ITEM_CONFIGURATION] and item.IsOk():
   895 ##            while item_type not in [ITEM_POU, ITEM_RESOURCE, ITEM_CONFIGURATION] and item.IsOk():
   882                 item = self.ProjectTree.GetItemParent(item)
   896 ##                item = self.ProjectTree.GetItemParent(item)
       
   897 ##                item_type = self.ProjectTree.GetPyData(item)
       
   898 ##            item_name = self.ProjectTree.GetItemText(item)
       
   899 ##            if item_type == ITEM_POU:
       
   900 ##                dialog = EditVariableDialog(self, item_name, self.Controler.GetPouType(item_name), self.Controler.PouIsUsed(item_name), name)
       
   901 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
   902 ##                values = {}
       
   903 ##                values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name)
       
   904 ##                values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name)
       
   905 ##                dialog.SetValues(values)
       
   906 ##                if dialog.ShowModal() == wxID_OK:
       
   907 ##                    new_values = dialog.GetValues()
       
   908 ##                    if "returnType" in new_values:
       
   909 ##                        self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"])
       
   910 ##                    self.Controler.SetPouInterfaceVars(item_name, new_values["data"])
       
   911 ##                    pou_names = self.Controler.GetElementsOpenedNames()
       
   912 ##                    if item_name in pou_names:
       
   913 ##                        window = self.TabsOpened.GetPage(pou_names.index(item_name))
       
   914 ##                        if isinstance(window, TextViewer):
       
   915 ##                            varlist = []
       
   916 ##                            if "returnType" in new_values:
       
   917 ##                                varlist.append(name)
       
   918 ##                            for var in new_values["data"]:
       
   919 ##                                varlist.append(var["Name"])
       
   920 ##                            window.SetVariables(varlist)
       
   921 ##                dialog.Destroy()
       
   922 ##                self.RefreshProjectTree()
       
   923 ##            elif item_type == ITEM_CONFIGURATION:
       
   924 ##                dialog = EditVariableDialog(self, item_name, None, False, name)
       
   925 ##                dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
   926 ##                values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)}
       
   927 ##                dialog.SetValues(values)
       
   928 ##                if dialog.ShowModal() == wxID_OK:
       
   929 ##                    new_values = dialog.GetValues()
       
   930 ##                    self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"])
       
   931 ##                dialog.Destroy()
       
   932 ##                self.RefreshProjectTree()
       
   933 ##            elif item_type == ITEM_RESOURCE:
       
   934 ##                config = self.ProjectTree.GetItemParent(item)
       
   935 ##                config_type = self.ProjectTree.GetPyData(config)
       
   936 ##                while config_type != ITEM_CONFIGURATION and config.IsOk():
       
   937 ##                    config = self.ProjectTree.GetItemParent(config)
       
   938 ##                    config_type = self.ProjectTree.GetPyData(config)
       
   939 ##                if config.IsOk():
       
   940 ##                    config_name = self.ProjectTree.GetItemText(config)
       
   941 ##                    dialog = EditVariableDialog(self, item_name, None, False, name)
       
   942 ##                    values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)}
       
   943 ##                    dialog.SetValues(values)
       
   944 ##                    if dialog.ShowModal() == wxID_OK:
       
   945 ##                        new_values = dialog.GetValues()
       
   946 ##                        self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"])
       
   947 ##                    dialog.Destroy()
       
   948 ##                    self.RefreshProjectTree()
       
   949 ##        elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
       
   950 ##            if data == ITEM_POU:
       
   951 ##                idx = self.Controler.OpenElementEditing(name)
       
   952 ##                language = self.Controler.GetPouBodyType(name)
       
   953 ##                varlist = []
       
   954 ##                returnType = self.Controler.GetPouInterfaceReturnTypeByName(name)
       
   955 ##                if returnType:
       
   956 ##                    varlist.append(name)
       
   957 ##                vars = self.Controler.GetPouInterfaceVarsByName(name)
       
   958 ##                if vars:
       
   959 ##                    for var in vars:
       
   960 ##                        varlist.append(var["Name"])
       
   961 ##                self.EditVariable.SetPou(self.Controler.GetPouType(name), self.Controler.PouIsUsed(name))
       
   962 ##                self.EditVariable.SetValues({"returnType":returnType,"data":vars})
       
   963 ##            else:
       
   964 ##                parent = self.ProjectTree.GetItemParent(selected)
       
   965 ##                parent_name = self.ProjectTree.GetItemText(parent)
       
   966 ##                grandparent = self.ProjectTree.GetItemParent(parent)
       
   967 ##                grandparent_name = self.ProjectTree.GetItemText(grandparent)
       
   968 ##                if data == ITEM_TRANSITION:
       
   969 ##                    idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name)
       
   970 ##                    language = self.Controler.GetTransitionBodyType(grandparent_name, name)
       
   971 ##                elif data == ITEM_ACTION:
       
   972 ##                    idx = self.Controler.OpenPouActionEditing(grandparent_name, name)
       
   973 ##                    language = self.Controler.GetActionBodyType(grandparent_name, name)
       
   974 ##                varlist = [name]
       
   975 ##                vars = self.Controler.GetPouInterfaceVarsByName(grandparent_name)
       
   976 ##                if vars:
       
   977 ##                    for var in vars:
       
   978 ##                        varlist.append(var["Name"])
       
   979 ##                self.EditVariable.SetPou(self.Controler.GetPouType(grandparent_name), self.Controler.PouIsUsed(grandparent_name))
       
   980 ##                self.EditVariable.SetValues({"returnType":returnType,"data":vars})
       
   981 ##            if idx != None:
       
   982 ##                if language == "FBD":
       
   983 ##                    new_window = Viewer(self.TabsOpened, self, self.Controler)
       
   984 ##                elif language == "LD":
       
   985 ##                    new_window = LD_Viewer(self.TabsOpened, self, self.Controler)
       
   986 ##                elif language == "SFC":
       
   987 ##                    new_window = SFC_Viewer(self.TabsOpened, self, self.Controler)
       
   988 ##                elif language in ["IL", "ST"]:
       
   989 ##                    new_window = TextViewer(self.TabsOpened, self, self.Controler)
       
   990 ##                    new_window.SetTextSyntax(language)
       
   991 ##                    if language == "IL":
       
   992 ##                        new_window.SetKeywords(IL_KEYWORDS)
       
   993 ##                    else:
       
   994 ##                        new_window.SetKeywords(ST_KEYWORDS)
       
   995 ##                    new_window.SetVariables(varlist)
       
   996 ##                    new_window.SetFunctions(self.Controler.GetBlockTypes())
       
   997 ##                else:
       
   998 ##                    return
       
   999 ##                new_window.RefreshView()
       
  1000 ##                self.TabsOpened.AddPage(new_window, "")
       
  1001 ##                self.TabsOpened.SetSelection(idx)
       
  1002 ##                self.RefreshTabsOpenedTitles()
       
  1003 ##                self.RefreshFileMenu()
       
  1004 ##                self.RefreshEditMenu()
       
  1005 ##                self.RefreshToolBar()
       
  1006 ##            else:
       
  1007 ##                if data == ITEM_POU:
       
  1008 ##                    idx = self.Controler.ChangeElementEditing(name)
       
  1009 ##                elif data == ITEM_TRANSITION:
       
  1010 ##                    idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name)
       
  1011 ##                elif data == ITEM_ACTION:
       
  1012 ##                    idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
       
  1013 ##                if idx != None:
       
  1014 ##                    self.TabsOpened.SetSelection(idx)
       
  1015 ##                    self.RefreshFileMenu()
       
  1016 ##                    self.RefreshEditMenu()
       
  1017 ##                    self.RefreshToolBar()
       
  1018 ##        elif data == ITEM_RESOURCE:
       
  1019 ##            item = self.ProjectTree.GetItemParent(selected)
       
  1020 ##            item_type = self.ProjectTree.GetPyData(item)
       
  1021 ##            while item_type != ITEM_CONFIGURATION:
       
  1022 ##                item = self.ProjectTree.GetItemParent(item)
       
  1023 ##                item_type = self.ProjectTree.GetPyData(item)
       
  1024 ##            config_name = self.ProjectTree.GetItemText(item)
       
  1025 ##            idx = self.Controler.OpenConfigurationResourceEditing(config_name, name)
       
  1026 ##            if idx != None:
       
  1027 ##                new_window = ResourceEditor(self.TabsOpened, self, self.Controler)
       
  1028 ##                new_window.RefreshView()
       
  1029 ##                self.TabsOpened.AddPage(new_window, "")
       
  1030 ##                self.TabsOpened.SetSelection(idx)
       
  1031 ##                self.RefreshTabsOpenedTitles()
       
  1032 ##                self.RefreshFileMenu()
       
  1033 ##                self.RefreshEditMenu()
       
  1034 ##                self.RefreshToolBar()
       
  1035 ##            else:
       
  1036 ##                idx = self.Controler.ChangeConfigurationResourceEditing(parent_name, name)
       
  1037 ##                if idx != None:
       
  1038 ##                    self.TabsOpened.SetSelection(idx)
       
  1039 ##                    self.RefreshFileMenu()
       
  1040 ##                    self.RefreshEditMenu()
       
  1041 ##                    self.RefreshToolBar()
       
  1042         elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]:
       
  1043             if data == ITEM_CONFIGURATION:
       
  1044                 idx = self.Controler.OpenConfigurationEditing(name)
       
  1045                 if idx != None:
       
  1046                     new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name)
       
  1047                     self.TabsOpened.AddPage(new_window, "")
       
  1048                 else:
       
  1049                     idx = self.Controler.ChangeConfigurationEditing(name)
       
  1050             elif data == ITEM_RESOURCE:
       
  1051                 item = self.ProjectTree.GetItemParent(selected)
   883                 item_type = self.ProjectTree.GetPyData(item)
  1052                 item_type = self.ProjectTree.GetPyData(item)
   884             item_name = self.ProjectTree.GetItemText(item)
  1053                 while item_type != ITEM_CONFIGURATION:
   885             if item_type == ITEM_POU:
  1054                     item = self.ProjectTree.GetItemParent(item)
   886                 dialog = EditVariableDialog(self, item_name, self.Controler.GetPouType(item_name), self.Controler.PouIsUsed(item_name), name)
  1055                     item_type = self.ProjectTree.GetPyData(item)
   887                 dialog.SetPouNames(self.Controler.GetProjectPouNames())
  1056                 config_name = self.ProjectTree.GetItemText(item)
   888                 values = {}
  1057                 idx = self.Controler.OpenConfigurationResourceEditing(config_name, name)
   889                 values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name)
  1058                 if idx != None:
   890                 values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name)
  1059                     new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name)
   891                 dialog.SetValues(values)
  1060                     self.TabsOpened.AddPage(new_window, "")
   892                 if dialog.ShowModal() == wxID_OK:
  1061                 else:
   893                     new_values = dialog.GetValues()
  1062                     idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name)
   894                     if "returnType" in new_values:
  1063             elif data == ITEM_POU:
   895                         self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"])
       
   896                     self.Controler.SetPouInterfaceVars(item_name, new_values["data"])
       
   897                     pou_names = self.Controler.GetElementsOpenedNames()
       
   898                     if item_name in pou_names:
       
   899                         window = self.TabsOpened.GetPage(pou_names.index(item_name))
       
   900                         if isinstance(window, TextViewer):
       
   901                             varlist = []
       
   902                             if "returnType" in new_values:
       
   903                                 varlist.append(name)
       
   904                             for var in new_values["data"]:
       
   905                                 varlist.append(var["Name"])
       
   906                             window.SetVariables(varlist)
       
   907                 dialog.Destroy()
       
   908                 self.RefreshProjectTree()
       
   909             elif item_type == ITEM_CONFIGURATION:
       
   910                 dialog = EditVariableDialog(self, item_name, None, False, name)
       
   911                 dialog.SetPouNames(self.Controler.GetProjectPouNames())
       
   912                 values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)}
       
   913                 dialog.SetValues(values)
       
   914                 if dialog.ShowModal() == wxID_OK:
       
   915                     new_values = dialog.GetValues()
       
   916                     self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"])
       
   917                 dialog.Destroy()
       
   918                 self.RefreshProjectTree()
       
   919             elif item_type == ITEM_RESOURCE:
       
   920                 config = self.ProjectTree.GetItemParent(item)
       
   921                 config_type = self.ProjectTree.GetPyData(config)
       
   922                 while config_type != ITEM_CONFIGURATION and config.IsOk():
       
   923                     config = self.ProjectTree.GetItemParent(config)
       
   924                     config_type = self.ProjectTree.GetPyData(config)
       
   925                 if config.IsOk():
       
   926                     config_name = self.ProjectTree.GetItemText(config)
       
   927                     dialog = EditVariableDialog(self, item_name, None, False, name)
       
   928                     values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)}
       
   929                     dialog.SetValues(values)
       
   930                     if dialog.ShowModal() == wxID_OK:
       
   931                         new_values = dialog.GetValues()
       
   932                         self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"])
       
   933                     dialog.Destroy()
       
   934                     self.RefreshProjectTree()
       
   935         elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]:
       
   936             if data == ITEM_POU:
       
   937                 idx = self.Controler.OpenElementEditing(name)
  1064                 idx = self.Controler.OpenElementEditing(name)
   938                 language = self.Controler.GetPouBodyType(name)
  1065                 if idx != None:
   939                 varlist = []
  1066                     new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name)
   940                 returnType = self.Controler.GetPouInterfaceReturnTypeByName(name)
  1067                     self.TabsOpened.AddPage(new_window, "")
   941                 if returnType:
  1068                 else:
   942                     varlist.append(name)
  1069                     idx = self.Controler.ChangeElementEditing(name)
   943                 vars = self.Controler.GetPouInterfaceVarsByName(name)
       
   944                 if vars:
       
   945                     for var in vars:
       
   946                         varlist.append(var["Name"])
       
   947             else:
  1070             else:
   948                 parent = self.ProjectTree.GetItemParent(selected)
  1071                 parent = self.ProjectTree.GetItemParent(selected)
   949                 parent_name = self.ProjectTree.GetItemText(parent)
  1072                 parent_name = self.ProjectTree.GetItemText(parent)
   950                 grandparent = self.ProjectTree.GetItemParent(parent)
  1073                 grandparent = self.ProjectTree.GetItemParent(parent)
   951                 grandparent_name = self.ProjectTree.GetItemText(grandparent)
  1074                 grandparent_name = self.ProjectTree.GetItemText(grandparent)
   952                 if data == ITEM_TRANSITION:
  1075                 if data == ITEM_TRANSITION:
   953                     idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name)
  1076                     idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name)
   954                     language = self.Controler.GetTransitionBodyType(grandparent_name, name)
  1077                     if idx != None:
       
  1078                         new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = grandparent_name, transition_name = name)
       
  1079                         self.TabsOpened.AddPage(new_window, "")
       
  1080                     else:
       
  1081                         idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name)
   955                 elif data == ITEM_ACTION:
  1082                 elif data == ITEM_ACTION:
   956                     idx = self.Controler.OpenPouActionEditing(grandparent_name, name)
  1083                     idx = self.Controler.OpenPouActionEditing(grandparent_name, name)
   957                     language = self.Controler.GetActionBodyType(grandparent_name, name)
  1084                     if idx != None:
   958                 varlist = [name]
  1085                         new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = grandparent_name, action_name = name)
   959                 vars = self.Controler.GetPouInterfaceVarsByName(grandparent_name)
  1086                         self.TabsOpened.AddPage(new_window, "")
   960                 if vars:
  1087                     else:
   961                     for var in vars:
  1088                         idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
   962                         varlist.append(var["Name"])
       
   963             if idx != None:
  1089             if idx != None:
   964                 if language == "FBD":
       
   965                     new_window = Viewer(self.TabsOpened, self, self.Controler)
       
   966                 elif language == "LD":
       
   967                     new_window = LD_Viewer(self.TabsOpened, self, self.Controler)
       
   968                 elif language == "SFC":
       
   969                     new_window = SFC_Viewer(self.TabsOpened, self, self.Controler)
       
   970                 elif language in ["IL", "ST"]:
       
   971                     new_window = TextViewer(self.TabsOpened, self, self.Controler)
       
   972                     new_window.SetTextSyntax(language)
       
   973                     if language == "IL":
       
   974                         new_window.SetKeywords(IL_KEYWORDS)
       
   975                     else:
       
   976                         new_window.SetKeywords(ST_KEYWORDS)
       
   977                     new_window.SetVariables(varlist)
       
   978                     new_window.SetFunctions(self.Controler.GetBlockTypes())
       
   979                 else:
       
   980                     return
       
   981                 new_window.RefreshView()
       
   982                 self.TabsOpened.AddPage(new_window, "")
       
   983                 self.TabsOpened.SetSelection(idx)
  1090                 self.TabsOpened.SetSelection(idx)
       
  1091                 window = self.TabsOpened.GetPage(idx)
       
  1092                 window.RefreshView()
   984                 self.RefreshTabsOpenedTitles()
  1093                 self.RefreshTabsOpenedTitles()
   985                 self.RefreshFileMenu()
  1094                 self.RefreshFileMenu()
   986                 self.RefreshEditMenu()
  1095                 self.RefreshEditMenu()
   987                 self.RefreshToolBar()
  1096                 self.RefreshToolBar()
   988             else:
       
   989                 if data == ITEM_POU:
       
   990                     idx = self.Controler.ChangeElementEditing(name)
       
   991                 elif data == ITEM_TRANSITION:
       
   992                     idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name)
       
   993                 elif data == ITEM_ACTION:
       
   994                     idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
       
   995                 if idx != None:
       
   996                     self.TabsOpened.SetSelection(idx)
       
   997                     self.RefreshFileMenu()
       
   998                     self.RefreshEditMenu()
       
   999                     self.RefreshToolBar()
       
  1000         elif data == ITEM_RESOURCE:
       
  1001             item = self.ProjectTree.GetItemParent(selected)
       
  1002             item_type = self.ProjectTree.GetPyData(item)
       
  1003             while item_type != ITEM_CONFIGURATION:
       
  1004                 item = self.ProjectTree.GetItemParent(item)
       
  1005                 item_type = self.ProjectTree.GetPyData(item)
       
  1006             config_name = self.ProjectTree.GetItemText(item)
       
  1007             idx = self.Controler.OpenConfigurationResourceEditing(config_name, name)
       
  1008             if idx != None:
       
  1009                 new_window = ResourceEditor(self.TabsOpened, self, self.Controler)
       
  1010                 new_window.RefreshView()
       
  1011                 self.TabsOpened.AddPage(new_window, "")
       
  1012                 self.TabsOpened.SetSelection(idx)
       
  1013                 self.RefreshTabsOpenedTitles()
       
  1014                 self.RefreshFileMenu()
       
  1015                 self.RefreshEditMenu()
       
  1016                 self.RefreshToolBar()
       
  1017             else:
       
  1018                 idx = self.Controler.ChangeConfigurationResourceEditing(parent_name, name)
       
  1019                 if idx != None:
       
  1020                     self.TabsOpened.SetSelection(idx)
       
  1021                     self.RefreshFileMenu()
       
  1022                     self.RefreshEditMenu()
       
  1023                     self.RefreshToolBar()
       
  1024     
  1097     
  1025     def OnProjectTreeRightUp(self, event):
  1098     def OnProjectTreeRightUp(self, event):
  1026         selected = self.ProjectTree.GetSelection()
  1099         selected = self.ProjectTree.GetSelection()
  1027         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1100         if self.ProjectTree.GetPyData(selected) == ITEM_POU:
  1028             name = self.ProjectTree.GetItemText(selected)
  1101             name = self.ProjectTree.GetItemText(selected)
  1824     def GetRowLabelValues(self, row):
  1897     def GetRowLabelValues(self, row):
  1825         return row
  1898         return row
  1826 
  1899 
  1827     def GetValue(self, row, col):
  1900     def GetValue(self, row, col):
  1828         if row < self.GetNumberRows():
  1901         if row < self.GetNumberRows():
       
  1902             if col == 0:
       
  1903                 return "d"
  1829             name = str(self.data[row].get(self.GetColLabelValue(col), ""))
  1904             name = str(self.data[row].get(self.GetColLabelValue(col), ""))
  1830             return name
  1905             return name
  1831     
  1906     
  1832     def GetValueByName(self, row, colname):
  1907     def GetValueByName(self, row, colname):
  1833         return self.data[row].get(colname)
  1908         return self.data[row].get(colname)
  1890             for col in range(self.GetNumberCols()):
  1965             for col in range(self.GetNumberCols()):
  1891                 editor = None
  1966                 editor = None
  1892                 renderer = None
  1967                 renderer = None
  1893                 colname = self.GetColLabelValue(col)
  1968                 colname = self.GetColLabelValue(col)
  1894                 grid.SetReadOnly(row, col, False)
  1969                 grid.SetReadOnly(row, col, False)
  1895                 if colname == "Name":
  1970                 if colname == "Drag":
       
  1971                     grid.SetReadOnly(row, col, True)
       
  1972                 elif colname == "Name":
  1896                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  1973                     if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  1897                         grid.SetReadOnly(row, col, True)
  1974                         grid.SetReadOnly(row, col, True)
  1898                     else:
  1975                     else:
  1899                         editor = wxGridCellTextEditor()
  1976                         editor = wxGridCellTextEditor()
  1900                         renderer = wxGridCellStringRenderer()
  1977                         renderer = wxGridCellStringRenderer()
  1901                 if colname in ["Initial Value","Location"]:
  1978                 elif colname in ["Initial Value","Location"]:
  1902                     editor = wxGridCellTextEditor()
  1979                     editor = wxGridCellTextEditor()
  1903                     renderer = wxGridCellStringRenderer()
  1980                     renderer = wxGridCellStringRenderer()
  1904                 elif colname == "Class":
  1981                 elif colname == "Class":
  1905                     if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  1982                     if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]:
  1906                         grid.SetReadOnly(row, col, True)
  1983                         grid.SetReadOnly(row, col, True)
  1948 
  2025 
  1949     def Empty(self):
  2026     def Empty(self):
  1950         self.data = []
  2027         self.data = []
  1951         self.editors = []
  2028         self.editors = []
  1952 
  2029 
  1953 [wxID_EDITVARIABLEDIALOG, wxID_EDITVARIABLEDIALOGMAINPANEL, 
  2030 [wxID_POUEDITORPANEL, wxID_POUEDITORPANELVIEWER, 
  1954  wxID_EDITVARIABLEDIALOGVARIABLESGRID, wxID_EDITVARIABLEDIALOGRETURNTYPE, 
  2031  wxID_POUEDITORPANELVARIABLESGRID, wxID_POUEDITORPANELRETURNTYPE, 
  1955  wxID_EDITVARIABLEDIALOGCLASSFILTER, wxID_EDITVARIABLEDIALOGADDBUTTON,
  2032  wxID_POUEDITORPANELCLASSFILTER, wxID_POUEDITORPANELADDBUTTON,
  1956  wxID_EDITVARIABLEDIALOGDELETEBUTTON, wxID_EDITVARIABLEDIALOGUPBUTTON, 
  2033  wxID_POUEDITORPANELDELETEBUTTON, wxID_POUEDITORPANELUPBUTTON, 
  1957  wxID_EDITVARIABLEDIALOGDOWNBUTTON, wxID_EDITVARIABLEDIALOGSTATICTEXT1, 
  2034  wxID_POUEDITORPANELDOWNBUTTON, wxID_POUEDITORPANELSTATICTEXT1, 
  1958  wxID_EDITVARIABLEDIALOGSTATICTEXT2, wxID_EDITVARIABLEDIALOGSTATICTEXT3,
  2035  wxID_POUEDITORPANELSTATICTEXT2, wxID_POUEDITORPANELSTATICTEXT3,
  1959 ] = [wx.NewId() for _init_ctrls in range(12)]
  2036 ] = [wx.NewId() for _init_ctrls in range(12)]
  1960 
  2037 
  1961 class EditVariableDialog(wx.Dialog):
  2038 class PouEditorPanel(wx.Panel):
  1962     def _init_coll_flexGridSizer1_Items(self, parent):
  2039     def _init_coll_MainPanelSizer_Items(self, parent):
  1963         # generated method, don't edit
  2040         # generated method, don't edit
  1964 
  2041 
  1965         parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
  2042         parent.AddWindow(self.Viewer, 0, border=0, flag=wxGROW)
       
  2043         parent.AddSizer(self.VariablePanelSizer, 0, border=0, flag=wxGROW)
       
  2044 
       
  2045     def _init_coll_MainPanelSizer_Growables(self, parent):
       
  2046         # generated method, don't edit
       
  2047 
       
  2048         parent.AddGrowableCol(0)
       
  2049         parent.AddGrowableRow(0)
       
  2050     
       
  2051     def _init_coll_VariablePanelSizer_Items(self, parent):
       
  2052         # generated method, don't edit
       
  2053 
       
  2054         parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wxGROW)
       
  2055         parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wxGROW)
       
  2056     
       
  2057     def _init_coll_VariablePanelSizer_Growables(self, parent):
       
  2058         # generated method, don't edit
       
  2059 
       
  2060         parent.AddGrowableCol(0)
       
  2061         parent.AddGrowableRow(0)
       
  2062     
       
  2063     def _init_coll_ControlPanelSizer_Items(self, parent):
       
  2064         # generated method, don't edit
       
  2065 
       
  2066         parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wxGROW)
       
  2067         parent.AddSizer(self.ButtonPanelSizer, 0, border=0, flag=wxALIGN_CENTER)
       
  2068 
       
  2069     def _init_coll_ControlPanelSizer_Growables(self, parent):
       
  2070         # generated method, don't edit
       
  2071 
       
  2072         parent.AddGrowableCol(0)
       
  2073         parent.AddGrowableRow(0)
       
  2074         parent.AddGrowableRow(1)
       
  2075 
       
  2076     def _init_coll_ChoicePanelSizer_Items(self, parent):
       
  2077         # generated method, don't edit
       
  2078 
       
  2079         parent.AddWindow(self.staticText1, 0, border=0, flag=wxALIGN_BOTTOM)
       
  2080         parent.AddWindow(self.staticText2, 0, border=0, flag=wxALIGN_BOTTOM)
       
  2081         parent.AddWindow(self.ReturnType, 0, border=0, flag=0)
       
  2082         parent.AddWindow(self.ClassFilter, 0, border=0, flag=0)
       
  2083 
       
  2084     def _init_coll_ButtonPanelSizer_Items(self, parent):
       
  2085         # generated method, don't edit
       
  2086 
       
  2087         parent.AddWindow(self.AddButton, 0, border=0, flag=0)
       
  2088         parent.AddWindow(self.DeleteButton, 0, border=0, flag=0)
       
  2089         parent.AddWindow(self.UpButton, 0, border=0, flag=0)
       
  2090         parent.AddWindow(self.DownButton, 0, border=0, flag=0)
       
  2091 
       
  2092     def _init_coll_ButtonPanelSizer_Growables(self, parent):
       
  2093         # generated method, don't edit
       
  2094 
       
  2095         parent.AddGrowableCol(0)
       
  2096         parent.AddGrowableCol(1)
       
  2097         parent.AddGrowableCol(2)
       
  2098         parent.AddGrowableCol(3)
       
  2099         parent.AddGrowableRow(0)
  1966 
  2100 
  1967     def _init_sizers(self):
  2101     def _init_sizers(self):
  1968         # generated method, don't edit
  2102         # generated method, don't edit
  1969         self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  2103         self.MainPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1970 
  2104         
  1971         self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
  2105         self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0)
  1972 
  2106         
  1973         self.SetSizer(self.flexGridSizer1)
  2107         self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
  1974 
  2108         
  1975     def _init_ctrls(self, prnt, name):
  2109         self.ChoicePanelSizer = wx.GridSizer(cols=2, hgap=5, rows=2, vgap=5)
  1976         # generated method, don't edit
  2110         
  1977         wx.Dialog.__init__(self, id=wxID_EDITVARIABLEDIALOG,
  2111         self.ButtonPanelSizer = wx.FlexGridSizer(cols=4, hgap=5, rows=1, vgap=0)
  1978               name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223),
  2112         
  1979               size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE,
  2113         self._init_coll_MainPanelSizer_Items(self.MainPanelSizer)
  1980               title='Edit variables of %s'%name)
  2114         self._init_coll_MainPanelSizer_Growables(self.MainPanelSizer)
  1981         self.SetClientSize(wx.Size(600, 440))
  2115         self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer)
  1982 
  2116         self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer)
  1983         self.MainPanel = wx.Panel(id=wxID_EDITVARIABLEDIALOGMAINPANEL,
  2117         self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer)
  1984               name='MainPanel', parent=self, pos=wx.Point(0, 0),
  2118         self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer)
  1985               size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL)
  2119         self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer)
  1986         self.MainPanel.SetAutoLayout(True)
  2120         self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer)
  1987 
  2121         self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer)
  1988         self.staticText1 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT1,
  2122         
  1989               label='Return Type:', name='staticText1', parent=self.MainPanel,
  2123         self.SetSizer(self.MainPanelSizer)
  1990               pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0)
  2124 
  1991 
  2125     def _init_ctrls(self, prnt, element_type):
  1992         self.ReturnType = wx.Choice(id=wxID_EDITVARIABLEDIALOGRETURNTYPE,
  2126         # generated method, don't edit
  1993               name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24),
  2127         wx.Panel.__init__(self, id=wxID_POUEDITORPANEL,
       
  2128               name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0),
       
  2129               size=wx.Size(-1, -1), style=0)
       
  2130         
       
  2131         if element_type == "config":
       
  2132             self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER,
       
  2133               name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
       
  2134               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
       
  2135         elif element_type == "resource":
       
  2136             self.Viewer = ResourceEditor(self, self.Parent, self.Controler)
       
  2137         elif element_type == "FBD":
       
  2138             self.Viewer = Viewer(self, self.Parent, self.Controler)
       
  2139         elif element_type == "LD":
       
  2140             self.Viewer = LD_Viewer(self, self.Parent, self.Controler)
       
  2141         elif element_type == "SFC":
       
  2142             self.Viewer = SFC_Viewer(self, self.Parent, self.Controler)
       
  2143         else:
       
  2144             self.Viewer = TextViewer(self, self.Parent, self.Controler)
       
  2145             self.Viewer.SetTextSyntax(element_type)
       
  2146             if element_type == "IL":
       
  2147                 self.Viewer.SetKeywords(IL_KEYWORDS)
       
  2148             else:
       
  2149                 self.Viewer.SetKeywords(ST_KEYWORDS)
       
  2150         
       
  2151         self.staticText1 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT1,
       
  2152               label='Return Type:', name='staticText1', parent=self,
       
  2153               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
       
  2154 
       
  2155         self.ReturnType = wx.Choice(id=wxID_POUEDITORPANELRETURNTYPE,
       
  2156               name='ReturnType', parent=self, pos=wx.Point(0, 0),
  1994               size=wx.Size(145, 24), style=0)
  2157               size=wx.Size(145, 24), style=0)
  1995 
  2158 
  1996         self.staticText2 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT2,
  2159         self.staticText2 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT2,
  1997               label='Class Filter:', name='staticText2', parent=self.MainPanel,
  2160               label='Class Filter:', name='staticText2', parent=self,
  1998               pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0)
  2161               pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0)
  1999 
  2162 
  2000         self.ClassFilter = wx.Choice(id=wxID_EDITVARIABLEDIALOGCLASSFILTER,
  2163         self.ClassFilter = wx.Choice(id=wxID_POUEDITORPANELCLASSFILTER,
  2001               name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24),
  2164               name='ClassFilter', parent=self, pos=wx.Point(0, 0),
  2002               size=wx.Size(145, 24), style=0)
  2165               size=wx.Size(145, 24), style=0)
  2003         EVT_CHOICE(self, wxID_EDITVARIABLEDIALOGCLASSFILTER, self.OnClassFilter)
  2166         EVT_CHOICE(self, wxID_POUEDITORPANELCLASSFILTER, self.OnClassFilter)
  2004 
  2167 
  2005         self.staticText3 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT3,
  2168         self.VariablesGrid = wx.grid.Grid(id=wxID_POUEDITORPANELVARIABLESGRID,
  2006               label='Variables:', name='staticText3', parent=self.MainPanel,
  2169               name='VariablesGrid', parent=self, pos=wx.Point(0, 0), 
  2007               pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0)
  2170               size=wx.Size(-1, 150), style=wxVSCROLL)
  2008 
       
  2009         self.VariablesGrid = wx.grid.Grid(id=wxID_EDITVARIABLEDIALOGVARIABLESGRID,
       
  2010               name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), 
       
  2011               size=wx.Size(550, 250), style=wxVSCROLL)
       
  2012         self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2171         self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
  2013               'Sans'))
  2172               'Sans'))
  2014         self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2173         self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
  2015               False, 'Sans'))
  2174               False, 'Sans'))
  2016         self.VariablesGrid.DisableDragGridSize()
       
  2017         self.VariablesGrid.EnableScrolling(False, True)
       
  2018         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2175         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
  2019         self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2176         self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
  2020 
  2177         self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick)
  2021         self.AddButton = wx.Button(id=wxID_EDITVARIABLEDIALOGADDBUTTON, label='Add',
  2178         
  2022               name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340),
  2179         self.AddButton = wx.Button(id=wxID_POUEDITORPANELADDBUTTON, label='Add',
       
  2180               name='AddButton', parent=self, pos=wx.Point(345, 340),
  2023               size=wx.Size(72, 32), style=0)
  2181               size=wx.Size(72, 32), style=0)
  2024         EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGADDBUTTON, self.OnAddButton)
  2182         EVT_BUTTON(self, wxID_POUEDITORPANELADDBUTTON, self.OnAddButton)
  2025 
  2183 
  2026         self.DeleteButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete',
  2184         self.DeleteButton = wx.Button(id=wxID_POUEDITORPANELDELETEBUTTON, label='Delete',
  2027               name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340),
  2185               name='DeleteButton', parent=self, pos=wx.Point(425, 340),
  2028               size=wx.Size(72, 32), style=0)
  2186               size=wx.Size(72, 32), style=0)
  2029         EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDELETEBUTTON, self.OnDeleteButton)
  2187         EVT_BUTTON(self, wxID_POUEDITORPANELDELETEBUTTON, self.OnDeleteButton)
  2030 
  2188 
  2031         self.UpButton = wx.Button(id=wxID_EDITVARIABLEDIALOGUPBUTTON, label='^',
  2189         self.UpButton = wx.Button(id=wxID_POUEDITORPANELUPBUTTON, label='^',
  2032               name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340),
  2190               name='UpButton', parent=self, pos=wx.Point(505, 340),
  2033               size=wx.Size(32, 32), style=0)
  2191               size=wx.Size(32, 32), style=0)
  2034         EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGUPBUTTON, self.OnUpButton)
  2192         EVT_BUTTON(self, wxID_POUEDITORPANELUPBUTTON, self.OnUpButton)
  2035 
  2193 
  2036         self.DownButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDOWNBUTTON, label='v',
  2194         self.DownButton = wx.Button(id=wxID_POUEDITORPANELDOWNBUTTON, label='v',
  2037               name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340),
  2195               name='DownButton', parent=self, pos=wx.Point(545, 340),
  2038               size=wx.Size(32, 32), style=0)
  2196               size=wx.Size(32, 32), style=0)
  2039         EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDOWNBUTTON, self.OnDownButton)
  2197         EVT_BUTTON(self, wxID_POUEDITORPANELDOWNBUTTON, self.OnDownButton)
  2040 
  2198 
  2041         self._init_sizers()
  2199         self._init_sizers()
  2042 
  2200 
  2043     def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"):
  2201     def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None):
  2044         self._init_ctrls(parent, name)
  2202         self.Parent = window
  2045         self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
  2203         self.Controler = controler
  2046         self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
  2204         self.ElementType = element_type
  2047         self.Filter = filter
  2205         self.PouName = pou_name
  2048         self.PouIsUsed = pou_is_used
  2206         self.TransitionName = transition_name
       
  2207         self.ActionName = action_name
       
  2208         self.ConfigName = config_name
       
  2209         self.ResourceName = resource_name
       
  2210         
       
  2211         if element_type == "config":
       
  2212             self._init_ctrls(parent, "config")
       
  2213             pou_type = "config"
       
  2214         elif element_type == "resource":
       
  2215             self._init_ctrls(parent, "resource")
       
  2216             pou_type = "resource"
       
  2217         else:
       
  2218             if element_type == "transition":
       
  2219                 self._init_ctrls(parent, self.Controler.GetTransitionBodyType(pou_name, transition_name))
       
  2220             elif element_type == "action":
       
  2221                 self._init_ctrls(parent, self.Controler.GetActionBodyType(pou_name, action_name))
       
  2222             else:
       
  2223                 self._init_ctrls(parent, self.Controler.GetPouBodyType(pou_name))
       
  2224             pou_type = self.Controler.GetPouType(pou_name)
       
  2225         
       
  2226         self.Filter = "All"
  2049         self.FilterChoices = []
  2227         self.FilterChoices = []
  2050         self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", 
  2228         self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", 
  2051             "   Input" : "Input", "   Output" : "Output", "   InOut" : "InOut", 
  2229             "   Input" : "Input", "   Output" : "Output", "   InOut" : "InOut", 
  2052             "   External" : "External", "Variables" : "Variables", "   Local" : "Local",
  2230             "   External" : "External", "Variables" : "Variables", "   Local" : "Local",
  2053             "   Temp" : "Temp", "Global" : "Global", "Access" : "Access"}
  2231             "   Temp" : "Temp", "Global" : "Global", "Access" : "Access"}
  2054         
  2232         
  2055         if pou_type:
  2233         if pou_type in ["config", "resource"]:
       
  2234             self.DefaultTypes = {"All" : "Global"}
       
  2235             self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
       
  2236         else:
  2056             self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"}
  2237             self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"}
  2057             self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
  2238             self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
  2058         else:
  2239         if pou_type in ["config", "resource"] or pou_type == "program":
  2059             self.DefaultTypes = {"All" : "Global"}
  2240             self.Table = VariableTable(self, [], ["Drag", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"])
  2060             self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
  2241             if pou_type not in ["config", "resource"]:
  2061         if not pou_type or pou_type == "program":
       
  2062             self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"])
       
  2063             if pou_type:
       
  2064                 self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2242                 self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
  2065             else:
  2243             else:
  2066                 self.FilterChoices = ["All","Global","Access"]
  2244                 self.FilterChoices = ["All","Global","Access"]
  2067             self.ColSizes = [80, 70, 80, 80, 80, 60, 70]
  2245             self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70]
  2068             self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2246             self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2069         else:
  2247         else:
  2070             self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2248             self.Table = VariableTable(self, [], ["Drag", "Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
  2071             self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2249             self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
  2072             self.ColSizes = [120, 70, 80, 120, 60, 70]
  2250             self.ColSizes = [40, 120, 70, 80, 120, 60, 70]
  2073             self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2251             self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
  2074         for choice in self.FilterChoices:
  2252         for choice in self.FilterChoices:
  2075             self.ClassFilter.Append(choice)
  2253             self.ClassFilter.Append(choice)
  2076         reverse_transfer = {}
  2254         reverse_transfer = {}
  2077         for filter, choice in self.FilterChoiceTransfer.items():
  2255         for filter, choice in self.FilterChoiceTransfer.items():
  2078             reverse_transfer[choice] = filter
  2256             reverse_transfer[choice] = filter
  2079         self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter])
  2257         self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter])
  2080         self.RefreshTypeList()
  2258         self.RefreshTypeList()
  2081         self.RefreshButtons()
       
  2082 
  2259 
  2083         self.OptionList = "Yes,No"
  2260         self.OptionList = "Yes,No"
  2084         self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")])
  2261         self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")])
  2085         
  2262         
  2086         if pou_type == "function":
  2263         if pou_type == "function":
  2088                 if not value.startswith("ANY"):
  2265                 if not value.startswith("ANY"):
  2089                     self.ReturnType.Append(value)
  2266                     self.ReturnType.Append(value)
  2090             self.ReturnType.Enable(True)
  2267             self.ReturnType.Enable(True)
  2091         else:
  2268         else:
  2092             self.ReturnType.Enable(False)
  2269             self.ReturnType.Enable(False)
  2093             self.staticText2.Hide()
  2270             self.staticText1.Hide()
  2094             self.ReturnType.Hide()
  2271             self.ReturnType.Hide()
  2095         
  2272         
  2096         self.VariablesGrid.SetTable(self.Table)
  2273         self.VariablesGrid.SetTable(self.Table)
  2097         self.VariablesGrid.SetRowLabelSize(0)
  2274         self.VariablesGrid.SetRowLabelSize(0)
  2098         
  2275     
  2099         self.Table.ResetView(self.VariablesGrid)
  2276     def SetMode(self, mode):
  2100 
  2277         if self.ElementType not in ["resource", "config"]:
  2101         self.PouNames = []
  2278             if self.ElementType == "transition":
  2102 
  2279                 language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName)
       
  2280             elif self.ElementType == "action":
       
  2281                 language = self.Controler.GetActionBodyType(self.PouName, self.ActionName)
       
  2282             else:
       
  2283                 language = self.Controler.GetPouBodyType(self.PouName)
       
  2284             if language not in ["IL", "ST"]:
       
  2285                 self.Viewer.SetMode(mode)
       
  2286 
       
  2287     def RefreshView(self):
       
  2288         self.PouNames = self.Controler.GetProjectPouNames()
       
  2289         
       
  2290         if self.ElementType == "config":
       
  2291             self.PouIsUsed = False
       
  2292             returnType = None
       
  2293             self.Values = self.Controler.GetConfigurationGlobalVars(self.ConfigName)
       
  2294         elif self.ElementType == "resource":
       
  2295             self.PouIsUsed = False
       
  2296             returnType = None
       
  2297             self.Values = self.Controler.GetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName)
       
  2298         else:
       
  2299             self.PouIsUsed = self.Controler.PouIsUsed(self.PouName)
       
  2300             returnType = self.Controler.GetCurrentElementEditingInterfaceReturnType()
       
  2301             self.Values = self.Controler.GetCurrentElementEditingInterfaceVars()
       
  2302             varlist = [var["Name"] for var in self.Values]
       
  2303             if self.ElementType == "transtion":
       
  2304                 language = self.Controler.GetTransitionBodyType(self.PouName, self.TransitionName)
       
  2305                 varlist.append(self.ActionName)
       
  2306             elif self.ElementType == "action":
       
  2307                 language = self.Controler.GetActionBodyType(self.PouName, self.ActionName)
       
  2308                 varlist.append(self.ActionName)
       
  2309             else:
       
  2310                 language = self.Controler.GetPouBodyType(self.PouName)
       
  2311                 varlist.append(self.PouName)
       
  2312             if language in ["IL", "ST"]:
       
  2313                 self.Viewer.SetVariables(varlist)
       
  2314                 self.Viewer.SetFunctions(self.Controler.GetBlockTypes())
       
  2315         
       
  2316         if returnType and self.ReturnType.IsEnabled():
       
  2317             self.ReturnType.SetStringSelection(returnType)
       
  2318         self.RefreshValues()
       
  2319         self.RefreshButtons()
       
  2320         if self.ElementType != "config":
       
  2321             self.Viewer.RefreshView()
       
  2322         
  2103         if self.PouIsUsed:
  2323         if self.PouIsUsed:
  2104             wxCallAfter(self.WarningMessage, name)
  2324             wxCallAfter(self.WarningMessage, name)
  2105 
  2325         
  2106         EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  2107     
       
  2108     def WarningMessage(self, name):
       
  2109         message = wxMessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wxOK|wxICON_EXCLAMATION)
       
  2110         message.ShowModal()
       
  2111         message.Destroy()
       
  2112     
       
  2113     def OnOK(self, event):
       
  2114         self.VariablesGrid.SetGridCursor(0, 0)
       
  2115         error = []
       
  2116         if self.ReturnType.IsEnabled() and self.ReturnType.GetStringSelection() == "":
       
  2117             error.append("Return Type")
       
  2118         if len(error) > 0:
       
  2119             text = ""
       
  2120             for i, item in enumerate(error):
       
  2121                 if i == 0:
       
  2122                     text += item
       
  2123                 elif i == len(error) - 1:
       
  2124                     text += " and %s"%item
       
  2125                 else:
       
  2126                     text += ", %s"%item 
       
  2127             message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
       
  2128             message.ShowModal()
       
  2129             message.Destroy()
       
  2130         else:
       
  2131             self.EndModal(wxID_OK)
       
  2132 
       
  2133     def OnClassFilter(self, event):
  2326     def OnClassFilter(self, event):
  2134         self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2327         self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2135         self.RefreshTypeList()
  2328         self.RefreshTypeList()
  2136         self.RefreshValues()
  2329         self.RefreshValues()
  2137         self.RefreshButtons()
  2330         self.RefreshButtons()
  2155             row_class = self.Table.GetValueByName(row, "Class")
  2348             row_class = self.Table.GetValueByName(row, "Class")
  2156         self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
  2349         self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
  2157         self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
  2350         self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
  2158         self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2351         self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2159         self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2352         self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2160     
  2353 
  2161     def OnAddButton(self, event):
  2354     def OnAddButton(self, event):
  2162         new_row = self.DefaultValue.copy()
  2355         new_row = self.DefaultValue.copy()
  2163         if self.Filter in self.DefaultTypes:
  2356         if self.Filter in self.DefaultTypes:
  2164             new_row["Class"] = self.DefaultTypes[self.Filter]
  2357             new_row["Class"] = self.DefaultTypes[self.Filter]
  2165         else:
  2358         else:
  2210                 message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR)
  2403                 message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR)
  2211                 message.ShowModal()
  2404                 message.ShowModal()
  2212                 message.Destroy()
  2405                 message.Destroy()
  2213                 event.Veto()
  2406                 event.Veto()
  2214             else:
  2407             else:
       
  2408                 self.SaveValues()
  2215                 event.Skip()
  2409                 event.Skip()
  2216         else:
  2410         else:
       
  2411             self.SaveValues()
  2217             event.Skip()
  2412             event.Skip()
  2218 
  2413 
       
  2414     def OnVariablesGridCellLeftClick(self, event):
       
  2415         if event.GetCol() == 0:
       
  2416             row = event.GetRow()
       
  2417             var_name = self.Table.GetValueByName(row, "Name")
       
  2418             var_class = self.Table.GetValueByName(row, "Class")
       
  2419             var_type = self.Table.GetValueByName(row, "Type")
       
  2420             data = wxTextDataObject(str((var_name, var_class, var_type)))
       
  2421             dragSource = wxDropSource(self.VariablesGrid)
       
  2422             dragSource.SetData(data)
       
  2423             dragSource.DoDragDrop()
       
  2424         event.Skip()
       
  2425     
  2219     def OnVariablesGridSelectCell(self, event):
  2426     def OnVariablesGridSelectCell(self, event):
  2220         wxCallAfter(self.RefreshButtons)
  2427         wxCallAfter(self.RefreshButtons)
  2221         event.Skip()
  2428         event.Skip()
  2222 
       
  2223     def SetPouNames(self, pou_names):
       
  2224         self.PouNames = [pou_name.upper() for pou_name in pou_names]
       
  2225 
       
  2226     def SetValues(self, values):
       
  2227         for item, value in values.items():
       
  2228             if item == "returnType" and value and self.ReturnType.IsEnabled():
       
  2229                 self.ReturnType.SetStringSelection(value)
       
  2230             if item == "data":
       
  2231                 self.Values = value
       
  2232         self.RefreshValues()
       
  2233 
  2429 
  2234     def MoveValue(self, value_index, move):
  2430     def MoveValue(self, value_index, move):
  2235         new_index = max(0, min(value_index + move, len(self.Values) - 1))
  2431         new_index = max(0, min(value_index + move, len(self.Values) - 1))
  2236         if new_index != value_index:
  2432         if new_index != value_index:
  2237             self.Values.insert(new_index, self.Values.pop(value_index))
  2433             self.Values.insert(new_index, self.Values.pop(value_index))
  2238             self.RefreshValues()
  2434             self.RefreshValues()
  2239             self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol())
  2435             self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol())
  2240         else:
  2436         else:
  2241             self.RefreshValues()
  2437             self.RefreshValues()
  2242     
  2438         self.SaveValues()
       
  2439 
  2243     def RefreshValues(self):
  2440     def RefreshValues(self):
  2244         if len(self.Table.data) > 0:
  2441         if len(self.Table.data) > 0:
  2245             self.VariablesGrid.SetGridCursor(0, 0)
  2442             self.VariablesGrid.SetGridCursor(0, 1)
  2246         data = []
  2443         data = []
  2247         for variable in self.Values:
  2444         for variable in self.Values:
  2248             if variable["Class"] in self.ClassList:
  2445             if variable["Class"] in self.ClassList:
  2249                 data.append(variable)
  2446                 data.append(variable)
  2250         self.Table.SetData(data)
  2447         self.Table.SetData(data)
  2251         self.Table.ResetView(self.VariablesGrid)
  2448         self.Table.ResetView(self.VariablesGrid)
  2252                 
  2449 
  2253     def GetValues(self):
  2450     def SaveValues(self):
  2254         values = {}
  2451         if self.ElementType == "config":
  2255         if self.ReturnType.IsEnabled():
  2452             self.Controler.SetConfigurationGlobalVars(self.ConfigName, self.Values)
  2256             values["returnType"] = self.ReturnType.GetStringSelection()
  2453         elif self.ElementType == "resource":
  2257         values["data"] = self.Values
  2454             self.Controler.SetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName, self.Values)
  2258         return values
  2455         else:
       
  2456             if self.ReturnType.IsEnabled():
       
  2457                 self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection())
       
  2458             self.Controler.SetPouInterfaceVars(self.PouName, self.Values)
       
  2459 
       
  2460 ##[wxID_EDITVARIABLEDIALOG, wxID_EDITVARIABLEDIALOGMAINPANEL, 
       
  2461 ## wxID_EDITVARIABLEDIALOGVARIABLESGRID, wxID_EDITVARIABLEDIALOGRETURNTYPE, 
       
  2462 ## wxID_EDITVARIABLEDIALOGCLASSFILTER, wxID_EDITVARIABLEDIALOGADDBUTTON,
       
  2463 ## wxID_EDITVARIABLEDIALOGDELETEBUTTON, wxID_EDITVARIABLEDIALOGUPBUTTON, 
       
  2464 ## wxID_EDITVARIABLEDIALOGDOWNBUTTON, wxID_EDITVARIABLEDIALOGSTATICTEXT1, 
       
  2465 ## wxID_EDITVARIABLEDIALOGSTATICTEXT2, wxID_EDITVARIABLEDIALOGSTATICTEXT3,
       
  2466 ##] = [wx.NewId() for _init_ctrls in range(12)]
       
  2467 ##
       
  2468 ##class EditVariableDialog(wx.Dialog):
       
  2469 ##    def _init_coll_flexGridSizer1_Items(self, parent):
       
  2470 ##        # generated method, don't edit
       
  2471 ##
       
  2472 ##        parent.AddWindow(self.MainPanel, 0, border=0, flag=0)
       
  2473 ##
       
  2474 ##    def _init_sizers(self):
       
  2475 ##        # generated method, don't edit
       
  2476 ##        self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
       
  2477 ##
       
  2478 ##        self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
       
  2479 ##
       
  2480 ##        self.SetSizer(self.flexGridSizer1)
       
  2481 ##
       
  2482 ##    def _init_ctrls(self, prnt, name):
       
  2483 ##        # generated method, don't edit
       
  2484 ##        wx.Dialog.__init__(self, id=wxID_EDITVARIABLEDIALOG,
       
  2485 ##              name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223),
       
  2486 ##              size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE,
       
  2487 ##              title='Edit variables of %s'%name)
       
  2488 ##        self.SetClientSize(wx.Size(600, 440))
       
  2489 ##
       
  2490 ##        self.MainPanel = wx.Panel(id=wxID_EDITVARIABLEDIALOGMAINPANEL,
       
  2491 ##              name='MainPanel', parent=self, pos=wx.Point(0, 0),
       
  2492 ##              size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL)
       
  2493 ##        self.MainPanel.SetAutoLayout(True)
       
  2494 ##
       
  2495 ##        self.staticText1 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT1,
       
  2496 ##              label='Return Type:', name='staticText1', parent=self.MainPanel,
       
  2497 ##              pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0)
       
  2498 ##
       
  2499 ##        self.ReturnType = wx.Choice(id=wxID_EDITVARIABLEDIALOGRETURNTYPE,
       
  2500 ##              name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24),
       
  2501 ##              size=wx.Size(145, 24), style=0)
       
  2502 ##
       
  2503 ##        self.staticText2 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT2,
       
  2504 ##              label='Class Filter:', name='staticText2', parent=self.MainPanel,
       
  2505 ##              pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0)
       
  2506 ##
       
  2507 ##        self.ClassFilter = wx.Choice(id=wxID_EDITVARIABLEDIALOGCLASSFILTER,
       
  2508 ##              name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24),
       
  2509 ##              size=wx.Size(145, 24), style=0)
       
  2510 ##        EVT_CHOICE(self, wxID_EDITVARIABLEDIALOGCLASSFILTER, self.OnClassFilter)
       
  2511 ##
       
  2512 ##        self.staticText3 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT3,
       
  2513 ##              label='Variables:', name='staticText3', parent=self.MainPanel,
       
  2514 ##              pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0)
       
  2515 ##
       
  2516 ##        self.VariablesGrid = wx.grid.Grid(id=wxID_EDITVARIABLEDIALOGVARIABLESGRID,
       
  2517 ##              name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), 
       
  2518 ##              size=wx.Size(550, 250), style=wxVSCROLL)
       
  2519 ##        self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False,
       
  2520 ##              'Sans'))
       
  2521 ##        self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL,
       
  2522 ##              False, 'Sans'))
       
  2523 ##        self.VariablesGrid.DisableDragGridSize()
       
  2524 ##        self.VariablesGrid.EnableScrolling(False, True)
       
  2525 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange)
       
  2526 ##        self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell)
       
  2527 ##
       
  2528 ##        self.AddButton = wx.Button(id=wxID_EDITVARIABLEDIALOGADDBUTTON, label='Add',
       
  2529 ##              name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340),
       
  2530 ##              size=wx.Size(72, 32), style=0)
       
  2531 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGADDBUTTON, self.OnAddButton)
       
  2532 ##
       
  2533 ##        self.DeleteButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete',
       
  2534 ##              name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340),
       
  2535 ##              size=wx.Size(72, 32), style=0)
       
  2536 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDELETEBUTTON, self.OnDeleteButton)
       
  2537 ##
       
  2538 ##        self.UpButton = wx.Button(id=wxID_EDITVARIABLEDIALOGUPBUTTON, label='^',
       
  2539 ##              name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340),
       
  2540 ##              size=wx.Size(32, 32), style=0)
       
  2541 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGUPBUTTON, self.OnUpButton)
       
  2542 ##
       
  2543 ##        self.DownButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDOWNBUTTON, label='v',
       
  2544 ##              name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340),
       
  2545 ##              size=wx.Size(32, 32), style=0)
       
  2546 ##        EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDOWNBUTTON, self.OnDownButton)
       
  2547 ##
       
  2548 ##        self._init_sizers()
       
  2549 ##
       
  2550 ##    def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"):
       
  2551 ##        self._init_ctrls(parent, name)
       
  2552 ##        self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE)
       
  2553 ##        self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT)
       
  2554 ##        self.Filter = filter
       
  2555 ##        self.PouIsUsed = pou_is_used
       
  2556 ##        self.FilterChoices = []
       
  2557 ##        self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", 
       
  2558 ##            "   Input" : "Input", "   Output" : "Output", "   InOut" : "InOut", 
       
  2559 ##            "   External" : "External", "Variables" : "Variables", "   Local" : "Local",
       
  2560 ##            "   Temp" : "Temp", "Global" : "Global", "Access" : "Access"}
       
  2561 ##        
       
  2562 ##        if pou_type:
       
  2563 ##            self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"}
       
  2564 ##            self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
       
  2565 ##        else:
       
  2566 ##            self.DefaultTypes = {"All" : "Global"}
       
  2567 ##            self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"}
       
  2568 ##        if not pou_type or pou_type == "program":
       
  2569 ##            self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"])
       
  2570 ##            if pou_type:
       
  2571 ##                self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp","Global","Access"]
       
  2572 ##            else:
       
  2573 ##                self.FilterChoices = ["All","Global","Access"]
       
  2574 ##            self.ColSizes = [80, 70, 80, 80, 80, 60, 70]
       
  2575 ##            self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
       
  2576 ##        else:
       
  2577 ##            self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"])
       
  2578 ##            self.FilterChoices = ["All","Interface","   Input","   Output","   InOut","   External","Variables","   Local","   Temp"]
       
  2579 ##            self.ColSizes = [120, 70, 80, 120, 60, 70]
       
  2580 ##            self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER]
       
  2581 ##        for choice in self.FilterChoices:
       
  2582 ##            self.ClassFilter.Append(choice)
       
  2583 ##        reverse_transfer = {}
       
  2584 ##        for filter, choice in self.FilterChoiceTransfer.items():
       
  2585 ##            reverse_transfer[choice] = filter
       
  2586 ##        self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter])
       
  2587 ##        self.RefreshTypeList()
       
  2588 ##        self.RefreshButtons()
       
  2589 ##
       
  2590 ##        self.OptionList = "Yes,No"
       
  2591 ##        self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")])
       
  2592 ##        
       
  2593 ##        if pou_type == "function":
       
  2594 ##            for value, parent in TypeHierarchy_list:
       
  2595 ##                if not value.startswith("ANY"):
       
  2596 ##                    self.ReturnType.Append(value)
       
  2597 ##            self.ReturnType.Enable(True)
       
  2598 ##        else:
       
  2599 ##            self.ReturnType.Enable(False)
       
  2600 ##            self.staticText2.Hide()
       
  2601 ##            self.ReturnType.Hide()
       
  2602 ##        
       
  2603 ##        self.VariablesGrid.SetTable(self.Table)
       
  2604 ##        self.VariablesGrid.SetRowLabelSize(0)
       
  2605 ##        
       
  2606 ##        self.Table.ResetView(self.VariablesGrid)
       
  2607 ##
       
  2608 ##        self.PouNames = []
       
  2609 ##
       
  2610 ##        if self.PouIsUsed:
       
  2611 ##            wxCallAfter(self.WarningMessage, name)
       
  2612 ##
       
  2613 ##        EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK)
       
  2614 ##    
       
  2615 ##    def WarningMessage(self, name):
       
  2616 ##        message = wxMessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wxOK|wxICON_EXCLAMATION)
       
  2617 ##        message.ShowModal()
       
  2618 ##        message.Destroy()
       
  2619 ##    
       
  2620 ##    def OnOK(self, event):
       
  2621 ##        self.VariablesGrid.SetGridCursor(0, 0)
       
  2622 ##        error = []
       
  2623 ##        if self.ReturnType.IsEnabled() and self.ReturnType.GetStringSelection() == "":
       
  2624 ##            error.append("Return Type")
       
  2625 ##        if len(error) > 0:
       
  2626 ##            text = ""
       
  2627 ##            for i, item in enumerate(error):
       
  2628 ##                if i == 0:
       
  2629 ##                    text += item
       
  2630 ##                elif i == len(error) - 1:
       
  2631 ##                    text += " and %s"%item
       
  2632 ##                else:
       
  2633 ##                    text += ", %s"%item 
       
  2634 ##            message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR)
       
  2635 ##            message.ShowModal()
       
  2636 ##            message.Destroy()
       
  2637 ##        else:
       
  2638 ##            self.EndModal(wxID_OK)
       
  2639 ##
       
  2640 ##    def OnClassFilter(self, event):
       
  2641 ##        self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
       
  2642 ##        self.RefreshTypeList()
       
  2643 ##        self.RefreshValues()
       
  2644 ##        self.RefreshButtons()
       
  2645 ##        event.Skip()
       
  2646 ##
       
  2647 ##    def RefreshTypeList(self):
       
  2648 ##        if self.Filter == "All":
       
  2649 ##            self.ClassList = [self.FilterChoiceTransfer[choice] for choice in self.FilterChoices if self.FilterChoiceTransfer[choice] not in ["All","Interface","Variables"]]
       
  2650 ##        elif self.Filter == "Interface":
       
  2651 ##            self.ClassList = ["Input","Output","InOut","External"]
       
  2652 ##        elif self.Filter == "Variables":
       
  2653 ##            self.ClassList = ["Local","Temp"]
       
  2654 ##        else:
       
  2655 ##            self.ClassList = [self.Filter]
       
  2656 ##
       
  2657 ##    def RefreshButtons(self):
       
  2658 ##        table_length = len(self.Table.data)
       
  2659 ##        row_class = None
       
  2660 ##        if table_length and self.PouIsUsed:
       
  2661 ##            row = self.VariablesGrid.GetGridCursorRow()
       
  2662 ##            row_class = self.Table.GetValueByName(row, "Class")
       
  2663 ##        self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
       
  2664 ##        self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
       
  2665 ##        self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
       
  2666 ##        self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
       
  2667 ##    
       
  2668 ##    def OnAddButton(self, event):
       
  2669 ##        new_row = self.DefaultValue.copy()
       
  2670 ##        if self.Filter in self.DefaultTypes:
       
  2671 ##            new_row["Class"] = self.DefaultTypes[self.Filter]
       
  2672 ##        else:
       
  2673 ##            new_row["Class"] = self.Filter
       
  2674 ##        self.Values.append(new_row)
       
  2675 ##        self.RefreshValues()
       
  2676 ##        self.RefreshButtons()
       
  2677 ##        event.Skip()
       
  2678 ##
       
  2679 ##    def OnDeleteButton(self, event):
       
  2680 ##        row = self.Table.GetRow(self.VariablesGrid.GetGridCursorRow())
       
  2681 ##        self.Values.remove(row)
       
  2682 ##        self.RefreshValues()
       
  2683 ##        self.RefreshButtons()
       
  2684 ##        event.Skip()
       
  2685 ##
       
  2686 ##    def OnUpButton(self, event):
       
  2687 ##        self.MoveValue(self.VariablesGrid.GetGridCursorRow(), -1)
       
  2688 ##        self.RefreshButtons()
       
  2689 ##        event.Skip()
       
  2690 ##
       
  2691 ##    def OnDownButton(self, event):
       
  2692 ##        self.MoveValue(self.VariablesGrid.GetGridCursorRow(), 1)
       
  2693 ##        self.RefreshButtons()
       
  2694 ##        event.Skip()
       
  2695 ##
       
  2696 ##    def OnVariablesGridCellChange(self, event):
       
  2697 ##        row, col = event.GetRow(), event.GetCol()
       
  2698 ##        colname = self.Table.GetColLabelValue(col)
       
  2699 ##        value = self.Table.GetValue(row, col)
       
  2700 ##        if colname == "Name":
       
  2701 ##            if not TestIdentifier(value):
       
  2702 ##                message = wxMessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wxOK|wxICON_ERROR)
       
  2703 ##                message.ShowModal()
       
  2704 ##                message.Destroy()
       
  2705 ##                event.Veto()
       
  2706 ##            elif value.upper() in IEC_KEYWORDS:
       
  2707 ##                message = wxMessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wxOK|wxICON_ERROR)
       
  2708 ##                message.ShowModal()
       
  2709 ##                message.Destroy()
       
  2710 ##                event.Veto()
       
  2711 ##            elif value.upper() in self.PouNames:
       
  2712 ##                message = wxMessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wxOK|wxICON_ERROR)
       
  2713 ##                message.ShowModal()
       
  2714 ##                message.Destroy()
       
  2715 ##                event.Veto()
       
  2716 ##            elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]:
       
  2717 ##                message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR)
       
  2718 ##                message.ShowModal()
       
  2719 ##                message.Destroy()
       
  2720 ##                event.Veto()
       
  2721 ##            else:
       
  2722 ##                event.Skip()
       
  2723 ##        else:
       
  2724 ##            event.Skip()
       
  2725 ##
       
  2726 ##    def OnVariablesGridSelectCell(self, event):
       
  2727 ##        wxCallAfter(self.RefreshButtons)
       
  2728 ##        event.Skip()
       
  2729 ##
       
  2730 ##    def SetPouNames(self, pou_names):
       
  2731 ##        self.PouNames = [pou_name.upper() for pou_name in pou_names]
       
  2732 ##
       
  2733 ##    def SetValues(self, values):
       
  2734 ##        for item, value in values.items():
       
  2735 ##            if item == "returnType" and value and self.ReturnType.IsEnabled():
       
  2736 ##                self.ReturnType.SetStringSelection(value)
       
  2737 ##            if item == "data":
       
  2738 ##                self.Values = value
       
  2739 ##        self.RefreshValues()
       
  2740 ##
       
  2741 ##    def MoveValue(self, value_index, move):
       
  2742 ##        new_index = max(0, min(value_index + move, len(self.Values) - 1))
       
  2743 ##        if new_index != value_index:
       
  2744 ##            self.Values.insert(new_index, self.Values.pop(value_index))
       
  2745 ##            self.RefreshValues()
       
  2746 ##            self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol())
       
  2747 ##        else:
       
  2748 ##            self.RefreshValues()
       
  2749 ##    
       
  2750 ##    def RefreshValues(self):
       
  2751 ##        if len(self.Table.data) > 0:
       
  2752 ##            self.VariablesGrid.SetGridCursor(0, 0)
       
  2753 ##        data = []
       
  2754 ##        for variable in self.Values:
       
  2755 ##            if variable["Class"] in self.ClassList:
       
  2756 ##                data.append(variable)
       
  2757 ##        self.Table.SetData(data)
       
  2758 ##        self.Table.ResetView(self.VariablesGrid)
       
  2759 ##                
       
  2760 ##    def GetValues(self):
       
  2761 ##        values = {}
       
  2762 ##        if self.ReturnType.IsEnabled():
       
  2763 ##            values["returnType"] = self.ReturnType.GetStringSelection()
       
  2764 ##        values["data"] = self.Values
       
  2765 ##        return values
  2259 
  2766 
  2260 #-------------------------------------------------------------------------------
  2767 #-------------------------------------------------------------------------------
  2261 #                               Exception Handler
  2768 #                               Exception Handler
  2262 #-------------------------------------------------------------------------------
  2769 #-------------------------------------------------------------------------------
  2263 
  2770