editors/DataTypeEditor.py
changeset 1412 50192dd2f5ff
parent 947 82e2a155a3ce
child 1508 4c645e6b8c98
--- a/editors/DataTypeEditor.py	Wed May 28 18:33:41 2014 +0200
+++ b/editors/DataTypeEditor.py	Fri May 30 02:20:19 2014 +0200
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 #This file is part of PLCOpenEditor, a library implementing an IEC 61131-3 editor
-#based on the plcopen standard. 
+#based on the plcopen standard.
 #
 #Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
 #
@@ -29,7 +29,7 @@
 import wx.grid
 import wx.lib.buttons
 
-from plcopen.structures import IEC_KEYWORDS, TestIdentifier
+from plcopen.structures import IEC_KEYWORDS, TestIdentifier, DefaultType
 from graphics.GraphicCommons import REFRESH_HIGHLIGHT_PERIOD
 from controls import CustomEditableListBox, CustomGrid, CustomTable
 from dialogs import ArrayTypeDialog
@@ -59,7 +59,7 @@
 #-------------------------------------------------------------------------------
 
 class ElementsTable(CustomTable):
-    
+
     """
     A custom wx.grid.Grid Table using user supplied data
     """
@@ -67,7 +67,7 @@
         # The base class must be initialized *first*
         CustomTable.__init__(self, parent, data, colnames)
         self.old_value = None
-        
+
     def GetValue(self, row, col):
         if row < self.GetNumberRows():
             if col == 0:
@@ -78,17 +78,17 @@
                 if value[0] == "array":
                     return "ARRAY [%s] OF %s" % (",".join(map(lambda x : "..".join(x), value[2])), value[1])
             return str(value)
-    
+
     def SetValue(self, row, col, value):
         if col < len(self.colnames):
             colname = self.GetColLabelValue(col, False)
             if colname == "Name":
                 self.old_value = self.data[row][colname]
             self.data[row][colname] = value
-    
+
     def GetOldValue(self):
         return self.old_value
-    
+
     def _updateColAttrs(self, grid):
         """
         wx.grid.Grid -> update the column attributes to add the
@@ -96,7 +96,7 @@
 
         Otherwise default to the default renderer.
         """
-        
+
         for row in range(self.GetNumberRows()):
             row_highlights = self.Highlights.get(row, {})
             for col in range(self.GetNumberCols()):
@@ -115,15 +115,15 @@
                         editor = wx.grid.GridCellTextEditor()
                 else:
                     grid.SetReadOnly(row, col, True)
-                
+
                 grid.SetCellEditor(row, col, editor)
                 grid.SetCellRenderer(row, col, renderer)
-                
+
                 highlight_colours = row_highlights.get(colname.lower(), [(wx.WHITE, wx.BLACK)])[-1]
                 grid.SetCellBackgroundColour(row, col, highlight_colours[0])
                 grid.SetCellTextColour(row, col, highlight_colours[1])
             self.ResizeRow(grid, row)
-    
+
     def AddHighlight(self, infos, highlight_type):
         row_highlights = self.Highlights.setdefault(infos[0], {})
         if infos[1] == "initial":
@@ -137,216 +137,216 @@
 #-------------------------------------------------------------------------------
 
 class DataTypeEditor(EditorPanel):
-    
+
     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.MainSizer.AddGrowableCol(0)
         self.MainSizer.AddGrowableRow(1)
-        
+
         top_sizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.MainSizer.AddSizer(top_sizer, border=5, 
+        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, 
+        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, 
+        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(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, 
+
+        directly_basetype_label = wx.StaticText(self.DirectlyPanel,
               label=_('Base Type:'))
-        directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5, 
+        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.DirectlyBaseType)
-        directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5, 
+        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, 
+        directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5,
               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        
-        self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel, 
+
+        self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel,
               style=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, 
+        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(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, 
+        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.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged,
               self.SubrangeBaseType)
-        subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5, 
+        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, 
+        subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5,
               flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        
-        self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel, 
+
+        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, 
+        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, 
+        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, 
+        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, 
+        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, 
+
+        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(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| 
+
+        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)
-        enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5, 
+        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, 
+        enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1,
               border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
-        
-        self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel, 
+
+        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, 
+        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(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, 
+        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, 
+        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, 
+        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.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, 
+        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", 
+        for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton",
                      "_OnUpButton", "_OnDownButton"]:
             setattr(self.ArrayDimensions, func, self.OnDimensionsChanged)
-        array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5, 
+        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(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, 
+        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")),
@@ -357,46 +357,46 @@
             button.SetToolTipString(help)
             setattr(self, name, button)
             structure_button_sizer.AddWindow(button)
-        
-        self.StructureElementsGrid = CustomGrid(self.StructurePanel, 
+
+        self.StructureElementsGrid = CustomGrid(self.StructurePanel,
               size=wx.Size(0, 150), style=wx.VSCROLL)
-        self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, 
+        self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
               self.OnStructureElementsGridCellChange)
-        self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, 
+        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)
-        
-        self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""}
+
+        self.StructureElementDefaultValue = {"Name" : "", "Type" : DefaultType, "Initial Value" : ""}
         self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames())
         self.StructureColSizes = [40, 150, 100, 250]
         self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
-        
+
         self.StructureElementsGrid.SetTable(self.StructureElementsTable)
         self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton,
                                                "Delete": self.StructureDeleteButton,
                                                "Up": self.StructureUpButton,
                                                "Down": self.StructureDownButton})
-        
+
         def _AddStructureElement(new_row):
             self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy())
             self.RefreshTypeInfos()
             self.StructureElementsTable.ResetView(self.StructureElementsGrid)
             return new_row
         setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement)
-        
+
         def _DeleteStructureElement(row):
             self.StructureElementsTable.RemoveRow(row)
             self.RefreshTypeInfos()
             self.StructureElementsTable.ResetView(self.StructureElementsGrid)
         setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement)
-            
+
         def _MoveStructureElement(row, move):
             new_row = self.StructureElementsTable.MoveRow(row, move)
             if new_row != row:
@@ -404,7 +404,7 @@
                 self.StructureElementsTable.ResetView(self.StructureElementsGrid)
             return new_row
         setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement)
-        
+
         self.StructureElementsGrid.SetRowLabelSize(0)
         for col in range(self.StructureElementsTable.GetNumberCols()):
             attr = wx.grid.GridCellAttr()
@@ -413,7 +413,7 @@
             self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col])
             self.StructureElementsGrid.AutoSizeColumn(col, False)
         self.StructureElementsGrid.RefreshButtons()
-        
+
         for datatype in GetDatatypeTypes():
             self.DerivationType.Append(_(datatype))
         self.SubrangePanel.Hide()
@@ -423,7 +423,7 @@
         self.CurrentPanel = "Directly"
         self.Highlights = []
         self.Initializing = False
-        
+
         self.HighlightControls = {
             ("Directly", "base"): self.DirectlyBaseType,
             ("Directly", "initial"): self.DirectlyInitialValue,
@@ -437,27 +437,27 @@
             ("Array", "base"): self.ArrayBaseType,
             ("Array", "range"): self.ArrayDimensions,
         }
-        
+
         self.RefreshHighlightsTimer = wx.Timer(self, -1)
         self.Bind(wx.EVT_TIMER, self.OnRefreshHighlightsTimer, self.RefreshHighlightsTimer)
-        
+
     def __del__(self):
         self.RefreshHighlightsTimer.Stop()
-    
+
     def GetBufferState(self):
         return self.Controler.GetBufferState()
-        
+
     def Undo(self):
         self.Controler.LoadPrevious()
         self.ParentWindow.CloseTabsWithoutModel()
-            
+
     def Redo(self):
         self.Controler.LoadNext()
         self.ParentWindow.CloseTabsWithoutModel()
-    
+
     def HasNoModel(self):
         return self.Controler.GetEditedElement(self.TagName) is None
-        
+
     def RefreshView(self):
         self.Initializing = True
         self.DirectlyBaseType.Clear()
@@ -504,7 +504,7 @@
         self.StructureElementsTable.ResetView(self.StructureElementsGrid)
         self.StructureElementsGrid.RefreshButtons()
         self.Initializing = False
-    
+
     def OnDerivationTypeChanged(self, event):
         wx.CallAfter(self.RefreshDisplayedInfos)
         wx.CallAfter(self.RefreshTypeInfos)
@@ -512,7 +512,7 @@
 
     def OnReturnKeyPressed(self, event):
         self.RefreshTypeInfos()
-        
+
     def OnInfosChanged(self, event):
         self.RefreshTypeInfos()
         event.Skip()
@@ -563,12 +563,12 @@
                 event.Skip()
         else:
             event.Skip()
-    
+
     def OnEnumeratedValuesChanged(self, event):
         wx.CallAfter(self.RefreshEnumeratedValues)
         wx.CallAfter(self.RefreshTypeInfos)
         event.Skip()
-    
+
     def OnStructureElementsGridCellChange(self, event):
         row, col = event.GetRow(), event.GetCol()
         colname = self.StructureElementsTable.GetColLabelValue(col, False)
@@ -606,34 +606,34 @@
             self.RefreshTypeInfos()
             wx.CallAfter(self.StructureElementsTable.ResetView, self.StructureElementsGrid)
             event.Skip()
-    
+
     def OnStructureElementsGridSelectCell(self, event):
         wx.CallAfter(self.RefreshStructureButtons)
         event.Skip()
-    
+
     def OnStructureElementsGridEditorShown(self, event):
-        row, col = event.GetRow(), event.GetCol() 
+        row, col = event.GetRow(), event.GetCol()
         if self.StructureElementsTable.GetColLabelValue(col, False) == "Type":
             type_menu = wx.Menu(title='')
-            
+
             base_menu = wx.Menu(title='')
             for base_type in self.Controler.GetBaseTypes():
                 new_id = wx.NewId()
                 AppendMenu(base_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=base_type)
                 self.Bind(wx.EVT_MENU, self.GetElementTypeFunction(base_type), id=new_id)
             type_menu.AppendMenu(wx.NewId(), _("Base Types"), base_menu)
-            
+
             datatype_menu = wx.Menu(title='')
             for datatype in self.Controler.GetDataTypes(self.TagName, False):
                 new_id = wx.NewId()
                 AppendMenu(datatype_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=datatype)
                 self.Bind(wx.EVT_MENU, self.GetElementTypeFunction(datatype), id=new_id)
             type_menu.AppendMenu(wx.NewId(), _("User Data Types"), datatype_menu)
-            
+
             new_id = wx.NewId()
             AppendMenu(type_menu, help='', id=new_id, kind=wx.ITEM_NORMAL, text=_("Array"))
             self.Bind(wx.EVT_MENU, self.ElementArrayTypeFunction, id=new_id)
-            
+
 ##            functionblock_menu = wx.Menu(title='')
 ##            bodytype = self.Controler.GetEditedElementBodyType(self.TagName)
 ##            pouname, poutype = self.Controler.GetEditedElementType(self.TagName)
@@ -661,8 +661,8 @@
 
     def ElementArrayTypeFunction(self, event):
         row = self.StructureElementsGrid.GetGridCursorRow()
-        dialog = ArrayTypeDialog(self, 
-                                 self.Controler.GetDataTypes(self.TagName), 
+        dialog = ArrayTypeDialog(self,
+                                 self.Controler.GetDataTypes(self.TagName),
                                  self.StructureElementsTable.GetValueByName(row, "Type"))
         if dialog.ShowModal() == wx.ID_OK:
             self.StructureElementsTable.SetValueByName(row, "Type", dialog.GetValue())