etherlab/ConfigEditor.py
changeset 2367 0fb54172a18b
parent 2363 9c7da6ff6a34
child 2370 e40f3914e55f
equal deleted inserted replaced
2366:d635680e4c2c 2367:0fb54172a18b
   272         main_sizer.AddGrowableCol(0)
   272         main_sizer.AddGrowableCol(0)
   273         main_sizer.AddGrowableRow(1)
   273         main_sizer.AddGrowableRow(1)
   274 
   274 
   275         variables_label = wx.StaticText(self.EthercatNodeEditor,
   275         variables_label = wx.StaticText(self.EthercatNodeEditor,
   276               label=_('Variable entries:'))
   276               label=_('Variable entries:'))
   277         main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP|wx.LEFT|wx.RIGHT)
   277         main_sizer.AddWindow(variables_label, border=10, flag=wx.TOP | wx.LEFT | wx.RIGHT)
   278 
   278 
   279         self.NodeVariables = NodeVariablesSizer(self.EthercatNodeEditor, self.Controler)
   279         self.NodeVariables = NodeVariablesSizer(self.EthercatNodeEditor, self.Controler)
   280         main_sizer.AddSizer(self.NodeVariables, border=10,
   280         main_sizer.AddSizer(self.NodeVariables, border=10,
   281             flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   281             flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   282 
   282 
   283         self.EthercatNodeEditor.SetSizer(main_sizer)
   283         self.EthercatNodeEditor.SetSizer(main_sizer)
   284 
   284 
   285         return self.EthercatNodeEditor
   285         return self.EthercatNodeEditor
   286 
   286 
   299         self.NodeVariables.RefreshView()
   299         self.NodeVariables.RefreshView()
   300 
   300 
   301     # -------------------For EtherCAT Management ----------------------------------------------
   301     # -------------------For EtherCAT Management ----------------------------------------------
   302     def _create_EtherCATManagementEditor(self, prnt):
   302     def _create_EtherCATManagementEditor(self, prnt):
   303         self.EtherCATManagementEditor = wx.ScrolledWindow(prnt,
   303         self.EtherCATManagementEditor = wx.ScrolledWindow(prnt,
   304             style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
   304             style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
   305         self.EtherCATManagementEditor.Bind(wx.EVT_SIZE, self.OnResize)
   305         self.EtherCATManagementEditor.Bind(wx.EVT_SIZE, self.OnResize)
   306 
   306 
   307         self.EtherCATManagermentEditor_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   307         self.EtherCATManagermentEditor_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   308         self.EtherCATManagermentEditor_Main_Sizer.AddGrowableCol(0)
   308         self.EtherCATManagermentEditor_Main_Sizer.AddGrowableCol(0)
   309         self.EtherCATManagermentEditor_Main_Sizer.AddGrowableRow(0)
   309         self.EtherCATManagermentEditor_Main_Sizer.AddGrowableRow(0)
   446 
   446 
   447         if message is not None:
   447         if message is not None:
   448             wx.CallAfter(self.ShowMessage, message)
   448             wx.CallAfter(self.ShowMessage, message)
   449 
   449 
   450     def ShowMessage(self, message):
   450     def ShowMessage(self, message):
   451         message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
   451         message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR)
   452         message.ShowModal()
   452         message.ShowModal()
   453         message.Destroy()
   453         message.Destroy()
   454 
   454 
   455 
   455 
   456 def GetStartupCommandsTableColnames():
   456 def GetStartupCommandsTableColnames():
   498 
   498 
   499         if message is not None:
   499         if message is not None:
   500             wx.CallAfter(self.ShowMessage, message)
   500             wx.CallAfter(self.ShowMessage, message)
   501 
   501 
   502     def ShowMessage(self, message):
   502     def ShowMessage(self, message):
   503         message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR)
   503         message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK | wx.ICON_ERROR)
   504         message.ShowModal()
   504         message.ShowModal()
   505         message.Destroy()
   505         message.Destroy()
   506 
   506 
   507 
   507 
   508 class StartupCommandsTable(CustomTable):
   508 class StartupCommandsTable(CustomTable):
   604         (_("Network"), "_create_EthercatMasterEditor"),
   604         (_("Network"), "_create_EthercatMasterEditor"),
   605         (_("Master State"), "_create_MasterStateEditor")
   605         (_("Master State"), "_create_MasterStateEditor")
   606         ]
   606         ]
   607 
   607 
   608     def _create_MasterStateEditor(self, prnt):
   608     def _create_MasterStateEditor(self, prnt):
   609         self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
   609         self.MasterStateEditor = wx.ScrolledWindow(prnt, style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
   610         self.MasterStateEditor.Bind(wx.EVT_SIZE, self.OnResize)
   610         self.MasterStateEditor.Bind(wx.EVT_SIZE, self.OnResize)
   611 
   611 
   612         self.MasterStateEditor_Panel_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   612         self.MasterStateEditor_Panel_Main_Sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
   613         self.MasterStateEditor_Panel_Main_Sizer.AddGrowableCol(0)
   613         self.MasterStateEditor_Panel_Main_Sizer.AddGrowableCol(0)
   614         self.MasterStateEditor_Panel_Main_Sizer.AddGrowableRow(0)
   614         self.MasterStateEditor_Panel_Main_Sizer.AddGrowableRow(0)
   632                 maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
   632                 maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, posx, posy)
   633         event.Skip()
   633         event.Skip()
   634 
   634 
   635     def _create_EthercatMasterEditor(self, prnt):
   635     def _create_EthercatMasterEditor(self, prnt):
   636         self.EthercatMasterEditor = wx.ScrolledWindow(prnt,
   636         self.EthercatMasterEditor = wx.ScrolledWindow(prnt,
   637             style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
   637             style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
   638         self.EthercatMasterEditor.Bind(wx.EVT_SIZE, self.OnResize)
   638         self.EthercatMasterEditor.Bind(wx.EVT_SIZE, self.OnResize)
   639 
   639 
   640         self.EthercatMasterEditorSizer = wx.BoxSizer(wx.VERTICAL)
   640         self.EthercatMasterEditorSizer = wx.BoxSizer(wx.VERTICAL)
   641 
   641 
   642         self.NodesFilter = wx.ComboBox(self.EthercatMasterEditor,
   642         self.NodesFilter = wx.ComboBox(self.EthercatMasterEditor,
   698 
   698 
   699         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   699         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   700 
   700 
   701         main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
   701         main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
   702         staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
   702         staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
   703         self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW|wx.ALL)
   703         self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
   704 
   704 
   705         main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
   705         main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
   706         main_staticbox_sizer.AddGrowableCol(0)
   706         main_staticbox_sizer.AddGrowableCol(0)
   707         main_staticbox_sizer.AddGrowableRow(2)
   707         main_staticbox_sizer.AddGrowableRow(2)
   708         main_staticbox_sizer.AddGrowableRow(4)
   708         main_staticbox_sizer.AddGrowableRow(4)
   709         main_staticbox_sizer.AddGrowableRow(5)
   709         main_staticbox_sizer.AddGrowableRow(5)
   710         staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW)
   710         staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW)
   711         main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW|wx.ALL)
   711         main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
   712         main_staticbox_sizer.AddSizer(process_variables_header, border=5,
   712         main_staticbox_sizer.AddSizer(process_variables_header, border=5,
   713               flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   713               flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   714         main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
   714         main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
   715               border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   715               border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   716         main_staticbox_sizer.AddSizer(startup_commands_header,
   716         main_staticbox_sizer.AddSizer(startup_commands_header,
   717               border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   717               border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   718         main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
   718         main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
   719               border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   719               border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   720 
   720 
   721         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   721         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   722         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   722         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   723         second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW|wx.ALL)
   723         second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
   724 
   724 
   725         main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
   725         main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
   726             border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
   726             border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   727 
   727 
   728         self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
   728         self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
   729 
   729 
   730         return self.EthercatMasterEditor
   730         return self.EthercatMasterEditor
   731 
   731 
   979         if message is None:
   979         if message is None:
   980             self.SaveProcessVariables()
   980             self.SaveProcessVariables()
   981             wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
   981             wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
   982             event.Skip()
   982             event.Skip()
   983         else:
   983         else:
   984             dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
   984             dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   985             dialog.ShowModal()
   985             dialog.ShowModal()
   986             dialog.Destroy()
   986             dialog.Destroy()
   987             event.Veto()
   987             event.Veto()
   988 
   988 
   989     def OnProcessVariablesGridCellLeftClick(self, event):
   989     def OnProcessVariablesGridCellLeftClick(self, event):
  1045                     wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"])
  1045                     wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"])
  1046             if message is None:
  1046             if message is None:
  1047                 self.RefreshBuffer()
  1047                 self.RefreshBuffer()
  1048                 event.Skip()
  1048                 event.Skip()
  1049             else:
  1049             else:
  1050                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
  1050                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
  1051                 dialog.ShowModal()
  1051                 dialog.ShowModal()
  1052                 dialog.Destroy()
  1052                 dialog.Destroy()
  1053                 event.Veto()
  1053                 event.Veto()
  1054         else:
  1054         else:
  1055             event.Veto()
  1055             event.Veto()
  1107         self.AddGrowableRow(3)
  1107         self.AddGrowableRow(3)
  1108 
  1108 
  1109         ESI_files_label = wx.StaticText(parent,
  1109         ESI_files_label = wx.StaticText(parent,
  1110             label=_("ESI Files:"))
  1110             label=_("ESI Files:"))
  1111         self.AddWindow(ESI_files_label, border=10,
  1111         self.AddWindow(ESI_files_label, border=10,
  1112             flag=wx.TOP|wx.LEFT|wx.RIGHT)
  1112             flag=wx.TOP | wx.LEFT | wx.RIGHT)
  1113 
  1113 
  1114         folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
  1114         folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
  1115         folder_tree_sizer.AddGrowableCol(0)
  1115         folder_tree_sizer.AddGrowableCol(0)
  1116         folder_tree_sizer.AddGrowableRow(0)
  1116         folder_tree_sizer.AddGrowableRow(0)
  1117         self.AddSizer(folder_tree_sizer, border=10,
  1117         self.AddSizer(folder_tree_sizer, border=10,
  1118             flag=wx.GROW|wx.LEFT|wx.RIGHT)
  1118             flag=wx.GROW | wx.LEFT | wx.RIGHT)
  1119 
  1119 
  1120         self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
  1120         self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
  1121         self.ESIFiles.SetFilter(".xml")
  1121         self.ESIFiles.SetFilter(".xml")
  1122         folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW)
  1122         folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW)
  1123 
  1123 
  1142             buttons_sizer.AddWindow(button, border=10, flag=flag)
  1142             buttons_sizer.AddWindow(button, border=10, flag=flag)
  1143 
  1143 
  1144         modules_label = wx.StaticText(parent,
  1144         modules_label = wx.StaticText(parent,
  1145             label=_("Modules library:"))
  1145             label=_("Modules library:"))
  1146         self.AddSizer(modules_label, border=10,
  1146         self.AddSizer(modules_label, border=10,
  1147             flag=wx.LEFT|wx.RIGHT)
  1147             flag=wx.LEFT | wx.RIGHT)
  1148 
  1148 
  1149         self.ModulesGrid = wx.gizmos.TreeListCtrl(parent,
  1149         self.ModulesGrid = wx.gizmos.TreeListCtrl(parent,
  1150               style=wx.TR_DEFAULT_STYLE |
  1150               style=wx.TR_DEFAULT_STYLE |
  1151                     wx.TR_ROW_LINES |
  1151                     wx.TR_ROW_LINES |
  1152                     wx.TR_COLUMN_LINES |
  1152                     wx.TR_COLUMN_LINES |
  1159         self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
  1159         self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
  1160             self.OnModulesGridEndLabelEdit)
  1160             self.OnModulesGridEndLabelEdit)
  1161         self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
  1161         self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
  1162             self.OnModulesGridHeaderMotion)
  1162             self.OnModulesGridHeaderMotion)
  1163         self.AddWindow(self.ModulesGrid, border=10,
  1163         self.AddWindow(self.ModulesGrid, border=10,
  1164             flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1164             flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1165 
  1165 
  1166         for colname, colsize, colalign in zip(
  1166         for colname, colsize, colalign in zip(
  1167                 [_("Name")] + [param_infos["column_label"]
  1167                 [_("Name")] + [param_infos["column_label"]
  1168                                for param, param_infos in
  1168                                for param, param_infos in
  1169                                self.ModuleLibrary.MODULES_EXTRA_PARAMS],
  1169                                self.ModuleLibrary.MODULES_EXTRA_PARAMS],
  1240             if self.ModuleLibrary.ImportModuleLibrary(filepath):
  1240             if self.ModuleLibrary.ImportModuleLibrary(filepath):
  1241                 wx.CallAfter(self.RefreshView)
  1241                 wx.CallAfter(self.RefreshView)
  1242             else:
  1242             else:
  1243                 message = wx.MessageDialog(self,
  1243                 message = wx.MessageDialog(self,
  1244                     _("No such XML file: %s\n") % filepath,
  1244                     _("No such XML file: %s\n") % filepath,
  1245                     _("Error"), wx.OK|wx.ICON_ERROR)
  1245                     _("Error"), wx.OK | wx.ICON_ERROR)
  1246                 message.ShowModal()
  1246                 message.ShowModal()
  1247                 message.Destroy()
  1247                 message.Destroy()
  1248         dialog.Destroy()
  1248         dialog.Destroy()
  1249 
  1249 
  1250         event.Skip()
  1250         event.Skip()
  1254         if os.path.isfile(filepath):
  1254         if os.path.isfile(filepath):
  1255             folder, filename = os.path.split(filepath)
  1255             folder, filename = os.path.split(filepath)
  1256 
  1256 
  1257             dialog = wx.MessageDialog(self.ParentWindow,
  1257             dialog = wx.MessageDialog(self.ParentWindow,
  1258                   _("Do you really want to delete the file '%s'?") % filename,
  1258                   _("Do you really want to delete the file '%s'?") % filename,
  1259                   _("Delete File"), wx.YES_NO|wx.ICON_QUESTION)
  1259                   _("Delete File"), wx.YES_NO | wx.ICON_QUESTION)
  1260             remove = dialog.ShowModal() == wx.ID_YES
  1260             remove = dialog.ShowModal() == wx.ID_YES
  1261             dialog.Destroy()
  1261             dialog.Destroy()
  1262 
  1262 
  1263             if remove:
  1263             if remove:
  1264                 os.remove(filepath)
  1264                 os.remove(filepath)
  1306                     wx.CallAfter(self.RefreshModulesGrid)
  1306                     wx.CallAfter(self.RefreshModulesGrid)
  1307                     event.Skip()
  1307                     event.Skip()
  1308                 except ValueError:
  1308                 except ValueError:
  1309                     message = wx.MessageDialog(self,
  1309                     message = wx.MessageDialog(self,
  1310                         _("Module %s must be an integer!") % stripped_column_label,
  1310                         _("Module %s must be an integer!") % stripped_column_label,
  1311                         _("Error"), wx.OK|wx.ICON_ERROR)
  1311                         _("Error"), wx.OK | wx.ICON_ERROR)
  1312                     message.ShowModal()
  1312                     message.ShowModal()
  1313                     message.Destroy()
  1313                     message.Destroy()
  1314                     event.Veto()
  1314                     event.Veto()
  1315             else:
  1315             else:
  1316                 event.Veto()
  1316                 event.Veto()
  1333 class DatabaseManagementDialog(wx.Dialog):
  1333 class DatabaseManagementDialog(wx.Dialog):
  1334 
  1334 
  1335     def __init__(self, parent, database):
  1335     def __init__(self, parent, database):
  1336         wx.Dialog.__init__(self, parent,
  1336         wx.Dialog.__init__(self, parent,
  1337               size=wx.Size(700, 500), title=_('ESI Files Database management'),
  1337               size=wx.Size(700, 500), title=_('ESI Files Database management'),
  1338               style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
  1338               style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
  1339 
  1339 
  1340         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1340         main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
  1341         main_sizer.AddGrowableCol(0)
  1341         main_sizer.AddGrowableCol(0)
  1342         main_sizer.AddGrowableRow(0)
  1342         main_sizer.AddGrowableRow(0)
  1343 
  1343 
  1344         self.DatabaseSizer = LibraryEditorSizer(self, database,
  1344         self.DatabaseSizer = LibraryEditorSizer(self, database,
  1345             [("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
  1345             [("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
  1346              ("DeleteButton", "remove_element", _("Remove file from database"), None)])
  1346              ("DeleteButton", "remove_element", _("Remove file from database"), None)])
  1347         self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
  1347         self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
  1348         main_sizer.AddSizer(self.DatabaseSizer, border=10,
  1348         main_sizer.AddSizer(self.DatabaseSizer, border=10,
  1349             flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
  1349             flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
  1350 
  1350 
  1351         button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
  1351         button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
  1352         button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
  1352         button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
  1353         button_sizer.GetCancelButton().SetLabel(_("Close"))
  1353         button_sizer.GetCancelButton().SetLabel(_("Close"))
  1354         main_sizer.AddSizer(button_sizer, border=10,
  1354         main_sizer.AddSizer(button_sizer, border=10,
  1355               flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
  1355               flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1356 
  1356 
  1357         self.SetSizer(main_sizer)
  1357         self.SetSizer(main_sizer)
  1358 
  1358 
  1359         self.DatabaseSizer.RefreshView()
  1359         self.DatabaseSizer.RefreshView()
  1360 
  1360 
  1367     CONFNODEEDITOR_TABS = [
  1367     CONFNODEEDITOR_TABS = [
  1368         (_("Modules Library"), "_create_ModuleLibraryEditor")]
  1368         (_("Modules Library"), "_create_ModuleLibraryEditor")]
  1369 
  1369 
  1370     def _create_ModuleLibraryEditor(self, prnt):
  1370     def _create_ModuleLibraryEditor(self, prnt):
  1371         self.ModuleLibraryEditor = wx.ScrolledWindow(prnt,
  1371         self.ModuleLibraryEditor = wx.ScrolledWindow(prnt,
  1372             style=wx.TAB_TRAVERSAL|wx.HSCROLL|wx.VSCROLL)
  1372             style=wx.TAB_TRAVERSAL | wx.HSCROLL | wx.VSCROLL)
  1373         self.ModuleLibraryEditor.Bind(wx.EVT_SIZE, self.OnResize)
  1373         self.ModuleLibraryEditor.Bind(wx.EVT_SIZE, self.OnResize)
  1374 
  1374 
  1375         self.ModuleLibrarySizer = LibraryEditorSizer(self.ModuleLibraryEditor,
  1375         self.ModuleLibrarySizer = LibraryEditorSizer(self.ModuleLibraryEditor,
  1376             self.Controler.GetModulesLibraryInstance(),
  1376             self.Controler.GetModulesLibraryInstance(),
  1377             [("ImportButton", "ImportESI", _("Import ESI file"), None),
  1377             [("ImportButton", "ImportESI", _("Import ESI file"), None),