DataTypeEditor.py
changeset 207 b1144bb36605
parent 205 f12ad5b87f99
child 215 dd3381f38a9e
equal deleted inserted replaced
206:f7c85a5939dc 207:b1144bb36605
    24 
    24 
    25 import wx
    25 import wx
    26 import wx.grid
    26 import wx.grid
    27 import wx.gizmos
    27 import wx.gizmos
    28 from plcopen.structures import GetDataTypeRange, IEC_KEYWORDS
    28 from plcopen.structures import GetDataTypeRange, IEC_KEYWORDS
       
    29 
       
    30 import re
       
    31 
       
    32 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$")
    29 
    33 
    30 if wx.VERSION >= (2, 8, 0):
    34 if wx.VERSION >= (2, 8, 0):
    31     import wx.aui
    35     import wx.aui
    32 
    36 
    33     class MDIDataTypeEditor(wx.aui.AuiMDIChildFrame):
    37     class MDIDataTypeEditor(wx.aui.AuiMDIChildFrame):
   391                 self.EnumeratedValues.SetStrings(type_infos["values"])
   395                 self.EnumeratedValues.SetStrings(type_infos["values"])
   392                 self.RefreshEnumeratedValues()
   396                 self.RefreshEnumeratedValues()
   393                 self.EnumeratedInitialValue.SetStringSelection(type_infos["initial"])
   397                 self.EnumeratedInitialValue.SetStringSelection(type_infos["initial"])
   394             elif type_infos["type"] == "Array":
   398             elif type_infos["type"] == "Array":
   395                 self.ArrayBaseType.SetStringSelection(type_infos["base_type"])
   399                 self.ArrayBaseType.SetStringSelection(type_infos["base_type"])
   396                 self.ArrayDimensions.SetStrings(type_infos["dimensions"])
   400                 self.ArrayDimensions.SetStrings(map(lambda x : "..".join(map(str, x)), type_infos["dimensions"]))
   397                 self.ArrayInitialValue.SetValue(type_infos["initial"])
   401                 self.ArrayInitialValue.SetValue(type_infos["initial"])
   398             self.RefreshDisplayedInfos()
   402             self.RefreshDisplayedInfos()
   399         self.Initializing = False
   403         self.Initializing = False
   400 
   404 
   401     def RefreshScaling(self, refresh=True):
   405     def RefreshScaling(self, refresh=True):
   493         elif selected == "Enumerated":
   497         elif selected == "Enumerated":
   494             infos["values"] = self.EnumeratedValues.GetStrings()
   498             infos["values"] = self.EnumeratedValues.GetStrings()
   495             infos["initial"] = self.EnumeratedInitialValue.GetStringSelection()
   499             infos["initial"] = self.EnumeratedInitialValue.GetStringSelection()
   496         elif selected == "Array":
   500         elif selected == "Array":
   497             infos["base_type"] = self.ArrayBaseType.GetStringSelection()
   501             infos["base_type"] = self.ArrayBaseType.GetStringSelection()
   498             infos["dimensions"] = self.ArrayDimensions.GetStrings()
   502             infos["dimensions"] = []
       
   503             for dimensions in self.ArrayDimensions.GetStrings():
       
   504                 result = DIMENSION_MODEL.match(dimensions)
       
   505                 if result is None:
       
   506                     message = wx.MessageDialog(self, "\"%s\" value isn't a valid array dimension!"%dimensions, "Error", wx.OK|wx.ICON_ERROR)
       
   507                     message.ShowModal()
       
   508                     message.Destroy()
       
   509                     self.RefreshView()
       
   510                     return
       
   511                 bounds = result.groups()
       
   512                 if bounds[0] >= bounds[1]:
       
   513                     message = wx.MessageDialog(self, "\"%s\" value isn't a valid array dimension!\nRight value must be greater than left value."%dimensions, "Error", wx.OK|wx.ICON_ERROR)
       
   514                     message.ShowModal()
       
   515                     message.Destroy()
       
   516                     self.RefreshView()
       
   517                     return
       
   518                 infos["dimensions"].append(map(int, bounds))
   499             infos["initial"] = self.ArrayInitialValue.GetValue()
   519             infos["initial"] = self.ArrayInitialValue.GetValue()
   500         self.Controler.SetDataTypeInfos(self.TagName, infos)
   520         self.Controler.SetDataTypeInfos(self.TagName, infos)
   501         self.ParentWindow.RefreshTitle()
   521         self.ParentWindow.RefreshTitle()
   502         self.ParentWindow.RefreshEditMenu()
   522         self.ParentWindow.RefreshEditMenu()
   503 
   523