23 |
23 |
24 import re |
24 import re |
25 from types import TupleType |
25 from types import TupleType |
26 |
26 |
27 import wx |
27 import wx |
28 import wx.gizmos |
28 |
|
29 from controls import CustomEditableListBox |
29 |
30 |
30 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$") |
31 DIMENSION_MODEL = re.compile("([0-9]+)\.\.([0-9]+)$") |
31 |
32 |
32 [ID_ARRAYTYPEDIALOG, ID_ARRAYTYPEDIALOGBASETYPE, |
33 [ID_ARRAYTYPEDIALOG, ID_ARRAYTYPEDIALOGBASETYPE, |
33 ID_ARRAYTYPEDIALOGDIMENSIONS, ID_ARRAYTYPEDIALOGDIALOGSTATICTEXT1, |
34 ID_ARRAYTYPEDIALOGDIMENSIONS, ID_ARRAYTYPEDIALOGDIALOGSTATICTEXT1, |
78 |
79 |
79 self.BaseType = wx.ComboBox(id=ID_ARRAYTYPEDIALOGBASETYPE, |
80 self.BaseType = wx.ComboBox(id=ID_ARRAYTYPEDIALOGBASETYPE, |
80 name='BaseType', parent=self, pos=wx.Point(0, 0), |
81 name='BaseType', parent=self, pos=wx.Point(0, 0), |
81 size=wx.Size(0, 28), style=wx.CB_READONLY) |
82 size=wx.Size(0, 28), style=wx.CB_READONLY) |
82 |
83 |
83 self.Dimensions = wx.gizmos.EditableListBox(id=ID_ARRAYTYPEDIALOGDIMENSIONS, |
84 self.Dimensions = CustomEditableListBox(id=ID_ARRAYTYPEDIALOGDIMENSIONS, |
84 name='ArrayDimensions', parent=self, label=_("Dimensions:"), pos=wx.Point(0, 0), |
85 name='ArrayDimensions', parent=self, label=_("Dimensions:"), pos=wx.Point(0, 0), |
85 size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
86 size=wx.Size(0, 24), style=wx.gizmos.EL_ALLOW_NEW | wx.gizmos.EL_ALLOW_EDIT | wx.gizmos.EL_ALLOW_DELETE) |
86 self.Dimensions.GetListCtrl().Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged) |
87 list_ctrl = self.Dimensions.GetListCtrl() |
87 new_button = self.Dimensions.GetNewButton() |
88 list_ctrl.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnDimensionsChanged) |
88 new_button.SetToolTipString(_("New item")) |
89 for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: |
89 new_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
90 setattr(self.Dimensions, func, self.OnDimensionsChanged) |
90 del_button = self.Dimensions.GetDelButton() |
|
91 del_button.SetToolTipString(_("Delete item")) |
|
92 del_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
93 up_button = self.Dimensions.GetUpButton() |
|
94 up_button.SetToolTipString(_("Move up")) |
|
95 up_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
96 down_button = self.Dimensions.GetDownButton() |
|
97 down_button.SetToolTipString(_("Move down")) |
|
98 down_button.Bind(wx.EVT_BUTTON, self.OnDimensionsChanged) |
|
99 |
91 |
100 self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
92 self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
101 if wx.VERSION >= (2, 5, 0): |
93 if wx.VERSION >= (2, 5, 0): |
102 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId()) |
94 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId()) |
103 else: |
95 else: |
114 if isinstance(infos, TupleType) and infos[0] == "array": |
106 if isinstance(infos, TupleType) and infos[0] == "array": |
115 self.BaseType.SetStringSelection(infos[1]) |
107 self.BaseType.SetStringSelection(infos[1]) |
116 self.Dimensions.SetStrings(map(lambda x : "..".join(x), infos[2])) |
108 self.Dimensions.SetStrings(map(lambda x : "..".join(x), infos[2])) |
117 elif infos in datatypes: |
109 elif infos in datatypes: |
118 self.BaseType.SetStringSelection(infos) |
110 self.BaseType.SetStringSelection(infos) |
|
111 |
|
112 self.BaseType.SetFocus() |
119 |
113 |
120 def GetDimensions(self): |
114 def GetDimensions(self): |
121 dimensions_list = [] |
115 dimensions_list = [] |
122 for dimensions in self.Dimensions.GetStrings(): |
116 for dimensions in self.Dimensions.GetStrings(): |
123 result = DIMENSION_MODEL.match(dimensions) |
117 result = DIMENSION_MODEL.match(dimensions) |