diff -r 95a0a427f3ef -r 131ea7f237b9 DataTypeEditor.py --- a/DataTypeEditor.py Fri Jun 15 18:03:25 2012 +0200 +++ b/DataTypeEditor.py Mon Jun 25 20:03:53 2012 +0200 @@ -22,31 +22,39 @@ #License along with this library; if not, write to the Free Software #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +import re + import wx import wx.grid +import wx.lib.buttons from plcopen.structures import IEC_KEYWORDS, TestIdentifier from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD from controls import CustomEditableListBox, CustomGrid, CustomTable, EditorPanel - -import re +from utils.BitmapLibrary import GetBitmap + +#------------------------------------------------------------------------------- +# Helpers +#------------------------------------------------------------------------------- DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$") def AppendMenu(parent, help, id, kind, text): - if wx.VERSION >= (2, 6, 0): - parent.Append(help=help, id=id, kind=kind, text=text) - else: - parent.Append(helpString=help, id=id, kind=kind, item=text) + parent.Append(help=help, id=id, kind=kind, text=text) + +def GetElementsTableColnames(): + _ = lambda x : x + return ["#", _("Name"), _("Type"), _("Initial Value")] + +def GetDatatypeTypes(): + _ = lambda x : x + return [_("Directly"), _("Subrange"), _("Enumerated"), _("Array"), _("Structure")] +DATATYPE_TYPES_DICT = dict([(_(datatype), datatype) for datatype in GetDatatypeTypes()]) #------------------------------------------------------------------------------- # Structure Elements Table #------------------------------------------------------------------------------- -def GetElementsTableColnames(): - _ = lambda x : x - return ["#", _("Name"), _("Type"), _("Initial Value")] - class ElementsTable(CustomTable): """ @@ -121,329 +129,240 @@ # Datatype Editor class #------------------------------------------------------------------------------- -[ID_DATATYPEEDITOR, ID_DATATYPEEDITORPANEL, ID_DATATYPEEDITORSTATICBOX, - ID_DATATYPEEDITORDERIVATIONTYPE, ID_DATATYPEEDITORDIRECTLYPANEL, - ID_DATATYPEEDITORSUBRANGEPANEL, ID_DATATYPEEDITORDIRECTLYBASETYPE, - ID_DATATYPEEDITORSUBRANGEBASETYPE, ID_DATATYPEEDITORSUBRANGEMINIMUM, - ID_DATATYPEEDITORSUBRANGEMAXIMUM, ID_DATATYPEEDITORDIRECTLYINITIALVALUE, - ID_DATATYPEEDITORSUBRANGEINITIALVALUE, ID_DATATYPEEDITORENUMERATEDPANEL, - ID_DATATYPEEDITORENUMERATEDVALUES, ID_DATATYPEEDITORENUMERATEDINITIALVALUE, - ID_DATATYPEEDITORARRAYPANEL, ID_DATATYPEEDITORARRAYBASETYPE, - ID_DATATYPEEDITORARRAYDIMENSIONS, ID_DATATYPEEDITORARRAYINITIALVALUE, - ID_DATATYPEEDITORSTRUCTUREPANEL, ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, - ID_DATATYPEEDITORSTRUCTUREADDBUTTON, ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, - ID_DATATYPEEDITORSTRUCTUREUPBUTTON, ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, - ID_DATATYPEEDITORSTATICTEXT1, ID_DATATYPEEDITORSTATICTEXT2, - ID_DATATYPEEDITORSTATICTEXT3, ID_DATATYPEEDITORSTATICTEXT4, - ID_DATATYPEEDITORSTATICTEXT5, ID_DATATYPEEDITORSTATICTEXT6, - ID_DATATYPEEDITORSTATICTEXT7, ID_DATATYPEEDITORSTATICTEXT8, - ID_DATATYPEEDITORSTATICTEXT9, ID_DATATYPEEDITORSTATICTEXT10, - ID_DATATYPEEDITORSTATICTEXT11, -] = [wx.NewId() for _init_ctrls in range(36)] - -def GetDatatypeTypes(): - _ = lambda x : x - return [_("Directly"), _("Subrange"), _("Enumerated"), _("Array"), _("Structure")] -DATATYPE_TYPES_DICT = dict([(_(datatype), datatype) for datatype in GetDatatypeTypes()]) - class DataTypeEditor(EditorPanel): - ID = ID_DATATYPEEDITOR - - def _init_coll_MainSizer_Items(self, parent): - parent.AddSizer(self.TopSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) - parent.AddSizer(self.TypeInfosSizer, 0, border=5, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) - - def _init_coll_MainSizer_Growables(self, parent): - parent.AddGrowableCol(0) - parent.AddGrowableRow(1) - - def _init_coll_TopSizer_Items(self, parent): - parent.AddWindow(self.staticText1, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT) - parent.AddWindow(self.DerivationType, 0, border=5, flag=wx.GROW|wx.RIGHT) - - def _init_coll_TypeInfosSizer_Items(self, parent): - parent.AddWindow(self.DirectlyPanel, 1, border=0, flag=wx.ALL) - parent.AddWindow(self.SubrangePanel, 1, border=0, flag=wx.ALL) - parent.AddWindow(self.EnumeratedPanel, 1, border=0, flag=wx.GROW|wx.ALL) - parent.AddWindow(self.ArrayPanel, 1, border=0, flag=wx.ALL) - parent.AddWindow(self.StructurePanel, 1, border=0, flag=wx.GROW|wx.ALL) - - def _init_coll_DirectlyPanelSizer_Items(self, parent): - parent.AddWindow(self.staticText2, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.DirectlyBaseType, 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(self.staticText3, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.DirectlyInitialValue, 1, border=5, flag=wx.ALL) - - def _init_coll_SubrangePanelSizer_Items(self, parent): - parent.AddWindow(self.staticText4, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.SubrangeBaseType, 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(self.staticText5, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.SubrangeInitialValue, 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(self.staticText6, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.SubrangeMinimum, 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(wx.Size(0, 0), 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(wx.Size(0, 0), 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddWindow(self.staticText7, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.SubrangeMaximum, 1, border=5, flag=wx.GROW|wx.ALL) - - def _init_coll_EnumeratedPanelSizer_Items(self, parent): - parent.AddWindow(self.EnumeratedValues, 1, border=5, flag=wx.GROW|wx.ALL) - parent.AddSizer(self.EnumeratedPanelRightSizer, 1, border=0, flag=0) - - def _init_coll_EnumeratedPanelRightSizer_Items(self, parent): - parent.AddWindow(self.staticText8, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.EnumeratedInitialValue, 1, border=5, flag=wx.ALL) - - def _init_coll_ArrayPanelSizer_Items(self, parent): - parent.AddSizer(self.ArrayPanelLeftSizer, 0, border=0, flag=wx.GROW) - parent.AddSizer(self.ArrayPanelRightSizer, 0, border=0, flag=wx.GROW) - parent.AddWindow(self.ArrayDimensions, 0, border=5, flag=wx.GROW|wx.ALL) - - def _init_coll_ArrayPanelSizer_Growables(self, parent): - parent.AddGrowableCol(0) - parent.AddGrowableCol(1) - parent.AddGrowableRow(1) - - def _init_coll_ArrayPanelLeftSizer_Items(self, parent): - parent.AddWindow(self.staticText9, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.ArrayBaseType, 1, border=5, flag=wx.GROW|wx.ALL) - - def _init_coll_ArrayPanelRightSizer_Items(self, parent): - parent.AddWindow(self.staticText10, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) - parent.AddWindow(self.ArrayInitialValue, 1, border=5, flag=wx.ALL) - - def _init_coll_StructurePanelSizer_Items(self, parent): - parent.AddSizer(self.StructurePanelButtonSizer, 0, border=5, flag=wx.ALL|wx.GROW) - parent.AddWindow(self.StructureElementsGrid, 0, border=0, flag=wx.GROW) - - def _init_coll_StructurePanelSizer_Growables(self, parent): - parent.AddGrowableCol(0) - parent.AddGrowableRow(1) - - def _init_coll_StructurePanelButtonSizer_Items(self, parent): - parent.AddWindow(self.staticText11, 0, border=0, flag=wx.ALIGN_BOTTOM) - parent.AddWindow(self.StructureAddButton, 0, border=0, flag=0) - parent.AddWindow(self.StructureDeleteButton, 0, border=0, flag=0) - parent.AddWindow(self.StructureUpButton, 0, border=0, flag=0) - parent.AddWindow(self.StructureDownButton, 0, border=0, flag=0) - - def _init_coll_StructurePanelButtonSizer_Growables(self, parent): - parent.AddGrowableCol(0) - parent.AddGrowableRow(0) - - def _init_sizers(self): + def _init_Editor(self, parent): + self.Editor = wx.Panel(parent, style=wx.SUNKEN_BORDER) + self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) - self.TopSizer = wx.BoxSizer(wx.HORIZONTAL) - self.TypeInfosSizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL) - self.DirectlyPanelSizer = wx.BoxSizer(wx.HORIZONTAL) - self.SubrangePanelSizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0) - self.EnumeratedPanelSizer = wx.BoxSizer(wx.HORIZONTAL) - self.EnumeratedPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL) - self.ArrayPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) - self.ArrayPanelLeftSizer = wx.BoxSizer(wx.HORIZONTAL) - self.ArrayPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL) - self.StructurePanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) - self.StructurePanelButtonSizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) - - self._init_coll_MainSizer_Items(self.MainSizer) - self._init_coll_MainSizer_Growables(self.MainSizer) - self._init_coll_TopSizer_Items(self.TopSizer) - self._init_coll_TypeInfosSizer_Items(self.TypeInfosSizer) - self._init_coll_DirectlyPanelSizer_Items(self.DirectlyPanelSizer) - self._init_coll_SubrangePanelSizer_Items(self.SubrangePanelSizer) - self._init_coll_EnumeratedPanelSizer_Items(self.EnumeratedPanelSizer) - self._init_coll_EnumeratedPanelRightSizer_Items(self.EnumeratedPanelRightSizer) - self._init_coll_ArrayPanelSizer_Items(self.ArrayPanelSizer) - self._init_coll_ArrayPanelSizer_Growables(self.ArrayPanelSizer) - self._init_coll_ArrayPanelLeftSizer_Items(self.ArrayPanelLeftSizer) - self._init_coll_ArrayPanelRightSizer_Items(self.ArrayPanelRightSizer) - self._init_coll_StructurePanelSizer_Items(self.StructurePanelSizer) - self._init_coll_StructurePanelSizer_Growables(self.StructurePanelSizer) - self._init_coll_StructurePanelButtonSizer_Items(self.StructurePanelButtonSizer) - self._init_coll_StructurePanelButtonSizer_Growables(self.StructurePanelButtonSizer) - - self.Editor.SetSizer(self.MainSizer) - self.DirectlyPanel.SetSizer(self.DirectlyPanelSizer) - self.SubrangePanel.SetSizer(self.SubrangePanelSizer) - self.EnumeratedPanel.SetSizer(self.EnumeratedPanelSizer) - self.ArrayPanel.SetSizer(self.ArrayPanelSizer) - self.StructurePanel.SetSizer(self.StructurePanelSizer) - - def _init_Editor(self, prnt): - self.Editor = wx.Panel(id=ID_DATATYPEEDITORPANEL, name='', parent=prnt, - size=wx.Size(0, 0), style=wx.SUNKEN_BORDER) - - self.staticbox = wx.StaticBox(id=ID_DATATYPEEDITORSTATICBOX, - label=_('Type infos:'), name='staticBox1', parent=self.Editor, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.staticText1 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT1, - label=_('Derivation Type:'), name='staticText1', parent=self.Editor, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.DerivationType = wx.ComboBox(id=ID_DATATYPEEDITORDERIVATIONTYPE, - name='DerivationType', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(200, 28), style=wx.CB_READONLY) - self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, id=ID_DATATYPEEDITORDERIVATIONTYPE) - + self.MainSizer.AddGrowableCol(0) + self.MainSizer.AddGrowableRow(1) + + top_sizer = wx.BoxSizer(wx.HORIZONTAL) + self.MainSizer.AddSizer(top_sizer, border=5, + flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) + + derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:')) + top_sizer.AddWindow(derivation_type_label, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT) + + self.DerivationType = wx.ComboBox(self.Editor, + size=wx.Size(200, -1), style=wx.CB_READONLY) + self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType) + top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW|wx.RIGHT) + + typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:')) + typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL) + self.MainSizer.AddSizer(typeinfos_sizer, border=5, + flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) + # Panel for Directly derived data types - self.DirectlyPanel = wx.Panel(id=ID_DATATYPEEDITORDIRECTLYPANEL, - name='DirectlyPanel', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - - self.staticText2 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT2, - label=_('Base Type:'), name='staticText2', parent=self.DirectlyPanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.DirectlyBaseType = wx.ComboBox(id=ID_DATATYPEEDITORDIRECTLYBASETYPE, - name='DirectlyBaseType', parent=self.DirectlyPanel, pos=wx.Point(0, 0), - size=wx.Size(0, 28), style=wx.CB_READONLY) - self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORDIRECTLYBASETYPE) - - self.staticText3 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT3, - label=_('Initial Value:'), name='staticText3', parent=self.DirectlyPanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.DirectlyInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE, - name='DirectlyInitialValue', parent=self.DirectlyPanel, pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_MULTILINE|wx.TE_RICH) - self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE) - + self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) + typeinfos_sizer.AddWindow(self.DirectlyPanel, 1) + + directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) + + directly_basetype_label = wx.StaticText(self.DirectlyPanel, + label=_('Base Type:')) + directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY) + self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyPanel) + directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5, + flag=wx.GROW|wx.ALL) + + directly_initialvalue_label = wx.StaticText(self.DirectlyPanel, + label=_('Initial Value:')) + directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel, + style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_RICH) + self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue) + directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5, + flag=wx.ALL) + + self.DirectlyPanel.SetSizer(directly_panel_sizer) + # Panel for Subrange data types - self.SubrangePanel = wx.Panel(id=ID_DATATYPEEDITORSUBRANGEPANEL, - name='SubrangePanel', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - - self.staticText4 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT4, - label=_('Base Type:'), name='staticText4', parent=self.SubrangePanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.SubrangeBaseType = wx.ComboBox(id=ID_DATATYPEEDITORSUBRANGEBASETYPE, - name='SubrangeBaseType', parent=self.SubrangePanel, pos=wx.Point(0, 0), - size=wx.Size(0, 28), style=wx.CB_READONLY) - self.SubrangeBaseType.SetBackgroundColour(wx.BLUE) - self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged, id=ID_DATATYPEEDITORSUBRANGEBASETYPE) - - self.staticText5 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT5, - label=_('Initial Value:'), name='staticText5', parent=self.SubrangePanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.SubrangeInitialValue = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEINITIALVALUE, - name='SubrangeInitialValue', parent=self.SubrangePanel, pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL) - self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, id=ID_DATATYPEEDITORSUBRANGEINITIALVALUE) - - self.staticText6 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT6, - label=_('Minimum:'), name='staticText6', parent=self.SubrangePanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.SubrangeMinimum = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEMINIMUM, - name='SubrangeMinimum', parent=self.SubrangePanel, pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL) - self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, id=ID_DATATYPEEDITORSUBRANGEMINIMUM) - - self.staticText7 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT7, - label=_('Maximum:'), name='staticText7', parent=self.SubrangePanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.SubrangeMaximum = wx.SpinCtrl(id=ID_DATATYPEEDITORSUBRANGEMAXIMUM, - name='SubrangeMaximum', parent=self.SubrangePanel, pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL) - self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, id=ID_DATATYPEEDITORSUBRANGEMAXIMUM) - + self.SubrangePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) + typeinfos_sizer.AddWindow(self.SubrangePanel, 1) + + subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0) + + subrange_basetype_label = wx.StaticText(self.SubrangePanel, + label=_('Base Type:')) + subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY) + self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged, + self.SubrangeBaseType) + subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5, + flag=wx.GROW|wx.ALL) + + subrange_initialvalue_label = wx.StaticText(self.SubrangePanel, + label=_('Initial Value:')) + subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel, + style=wx.TAB_TRAVERSAL) + self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue) + subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5, + flag=wx.GROW|wx.ALL) + + subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:')) + subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) + self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum) + subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5, + flag=wx.GROW|wx.ALL) + + for i in xrange(2): + subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1) + + subrange_maximum_label = wx.StaticText(self.SubrangePanel, + label=_('Maximum:')) + subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) + self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum) + + subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5, + flag=wx.GROW|wx.ALL) + + self.SubrangePanel.SetSizer(subrange_panel_sizer) + # Panel for Enumerated data types - - self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL, - name='EnumeratedPanel', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - - self.EnumeratedValues = CustomEditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, - name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) + + self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) + typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1) + + enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) + + self.EnumeratedValues = CustomEditableListBox(self.EnumeratedPanel, + label=_("Values:"), style=wx.gizmos.EL_ALLOW_NEW| + wx.gizmos.EL_ALLOW_EDIT| + wx.gizmos.EL_ALLOW_DELETE) setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit) for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged) - - self.staticText8 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT8, - label=_('Initial Value:'), name='staticText8', parent=self.EnumeratedPanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.EnumeratedInitialValue = wx.ComboBox(id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE, - name='EnumeratedInitialValue', parent=self.EnumeratedPanel, pos=wx.Point(0, 0), - size=wx.Size(0, 28), style=wx.CB_READONLY) - self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE) + enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5, + flag=wx.GROW|wx.ALL) + + enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) + enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1) + + enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel, + label=_('Initial Value:')) + enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1, + border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel, + style=wx.CB_READONLY) + self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue) + enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1, + border=5, flag=wx.ALL) + + self.EnumeratedPanel.SetSizer(enumerated_panel_sizer) # Panel for Array data types - self.ArrayPanel = wx.Panel(id=ID_DATATYPEEDITORARRAYPANEL, - name='ArrayPanel', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - - self.staticText9 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT9, - label=_('Base Type:'), name='staticText9', parent=self.ArrayPanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.ArrayBaseType = wx.ComboBox(id=ID_DATATYPEEDITORARRAYBASETYPE, - name='ArrayBaseType', parent=self.ArrayPanel, pos=wx.Point(0, 0), - size=wx.Size(0, 28), style=wx.CB_READONLY) - self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORARRAYBASETYPE) - - self.ArrayDimensions = CustomEditableListBox(id=ID_DATATYPEEDITORARRAYDIMENSIONS, - name='ArrayDimensions', parent=self.ArrayPanel, label=_("Dimensions:"), pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) - for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: + self.ArrayPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) + typeinfos_sizer.AddWindow(self.ArrayPanel, 1) + + array_panel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) + array_panel_sizer.AddGrowableCol(0) + array_panel_sizer.AddGrowableCol(1) + array_panel_sizer.AddGrowableRow(1) + + array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL) + array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW) + + array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:')) + array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY) + self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType) + array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5, + flag=wx.GROW|wx.ALL) + + array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) + array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW) + + array_initialvalue_label = wx.StaticText(self.ArrayPanel, + label=_('Initial Value:')) + array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5, + flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) + + self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel, + style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_RICH) + self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue) + array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5, + flag=wx.ALL) + + self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel, + label=_("Dimensions:"), style=wx.gizmos.EL_ALLOW_NEW| + wx.gizmos.EL_ALLOW_EDIT| + wx.gizmos.EL_ALLOW_DELETE) + for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton", + "_OnUpButton", "_OnDownButton"]: setattr(self.EnumeratedValues, func, self.OnDimensionsChanged) - - self.staticText10 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT10, - label=_('Initial Value:'), name='staticText10', parent=self.ArrayPanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.ArrayInitialValue = wx.TextCtrl(id=ID_DATATYPEEDITORARRAYINITIALVALUE, - name='ArrayInitialValue', parent=self.ArrayPanel, pos=wx.Point(0, 0), - size=wx.Size(0, 24), style=wx.TAB_TRAVERSAL|wx.TE_PROCESS_ENTER|wx.TE_MULTILINE|wx.TE_RICH) - self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORARRAYINITIALVALUE) + array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5, + flag=wx.GROW|wx.ALL) + + self.ArrayPanel.SetSizer(array_panel_sizer) # Panel for Structure data types - self.StructurePanel = wx.Panel(id=ID_DATATYPEEDITORSTRUCTUREPANEL, - name='StructurePanel', parent=self.Editor, pos=wx.Point(0, 0), - size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) - - self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11, - label=_('Elements :'), name='staticText11', parent=self.StructurePanel, - pos=wx.Point(0, 0), size=wx.DefaultSize, style=0) - - self.StructureElementsGrid = CustomGrid(id=ID_DATATYPEEDITORSTRUCTUREELEMENTSGRID, - name='StructureElementsGrid', parent=self.StructurePanel, pos=wx.Point(0, 0), + self.StructurePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) + typeinfos_sizer.AddWindow(self.StructurePanel, 1) + + structure_panel_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) + structure_panel_sizer.AddGrowableCol(0) + structure_panel_sizer.AddGrowableRow(1) + + structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) + structure_button_sizer.AddGrowableCol(0) + structure_button_sizer.AddGrowableRow(0) + structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5, + flag=wx.ALL|wx.GROW) + + structure_elements_label = wx.StaticText(self.StructurePanel, + label=_('Elements :')) + structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM) + + for name, bitmap, help in [ + ("StructureAddButton", "add_element", _("Add element")), + ("StructureDeleteButton", "remove_element", _("Remove element")), + ("StructureUpButton", "up", _("Move element up")), + ("StructureDownButton", "down", _("Move element down"))]: + button = wx.lib.buttons.GenBitmapButton(self.StructurePanel, + bitmap=GetBitmap(bitmap), size=wx.Size(28, 28), style=wx.NO_BORDER) + button.SetToolTipString(help) + setattr(self, name, button) + structure_button_sizer.AddWindow(button) + + self.StructureElementsGrid = CustomGrid(self.StructurePanel, size=wx.Size(0, 150), style=wx.VSCROLL) - if wx.VERSION >= (2, 6, 0): - self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnStructureElementsGridCellChange) - self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnStructureElementsGridEditorShown) - else: - wx.grid.EVT_GRID_CELL_CHANGE(self.StructureElementsGrid, self.OnStructureElementsGridCellChange) - wx.grid.EVT_GRID_EDITOR_SHOWN(self.StructureElementsGrid, self.OnStructureElementsGridEditorShown) - - self.StructureAddButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREADDBUTTON, label=_('Add'), - name='StructureAddButton', parent=self.StructurePanel, pos=wx.Point(0, 0), - size=wx.DefaultSize, style=0) - - self.StructureDeleteButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDELETEBUTTON, label=_('Delete'), - name='StructureDeleteButton', parent=self.StructurePanel, pos=wx.Point(0, 0), - size=wx.DefaultSize, style=0) - - self.StructureUpButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREUPBUTTON, label='^', - name='StructureUpButton', parent=self.StructurePanel, pos=wx.Point(0, 0), - size=wx.Size(32, 32), style=0) - - self.StructureDownButton = wx.Button(id=ID_DATATYPEEDITORSTRUCTUREDOWNBUTTON, label='v', - name='StructureDownButton', parent=self.StructurePanel, pos=wx.Point(0, 0), - size=wx.Size(32, 32), style=0) - - self._init_sizers() - + self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, + self.OnStructureElementsGridCellChange) + self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, + self.OnStructureElementsGridEditorShown) + structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW) + + self.StructurePanel.SetSizer(structure_panel_sizer) + + self.Editor.SetSizer(self.MainSizer) + def __init__(self, parent, tagname, window, controler): EditorPanel.__init__(self, parent, tagname, window, controler)