PLCOpenEditor.py
changeset 56 7187e1c00975
parent 55 e24d2f917c7e
child 58 39cd981ff242
equal deleted inserted replaced
55:e24d2f917c7e 56:7187e1c00975
   188               kind=wx.ITEM_NORMAL, text=u'Add Configuration')
   188               kind=wx.ITEM_NORMAL, text=u'Add Configuration')
   189         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS12,
   189         parent.Append(help='', id=wxID_PLCOPENEDITOREDITMENUITEMS12,
   190               kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
   190               kind=wx.ITEM_NORMAL, text=u'Remove Configuration')
   191         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   191         self.Bind(wx.EVT_MENU, self.OnRefreshMenu,
   192               id=wxID_PLCOPENEDITOREDITMENUITEMS0)
   192               id=wxID_PLCOPENEDITOREDITMENUITEMS0)
       
   193         self.Bind(wx.EVT_MENU, self.OnUndoMenu,
       
   194               id=wxID_PLCOPENEDITOREDITMENUITEMS1)
       
   195         self.Bind(wx.EVT_MENU, self.OnRedoMenu,
       
   196               id=wxID_PLCOPENEDITOREDITMENUITEMS2)
   193         self.Bind(wx.EVT_MENU, self.OnCutMenu,
   197         self.Bind(wx.EVT_MENU, self.OnCutMenu,
   194               id=wxID_PLCOPENEDITOREDITMENUITEMS4)
   198               id=wxID_PLCOPENEDITOREDITMENUITEMS4)
   195         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   199         self.Bind(wx.EVT_MENU, self.OnCopyMenu,
   196               id=wxID_PLCOPENEDITOREDITMENUITEMS5)
   200               id=wxID_PLCOPENEDITOREDITMENUITEMS5)
   197         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   201         self.Bind(wx.EVT_MENU, self.OnPasteMenu,
   371               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   375               parent=prnt, pos=wx.Point(235, 287), size=wx.Size(1000, 600),
   372               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   376               style=wx.DEFAULT_FRAME_STYLE, title=u'PLCOpenEditor')
   373         self._init_utils()
   377         self._init_utils()
   374         self.SetClientSize(wx.Size(1000, 600))
   378         self.SetClientSize(wx.Size(1000, 600))
   375         self.SetMenuBar(self.menuBar1)
   379         self.SetMenuBar(self.menuBar1)
       
   380         self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=wxID_PLCOPENEDITOR)
   376         
   381         
   377         self.splitterWindow1 = wx.SplitterWindow(id=wxID_PLCOPENEDITORSPLITTERWINDOW1,
   382         self.splitterWindow1 = wx.SplitterWindow(id=wxID_PLCOPENEDITORSPLITTERWINDOW1,
   378               name='splitterWindow1', parent=self, point=wx.Point(0, 0),
   383               name='splitterWindow1', parent=self, point=wx.Point(0, 0),
   379               size=wx.Size(-1, -1), style=wx.SP_3D)
   384               size=wx.Size(-1, -1), style=wx.SP_3D)
   380         self.splitterWindow1.SetNeedUpdating(True)
   385         self.splitterWindow1.SetNeedUpdating(True)
   441         #self.DrawingMode = FREEDRAWING_MODE
   446         #self.DrawingMode = FREEDRAWING_MODE
   442         self.DrawingMode = DRIVENDRAWING_MODE
   447         self.DrawingMode = DRIVENDRAWING_MODE
   443         
   448         
   444         self.RefreshFileMenu()
   449         self.RefreshFileMenu()
   445         self.RefreshEditMenu()
   450         self.RefreshEditMenu()
       
   451         self.RefreshTitle()
   446         self.RefreshToolBar()
   452         self.RefreshToolBar()
   447 
   453 
   448     def GetDrawingMode(self):
   454     def GetDrawingMode(self):
   449         return self.DrawingMode
   455         return self.DrawingMode
       
   456 
       
   457     def RefreshTitle(self):
       
   458         if self.Controler.HasOpenedProject() > 0:
       
   459             self.SetTitle("PLCOpenEditor - %s"%self.Controler.GetFilename())
       
   460         else:
       
   461             self.SetTitle("PLCOpenEditor")
   450 
   462 
   451     def RefreshFileMenu(self):
   463     def RefreshFileMenu(self):
   452         if self.FileMenu:
   464         if self.FileMenu:
   453             if self.Controler.HasOpenedProject():
   465             if self.Controler.HasOpenedProject():
   454                 if self.TabsOpened.GetPageCount() > 0:
   466                 if self.TabsOpened.GetPageCount() > 0:
   468                 self.FileMenu.FindItemByPosition(7).Enable(False)
   480                 self.FileMenu.FindItemByPosition(7).Enable(False)
   469                 self.FileMenu.FindItemByPosition(9).Enable(False)
   481                 self.FileMenu.FindItemByPosition(9).Enable(False)
   470 
   482 
   471     def RefreshEditMenu(self):
   483     def RefreshEditMenu(self):
   472         if self.EditMenu:
   484         if self.EditMenu:
   473             self.EditMenu.FindItemByPosition(1).Enable(False)
   485             if self.Controler.HasOpenedProject():
   474             self.EditMenu.FindItemByPosition(2).Enable(False)
   486                 undo, redo = self.Controler.GetBufferState()
       
   487                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, undo)
       
   488                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, redo)
       
   489             else:
       
   490                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS1, False)
       
   491                 self.EditMenu.Enable(wxID_PLCOPENEDITOREDITMENUITEMS2, False)
   475             if self.Controler.HasOpenedProject():
   492             if self.Controler.HasOpenedProject():
   476                 if self.TabsOpened.GetPageCount() > 0:
   493                 if self.TabsOpened.GetPageCount() > 0:
   477                     self.EditMenu.FindItemByPosition(0).Enable(True)
   494                     self.EditMenu.FindItemByPosition(0).Enable(True)
   478                 else:
   495                 else:
   479                     self.EditMenu.FindItemByPosition(0).Enable(False)
   496                     self.EditMenu.FindItemByPosition(0).Enable(False)
   493                 self.EditMenu.FindItemByPosition(5).Enable(False)
   510                 self.EditMenu.FindItemByPosition(5).Enable(False)
   494             self.EditMenu.FindItemByPosition(6).Enable(False)
   511             self.EditMenu.FindItemByPosition(6).Enable(False)
   495 
   512 
   496     def ShowProperties(self):
   513     def ShowProperties(self):
   497         old_values = self.Controler.GetProjectProperties()
   514         old_values = self.Controler.GetProjectProperties()
   498         old_values["projectName"] = self.Controler.GetProjectName()
       
   499         dialog = ProjectDialog(self)
   515         dialog = ProjectDialog(self)
   500         dialog.SetValues(old_values)
   516         dialog.SetValues(old_values)
   501         if dialog.ShowModal() == wxID_OK:
   517         if dialog.ShowModal() == wxID_OK:
   502             new_values = dialog.GetValues()
   518             new_values = dialog.GetValues()
   503             projectname = new_values.pop("projectName")
   519             projectname = new_values.pop("projectName")
   504             new_values["creationDateTime"] = old_values["creationDateTime"]
   520             new_values["creationDateTime"] = old_values["creationDateTime"]
   505             self.Controler.SetProjectName(projectname)
   521             self.Controler.SetProjectProperties(projectname, new_values)
   506             self.Controler.SetProjectProperties(new_values)
       
   507             self.RefreshProjectTree()
   522             self.RefreshProjectTree()
   508         dialog.Destroy()
   523         dialog.Destroy()
       
   524 
       
   525     def OnCloseFrame(self, event):
       
   526         if not self.Controler.ProjectIsSaved():
       
   527             dialog = wxMessageDialog(self, "There are changes, do you want to save?",  "Close Application", wxYES_NO|wxCANCEL|wxICON_QUESTION)
       
   528             answer = dialog.ShowModal()
       
   529             dialog.Destroy()
       
   530             if answer == wxID_YES:
       
   531                 self.SaveProject()
       
   532                 event.Skip()
       
   533             elif answer == wxID_NO:
       
   534                 event.Skip()
       
   535         else:
       
   536             event.Skip()
   509 
   537 
   510     def OnNewProjectMenu(self, event):
   538     def OnNewProjectMenu(self, event):
   511         dialog = ProjectDialog(self)
   539         dialog = ProjectDialog(self)
   512         if dialog.ShowModal() == wxID_OK:
   540         if dialog.ShowModal() == wxID_OK:
   513             values = dialog.GetValues()
   541             values = dialog.GetValues()
   514             projectname = values.pop("projectName")
   542             projectname = values.pop("projectName")
   515             values["creationDateTime"] = datetime(*localtime()[:6])
   543             values["creationDateTime"] = datetime(*localtime()[:6])
   516             self.Controler.CreateNewProject(projectname)
   544             self.Controler.CreateNewProject(projectname)
   517             self.Controler.SetProjectProperties(values)
   545             self.Controler.SetProjectProperties(projectname, values)
       
   546             self.RefreshTitle()
   518             self.RefreshFileMenu()
   547             self.RefreshFileMenu()
   519             self.RefreshEditMenu()
   548             self.RefreshEditMenu()
   520             self.RefreshProjectTree()
   549             self.RefreshProjectTree()
   521         event.Skip()
   550         event.Skip()
   522 
   551 
   531             filepath = dialog.GetPath()
   560             filepath = dialog.GetPath()
   532             if os.path.isfile(filepath):
   561             if os.path.isfile(filepath):
   533                 self.Controler.OpenXMLFile(filepath)
   562                 self.Controler.OpenXMLFile(filepath)
   534                 self.TabsOpened.DeleteAllPages()
   563                 self.TabsOpened.DeleteAllPages()
   535                 self.RefreshProjectTree()
   564                 self.RefreshProjectTree()
       
   565             self.RefreshTitle()
   536             self.RefreshFileMenu()
   566             self.RefreshFileMenu()
   537             self.RefreshEditMenu()
   567             self.RefreshEditMenu()
   538             self.RefreshToolBar()
   568             self.RefreshToolBar()
   539         dialog.Destroy()
   569         dialog.Destroy()
   540         event.Skip()
   570         event.Skip()
   544         if selected >= 0:
   574         if selected >= 0:
   545             self.Controler.CloseElementEditing()
   575             self.Controler.CloseElementEditing()
   546             self.TabsOpened.DeletePage(selected)
   576             self.TabsOpened.DeletePage(selected)
   547             if self.TabsOpened.GetPageCount() > 0:
   577             if self.TabsOpened.GetPageCount() > 0:
   548                 self.TabsOpened.SetSelection(min(selected, self.TabsOpened.GetPageCount() - 1))
   578                 self.TabsOpened.SetSelection(min(selected, self.TabsOpened.GetPageCount() - 1))
       
   579             self.RefreshTitle()
   549             self.RefreshFileMenu()
   580             self.RefreshFileMenu()
   550             self.RefreshEditMenu()
   581             self.RefreshEditMenu()
   551             self.RefreshToolBar()
   582             self.RefreshToolBar()
   552         event.Skip()
   583         event.Skip()
   553     
   584     
   554     def OnCloseProjectMenu(self, event):
   585     def OnCloseProjectMenu(self, event):
   555         self.Controler.Reset()
   586         self.Controler.Reset()
   556         self.TabsOpened.DeleteAllPages()
   587         self.TabsOpened.DeleteAllPages()
   557         self.ProjectTree.DeleteAllItems()
   588         self.ProjectTree.DeleteAllItems()
       
   589         self.RefreshTitle()
   558         self.RefreshFileMenu()
   590         self.RefreshFileMenu()
   559         self.RefreshEditMenu()
   591         self.RefreshEditMenu()
   560         self.RefreshToolBar()
   592         self.RefreshToolBar()
   561         event.Skip()
   593         event.Skip()
   562 
   594 
   587 
   619 
   588     def SaveProject(self):
   620     def SaveProject(self):
   589         result = self.Controler.SaveXMLFile()
   621         result = self.Controler.SaveXMLFile()
   590         if not result:
   622         if not result:
   591             self.SaveProjectAs()
   623             self.SaveProjectAs()
       
   624         else:
       
   625             self.RefreshTitle()
   592     
   626     
   593     def SaveProjectAs(self):
   627     def SaveProjectAs(self):
   594         filepath = self.Controler.GetFilePath()
   628         filepath = self.Controler.GetFilePath()
   595         if filepath != "":
   629         if filepath != "":
   596             directory, filename = os.path.split(filepath)
   630             directory, filename = os.path.split(filepath)
   597         else:
   631         else:
   598             directory, filename = os.getcwd(), "%s.xml"%self.Controler.GetProjectName()
   632             directory, filename = os.getcwd(), "%(projectName)s.xml"%self.Controler.GetProjectProperties()
   599         dialog = wxFileDialog(self, "Choose a file", directory, filename,  "PLCOpen files (*.xml)|*.xml|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT)
   633         dialog = wxFileDialog(self, "Choose a file", directory, filename,  "PLCOpen files (*.xml)|*.xml|All files|*.*", wxSAVE|wxOVERWRITE_PROMPT)
   600         if dialog.ShowModal() == wxID_OK:
   634         if dialog.ShowModal() == wxID_OK:
   601             filepath = dialog.GetPath()
   635             filepath = dialog.GetPath()
   602             if os.path.isdir(os.path.dirname(filepath)):
   636             if os.path.isdir(os.path.dirname(filepath)):
   603                 result = self.Controler.SaveXMLFile(filepath)
   637                 result = self.Controler.SaveXMLFile(filepath)
   607                     message.Destroy()
   641                     message.Destroy()
   608             else:
   642             else:
   609                 message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
   643                 message = wxMessageDialog(self, "%s is not a valid folder!"%os.path.dirname(filepath), "Error", wxOK|wxICON_ERROR)
   610                 message.ShowModal()
   644                 message.ShowModal()
   611                 message.Destroy()
   645                 message.Destroy()
       
   646             self.RefreshTitle()
   612         dialog.Destroy()
   647         dialog.Destroy()
   613 
   648 
   614     def OnPropertiesMenu(self, event):
   649     def OnPropertiesMenu(self, event):
   615         self.ShowProperties()
   650         self.ShowProperties()
   616         event.Skip()
   651         event.Skip()
   766             else:
   801             else:
   767                 self.TabsOpened.GetPage(selected).Viewer.AddJump()
   802                 self.TabsOpened.GetPage(selected).Viewer.AddJump()
   768         event.Skip()
   803         event.Skip()
   769         
   804         
   770     def OnPouSelectedChanged(self, event):
   805     def OnPouSelectedChanged(self, event):
       
   806         old_selected = self.TabsOpened.GetSelection()
       
   807         if old_selected >= 0:
       
   808             self.TabsOpened.GetPage(old_selected).ResetBuffer()
   771         selected = event.GetSelection()
   809         selected = event.GetSelection()
   772         if selected >= 0:
   810         if selected >= 0:
   773             self.Controler.RefreshCurrentElementEditing(selected)
   811             self.Controler.RefreshCurrentElementEditing(selected)
   774             found = False
   812             found = False
   775             name = self.TabsOpened.GetPageText(selected)
   813             name = self.TabsOpened.GetPageText(selected)
   807                 message = "\"%s\" is a keyword. It can't be used!"%new_name
   845                 message = "\"%s\" is a keyword. It can't be used!"%new_name
   808             else:
   846             else:
   809                 item = event.GetItem()
   847                 item = event.GetItem()
   810                 itemtype = self.ProjectTree.GetPyData(item)
   848                 itemtype = self.ProjectTree.GetPyData(item)
   811                 if itemtype == ITEM_PROJECT:
   849                 if itemtype == ITEM_PROJECT:
   812                     self.Controler.SetProjectName(new_name)
   850                     self.Controler.SetProjectProperties(name = new_name)
   813                 elif itemtype == ITEM_POU:
   851                 elif itemtype == ITEM_POU:
   814                     if new_name.upper() in self.Controler.GetProjectPouNames():
   852                     if new_name.upper() in self.Controler.GetProjectPouNames():
   815                         message = "\"%s\" pou already exists!"%new_name
   853                         message = "\"%s\" pou already exists!"%new_name
   816                         abort = True
   854                         abort = True
   817                     elif new_name.upper() in self.Controler.GetProjectPouVariables():
   855                     elif new_name.upper() in self.Controler.GetProjectPouVariables():
  1086                         new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = grandparent_name, action_name = name)
  1124                         new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = grandparent_name, action_name = name)
  1087                         self.TabsOpened.AddPage(new_window, "")
  1125                         self.TabsOpened.AddPage(new_window, "")
  1088                     else:
  1126                     else:
  1089                         idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
  1127                         idx = self.Controler.ChangePouActionEditing(grandparent_name, name)
  1090             if idx != None:
  1128             if idx != None:
       
  1129                 old_selected = self.TabsOpened.GetSelection()
       
  1130                 if old_selected >= 0:
       
  1131                     self.TabsOpened.GetPage(old_selected).ResetBuffer()
  1091                 self.TabsOpened.SetSelection(idx)
  1132                 self.TabsOpened.SetSelection(idx)
  1092                 window = self.TabsOpened.GetPage(idx)
  1133                 window = self.TabsOpened.GetPage(idx)
  1093                 window.RefreshView()
  1134                 window.RefreshView()
  1094                 self.RefreshTabsOpenedTitles()
  1135                 self.RefreshTabsOpenedTitles()
  1095                 self.RefreshFileMenu()
  1136                 self.RefreshFileMenu()
  1195             self.TabsOpened.SetPageText(i, pou)
  1236             self.TabsOpened.SetPageText(i, pou)
  1196     
  1237     
  1197     def OnRefreshMenu(self, event):
  1238     def OnRefreshMenu(self, event):
  1198         selected = self.TabsOpened.GetSelection()
  1239         selected = self.TabsOpened.GetSelection()
  1199         if selected != -1:
  1240         if selected != -1:
       
  1241             self.TabsOpened.GetPage(selected).RefreshView()
  1200             self.TabsOpened.GetPage(selected).Refresh()
  1242             self.TabsOpened.GetPage(selected).Refresh()
  1201         event.Skip()
  1243         event.Skip()
  1202     
  1244 
       
  1245     def OnUndoMenu(self, event):
       
  1246         self.Controler.LoadPrevious()
       
  1247         selected = self.TabsOpened.GetSelection()
       
  1248         if selected != -1:
       
  1249             self.TabsOpened.GetPage(selected).RefreshView()
       
  1250             self.TabsOpened.GetPage(selected).Refresh()
       
  1251         self.RefreshTitle()
       
  1252         self.RefreshEditMenu()
       
  1253         event.Skip()
       
  1254     
       
  1255     def OnRedoMenu(self, event):
       
  1256         self.Controler.LoadNext()
       
  1257         selected = self.TabsOpened.GetSelection()
       
  1258         if selected != -1:
       
  1259             self.TabsOpened.GetPage(selected).RefreshView()
       
  1260             self.TabsOpened.GetPage(selected).Refresh()
       
  1261         self.RefreshTitle()
       
  1262         self.RefreshEditMenu()
       
  1263         event.Skip()
       
  1264 
  1203     def OnCutMenu(self, event):
  1265     def OnCutMenu(self, event):
  1204         selected = self.TabsOpened.GetSelection()
  1266         selected = self.TabsOpened.GetSelection()
  1205         if selected != -1:
  1267         if selected != -1:
  1206             try:
  1268             try:
  1207                 self.TabsOpened.GetPage(selected).Viewer.Cut()
  1269                 self.TabsOpened.GetPage(selected).Viewer.Cut()
  1242         dialog = wxSingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wxOK|wxCANCEL)
  1304         dialog = wxSingleChoiceDialog(self, "Select POU to remove:", "POU Remove", pous, wxOK|wxCANCEL)
  1243         if dialog.ShowModal() == wxID_OK:
  1305         if dialog.ShowModal() == wxID_OK:
  1244             selected = dialog.GetStringSelection()
  1306             selected = dialog.GetStringSelection()
  1245             if not self.Controler.PouIsUsed(selected):
  1307             if not self.Controler.PouIsUsed(selected):
  1246                 self.Controler.ProjectRemovePou(selected)
  1308                 self.Controler.ProjectRemovePou(selected)
       
  1309                 deleted = None
  1247                 for i in xrange(self.TabsOpened.GetPageCount()):
  1310                 for i in xrange(self.TabsOpened.GetPageCount()):
  1248                     if self.TabsOpened.GetPageText(i) == selected:
  1311                     if self.TabsOpened.GetPageText(i) == selected:
  1249                         self.TabsOpened.DeletePage(i)
  1312                         deleted = i
       
  1313                 if deleted != None:
       
  1314                     self.TabsOpened.DeletePage(i)
  1250                 self.RefreshProjectTree()
  1315                 self.RefreshProjectTree()
  1251                 self.RefreshToolBar()
  1316                 self.RefreshToolBar()
  1252             else:
  1317             else:
  1253                 message = wxMessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wxOK|wxICON_ERROR)
  1318                 message = wxMessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wxOK|wxICON_ERROR)
  1254                 message.ShowModal()
  1319                 message.ShowModal()
  2171         
  2236         
  2172         if element_type == "config":
  2237         if element_type == "config":
  2173             self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER,
  2238             self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER,
  2174               name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
  2239               name='ConfigPanel', parent=self, pos=wx.Point(0, 0),
  2175               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
  2240               size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL)
       
  2241             self.Viewer.ResetBuffer = lambda: None
       
  2242             self.Viewer.RefreshView = lambda: None
  2176         elif element_type == "resource":
  2243         elif element_type == "resource":
  2177             self.Viewer = ResourceEditor(self, self.Parent, self.Controler)
  2244             self.Viewer = ResourceEditor(self, self.Parent, self.Controler)
  2178         elif element_type == "FBD":
  2245         elif element_type == "FBD":
  2179             self.Viewer = Viewer(self, self.Parent, self.Controler)
  2246             self.Viewer = Viewer(self, self.Parent, self.Controler)
  2180         elif element_type == "LD":
  2247         elif element_type == "LD":
  2325             else:
  2392             else:
  2326                 language = self.Controler.GetPouBodyType(self.PouName)
  2393                 language = self.Controler.GetPouBodyType(self.PouName)
  2327             if language not in ["IL", "ST"]:
  2394             if language not in ["IL", "ST"]:
  2328                 self.Viewer.SetMode(mode)
  2395                 self.Viewer.SetMode(mode)
  2329 
  2396 
       
  2397     def ResetBuffer(self):
       
  2398         self.Viewer.ResetBuffer()
       
  2399 
  2330     def RefreshView(self):
  2400     def RefreshView(self):
  2331         self.PouNames = self.Controler.GetProjectPouNames()
  2401         self.PouNames = self.Controler.GetProjectPouNames()
  2332         
  2402         
  2333         if self.ElementType == "config":
  2403         if self.ElementType == "config":
  2334             self.PouIsUsed = False
  2404             self.PouIsUsed = False
  2358         
  2428         
  2359         if returnType and self.ReturnType.IsEnabled():
  2429         if returnType and self.ReturnType.IsEnabled():
  2360             self.ReturnType.SetStringSelection(returnType)
  2430             self.ReturnType.SetStringSelection(returnType)
  2361         self.RefreshValues()
  2431         self.RefreshValues()
  2362         self.RefreshButtons()
  2432         self.RefreshButtons()
  2363         if self.ElementType != "config":
  2433         self.Viewer.RefreshView()
  2364             self.Viewer.RefreshView()
  2434         
  2365                 
       
  2366     def OnClassFilter(self, event):
  2435     def OnClassFilter(self, event):
  2367         self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2436         self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()]
  2368         self.RefreshTypeList()
  2437         self.RefreshTypeList()
  2369         self.RefreshValues()
  2438         self.RefreshValues()
  2370         self.RefreshButtons()
  2439         self.RefreshButtons()
  2379             self.ClassList = ["Local","Temp"]
  2448             self.ClassList = ["Local","Temp"]
  2380         else:
  2449         else:
  2381             self.ClassList = [self.Filter]
  2450             self.ClassList = [self.Filter]
  2382 
  2451 
  2383     def RefreshButtons(self):
  2452     def RefreshButtons(self):
  2384         table_length = len(self.Table.data)
  2453         if self.Table:
  2385         row_class = None
  2454             table_length = len(self.Table.data)
  2386         if table_length and self.PouIsUsed:
  2455             row_class = None
  2387             row = self.VariablesGrid.GetGridCursorRow()
  2456             if table_length and self.PouIsUsed:
  2388             row_class = self.Table.GetValueByName(row, "Class")
  2457                 row = self.VariablesGrid.GetGridCursorRow()
  2389         self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
  2458                 row_class = self.Table.GetValueByName(row, "Class")
  2390         self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
  2459             self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"])
  2391         self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2460             self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"])
  2392         self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2461             self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
       
  2462             self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"])
  2393 
  2463 
  2394     def OnAddButton(self, event):
  2464     def OnAddButton(self, event):
  2395         new_row = self.DefaultValue.copy()
  2465         new_row = self.DefaultValue.copy()
  2396         if self.Filter in self.DefaultTypes:
  2466         if self.Filter in self.DefaultTypes:
  2397             new_row["Class"] = self.DefaultTypes[self.Filter]
  2467             new_row["Class"] = self.DefaultTypes[self.Filter]