DataTypeEditor.py
changeset 586 9aa96a36cf33
parent 577 9dbb79722fbc
child 598 510647310137
equal deleted inserted replaced
585:bd8c7a033b17 586:9aa96a36cf33
    25 import wx
    25 import wx
    26 import wx.grid
    26 import wx.grid
    27 
    27 
    28 from plcopen.structures import IEC_KEYWORDS, TestIdentifier
    28 from plcopen.structures import IEC_KEYWORDS, TestIdentifier
    29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD
    29 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD
    30 from controls import CustomEditableListBox, CustomGrid
    30 from controls import CustomEditableListBox, CustomGrid, EditorPanel
    31 
    31 
    32 import re
    32 import re
    33 
    33 
    34 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$")
    34 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$")
    35 
    35 
   229 
   229 
   230 #-------------------------------------------------------------------------------
   230 #-------------------------------------------------------------------------------
   231 #                          Datatype Editor class
   231 #                          Datatype Editor class
   232 #-------------------------------------------------------------------------------
   232 #-------------------------------------------------------------------------------
   233 
   233 
   234 [ID_DATATYPEEDITOR, ID_DATATYPEEDITORSTATICBOX,
   234 [ID_DATATYPEEDITOR, ID_DATATYPEEDITORPANEL, ID_DATATYPEEDITORSTATICBOX,
   235  ID_DATATYPEEDITORDERIVATIONTYPE, ID_DATATYPEEDITORDIRECTLYPANEL,
   235  ID_DATATYPEEDITORDERIVATIONTYPE, ID_DATATYPEEDITORDIRECTLYPANEL,
   236  ID_DATATYPEEDITORSUBRANGEPANEL, ID_DATATYPEEDITORDIRECTLYBASETYPE, 
   236  ID_DATATYPEEDITORSUBRANGEPANEL, ID_DATATYPEEDITORDIRECTLYBASETYPE, 
   237  ID_DATATYPEEDITORSUBRANGEBASETYPE, ID_DATATYPEEDITORSUBRANGEMINIMUM, 
   237  ID_DATATYPEEDITORSUBRANGEBASETYPE, ID_DATATYPEEDITORSUBRANGEMINIMUM, 
   238  ID_DATATYPEEDITORSUBRANGEMAXIMUM, ID_DATATYPEEDITORDIRECTLYINITIALVALUE, 
   238  ID_DATATYPEEDITORSUBRANGEMAXIMUM, ID_DATATYPEEDITORDIRECTLYINITIALVALUE, 
   239  ID_DATATYPEEDITORSUBRANGEINITIALVALUE, ID_DATATYPEEDITORENUMERATEDPANEL,
   239  ID_DATATYPEEDITORSUBRANGEINITIALVALUE, ID_DATATYPEEDITORENUMERATEDPANEL,
   247  ID_DATATYPEEDITORSTATICTEXT3, ID_DATATYPEEDITORSTATICTEXT4, 
   247  ID_DATATYPEEDITORSTATICTEXT3, ID_DATATYPEEDITORSTATICTEXT4, 
   248  ID_DATATYPEEDITORSTATICTEXT5, ID_DATATYPEEDITORSTATICTEXT6, 
   248  ID_DATATYPEEDITORSTATICTEXT5, ID_DATATYPEEDITORSTATICTEXT6, 
   249  ID_DATATYPEEDITORSTATICTEXT7, ID_DATATYPEEDITORSTATICTEXT8,
   249  ID_DATATYPEEDITORSTATICTEXT7, ID_DATATYPEEDITORSTATICTEXT8,
   250  ID_DATATYPEEDITORSTATICTEXT9, ID_DATATYPEEDITORSTATICTEXT10, 
   250  ID_DATATYPEEDITORSTATICTEXT9, ID_DATATYPEEDITORSTATICTEXT10, 
   251  ID_DATATYPEEDITORSTATICTEXT11, 
   251  ID_DATATYPEEDITORSTATICTEXT11, 
   252 ] = [wx.NewId() for _init_ctrls in range(35)]
   252 ] = [wx.NewId() for _init_ctrls in range(36)]
   253 
   253 
   254 def GetDatatypeTypes():
   254 def GetDatatypeTypes():
   255     _ = lambda x : x
   255     _ = lambda x : x
   256     return [_("Directly"), _("Subrange"), _("Enumerated"), _("Array"), _("Structure")]
   256     return [_("Directly"), _("Subrange"), _("Enumerated"), _("Array"), _("Structure")]
   257 DATATYPE_TYPES_DICT = dict([(_(datatype), datatype) for datatype in GetDatatypeTypes()])
   257 DATATYPE_TYPES_DICT = dict([(_(datatype), datatype) for datatype in GetDatatypeTypes()])
   258 
   258 
   259 class DataTypeEditor(wx.Panel):
   259 class DataTypeEditor(EditorPanel):
       
   260     
       
   261     ID = ID_DATATYPEEDITOR
   260     
   262     
   261     def _init_coll_MainSizer_Items(self, parent):
   263     def _init_coll_MainSizer_Items(self, parent):
   262         parent.AddSizer(self.TopSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
   264         parent.AddSizer(self.TopSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
   263         parent.AddSizer(self.TypeInfosSizer, 0, border=5, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   265         parent.AddSizer(self.TypeInfosSizer, 0, border=5, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
   264 
   266 
   320     def _init_coll_ArrayPanelRightSizer_Items(self, parent):
   322     def _init_coll_ArrayPanelRightSizer_Items(self, parent):
   321         parent.AddWindow(self.staticText10, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   323         parent.AddWindow(self.staticText10, 1, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
   322         parent.AddWindow(self.ArrayInitialValue, 1, border=5, flag=wx.ALL)    
   324         parent.AddWindow(self.ArrayInitialValue, 1, border=5, flag=wx.ALL)    
   323 
   325 
   324     def _init_coll_StructurePanelSizer_Items(self, parent):
   326     def _init_coll_StructurePanelSizer_Items(self, parent):
   325         parent.AddWindow(self.staticText11, 0, border=5, flag=wx.ALL)
   327         parent.AddSizer(self.StructurePanelButtonSizer, 0, border=5, flag=wx.ALL|wx.GROW)
   326         parent.AddWindow(self.StructureElementsGrid, 0, border=0, flag=wx.GROW)
   328         parent.AddWindow(self.StructureElementsGrid, 0, border=0, flag=wx.GROW)
   327         parent.AddSizer(self.StructurePanelButtonSizer, 0, border=0, flag=wx.ALIGN_RIGHT)
       
   328         
   329         
   329     def _init_coll_StructurePanelSizer_Growables(self, parent):
   330     def _init_coll_StructurePanelSizer_Growables(self, parent):
   330         parent.AddGrowableCol(0)
   331         parent.AddGrowableCol(0)
   331         parent.AddGrowableRow(1)
   332         parent.AddGrowableRow(1)
   332 
   333     
   333     def _init_coll_StructurePanelButtonSizer_Items(self, parent):
   334     def _init_coll_StructurePanelButtonSizer_Items(self, parent):
   334         parent.AddWindow(self.StructureAddButton, 0, border=5, flag=wx.ALL)
   335         parent.AddWindow(self.staticText11, 0, border=0, flag=wx.ALIGN_BOTTOM)
   335         parent.AddWindow(self.StructureDeleteButton, 0, border=5, flag=wx.ALL)
   336         parent.AddWindow(self.StructureAddButton, 0, border=0, flag=0)
   336         parent.AddWindow(self.StructureUpButton, 0, border=5, flag=wx.ALL)
   337         parent.AddWindow(self.StructureDeleteButton, 0, border=0, flag=0)
   337         parent.AddWindow(self.StructureDownButton, 0, border=5, flag=wx.ALL)
   338         parent.AddWindow(self.StructureUpButton, 0, border=0, flag=0)
   338     
   339         parent.AddWindow(self.StructureDownButton, 0, border=0, flag=0)
       
   340     
       
   341     def _init_coll_StructurePanelButtonSizer_Growables(self, parent):
       
   342         parent.AddGrowableCol(0)
       
   343         parent.AddGrowableRow(0)
       
   344 
   339     def _init_sizers(self):
   345     def _init_sizers(self):
   340         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
   346         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
   341         self.TopSizer = wx.BoxSizer(wx.HORIZONTAL)
   347         self.TopSizer = wx.BoxSizer(wx.HORIZONTAL)
   342         self.TypeInfosSizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL)
   348         self.TypeInfosSizer = wx.StaticBoxSizer(self.staticbox, wx.HORIZONTAL)
   343         self.DirectlyPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
   349         self.DirectlyPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
   345         self.EnumeratedPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
   351         self.EnumeratedPanelSizer = wx.BoxSizer(wx.HORIZONTAL)
   346         self.EnumeratedPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
   352         self.EnumeratedPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
   347         self.ArrayPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
   353         self.ArrayPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0)
   348         self.ArrayPanelLeftSizer = wx.BoxSizer(wx.HORIZONTAL)
   354         self.ArrayPanelLeftSizer = wx.BoxSizer(wx.HORIZONTAL)
   349         self.ArrayPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
   355         self.ArrayPanelRightSizer = wx.BoxSizer(wx.HORIZONTAL)
   350         self.StructurePanelSizer = wx.FlexGridSizer(cols=1, hgap=5, rows=3, vgap=0)
   356         self.StructurePanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
   351         self.StructurePanelButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
   357         self.StructurePanelButtonSizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0)
       
   358         
   352         self._init_coll_MainSizer_Items(self.MainSizer)
   359         self._init_coll_MainSizer_Items(self.MainSizer)
   353         self._init_coll_MainSizer_Growables(self.MainSizer)
   360         self._init_coll_MainSizer_Growables(self.MainSizer)
   354         self._init_coll_TopSizer_Items(self.TopSizer)
   361         self._init_coll_TopSizer_Items(self.TopSizer)
   355         self._init_coll_TypeInfosSizer_Items(self.TypeInfosSizer)
   362         self._init_coll_TypeInfosSizer_Items(self.TypeInfosSizer)
   356         self._init_coll_DirectlyPanelSizer_Items(self.DirectlyPanelSizer)
   363         self._init_coll_DirectlyPanelSizer_Items(self.DirectlyPanelSizer)
   362         self._init_coll_ArrayPanelLeftSizer_Items(self.ArrayPanelLeftSizer)
   369         self._init_coll_ArrayPanelLeftSizer_Items(self.ArrayPanelLeftSizer)
   363         self._init_coll_ArrayPanelRightSizer_Items(self.ArrayPanelRightSizer)
   370         self._init_coll_ArrayPanelRightSizer_Items(self.ArrayPanelRightSizer)
   364         self._init_coll_StructurePanelSizer_Items(self.StructurePanelSizer)
   371         self._init_coll_StructurePanelSizer_Items(self.StructurePanelSizer)
   365         self._init_coll_StructurePanelSizer_Growables(self.StructurePanelSizer)
   372         self._init_coll_StructurePanelSizer_Growables(self.StructurePanelSizer)
   366         self._init_coll_StructurePanelButtonSizer_Items(self.StructurePanelButtonSizer)
   373         self._init_coll_StructurePanelButtonSizer_Items(self.StructurePanelButtonSizer)
   367         
   374         self._init_coll_StructurePanelButtonSizer_Growables(self.StructurePanelButtonSizer)
   368         self.SetSizer(self.MainSizer)
   375         
       
   376         self.Editor.SetSizer(self.MainSizer)
   369         self.DirectlyPanel.SetSizer(self.DirectlyPanelSizer)
   377         self.DirectlyPanel.SetSizer(self.DirectlyPanelSizer)
   370         self.SubrangePanel.SetSizer(self.SubrangePanelSizer)
   378         self.SubrangePanel.SetSizer(self.SubrangePanelSizer)
   371         self.EnumeratedPanel.SetSizer(self.EnumeratedPanelSizer)
   379         self.EnumeratedPanel.SetSizer(self.EnumeratedPanelSizer)
   372         self.ArrayPanel.SetSizer(self.ArrayPanelSizer)
   380         self.ArrayPanel.SetSizer(self.ArrayPanelSizer)
   373         self.StructurePanel.SetSizer(self.StructurePanelSizer)
   381         self.StructurePanel.SetSizer(self.StructurePanelSizer)
   374     
   382     
   375     def _init_ctrls(self, prnt):
   383     def _init_Editor(self, prnt):
   376         wx.Panel.__init__(self, id=ID_DATATYPEEDITOR, name='', parent=prnt,
   384         self.Editor = wx.Panel(id=ID_DATATYPEEDITORPANEL, name='', parent=prnt,
   377               size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
   385               size=wx.Size(0, 0), style=wx.SUNKEN_BORDER)
   378 
   386 
   379         self.staticbox = wx.StaticBox(id=ID_DATATYPEEDITORSTATICBOX,
   387         self.staticbox = wx.StaticBox(id=ID_DATATYPEEDITORSTATICBOX,
   380               label=_('Type infos:'), name='staticBox1', parent=self,
   388               label=_('Type infos:'), name='staticBox1', parent=self.Editor,
   381               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   389               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   382 
   390 
   383         self.staticText1 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT1,
   391         self.staticText1 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT1,
   384               label=_('Derivation Type:'), name='staticText1', parent=self,
   392               label=_('Derivation Type:'), name='staticText1', parent=self.Editor,
   385               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   393               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   386 
   394 
   387         self.DerivationType = wx.ComboBox(id=ID_DATATYPEEDITORDERIVATIONTYPE,
   395         self.DerivationType = wx.ComboBox(id=ID_DATATYPEEDITORDERIVATIONTYPE,
   388               name='DerivationType', parent=self, pos=wx.Point(0, 0),
   396               name='DerivationType', parent=self.Editor, pos=wx.Point(0, 0),
   389               size=wx.Size(200, 28), style=wx.CB_READONLY)
   397               size=wx.Size(200, 28), style=wx.CB_READONLY)
   390         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, id=ID_DATATYPEEDITORDERIVATIONTYPE)
   398         self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, id=ID_DATATYPEEDITORDERIVATIONTYPE)
   391 
   399 
   392         # Panel for Directly derived data types
   400         # Panel for Directly derived data types
   393 
   401 
   394         self.DirectlyPanel = wx.Panel(id=ID_DATATYPEEDITORDIRECTLYPANEL,
   402         self.DirectlyPanel = wx.Panel(id=ID_DATATYPEEDITORDIRECTLYPANEL,
   395               name='DirectlyPanel', parent=self, pos=wx.Point(0, 0),
   403               name='DirectlyPanel', parent=self.Editor, pos=wx.Point(0, 0),
   396               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   404               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   397 
   405 
   398         self.staticText2 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT2,
   406         self.staticText2 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT2,
   399               label=_('Base Type:'), name='staticText2', parent=self.DirectlyPanel,
   407               label=_('Base Type:'), name='staticText2', parent=self.DirectlyPanel,
   400               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   408               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   415         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE)
   423         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORDIRECTLYINITIALVALUE)
   416 
   424 
   417         # Panel for Subrange data types
   425         # Panel for Subrange data types
   418 
   426 
   419         self.SubrangePanel = wx.Panel(id=ID_DATATYPEEDITORSUBRANGEPANEL,
   427         self.SubrangePanel = wx.Panel(id=ID_DATATYPEEDITORSUBRANGEPANEL,
   420               name='SubrangePanel', parent=self, pos=wx.Point(0, 0),
   428               name='SubrangePanel', parent=self.Editor, pos=wx.Point(0, 0),
   421               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   429               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   422 
   430 
   423         self.staticText4 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT4,
   431         self.staticText4 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT4,
   424               label=_('Base Type:'), name='staticText4', parent=self.SubrangePanel,
   432               label=_('Base Type:'), name='staticText4', parent=self.SubrangePanel,
   425               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   433               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   458         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, id=ID_DATATYPEEDITORSUBRANGEMAXIMUM)
   466         self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, id=ID_DATATYPEEDITORSUBRANGEMAXIMUM)
   459 
   467 
   460         # Panel for Enumerated data types
   468         # Panel for Enumerated data types
   461 
   469 
   462         self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL,
   470         self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL,
   463               name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0),
   471               name='EnumeratedPanel', parent=self.Editor, pos=wx.Point(0, 0),
   464               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   472               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   465 
   473 
   466         self.EnumeratedValues = CustomEditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, 
   474         self.EnumeratedValues = CustomEditableListBox(id=ID_DATATYPEEDITORENUMERATEDVALUES, 
   467               name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0),
   475               name='EnumeratedValues', parent=self.EnumeratedPanel, label=_("Values:"), pos=wx.Point(0, 0),
   468               size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE)
   476               size=wx.Size(0, 0), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE)
   479         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE)
   487         self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, id=ID_DATATYPEEDITORENUMERATEDINITIALVALUE)
   480         
   488         
   481         # Panel for Array data types
   489         # Panel for Array data types
   482 
   490 
   483         self.ArrayPanel = wx.Panel(id=ID_DATATYPEEDITORARRAYPANEL,
   491         self.ArrayPanel = wx.Panel(id=ID_DATATYPEEDITORARRAYPANEL,
   484               name='ArrayPanel', parent=self, pos=wx.Point(0, 0),
   492               name='ArrayPanel', parent=self.Editor, pos=wx.Point(0, 0),
   485               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   493               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   486 
   494 
   487         self.staticText9 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT9,
   495         self.staticText9 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT9,
   488               label=_('Base Type:'), name='staticText9', parent=self.ArrayPanel,
   496               label=_('Base Type:'), name='staticText9', parent=self.ArrayPanel,
   489               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   497               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   510         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORARRAYINITIALVALUE)
   518         self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, id=ID_DATATYPEEDITORARRAYINITIALVALUE)
   511         
   519         
   512         # Panel for Structure data types
   520         # Panel for Structure data types
   513         
   521         
   514         self.StructurePanel = wx.Panel(id=ID_DATATYPEEDITORSTRUCTUREPANEL,
   522         self.StructurePanel = wx.Panel(id=ID_DATATYPEEDITORSTRUCTUREPANEL,
   515               name='StructurePanel', parent=self, pos=wx.Point(0, 0),
   523               name='StructurePanel', parent=self.Editor, pos=wx.Point(0, 0),
   516               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   524               size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   517         
   525         
   518         self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11,
   526         self.staticText11 = wx.StaticText(id=ID_DATATYPEEDITORSTATICTEXT11,
   519               label=_('Elements :'), name='staticText11', parent=self.StructurePanel,
   527               label=_('Elements :'), name='staticText11', parent=self.StructurePanel,
   520               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   528               pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
   552               size=wx.Size(32, 32), style=0)
   560               size=wx.Size(32, 32), style=0)
   553         
   561         
   554         self._init_sizers()
   562         self._init_sizers()
   555 
   563 
   556     def __init__(self, parent, tagname, window, controler):
   564     def __init__(self, parent, tagname, window, controler):
   557         self._init_ctrls(parent)
   565         EditorPanel.__init__(self, parent, tagname, window, controler)
   558         
   566         
   559         self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""}
   567         self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""}
   560         self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames())
   568         self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames())
   561         self.StructureColSizes = [40, 150, 100, 250]
   569         self.StructureColSizes = [40, 150, 100, 250]
   562         self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
   570         self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
   605         self.StructurePanel.Hide()
   613         self.StructurePanel.Hide()
   606         self.CurrentPanel = "Directly"
   614         self.CurrentPanel = "Directly"
   607         self.Highlights = []
   615         self.Highlights = []
   608         self.Initializing = False
   616         self.Initializing = False
   609         
   617         
   610         self.ParentWindow = window
       
   611         self.Controler = controler
       
   612         self.TagName = tagname
       
   613         
       
   614         self.HighlightControls = {
   618         self.HighlightControls = {
   615             ("Directly", "base"): self.DirectlyBaseType,
   619             ("Directly", "base"): self.DirectlyBaseType,
   616             ("Directly", "initial"): self.DirectlyInitialValue,
   620             ("Directly", "initial"): self.DirectlyInitialValue,
   617             ("Subrange", "base"): self.SubrangeBaseType,
   621             ("Subrange", "base"): self.SubrangeBaseType,
   618             ("Subrange", "lower"): self.SubrangeMinimum,
   622             ("Subrange", "lower"): self.SubrangeMinimum,
   629         self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
   633         self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
   630         
   634         
   631     def __del__(self):
   635     def __del__(self):
   632         self.RefreshHighlightsTimer.Stop()
   636         self.RefreshHighlightsTimer.Stop()
   633     
   637     
   634     def SetTagName(self, tagname):
   638     def GetBufferState(self):
   635         self.TagName = tagname
   639         return self.Controler.GetBufferState()
   636         
   640         
   637     def GetTagName(self):
   641     def Undo(self):
   638         return self.TagName
   642         self.Controler.LoadPrevious()
   639     
   643         self.ParentWindow.CloseTabsWithoutModel()
   640     def IsViewing(self, tagname):
   644         self.ParentWindow.RefreshEditor()
   641         return self.TagName == tagname
   645             
   642 
   646     def Redo(self):
   643     def IsDebugging(self):
   647         self.Controler.LoadNext()
   644         return False
   648         self.ParentWindow.CloseTabsWithoutModel()
   645 
   649         self.ParentWindow.RefreshEditor()
   646     def SetMode(self, mode):
   650     
   647         pass
   651     def HasNoModel(self):
   648 
   652         return self.Controler.GetEditedElement(self.TagName) is None
   649     def ResetBuffer(self):
   653         
   650         pass
       
   651 
       
   652     def RefreshView(self):
   654     def RefreshView(self):
   653         self.Initializing = True
   655         self.Initializing = True
   654         self.DirectlyBaseType.Clear()
   656         self.DirectlyBaseType.Clear()
   655         self.ArrayBaseType.Clear()
   657         self.ArrayBaseType.Clear()
   656         for datatype in self.Controler.GetDataTypes(self.TagName):
   658         for datatype in self.Controler.GetDataTypes(self.TagName):
   693             self.RefreshDisplayedInfos()
   695             self.RefreshDisplayedInfos()
   694         self.ShowHighlights()
   696         self.ShowHighlights()
   695         self.StructureElementsTable.ResetView(self.StructureElementsGrid)
   697         self.StructureElementsTable.ResetView(self.StructureElementsGrid)
   696         self.StructureElementsGrid.RefreshButtons()
   698         self.StructureElementsGrid.RefreshButtons()
   697         self.Initializing = False
   699         self.Initializing = False
   698 
   700     
   699     def RefreshScaling(self, refresh=True):
       
   700         pass
       
   701 
       
   702     def OnDerivationTypeChanged(self, event):
   701     def OnDerivationTypeChanged(self, event):
   703         self.RefreshDisplayedInfos()
   702         self.RefreshDisplayedInfos()
   704         self.RefreshTypeInfos()
   703         self.RefreshTypeInfos()
   705         event.Skip()
   704         event.Skip()
   706 
   705