etherlab/ConfigEditor.py
branchwxPython4
changeset 3303 0ffb41625592
parent 2737 38afed869ff6
child 3572 b46af5b80c7d
equal deleted inserted replaced
3302:c89fc366bebd 3303:0ffb41625592
    14 import os
    14 import os
    15 import re
    15 import re
    16 
    16 
    17 import wx
    17 import wx
    18 import wx.grid
    18 import wx.grid
    19 import wx.gizmos
    19 import wx.adv
    20 import wx.lib.buttons
    20 import wx.lib.buttons
    21 
    21 
    22 from plcopen.structures import IEC_KEYWORDS, TestIdentifier
    22 from plcopen.structures import IEC_KEYWORDS, TestIdentifier
    23 from controls import CustomGrid, CustomTable, FolderTree
    23 from controls import CustomGrid, CustomTable, FolderTree
    24 from controls.CustomStyledTextCtrl import NAVIGATION_KEYS
    24 from controls.CustomStyledTextCtrl import NAVIGATION_KEYS
    79 
    79 
    80         self.VariablesFilter = wx.ComboBox(parent, style=wx.TE_PROCESS_ENTER)
    80         self.VariablesFilter = wx.ComboBox(parent, style=wx.TE_PROCESS_ENTER)
    81         self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged)
    81         self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged)
    82         self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged)
    82         self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged)
    83         self.VariablesFilter.Bind(wx.EVT_CHAR, self.OnVariablesFilterKeyDown)
    83         self.VariablesFilter.Bind(wx.EVT_CHAR, self.OnVariablesFilterKeyDown)
    84         self.AddWindow(self.VariablesFilter, flag=wx.GROW)
    84         self.Add(self.VariablesFilter, flag=wx.GROW)
    85 
    85 
    86         self.VariablesGrid = wx.gizmos.TreeListCtrl(parent,
    86         self.VariablesGrid = wx.adv.TreeListCtrl(parent,
    87                                                     style=wx.TR_DEFAULT_STYLE |
    87                                                     style=wx.TR_DEFAULT_STYLE |
    88                                                     wx.TR_ROW_LINES |
    88                                                     wx.TR_ROW_LINES |
    89                                                     wx.TR_COLUMN_LINES |
    89                                                     wx.TR_COLUMN_LINES |
    90                                                     wx.TR_HIDE_ROOT |
    90                                                     wx.TR_HIDE_ROOT |
    91                                                     wx.TR_FULL_ROW_HIGHLIGHT)
    91                                                     wx.TR_FULL_ROW_HIGHLIGHT)
    92         self.VariablesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
    92         self.VariablesGrid.GetMainWindow().Bind(wx.EVT_LEFT_DOWN,
    93                                                 self.OnVariablesGridLeftClick)
    93                                                 self.OnVariablesGridLeftClick)
    94         self.AddWindow(self.VariablesGrid, flag=wx.GROW)
    94         self.Add(self.VariablesGrid, flag=wx.GROW)
    95 
    95 
    96         self.Filters = []
    96         self.Filters = []
    97         for desc, value in VARIABLES_FILTERS:
    97         for desc, value in VARIABLES_FILTERS:
    98             self.VariablesFilter.Append(desc)
    98             self.VariablesFilter.Append(desc)
    99             self.Filters.append(value)
    99             self.Filters.append(value)
   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.Add(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.Add(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
   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)
   310 
   310 
   311         self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self)
   311         self.EtherCATManagementTreebook = EtherCATManagementTreebook(self.EtherCATManagementEditor, self.Controler, self)
   312 
   312 
   313         self.EtherCATManagermentEditor_Main_Sizer.AddSizer(self.EtherCATManagementTreebook, border=10, flag=wx.GROW)
   313         self.EtherCATManagermentEditor_Main_Sizer.Add(self.EtherCATManagementTreebook, border=10, flag=wx.GROW)
   314 
   314 
   315         self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer)
   315         self.EtherCATManagementEditor.SetSizer(self.EtherCATManagermentEditor_Main_Sizer)
   316         return self.EtherCATManagementEditor
   316         return self.EtherCATManagementEditor
   317 
   317 
   318     def OnResize(self, event):
   318     def OnResize(self, event):
   615 
   615 
   616         self.MasterStateEditor_Panel_Main_Sizer = wx.BoxSizer(wx.VERTICAL)
   616         self.MasterStateEditor_Panel_Main_Sizer = wx.BoxSizer(wx.VERTICAL)
   617 
   617 
   618         self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler)
   618         self.MasterStateEditor_Panel = MasterStatePanelClass(self.MasterStateEditor, self.Controler)
   619 
   619 
   620         self.MasterStateEditor_Panel_Main_Sizer.AddSizer(self.MasterStateEditor_Panel, border=10, flag=wx.GROW)
   620         self.MasterStateEditor_Panel_Main_Sizer.Add(self.MasterStateEditor_Panel, border=10, flag=wx.GROW)
   621 
   621 
   622         self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer)
   622         self.MasterStateEditor.SetSizer(self.MasterStateEditor_Panel_Main_Sizer)
   623         return self.MasterStateEditor
   623         return self.MasterStateEditor
   624 
   624 
   625     def OnResize2(self, event):
   625     def OnResize2(self, event):
   649 
   649 
   650         process_variables_header = wx.BoxSizer(wx.HORIZONTAL)
   650         process_variables_header = wx.BoxSizer(wx.HORIZONTAL)
   651 
   651 
   652         process_variables_label = wx.StaticText(self.EthercatMasterEditor,
   652         process_variables_label = wx.StaticText(self.EthercatMasterEditor,
   653                                                 label=_("Process variables mapped between nodes:"))
   653                                                 label=_("Process variables mapped between nodes:"))
   654         process_variables_header.AddWindow(process_variables_label, 1,
   654         process_variables_header.Add(process_variables_label, 1,
   655                                            flag=wx.ALIGN_CENTER_VERTICAL)
   655                                            flag=wx.ALIGN_CENTER_VERTICAL)
   656 
   656 
   657         for name, bitmap, help in [
   657         for name, bitmap, help in [
   658                 ("AddVariableButton", "add_element", _("Add process variable")),
   658                 ("AddVariableButton", "add_element", _("Add process variable")),
   659                 ("DeleteVariableButton", "remove_element", _("Remove process variable")),
   659                 ("DeleteVariableButton", "remove_element", _("Remove process variable")),
   660                 ("UpVariableButton", "up", _("Move process variable up")),
   660                 ("UpVariableButton", "up", _("Move process variable up")),
   661                 ("DownVariableButton", "down", _("Move process variable down"))]:
   661                 ("DownVariableButton", "down", _("Move process variable down"))]:
   662             button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
   662             button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
   663                                                     size=wx.Size(28, 28), style=wx.NO_BORDER)
   663                                                     size=wx.Size(28, 28), style=wx.NO_BORDER)
   664             button.SetToolTipString(help)
   664             button.SetToolTip(help)
   665             setattr(self, name, button)
   665             setattr(self, name, button)
   666             process_variables_header.AddWindow(button, border=5, flag=wx.LEFT)
   666             process_variables_header.Add(button, border=5, flag=wx.LEFT)
   667 
   667 
   668         self.ProcessVariablesGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   668         self.ProcessVariablesGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   669         self.ProcessVariablesGrid.SetMinSize(wx.Size(0, 150))
   669         self.ProcessVariablesGrid.SetMinSize(wx.Size(0, 150))
   670         self.ProcessVariablesGrid.SetDropTarget(ProcessVariableDropTarget(self))
   670         self.ProcessVariablesGrid.SetDropTarget(ProcessVariableDropTarget(self))
   671         self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
   671         self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
   672                                        self.OnProcessVariablesGridCellChange)
   672                                        self.OnProcessVariablesGridCellChange)
   673         self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
   673         self.ProcessVariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK,
   674                                        self.OnProcessVariablesGridCellLeftClick)
   674                                        self.OnProcessVariablesGridCellLeftClick)
   675         self.ProcessVariablesGrid.Bind(wx.EVT_KEY_DOWN, self.OnProcessVariablesGridKeyDown)
   675         self.ProcessVariablesGrid.Bind(wx.EVT_KEY_DOWN, self.OnProcessVariablesGridKeyDown)
   676 
   676 
   677         startup_commands_header = wx.BoxSizer(wx.HORIZONTAL)
   677         startup_commands_header = wx.BoxSizer(wx.HORIZONTAL)
   678 
   678 
   679         startup_commands_label = wx.StaticText(self.EthercatMasterEditor,
   679         startup_commands_label = wx.StaticText(self.EthercatMasterEditor,
   680                                                label=_("Startup service variables assignments:"))
   680                                                label=_("Startup service variables assignments:"))
   681         startup_commands_header.AddWindow(startup_commands_label, 1,
   681         startup_commands_header.Add(startup_commands_label, 1,
   682                                           flag=wx.ALIGN_CENTER_VERTICAL)
   682                                           flag=wx.ALIGN_CENTER_VERTICAL)
   683 
   683 
   684         for name, bitmap, help in [
   684         for name, bitmap, help in [
   685                 ("AddCommandButton", "add_element", _("Add startup service variable")),
   685                 ("AddCommandButton", "add_element", _("Add startup service variable")),
   686                 ("DeleteCommandButton", "remove_element", _("Remove startup service variable"))]:
   686                 ("DeleteCommandButton", "remove_element", _("Remove startup service variable"))]:
   687             button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
   687             button = wx.lib.buttons.GenBitmapButton(self.EthercatMasterEditor, bitmap=GetBitmap(bitmap),
   688                                                     size=wx.Size(28, 28), style=wx.NO_BORDER)
   688                                                     size=wx.Size(28, 28), style=wx.NO_BORDER)
   689             button.SetToolTipString(help)
   689             button.SetToolTip(help)
   690             setattr(self, name, button)
   690             setattr(self, name, button)
   691             startup_commands_header.AddWindow(button, border=5, flag=wx.LEFT)
   691             startup_commands_header.Add(button, border=5, flag=wx.LEFT)
   692 
   692 
   693         self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   693         self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   694         self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
   694         self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
   695         self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
   695         self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
   696         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
   696         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGING,
   697                                       self.OnStartupCommandsGridCellChange)
   697                                       self.OnStartupCommandsGridCellChange)
   698         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
   698         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
   699                                       self.OnStartupCommandsGridEditorShow)
   699                                       self.OnStartupCommandsGridEditorShow)
   700 
   700 
   701         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   701         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   702 
   702 
   703         main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
   703         main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:"))
   704         staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
   704         staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL)
   705         self.EthercatMasterEditorSizer.AddSizer(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
   705         self.EthercatMasterEditorSizer.Add(staticbox_sizer, 0, border=10, flag=wx.GROW | wx.ALL)
   706 
   706 
   707         main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
   707         main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0)
   708         main_staticbox_sizer.AddGrowableCol(0)
   708         main_staticbox_sizer.AddGrowableCol(0)
   709         main_staticbox_sizer.AddGrowableRow(2)
   709         main_staticbox_sizer.AddGrowableRow(2)
   710         main_staticbox_sizer.AddGrowableRow(4)
   710         main_staticbox_sizer.AddGrowableRow(4)
   711         main_staticbox_sizer.AddGrowableRow(5)
   711         main_staticbox_sizer.AddGrowableRow(5)
   712         staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW)
   712         staticbox_sizer.Add(main_staticbox_sizer, 1, flag=wx.GROW)
   713         main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
   713         main_staticbox_sizer.Add(self.NodesFilter, border=5, flag=wx.GROW | wx.ALL)
   714         main_staticbox_sizer.AddSizer(process_variables_header, border=5,
   714         main_staticbox_sizer.Add(process_variables_header, border=5,
   715                                       flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   715                                       flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   716         main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1,
   716         main_staticbox_sizer.Add(self.ProcessVariablesGrid, 1,
   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.AddSizer(startup_commands_header,
   718         main_staticbox_sizer.Add(startup_commands_header,
   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         main_staticbox_sizer.AddWindow(self.StartupCommandsGrid, 1,
   720         main_staticbox_sizer.Add(self.StartupCommandsGrid, 1,
   721                                        border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   721                                        border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   722 
   722 
   723         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   723         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   724         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   724         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   725         second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
   725         second_staticbox_sizer.Add(self.NodesVariables, 1, border=5, flag=wx.GROW | wx.ALL)
   726 
   726 
   727         main_staticbox_sizer.AddSizer(second_staticbox_sizer, 1,
   727         main_staticbox_sizer.Add(second_staticbox_sizer, 1,
   728                                       border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   728                                       border=5, flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM)
   729 
   729 
   730         self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
   730         self.EthercatMasterEditor.SetSizer(self.EthercatMasterEditorSizer)
   731 
   731 
   732         return self.EthercatMasterEditor
   732         return self.EthercatMasterEditor
  1111         self.AddGrowableRow(1)
  1111         self.AddGrowableRow(1)
  1112         self.AddGrowableRow(3)
  1112         self.AddGrowableRow(3)
  1113 
  1113 
  1114         ESI_files_label = wx.StaticText(parent,
  1114         ESI_files_label = wx.StaticText(parent,
  1115                                         label=_("ESI Files:"))
  1115                                         label=_("ESI Files:"))
  1116         self.AddWindow(ESI_files_label, border=10,
  1116         self.Add(ESI_files_label, border=10,
  1117                        flag=wx.TOP | wx.LEFT | wx.RIGHT)
  1117                        flag=wx.TOP | wx.LEFT | wx.RIGHT)
  1118 
  1118 
  1119         folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
  1119         folder_tree_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=1, vgap=0)
  1120         folder_tree_sizer.AddGrowableCol(0)
  1120         folder_tree_sizer.AddGrowableCol(0)
  1121         folder_tree_sizer.AddGrowableRow(0)
  1121         folder_tree_sizer.AddGrowableRow(0)
  1122         self.AddSizer(folder_tree_sizer, border=10,
  1122         self.Add(folder_tree_sizer, border=10,
  1123                       flag=wx.GROW | wx.LEFT | wx.RIGHT)
  1123                       flag=wx.GROW | wx.LEFT | wx.RIGHT)
  1124 
  1124 
  1125         self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
  1125         self.ESIFiles = FolderTree(parent, self.GetPath(), editable=False)
  1126         self.ESIFiles.SetFilter(".xml")
  1126         self.ESIFiles.SetFilter(".xml")
  1127         folder_tree_sizer.AddWindow(self.ESIFiles, flag=wx.GROW)
  1127         folder_tree_sizer.Add(self.ESIFiles, flag=wx.GROW)
  1128 
  1128 
  1129         buttons_sizer = wx.BoxSizer(wx.VERTICAL)
  1129         buttons_sizer = wx.BoxSizer(wx.VERTICAL)
  1130         folder_tree_sizer.AddSizer(buttons_sizer,
  1130         folder_tree_sizer.Add(buttons_sizer,
  1131                                    flag=wx.ALIGN_CENTER_VERTICAL)
  1131                                    flag=wx.ALIGN_CENTER_VERTICAL)
  1132 
  1132 
  1133         for idx, (name, bitmap, help, callback) in enumerate(buttons):
  1133         for idx, (name, bitmap, help, callback) in enumerate(buttons):
  1134             button = wx.lib.buttons.GenBitmapButton(parent,
  1134             button = wx.lib.buttons.GenBitmapButton(parent,
  1135                                                     bitmap=GetBitmap(bitmap),
  1135                                                     bitmap=GetBitmap(bitmap),
  1136                                                     size=wx.Size(28, 28),
  1136                                                     size=wx.Size(28, 28),
  1137                                                     style=wx.NO_BORDER)
  1137                                                     style=wx.NO_BORDER)
  1138             button.SetToolTipString(help)
  1138             button.SetToolTip(help)
  1139             setattr(self, name, button)
  1139             setattr(self, name, button)
  1140             if idx > 0:
  1140             if idx > 0:
  1141                 flag = wx.TOP
  1141                 flag = wx.TOP
  1142             else:
  1142             else:
  1143                 flag = 0
  1143                 flag = 0
  1144             if callback is None:
  1144             if callback is None:
  1145                 callback = getattr(self, "On" + name, None)
  1145                 callback = getattr(self, "On" + name, None)
  1146             if callback is not None:
  1146             if callback is not None:
  1147                 parent.Bind(wx.EVT_BUTTON, callback, button)
  1147                 parent.Bind(wx.EVT_BUTTON, callback, button)
  1148             buttons_sizer.AddWindow(button, border=10, flag=flag)
  1148             buttons_sizer.Add(button, border=10, flag=flag)
  1149 
  1149 
  1150         modules_label = wx.StaticText(parent,
  1150         modules_label = wx.StaticText(parent,
  1151                                       label=_("Modules library:"))
  1151                                       label=_("Modules library:"))
  1152         self.AddSizer(modules_label, border=10,
  1152         self.Add(modules_label, border=10,
  1153                       flag=wx.LEFT | wx.RIGHT)
  1153                       flag=wx.LEFT | wx.RIGHT)
  1154 
  1154 
  1155         self.ModulesGrid = wx.gizmos.TreeListCtrl(parent,
  1155         self.ModulesGrid = wx.adv.TreeListCtrl(parent,
  1156                                                   style=wx.TR_DEFAULT_STYLE |
  1156                                                   style=wx.TR_DEFAULT_STYLE |
  1157                                                   wx.TR_ROW_LINES |
  1157                                                   wx.TR_ROW_LINES |
  1158                                                   wx.TR_COLUMN_LINES |
  1158                                                   wx.TR_COLUMN_LINES |
  1159                                                   wx.TR_HIDE_ROOT |
  1159                                                   wx.TR_HIDE_ROOT |
  1160                                                   wx.TR_FULL_ROW_HIGHLIGHT)
  1160                                                   wx.TR_FULL_ROW_HIGHLIGHT)
  1164                               self.OnModulesGridBeginLabelEdit)
  1164                               self.OnModulesGridBeginLabelEdit)
  1165         self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
  1165         self.ModulesGrid.Bind(wx.EVT_TREE_END_LABEL_EDIT,
  1166                               self.OnModulesGridEndLabelEdit)
  1166                               self.OnModulesGridEndLabelEdit)
  1167         self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
  1167         self.ModulesGrid.GetHeaderWindow().Bind(wx.EVT_MOTION,
  1168                                                 self.OnModulesGridHeaderMotion)
  1168                                                 self.OnModulesGridHeaderMotion)
  1169         self.AddWindow(self.ModulesGrid, border=10,
  1169         self.Add(self.ModulesGrid, border=10,
  1170                        flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1170                        flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1171 
  1171 
  1172         for colname, colsize, colalign in zip(
  1172         for colname, colsize, colalign in zip(
  1173                 [_("Name")] + [param_infos["column_label"]
  1173                 [_("Name")] + [param_infos["column_label"]
  1174                                for _param, param_infos in
  1174                                for _param, param_infos in
  1333             self.ModulesGrid.GetHeaderWindow().SetToolTip(None)
  1333             self.ModulesGrid.GetHeaderWindow().SetToolTip(None)
  1334             self.LastToolTipCol = None
  1334             self.LastToolTipCol = None
  1335         if col > 0 and self.LastToolTipCol != col:
  1335         if col > 0 and self.LastToolTipCol != col:
  1336             self.LastToolTipCol = col
  1336             self.LastToolTipCol = col
  1337             _param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
  1337             _param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1]
  1338             wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString,
  1338             wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTip,
  1339                          param_infos["description"])
  1339                          param_infos["description"])
  1340         event.Skip()
  1340         event.Skip()
  1341 
  1341 
  1342 
  1342 
  1343 class DatabaseManagementDialog(wx.Dialog):
  1343 class DatabaseManagementDialog(wx.Dialog):
  1357             [
  1357             [
  1358                 ("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
  1358                 ("ImportButton", "ImportESI", _("Import file to ESI files database"), None),
  1359                 ("DeleteButton", "remove_element", _("Remove file from database"), None)
  1359                 ("DeleteButton", "remove_element", _("Remove file from database"), None)
  1360             ])
  1360             ])
  1361         self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
  1361         self.DatabaseSizer.SetControlMinSize(wx.Size(0, 0))
  1362         main_sizer.AddSizer(self.DatabaseSizer, border=10,
  1362         main_sizer.Add(self.DatabaseSizer, border=10,
  1363                             flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
  1363                             flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
  1364 
  1364 
  1365         button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
  1365         button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
  1366         button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
  1366         # FIXME: find a way to change buttons label compatible with wxPython 4.x
  1367         button_sizer.GetCancelButton().SetLabel(_("Close"))
  1367         # button_sizer.GetAffirmativeButton().SetLabel(_("Add file to project"))
  1368         main_sizer.AddSizer(button_sizer, border=10,
  1368         # button_sizer.GetCancelButton().SetLabel(_("Close"))
       
  1369         main_sizer.Add(button_sizer, border=10,
  1369                             flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1370                             flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
  1370 
  1371 
  1371         self.SetSizer(main_sizer)
  1372         self.SetSizer(main_sizer)
  1372 
  1373 
  1373         self.DatabaseSizer.RefreshView()
  1374         self.DatabaseSizer.RefreshView()