diff -r bd8c7a033b17 -r 9aa96a36cf33 DataTypeEditor.py --- a/DataTypeEditor.py Mon Nov 07 10:55:17 2011 +0100 +++ b/DataTypeEditor.py Tue Nov 08 21:59:22 2011 +0100 @@ -27,7 +27,7 @@ from plcopen.structures import IEC_KEYWORDS, TestIdentifier from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD -from controls import CustomEditableListBox, CustomGrid +from controls import CustomEditableListBox, CustomGrid, EditorPanel import re @@ -231,7 +231,7 @@ # Datatype Editor class #------------------------------------------------------------------------------- -[ID_DATATYPEEDITOR, ID_DATATYPEEDITORSTATICBOX, +[ID_DATATYPEEDITOR, ID_DATATYPEEDITORPANEL, ID_DATATYPEEDITORSTATICBOX, ID_DATATYPEEDITORDERIVATIONTYPE, ID_DATATYPEEDITORDIRECTLYPANEL, ID_DATATYPEEDITORSUBRANGEPANEL, ID_DATATYPEEDITORDIRECTLYBASETYPE, ID_DATATYPEEDITORSUBRANGEBASETYPE, ID_DATATYPEEDITORSUBRANGEMINIMUM, @@ -249,14 +249,16 @@ ID_DATATYPEEDITORSTATICTEXT7, ID_DATATYPEEDITORSTATICTEXT8, ID_DATATYPEEDITORSTATICTEXT9, ID_DATATYPEEDITORSTATICTEXT10, ID_DATATYPEEDITORSTATICTEXT11, -] = [wx.NewId() for _init_ctrls in range(35)] +] = [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(wx.Panel): +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) @@ -322,20 +324,24 @@ parent.AddWindow(self.ArrayInitialValue, 1, border=5, flag=wx.ALL) def _init_coll_StructurePanelSizer_Items(self, parent): - parent.AddWindow(self.staticText11, 0, border=5, flag=wx.ALL) + parent.AddSizer(self.StructurePanelButtonSizer, 0, border=5, flag=wx.ALL|wx.GROW) parent.AddWindow(self.StructureElementsGrid, 0, border=0, flag=wx.GROW) - parent.AddSizer(self.StructurePanelButtonSizer, 0, border=0, flag=wx.ALIGN_RIGHT) def _init_coll_StructurePanelSizer_Growables(self, parent): parent.AddGrowableCol(0) parent.AddGrowableRow(1) - + def _init_coll_StructurePanelButtonSizer_Items(self, parent): - parent.AddWindow(self.StructureAddButton, 0, border=5, flag=wx.ALL) - parent.AddWindow(self.StructureDeleteButton, 0, border=5, flag=wx.ALL) - parent.AddWindow(self.StructureUpButton, 0, border=5, flag=wx.ALL) - parent.AddWindow(self.StructureDownButton, 0, border=5, flag=wx.ALL) - + 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): self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) self.TopSizer = wx.BoxSizer(wx.HORIZONTAL) @@ -347,8 +353,9 @@ 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=5, rows=3, vgap=0) - self.StructurePanelButtonSizer = 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) @@ -364,35 +371,36 @@ self._init_coll_StructurePanelSizer_Items(self.StructurePanelSizer) self._init_coll_StructurePanelSizer_Growables(self.StructurePanelSizer) self._init_coll_StructurePanelButtonSizer_Items(self.StructurePanelButtonSizer) - - self.SetSizer(self.MainSizer) + 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_ctrls(self, prnt): - wx.Panel.__init__(self, id=ID_DATATYPEEDITOR, name='', parent=prnt, + 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, + 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, + 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, pos=wx.Point(0, 0), + 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) # Panel for Directly derived data types self.DirectlyPanel = wx.Panel(id=ID_DATATYPEEDITORDIRECTLYPANEL, - name='DirectlyPanel', parent=self, pos=wx.Point(0, 0), + 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, @@ -417,7 +425,7 @@ # Panel for Subrange data types self.SubrangePanel = wx.Panel(id=ID_DATATYPEEDITORSUBRANGEPANEL, - name='SubrangePanel', parent=self, pos=wx.Point(0, 0), + 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, @@ -460,7 +468,7 @@ # Panel for Enumerated data types self.EnumeratedPanel = wx.Panel(id=ID_DATATYPEEDITORENUMERATEDPANEL, - name='EnumeratedPanel', parent=self, pos=wx.Point(0, 0), + 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, @@ -481,7 +489,7 @@ # Panel for Array data types self.ArrayPanel = wx.Panel(id=ID_DATATYPEEDITORARRAYPANEL, - name='ArrayPanel', parent=self, pos=wx.Point(0, 0), + 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, @@ -512,7 +520,7 @@ # Panel for Structure data types self.StructurePanel = wx.Panel(id=ID_DATATYPEEDITORSTRUCTUREPANEL, - name='StructurePanel', parent=self, pos=wx.Point(0, 0), + 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, @@ -554,7 +562,7 @@ self._init_sizers() def __init__(self, parent, tagname, window, controler): - self._init_ctrls(parent) + EditorPanel.__init__(self, parent, tagname, window, controler) self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""} self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames()) @@ -607,10 +615,6 @@ self.Highlights = [] self.Initializing = False - self.ParentWindow = window - self.Controler = controler - self.TagName = tagname - self.HighlightControls = { ("Directly", "base"): self.DirectlyBaseType, ("Directly", "initial"): self.DirectlyInitialValue, @@ -631,24 +635,22 @@ def __del__(self): self.RefreshHighlightsTimer.Stop() - def SetTagName(self, tagname): - self.TagName = tagname - - def GetTagName(self): - return self.TagName - - def IsViewing(self, tagname): - return self.TagName == tagname - - def IsDebugging(self): - return False - - def SetMode(self, mode): - pass - - def ResetBuffer(self): - pass - + def GetBufferState(self): + return self.Controler.GetBufferState() + + def Undo(self): + self.Controler.LoadPrevious() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def Redo(self): + self.Controler.LoadNext() + self.ParentWindow.CloseTabsWithoutModel() + self.ParentWindow.RefreshEditor() + + def HasNoModel(self): + return self.Controler.GetEditedElement(self.TagName) is None + def RefreshView(self): self.Initializing = True self.DirectlyBaseType.Clear() @@ -695,10 +697,7 @@ self.StructureElementsTable.ResetView(self.StructureElementsGrid) self.StructureElementsGrid.RefreshButtons() self.Initializing = False - - def RefreshScaling(self, refresh=True): - pass - + def OnDerivationTypeChanged(self, event): self.RefreshDisplayedInfos() self.RefreshTypeInfos()