editors/DataTypeEditor.py
changeset 1745 f9d32913bad4
parent 1742 92932cd370a4
child 1749 d73b64672238
equal deleted inserted replaced
1744:69dfdb26f600 1745:f9d32913bad4
   151         self.MainSizer.AddGrowableCol(0)
   151         self.MainSizer.AddGrowableCol(0)
   152         self.MainSizer.AddGrowableRow(1)
   152         self.MainSizer.AddGrowableRow(1)
   153 
   153 
   154         top_sizer = wx.BoxSizer(wx.HORIZONTAL)
   154         top_sizer = wx.BoxSizer(wx.HORIZONTAL)
   155         self.MainSizer.AddSizer(top_sizer, border=5,
   155         self.MainSizer.AddSizer(top_sizer, border=5,
   156               flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
   156               flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
   157 
   157 
   158         derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:'))
   158         derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:'))
   159         top_sizer.AddWindow(derivation_type_label, border=5,
   159         top_sizer.AddWindow(derivation_type_label, border=5,
   160               flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT)
   160               flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT)
   161 
   161 
   162         self.DerivationType = wx.ComboBox(self.Editor,
   162         self.DerivationType = wx.ComboBox(self.Editor,
   163               size=wx.Size(200, -1), style=wx.CB_READONLY)
   163               size=wx.Size(200, -1), style=wx.CB_READONLY)
   164         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType)
   164         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType)
   165         top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW|wx.RIGHT)
   165         top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW | wx.RIGHT)
   166 
   166 
   167         typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:'))
   167         typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:'))
   168         typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL)
   168         typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL)
   169         self.MainSizer.AddSizer(typeinfos_sizer, border=5,
   169         self.MainSizer.AddSizer(typeinfos_sizer, border=5,
   170               flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   170               flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   171 
   171 
   172         # Panel for Directly derived data types
   172         # Panel for Directly derived data types
   173 
   173 
   174         self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   174         self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL)
   175         typeinfos_sizer.AddWindow(self.DirectlyPanel, 1)
   175         typeinfos_sizer.AddWindow(self.DirectlyPanel, 1)
   177         directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   177         directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
   178 
   178 
   179         directly_basetype_label = wx.StaticText(self.DirectlyPanel,
   179         directly_basetype_label = wx.StaticText(self.DirectlyPanel,
   180               label=_('Base Type:'))
   180               label=_('Base Type:'))
   181         directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5,
   181         directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5,
   182               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   182               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   183 
   183 
   184         self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY)
   184         self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY)
   185         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType)
   185         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType)
   186         directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5,
   186         directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5,
   187               flag=wx.GROW|wx.ALL)
   187               flag=wx.GROW | wx.ALL)
   188 
   188 
   189         directly_initialvalue_label = wx.StaticText(self.DirectlyPanel,
   189         directly_initialvalue_label = wx.StaticText(self.DirectlyPanel,
   190               label=_('Initial Value:'))
   190               label=_('Initial Value:'))
   191         directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
   191         directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
   192               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   192               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   193 
   193 
   194         self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
   194         self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
   195               style=wx.TE_PROCESS_ENTER|wx.TE_RICH)
   195               style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   196         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue)
   196         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue)
   197         directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5,
   197         directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5,
   198               flag=wx.ALL)
   198               flag=wx.ALL)
   199 
   199 
   200         self.DirectlyPanel.SetSizer(directly_panel_sizer)
   200         self.DirectlyPanel.SetSizer(directly_panel_sizer)
   207         subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
   207         subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0)
   208 
   208 
   209         subrange_basetype_label = wx.StaticText(self.SubrangePanel,
   209         subrange_basetype_label = wx.StaticText(self.SubrangePanel,
   210               label=_('Base Type:'))
   210               label=_('Base Type:'))
   211         subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5,
   211         subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5,
   212               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   212               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   213 
   213 
   214         self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY)
   214         self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY)
   215         self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
   215         self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
   216               self.SubrangeBaseType)
   216               self.SubrangeBaseType)
   217         subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5,
   217         subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5,
   218               flag=wx.GROW|wx.ALL)
   218               flag=wx.GROW | wx.ALL)
   219 
   219 
   220         subrange_initialvalue_label = wx.StaticText(self.SubrangePanel,
   220         subrange_initialvalue_label = wx.StaticText(self.SubrangePanel,
   221               label=_('Initial Value:'))
   221               label=_('Initial Value:'))
   222         subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
   222         subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
   223               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   223               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   224 
   224 
   225         self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel,
   225         self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel,
   226               style=wx.TAB_TRAVERSAL)
   226               style=wx.TAB_TRAVERSAL)
   227         self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue)
   227         self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue)
   228         subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5,
   228         subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5,
   229               flag=wx.GROW|wx.ALL)
   229               flag=wx.GROW | wx.ALL)
   230 
   230 
   231         subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:'))
   231         subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:'))
   232         subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5,
   232         subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5,
   233               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   233               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   234 
   234 
   235         self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   235         self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   236         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum)
   236         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum)
   237         subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5,
   237         subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5,
   238               flag=wx.GROW|wx.ALL)
   238               flag=wx.GROW | wx.ALL)
   239 
   239 
   240         for i in xrange(2):
   240         for i in xrange(2):
   241             subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1)
   241             subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1)
   242 
   242 
   243         subrange_maximum_label = wx.StaticText(self.SubrangePanel,
   243         subrange_maximum_label = wx.StaticText(self.SubrangePanel,
   244               label=_('Maximum:'))
   244               label=_('Maximum:'))
   245         subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5,
   245         subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5,
   246               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   246               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   247 
   247 
   248         self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   248         self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL)
   249         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum)
   249         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum)
   250 
   250 
   251         subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5,
   251         subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5,
   252               flag=wx.GROW|wx.ALL)
   252               flag=wx.GROW | wx.ALL)
   253 
   253 
   254         self.SubrangePanel.SetSizer(subrange_panel_sizer)
   254         self.SubrangePanel.SetSizer(subrange_panel_sizer)
   255 
   255 
   256         # Panel for Enumerated data types
   256         # Panel for Enumerated data types
   257 
   257 
   266                                         wx.gizmos.EL_ALLOW_DELETE)
   266                                         wx.gizmos.EL_ALLOW_DELETE)
   267         setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit)
   267         setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit)
   268         for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]:
   268         for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]:
   269             setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged)
   269             setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged)
   270         enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5,
   270         enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5,
   271               flag=wx.GROW|wx.ALL)
   271               flag=wx.GROW | wx.ALL)
   272 
   272 
   273         enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   273         enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   274         enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1)
   274         enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1)
   275 
   275 
   276         enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel,
   276         enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel,
   277               label=_('Initial Value:'))
   277               label=_('Initial Value:'))
   278         enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
   278         enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
   279               border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   279               border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   280 
   280 
   281         self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel,
   281         self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel,
   282               style=wx.CB_READONLY)
   282               style=wx.CB_READONLY)
   283         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue)
   283         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue)
   284         enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1,
   284         enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1,
   299         array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL)
   299         array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL)
   300         array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW)
   300         array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW)
   301 
   301 
   302         array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:'))
   302         array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:'))
   303         array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5,
   303         array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5,
   304               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   304               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   305 
   305 
   306         self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY)
   306         self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY)
   307         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType)
   307         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType)
   308         array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5,
   308         array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5,
   309               flag=wx.GROW|wx.ALL)
   309               flag=wx.GROW | wx.ALL)
   310 
   310 
   311         array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   311         array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL)
   312         array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW)
   312         array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW)
   313 
   313 
   314         array_initialvalue_label = wx.StaticText(self.ArrayPanel,
   314         array_initialvalue_label = wx.StaticText(self.ArrayPanel,
   315               label=_('Initial Value:'))
   315               label=_('Initial Value:'))
   316         array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5,
   316         array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5,
   317               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   317               flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
   318 
   318 
   319         self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel,
   319         self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel,
   320               style=wx.TE_PROCESS_ENTER|wx.TE_RICH)
   320               style=wx.TE_PROCESS_ENTER | wx.TE_RICH)
   321         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue)
   321         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue)
   322         array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5,
   322         array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5,
   323               flag=wx.ALL)
   323               flag=wx.ALL)
   324 
   324 
   325         self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel,
   325         self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel,
   328                                             wx.gizmos.EL_ALLOW_DELETE)
   328                                             wx.gizmos.EL_ALLOW_DELETE)
   329         for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
   329         for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
   330                      "_OnUpButton", "_OnDownButton"]:
   330                      "_OnUpButton", "_OnDownButton"]:
   331             setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
   331             setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
   332         array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5,
   332         array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5,
   333               flag=wx.GROW|wx.ALL)
   333               flag=wx.GROW | wx.ALL)
   334 
   334 
   335         self.ArrayPanel.SetSizer(array_panel_sizer)
   335         self.ArrayPanel.SetSizer(array_panel_sizer)
   336 
   336 
   337         # Panel for Structure data types
   337         # Panel for Structure data types
   338 
   338 
   345 
   345 
   346         structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   346         structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
   347         structure_button_sizer.AddGrowableCol(0)
   347         structure_button_sizer.AddGrowableCol(0)
   348         structure_button_sizer.AddGrowableRow(0)
   348         structure_button_sizer.AddGrowableRow(0)
   349         structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5,
   349         structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5,
   350               flag=wx.ALL|wx.GROW)
   350               flag=wx.ALL | wx.GROW)
   351 
   351 
   352         structure_elements_label = wx.StaticText(self.StructurePanel,
   352         structure_elements_label = wx.StaticText(self.StructurePanel,
   353               label=_('Elements :'))
   353               label=_('Elements :'))
   354         structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM)
   354         structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM)
   355 
   355 
   550         text = event.GetText()
   550         text = event.GetText()
   551         values = self.EnumeratedValues.GetStrings()
   551         values = self.EnumeratedValues.GetStrings()
   552         index = event.GetIndex()
   552         index = event.GetIndex()
   553         if index >= len(values) or values[index].upper() != text.upper():
   553         if index >= len(values) or values[index].upper() != text.upper():
   554             if text.upper() in [value.upper() for value in values]:
   554             if text.upper() in [value.upper() for value in values]:
   555                 message = wx.MessageDialog(self, _("\"%s\" value already defined!") % text, _("Error"), wx.OK|wx.ICON_ERROR)
   555                 message = wx.MessageDialog(self, _("\"%s\" value already defined!") % text, _("Error"), wx.OK | wx.ICON_ERROR)
   556                 message.ShowModal()
   556                 message.ShowModal()
   557                 message.Destroy()
   557                 message.Destroy()
   558                 event.Veto()
   558                 event.Veto()
   559             elif text.upper() in IEC_KEYWORDS:
   559             elif text.upper() in IEC_KEYWORDS:
   560                 message = wx.MessageDialog(self, _("\"%s\" is a keyword. It can't be used!") % text, _("Error"), wx.OK|wx.ICON_ERROR)
   560                 message = wx.MessageDialog(self, _("\"%s\" is a keyword. It can't be used!") % text, _("Error"), wx.OK | wx.ICON_ERROR)
   561                 message.ShowModal()
   561                 message.ShowModal()
   562                 message.Destroy()
   562                 message.Destroy()
   563             else:
   563             else:
   564                 initial_selected = None
   564                 initial_selected = None
   565                 if index < len(values) and self.EnumeratedInitialValue.GetStringSelection() == values[index]:
   565                 if index < len(values) and self.EnumeratedInitialValue.GetStringSelection() == values[index]:
   574         wx.CallAfter(self.RefreshEnumeratedValues)
   574         wx.CallAfter(self.RefreshEnumeratedValues)
   575         wx.CallAfter(self.RefreshTypeInfos)
   575         wx.CallAfter(self.RefreshTypeInfos)
   576         event.Skip()
   576         event.Skip()
   577 
   577 
   578     def ShowErrorMessage(self, message):
   578     def ShowErrorMessage(self, message):
   579         dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
   579         dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   580         dialog.ShowModal()
   580         dialog.ShowModal()
   581         dialog.Destroy()
   581         dialog.Destroy()
   582 
   582 
   583     def OnStructureElementsGridCellChange(self, event):
   583     def OnStructureElementsGridCellChange(self, event):
   584         row, col = event.GetRow(), event.GetCol()
   584         row, col = event.GetRow(), event.GetCol()
   743             infos["base_type"] = self.ArrayBaseType.GetStringSelection()
   743             infos["base_type"] = self.ArrayBaseType.GetStringSelection()
   744             infos["dimensions"] = []
   744             infos["dimensions"] = []
   745             for dimensions in self.ArrayDimensions.GetStrings():
   745             for dimensions in self.ArrayDimensions.GetStrings():
   746                 result = DIMENSION_MODEL.match(dimensions)
   746                 result = DIMENSION_MODEL.match(dimensions)
   747                 if result is None:
   747                 if result is None:
   748                     message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!") % dimensions, _("Error"), wx.OK|wx.ICON_ERROR)
   748                     message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!") % dimensions, _("Error"), wx.OK | wx.ICON_ERROR)
   749                     message.ShowModal()
   749                     message.ShowModal()
   750                     message.Destroy()
   750                     message.Destroy()
   751                     self.RefreshView()
   751                     self.RefreshView()
   752                     return
   752                     return
   753                 bounds = result.groups()
   753                 bounds = result.groups()
   754                 if int(bounds[0]) >= int(bounds[1]):
   754                 if int(bounds[0]) >= int(bounds[1]):
   755                     message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!\nRight value must be greater than left value.") % dimensions, _("Error"), wx.OK|wx.ICON_ERROR)
   755                     message = wx.MessageDialog(self, _("\"%s\" value isn't a valid array dimension!\nRight value must be greater than left value.") % dimensions, _("Error"), wx.OK | wx.ICON_ERROR)
   756                     message.ShowModal()
   756                     message.ShowModal()
   757                     message.Destroy()
   757                     message.Destroy()
   758                     self.RefreshView()
   758                     self.RefreshView()
   759                     return
   759                     return
   760                 infos["dimensions"].append(bounds)
   760                 infos["dimensions"].append(bounds)