37 #------------------------------------------------------------------------------- |
37 #------------------------------------------------------------------------------- |
38 # Array Type Dialog |
38 # Array Type Dialog |
39 #------------------------------------------------------------------------------- |
39 #------------------------------------------------------------------------------- |
40 |
40 |
41 class ArrayTypeDialog(wx.Dialog): |
41 class ArrayTypeDialog(wx.Dialog): |
42 |
42 |
43 def __init__(self, parent, datatypes, infos): |
43 def __init__(self, parent, datatypes, infos): |
44 wx.Dialog.__init__(self, parent, title=_('Edit array type properties')) |
44 wx.Dialog.__init__(self, parent, title=_('Edit array type properties')) |
45 |
45 |
46 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10) |
46 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10) |
47 main_sizer.AddGrowableCol(0) |
47 main_sizer.AddGrowableCol(0) |
48 main_sizer.AddGrowableRow(1) |
48 main_sizer.AddGrowableRow(1) |
49 |
49 |
50 top_sizer = wx.BoxSizer(wx.HORIZONTAL) |
50 top_sizer = wx.BoxSizer(wx.HORIZONTAL) |
51 main_sizer.AddSizer(top_sizer, border=20, |
51 main_sizer.AddSizer(top_sizer, border=20, |
52 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
52 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
53 |
53 |
54 basetype_label = wx.StaticText(self, label=_('Base Type:')) |
54 basetype_label = wx.StaticText(self, label=_('Base Type:')) |
55 top_sizer.AddWindow(basetype_label, 1, flag=wx.ALIGN_BOTTOM) |
55 top_sizer.AddWindow(basetype_label, 1, flag=wx.ALIGN_BOTTOM) |
56 |
56 |
57 self.BaseType = wx.ComboBox(self, style=wx.CB_READONLY) |
57 self.BaseType = wx.ComboBox(self, style=wx.CB_READONLY) |
58 top_sizer.AddWindow(self.BaseType, 1, flag=wx.GROW) |
58 top_sizer.AddWindow(self.BaseType, 1, flag=wx.GROW) |
59 |
59 |
60 self.Dimensions = CustomEditableListBox(self, label=_("Dimensions:"), |
60 self.Dimensions = CustomEditableListBox(self, label=_("Dimensions:"), |
61 style=wx.gizmos.EL_ALLOW_NEW| |
61 style=wx.gizmos.EL_ALLOW_NEW| |
62 wx.gizmos.EL_ALLOW_EDIT| |
62 wx.gizmos.EL_ALLOW_EDIT| |
63 wx.gizmos.EL_ALLOW_DELETE) |
63 wx.gizmos.EL_ALLOW_DELETE) |
64 for func in ["_OnLabelEndEdit", |
64 for func in ["_OnLabelEndEdit", |
65 "_OnAddButton", |
65 "_OnAddButton", |
66 "_OnDelButton", |
66 "_OnDelButton", |
67 "_OnUpButton", |
67 "_OnUpButton", |
68 "_OnDownButton"]: |
68 "_OnDownButton"]: |
69 setattr(self.Dimensions, func, self.OnDimensionsChanged) |
69 setattr(self.Dimensions, func, self.OnDimensionsChanged) |
70 main_sizer.AddSizer(self.Dimensions, border=20, |
70 main_sizer.AddSizer(self.Dimensions, border=20, |
71 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
71 flag=wx.GROW|wx.LEFT|wx.RIGHT) |
72 |
72 |
73 button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
73 button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
74 self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton()) |
74 self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton()) |
75 main_sizer.AddSizer(button_sizer, border=20, |
75 main_sizer.AddSizer(button_sizer, border=20, |
76 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
76 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
77 |
77 |
78 self.SetSizer(main_sizer) |
78 self.SetSizer(main_sizer) |
79 |
79 |
80 for datatype in datatypes: |
80 for datatype in datatypes: |
81 self.BaseType.Append(datatype) |
81 self.BaseType.Append(datatype) |
82 |
82 |
83 if isinstance(infos, TupleType) and infos[0] == "array": |
83 if isinstance(infos, TupleType) and infos[0] == "array": |
84 self.BaseType.SetStringSelection(infos[1]) |
84 self.BaseType.SetStringSelection(infos[1]) |
85 self.Dimensions.SetStrings(map(lambda x : "..".join(x), infos[2])) |
85 self.Dimensions.SetStrings(map(lambda x : "..".join(x), infos[2])) |
86 elif infos in datatypes: |
86 elif infos in datatypes: |
87 self.BaseType.SetStringSelection(infos) |
87 self.BaseType.SetStringSelection(infos) |
88 |
88 |
89 self.BaseType.SetFocus() |
89 self.BaseType.SetFocus() |
90 self.Fit() |
90 self.Fit() |
91 |
91 |
92 def GetDimensions(self): |
92 def GetDimensions(self): |
93 message = None |
93 message = None |
94 dimensions_list = [] |
94 dimensions_list = [] |
95 dimension_strings = self.Dimensions.GetStrings() |
95 dimension_strings = self.Dimensions.GetStrings() |
96 if len(dimension_strings) == 0: |
96 if len(dimension_strings) == 0: |
111 dlg = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) |
111 dlg = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR) |
112 dlg.ShowModal() |
112 dlg.ShowModal() |
113 dlg.Destroy() |
113 dlg.Destroy() |
114 return None |
114 return None |
115 return dimensions_list |
115 return dimensions_list |
116 |
116 |
117 def OnDimensionsChanged(self, event): |
117 def OnDimensionsChanged(self, event): |
118 wx.CallAfter(self.GetDimensions) |
118 wx.CallAfter(self.GetDimensions) |
119 event.Skip() |
119 event.Skip() |
120 |
120 |
121 def OnOK(self, event): |
121 def OnOK(self, event): |
122 if self.GetDimensions() is not None: |
122 if self.GetDimensions() is not None: |
123 self.EndModal(wx.ID_OK) |
123 self.EndModal(wx.ID_OK) |
124 |
124 |
125 def GetValue(self): |
125 def GetValue(self): |
126 return "array", self.BaseType.GetStringSelection(), self.GetDimensions() |
126 return "array", self.BaseType.GetStringSelection(), self.GetDimensions() |