editors/DataTypeEditor.py
changeset 1768 691083b5682a
parent 1762 fcc406143e5b
child 1782 5b6ad7a7fd9d
equal deleted inserted replaced
1767:c74815729afd 1768:691083b5682a
   154         self.MainSizer.AddGrowableCol(0)
   154         self.MainSizer.AddGrowableCol(0)
   155         self.MainSizer.AddGrowableRow(1)
   155         self.MainSizer.AddGrowableRow(1)
   156 
   156 
   157         top_sizer = wx.BoxSizer(wx.HORIZONTAL)
   157         top_sizer = wx.BoxSizer(wx.HORIZONTAL)
   158         self.MainSizer.AddSizer(top_sizer, border=5,
   158         self.MainSizer.AddSizer(top_sizer, border=5,
   159               flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
   159                                 flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
   160 
   160 
   161         derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:'))
   161         derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:'))
   162         top_sizer.AddWindow(derivation_type_label, border=5,
   162         top_sizer.AddWindow(derivation_type_label, border=5,
   163               flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT)
   163                             flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT)
   164 
   164 
   165         self.DerivationType = wx.ComboBox(self.Editor,
   165         self.DerivationType = wx.ComboBox(self.Editor,
   166               size=wx.Size(200, -1), style=wx.CB_READONLY)
   166                                           size=wx.Size(200, -1), style=wx.CB_READONLY)
   167         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType)
   167         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType)
   168         top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW | wx.RIGHT)
   168         top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW | wx.RIGHT)
   169 
   169 
   170         typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:'))
   170         typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:'))
   171         typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL)
   171         typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL)
   172         self.MainSizer.AddSizer(typeinfos_sizer, border=5,
   172         self.MainSizer.AddSizer(typeinfos_sizer, border=5,
   173               flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   173                                 flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   174 
   174 
   175         # Panel for Directly derived data types
   175         # Panel for Directly derived data types
   176 
   176 
   177         self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   177         self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   178         typeinfos_sizer.AddWindow(self.DirectlyPanel, 1)
   178         typeinfos_sizer.AddWindow(self.DirectlyPanel, 1)
   179 
   179 
   180         directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   180         directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   181 
   181 
   182         directly_basetype_label = wx.StaticText(self.DirectlyPanel,
   182         directly_basetype_label = wx.StaticText(self.DirectlyPanel,
   183               label=_('Base Type:'))
   183                                                 label=_('Base Type:'))
   184         directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5,
   184         directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5,
   185               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   185                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   186 
   186 
   187         self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY)
   187         self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY)
   188         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType)
   188         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType)
   189         directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5,
   189         directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5,
   190               flag=wx.GROW | wx.ALL)
   190                                        flag=wx.GROW | wx.ALL)
   191 
   191 
   192         directly_initialvalue_label = wx.StaticText(self.DirectlyPanel,
   192         directly_initialvalue_label = wx.StaticText(self.DirectlyPanel,
   193               label=_('Initial Value:'))
   193                                                     label=_('Initial Value:'))
   194         directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
   194         directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
   195               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   195                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   196 
   196 
   197         self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
   197         self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
   198               style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   198                                                 style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   199         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue)
   199         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue)
   200         directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5,
   200         directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5,
   201               flag=wx.ALL)
   201                                        flag=wx.ALL)
   202 
   202 
   203         self.DirectlyPanel.SetSizer(directly_panel_sizer)
   203         self.DirectlyPanel.SetSizer(directly_panel_sizer)
   204 
   204 
   205         # Panel for Subrange data types
   205         # Panel for Subrange data types
   206 
   206 
   208         typeinfos_sizer.AddWindow(self.SubrangePanel, 1)
   208         typeinfos_sizer.AddWindow(self.SubrangePanel, 1)
   209 
   209 
   210         subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
   210         subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
   211 
   211 
   212         subrange_basetype_label = wx.StaticText(self.SubrangePanel,
   212         subrange_basetype_label = wx.StaticText(self.SubrangePanel,
   213               label=_('Base Type:'))
   213                                                 label=_('Base Type:'))
   214         subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5,
   214         subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5,
   215               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   215                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   216 
   216 
   217         self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY)
   217         self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY)
   218         self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
   218         self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
   219               self.SubrangeBaseType)
   219                   self.SubrangeBaseType)
   220         subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5,
   220         subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5,
   221               flag=wx.GROW | wx.ALL)
   221                                        flag=wx.GROW | wx.ALL)
   222 
   222 
   223         subrange_initialvalue_label = wx.StaticText(self.SubrangePanel,
   223         subrange_initialvalue_label = wx.StaticText(self.SubrangePanel,
   224               label=_('Initial Value:'))
   224                                                     label=_('Initial Value:'))
   225         subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
   225         subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
   226               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   226                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   227 
   227 
   228         self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel,
   228         self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel,
   229               style=wx.TAB_TRAVERSAL)
   229                                                 style=wx.TAB_TRAVERSAL)
   230         self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue)
   230         self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue)
   231         subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5,
   231         subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5,
   232               flag=wx.GROW | wx.ALL)
   232                                        flag=wx.GROW | wx.ALL)
   233 
   233 
   234         subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:'))
   234         subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:'))
   235         subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5,
   235         subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5,
   236               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   236                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   237 
   237 
   238         self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   238         self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   239         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum)
   239         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum)
   240         subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5,
   240         subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5,
   241               flag=wx.GROW | wx.ALL)
   241                                        flag=wx.GROW | wx.ALL)
   242 
   242 
   243         for i in xrange(2):
   243         for i in xrange(2):
   244             subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1)
   244             subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1)
   245 
   245 
   246         subrange_maximum_label = wx.StaticText(self.SubrangePanel,
   246         subrange_maximum_label = wx.StaticText(self.SubrangePanel,
   247               label=_('Maximum:'))
   247                                                label=_('Maximum:'))
   248         subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5,
   248         subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5,
   249               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   249                                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   250 
   250 
   251         self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   251         self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   252         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum)
   252         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum)
   253 
   253 
   254         subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5,
   254         subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5,
   255               flag=wx.GROW | wx.ALL)
   255                                        flag=wx.GROW | wx.ALL)
   256 
   256 
   257         self.SubrangePanel.SetSizer(subrange_panel_sizer)
   257         self.SubrangePanel.SetSizer(subrange_panel_sizer)
   258 
   258 
   259         # Panel for Enumerated data types
   259         # Panel for Enumerated data types
   260 
   260 
   261         self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   261         self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   262         typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1)
   262         typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1)
   263 
   263 
   264         enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   264         enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   265 
   265 
   266         self.EnumeratedValues = CustomEditableListBox(self.EnumeratedPanel,
   266         self.EnumeratedValues = CustomEditableListBox(
   267               label=_("Values:"), style=wx.gizmos.EL_ALLOW_NEW |
   267                 self.EnumeratedPanel,
   268                                         wx.gizmos.EL_ALLOW_EDIT |
   268                 label=_("Values:"),
   269                                         wx.gizmos.EL_ALLOW_DELETE)
   269                 style=(wx.gizmos.EL_ALLOW_NEW |
       
   270                        wx.gizmos.EL_ALLOW_EDIT |
       
   271                        wx.gizmos.EL_ALLOW_DELETE))
   270         setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit)
   272         setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit)
   271         for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]:
   273         for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]:
   272             setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged)
   274             setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged)
   273         enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5,
   275         enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5,
   274               flag=wx.GROW | wx.ALL)
   276                                          flag=wx.GROW | wx.ALL)
   275 
   277 
   276         enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   278         enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   277         enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1)
   279         enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1)
   278 
   280 
   279         enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel,
   281         enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel,
   280               label=_('Initial Value:'))
   282                                                       label=_('Initial Value:'))
   281         enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
   283         enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
   282               border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   284                                               border=5,
       
   285                                               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   283 
   286 
   284         self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel,
   287         self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel,
   285               style=wx.CB_READONLY)
   288                                                   style=wx.CB_READONLY)
   286         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue)
   289         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue)
   287         enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1,
   290         enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1,
   288               border=5, flag=wx.ALL)
   291                                               border=5, flag=wx.ALL)
   289 
   292 
   290         self.EnumeratedPanel.SetSizer(enumerated_panel_sizer)
   293         self.EnumeratedPanel.SetSizer(enumerated_panel_sizer)
   291 
   294 
   292         # Panel for Array data types
   295         # Panel for Array data types
   293 
   296 
   302         array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL)
   305         array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL)
   303         array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW)
   306         array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW)
   304 
   307 
   305         array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:'))
   308         array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:'))
   306         array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5,
   309         array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5,
   307               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   310                                         flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   308 
   311 
   309         self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY)
   312         self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY)
   310         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType)
   313         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType)
   311         array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5,
   314         array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5,
   312               flag=wx.GROW | wx.ALL)
   315                                         flag=wx.GROW | wx.ALL)
   313 
   316 
   314         array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   317         array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   315         array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW)
   318         array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW)
   316 
   319 
   317         array_initialvalue_label = wx.StaticText(self.ArrayPanel,
   320         array_initialvalue_label = wx.StaticText(self.ArrayPanel,
   318               label=_('Initial Value:'))
   321                                                  label=_('Initial Value:'))
   319         array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5,
   322         array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5,
   320               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   323                                          flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   321 
   324 
   322         self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel,
   325         self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel,
   323               style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   326                                              style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   324         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue)
   327         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue)
   325         array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5,
   328         array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5,
   326               flag=wx.ALL)
   329                                          flag=wx.ALL)
   327 
   330 
   328         self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel,
   331         self.ArrayDimensions = CustomEditableListBox(
   329               label=_("Dimensions:"), style=wx.gizmos.EL_ALLOW_NEW |
   332                 self.ArrayPanel,
   330                                             wx.gizmos.EL_ALLOW_EDIT |
   333                 label=_("Dimensions:"),
   331                                             wx.gizmos.EL_ALLOW_DELETE)
   334                 style=(wx.gizmos.EL_ALLOW_NEW |
       
   335                        wx.gizmos.EL_ALLOW_EDIT |
       
   336                        wx.gizmos.EL_ALLOW_DELETE))
   332         for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
   337         for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
   333                      "_OnUpButton", "_OnDownButton"]:
   338                      "_OnUpButton", "_OnDownButton"]:
   334             setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
   339             setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
   335         array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5,
   340         array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5,
   336               flag=wx.GROW | wx.ALL)
   341                                     flag=wx.GROW | wx.ALL)
   337 
   342 
   338         self.ArrayPanel.SetSizer(array_panel_sizer)
   343         self.ArrayPanel.SetSizer(array_panel_sizer)
   339 
   344 
   340         # Panel for Structure data types
   345         # Panel for Structure data types
   341 
   346 
   348 
   353 
   349         structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   354         structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   350         structure_button_sizer.AddGrowableCol(0)
   355         structure_button_sizer.AddGrowableCol(0)
   351         structure_button_sizer.AddGrowableRow(0)
   356         structure_button_sizer.AddGrowableRow(0)
   352         structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5,
   357         structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5,
   353               flag=wx.ALL | wx.GROW)
   358                                        flag=wx.ALL | wx.GROW)
   354 
   359 
   355         structure_elements_label = wx.StaticText(self.StructurePanel,
   360         structure_elements_label = wx.StaticText(self.StructurePanel,
   356               label=_('Elements :'))
   361                                                  label=_('Elements :'))
   357         structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM)
   362         structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM)
   358 
   363 
   359         for name, bitmap, help in [
   364         for name, bitmap, help in [
   360                 ("StructureAddButton", "add_element", _("Add element")),
   365                 ("StructureAddButton", "add_element", _("Add element")),
   361                 ("StructureDeleteButton", "remove_element", _("Remove element")),
   366                 ("StructureDeleteButton", "remove_element", _("Remove element")),
   362                 ("StructureUpButton", "up", _("Move element up")),
   367                 ("StructureUpButton", "up", _("Move element up")),
   363                 ("StructureDownButton", "down", _("Move element down"))]:
   368                 ("StructureDownButton", "down", _("Move element down"))]:
   364             button = wx.lib.buttons.GenBitmapButton(self.StructurePanel,
   369             button = wx.lib.buttons.GenBitmapButton(self.StructurePanel,
   365                   bitmap=GetBitmap(bitmap), size=wx.Size(28, 28), style=wx.NO_BORDER)
   370                                                     bitmap=GetBitmap(bitmap),
       
   371                                                     size=wx.Size(28, 28),
       
   372                                                     style=wx.NO_BORDER)
   366             button.SetToolTipString(help)
   373             button.SetToolTipString(help)
   367             setattr(self, name, button)
   374             setattr(self, name, button)
   368             structure_button_sizer.AddWindow(button)
   375             structure_button_sizer.AddWindow(button)
   369 
   376 
   370         self.StructureElementsGrid = CustomGrid(self.StructurePanel,
   377         self.StructureElementsGrid = CustomGrid(self.StructurePanel,
   371               size=wx.Size(0, 150), style=wx.VSCROLL)
   378                                                 size=wx.Size(0, 150), style=wx.VSCROLL)
   372         self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
   379         self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
   373               self.OnStructureElementsGridCellChange)
   380                                         self.OnStructureElementsGridCellChange)
   374         self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
   381         self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN,
   375               self.OnStructureElementsGridEditorShown)
   382                                         self.OnStructureElementsGridEditorShown)
   376         structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW)
   383         structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW)
   377 
   384 
   378         self.StructurePanel.SetSizer(structure_panel_sizer)
   385         self.StructurePanel.SetSizer(structure_panel_sizer)
   379 
   386 
   380         self.Editor.SetSizer(self.MainSizer)
   387         self.Editor.SetSizer(self.MainSizer)