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 |