--- 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()