DataTypeEditor.py
changeset 586 9aa96a36cf33
parent 577 9dbb79722fbc
child 598 510647310137
--- 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()