135 #------------------------------------------------------------------------------- |
135 #------------------------------------------------------------------------------- |
136 # Datatype Editor class |
136 # Datatype Editor class |
137 #------------------------------------------------------------------------------- |
137 #------------------------------------------------------------------------------- |
138 |
138 |
139 class DataTypeEditor(EditorPanel): |
139 class DataTypeEditor(EditorPanel): |
140 |
140 |
141 def _init_Editor(self, parent): |
141 def _init_Editor(self, parent): |
142 self.Editor = wx.Panel(parent, style=wx.SUNKEN_BORDER) |
142 self.Editor = wx.Panel(parent, style=wx.SUNKEN_BORDER) |
143 |
143 |
144 self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
144 self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
145 self.MainSizer.AddGrowableCol(0) |
145 self.MainSizer.AddGrowableCol(0) |
146 self.MainSizer.AddGrowableRow(1) |
146 self.MainSizer.AddGrowableRow(1) |
147 |
147 |
148 top_sizer = wx.BoxSizer(wx.HORIZONTAL) |
148 top_sizer = wx.BoxSizer(wx.HORIZONTAL) |
149 self.MainSizer.AddSizer(top_sizer, border=5, |
149 self.MainSizer.AddSizer(top_sizer, border=5, |
150 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
150 flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT) |
151 |
151 |
152 derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:')) |
152 derivation_type_label = wx.StaticText(self.Editor, label=_('Derivation Type:')) |
153 top_sizer.AddWindow(derivation_type_label, border=5, |
153 top_sizer.AddWindow(derivation_type_label, border=5, |
154 flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT) |
154 flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT) |
155 |
155 |
156 self.DerivationType = wx.ComboBox(self.Editor, |
156 self.DerivationType = wx.ComboBox(self.Editor, |
157 size=wx.Size(200, -1), style=wx.CB_READONLY) |
157 size=wx.Size(200, -1), style=wx.CB_READONLY) |
158 self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType) |
158 self.Bind(wx.EVT_COMBOBOX, self.OnDerivationTypeChanged, self.DerivationType) |
159 top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW|wx.RIGHT) |
159 top_sizer.AddWindow(self.DerivationType, border=5, flag=wx.GROW|wx.RIGHT) |
160 |
160 |
161 typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:')) |
161 typeinfos_staticbox = wx.StaticBox(self.Editor, label=_('Type infos:')) |
162 typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL) |
162 typeinfos_sizer = wx.StaticBoxSizer(typeinfos_staticbox, wx.HORIZONTAL) |
163 self.MainSizer.AddSizer(typeinfos_sizer, border=5, |
163 self.MainSizer.AddSizer(typeinfos_sizer, border=5, |
164 flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
164 flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
165 |
165 |
166 # Panel for Directly derived data types |
166 # Panel for Directly derived data types |
167 |
167 |
168 self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
168 self.DirectlyPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
169 typeinfos_sizer.AddWindow(self.DirectlyPanel, 1) |
169 typeinfos_sizer.AddWindow(self.DirectlyPanel, 1) |
170 |
170 |
171 directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) |
171 directly_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) |
172 |
172 |
173 directly_basetype_label = wx.StaticText(self.DirectlyPanel, |
173 directly_basetype_label = wx.StaticText(self.DirectlyPanel, |
174 label=_('Base Type:')) |
174 label=_('Base Type:')) |
175 directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5, |
175 directly_panel_sizer.AddWindow(directly_basetype_label, 1, border=5, |
176 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
176 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
177 |
177 |
178 self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY) |
178 self.DirectlyBaseType = wx.ComboBox(self.DirectlyPanel, style=wx.CB_READONLY) |
179 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType) |
179 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.DirectlyBaseType) |
180 directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5, |
180 directly_panel_sizer.AddWindow(self.DirectlyBaseType, 1, border=5, |
181 flag=wx.GROW|wx.ALL) |
181 flag=wx.GROW|wx.ALL) |
182 |
182 |
183 directly_initialvalue_label = wx.StaticText(self.DirectlyPanel, |
183 directly_initialvalue_label = wx.StaticText(self.DirectlyPanel, |
184 label=_('Initial Value:')) |
184 label=_('Initial Value:')) |
185 directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5, |
185 directly_panel_sizer.AddWindow(directly_initialvalue_label, 1, border=5, |
186 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
186 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
187 |
187 |
188 self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel, |
188 self.DirectlyInitialValue = wx.TextCtrl(self.DirectlyPanel, |
189 style=wx.TE_PROCESS_ENTER|wx.TE_RICH) |
189 style=wx.TE_PROCESS_ENTER|wx.TE_RICH) |
190 self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue) |
190 self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.DirectlyInitialValue) |
191 directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5, |
191 directly_panel_sizer.AddWindow(self.DirectlyInitialValue, 1, border=5, |
192 flag=wx.ALL) |
192 flag=wx.ALL) |
193 |
193 |
194 self.DirectlyPanel.SetSizer(directly_panel_sizer) |
194 self.DirectlyPanel.SetSizer(directly_panel_sizer) |
195 |
195 |
196 # Panel for Subrange data types |
196 # Panel for Subrange data types |
197 |
197 |
198 self.SubrangePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
198 self.SubrangePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
199 typeinfos_sizer.AddWindow(self.SubrangePanel, 1) |
199 typeinfos_sizer.AddWindow(self.SubrangePanel, 1) |
200 |
200 |
201 subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0) |
201 subrange_panel_sizer = wx.GridSizer(cols=4, hgap=5, rows=3, vgap=0) |
202 |
202 |
203 subrange_basetype_label = wx.StaticText(self.SubrangePanel, |
203 subrange_basetype_label = wx.StaticText(self.SubrangePanel, |
204 label=_('Base Type:')) |
204 label=_('Base Type:')) |
205 subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5, |
205 subrange_panel_sizer.AddWindow(subrange_basetype_label, 1, border=5, |
206 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
206 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
207 |
207 |
208 self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY) |
208 self.SubrangeBaseType = wx.ComboBox(self.SubrangePanel, style=wx.CB_READONLY) |
209 self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged, |
209 self.Bind(wx.EVT_COMBOBOX, self.OnSubrangeBaseTypeChanged, |
210 self.SubrangeBaseType) |
210 self.SubrangeBaseType) |
211 subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5, |
211 subrange_panel_sizer.AddWindow(self.SubrangeBaseType, 1, border=5, |
212 flag=wx.GROW|wx.ALL) |
212 flag=wx.GROW|wx.ALL) |
213 |
213 |
214 subrange_initialvalue_label = wx.StaticText(self.SubrangePanel, |
214 subrange_initialvalue_label = wx.StaticText(self.SubrangePanel, |
215 label=_('Initial Value:')) |
215 label=_('Initial Value:')) |
216 subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5, |
216 subrange_panel_sizer.AddWindow(subrange_initialvalue_label, 1, border=5, |
217 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
217 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
218 |
218 |
219 self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel, |
219 self.SubrangeInitialValue = wx.SpinCtrl(self.SubrangePanel, |
220 style=wx.TAB_TRAVERSAL) |
220 style=wx.TAB_TRAVERSAL) |
221 self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue) |
221 self.Bind(wx.EVT_SPINCTRL, self.OnInfosChanged, self.SubrangeInitialValue) |
222 subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5, |
222 subrange_panel_sizer.AddWindow(self.SubrangeInitialValue, 1, border=5, |
223 flag=wx.GROW|wx.ALL) |
223 flag=wx.GROW|wx.ALL) |
224 |
224 |
225 subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:')) |
225 subrange_minimum_label = wx.StaticText(self.SubrangePanel, label=_('Minimum:')) |
226 subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5, |
226 subrange_panel_sizer.AddWindow(subrange_minimum_label, 1, border=5, |
227 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
227 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
228 |
228 |
229 self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) |
229 self.SubrangeMinimum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) |
230 self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum) |
230 self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMinimumChanged, self.SubrangeMinimum) |
231 subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5, |
231 subrange_panel_sizer.AddWindow(self.SubrangeMinimum, 1, border=5, |
232 flag=wx.GROW|wx.ALL) |
232 flag=wx.GROW|wx.ALL) |
233 |
233 |
234 for i in xrange(2): |
234 for i in xrange(2): |
235 subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1) |
235 subrange_panel_sizer.AddWindow(wx.Size(0, 0), 1) |
236 |
236 |
237 subrange_maximum_label = wx.StaticText(self.SubrangePanel, |
237 subrange_maximum_label = wx.StaticText(self.SubrangePanel, |
238 label=_('Maximum:')) |
238 label=_('Maximum:')) |
239 subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5, |
239 subrange_panel_sizer.AddWindow(subrange_maximum_label, 1, border=5, |
240 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
240 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
241 |
241 |
242 self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) |
242 self.SubrangeMaximum = wx.SpinCtrl(self.SubrangePanel, style=wx.TAB_TRAVERSAL) |
243 self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum) |
243 self.Bind(wx.EVT_SPINCTRL, self.OnSubrangeMaximumChanged, self.SubrangeMaximum) |
244 |
244 |
245 subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5, |
245 subrange_panel_sizer.AddWindow(self.SubrangeMaximum, 1, border=5, |
246 flag=wx.GROW|wx.ALL) |
246 flag=wx.GROW|wx.ALL) |
247 |
247 |
248 self.SubrangePanel.SetSizer(subrange_panel_sizer) |
248 self.SubrangePanel.SetSizer(subrange_panel_sizer) |
249 |
249 |
250 # Panel for Enumerated data types |
250 # Panel for Enumerated data types |
251 |
251 |
252 self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
252 self.EnumeratedPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
253 typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1) |
253 typeinfos_sizer.AddWindow(self.EnumeratedPanel, 1) |
254 |
254 |
255 enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) |
255 enumerated_panel_sizer = wx.BoxSizer(wx.HORIZONTAL) |
256 |
256 |
257 self.EnumeratedValues = CustomEditableListBox(self.EnumeratedPanel, |
257 self.EnumeratedValues = CustomEditableListBox(self.EnumeratedPanel, |
258 label=_("Values:"), style=wx.gizmos.EL_ALLOW_NEW| |
258 label=_("Values:"), style=wx.gizmos.EL_ALLOW_NEW| |
259 wx.gizmos.EL_ALLOW_EDIT| |
259 wx.gizmos.EL_ALLOW_EDIT| |
260 wx.gizmos.EL_ALLOW_DELETE) |
260 wx.gizmos.EL_ALLOW_DELETE) |
261 setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit) |
261 setattr(self.EnumeratedValues, "_OnLabelEndEdit", self.OnEnumeratedValueEndEdit) |
262 for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: |
262 for func in ["_OnAddButton", "_OnDelButton", "_OnUpButton", "_OnDownButton"]: |
263 setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged) |
263 setattr(self.EnumeratedValues, func, self.OnEnumeratedValuesChanged) |
264 enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5, |
264 enumerated_panel_sizer.AddWindow(self.EnumeratedValues, 1, border=5, |
265 flag=wx.GROW|wx.ALL) |
265 flag=wx.GROW|wx.ALL) |
266 |
266 |
267 enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) |
267 enumerated_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) |
268 enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1) |
268 enumerated_panel_sizer.AddSizer(enumerated_panel_rightsizer, 1) |
269 |
269 |
270 enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel, |
270 enumerated_initialvalue_label = wx.StaticText(self.EnumeratedPanel, |
271 label=_('Initial Value:')) |
271 label=_('Initial Value:')) |
272 enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1, |
272 enumerated_panel_rightsizer.AddWindow(enumerated_initialvalue_label, 1, |
273 border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
273 border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
274 |
274 |
275 self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel, |
275 self.EnumeratedInitialValue = wx.ComboBox(self.EnumeratedPanel, |
276 style=wx.CB_READONLY) |
276 style=wx.CB_READONLY) |
277 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue) |
277 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.EnumeratedInitialValue) |
278 enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1, |
278 enumerated_panel_rightsizer.AddWindow(self.EnumeratedInitialValue, 1, |
279 border=5, flag=wx.ALL) |
279 border=5, flag=wx.ALL) |
280 |
280 |
281 self.EnumeratedPanel.SetSizer(enumerated_panel_sizer) |
281 self.EnumeratedPanel.SetSizer(enumerated_panel_sizer) |
282 |
282 |
283 # Panel for Array data types |
283 # Panel for Array data types |
284 |
284 |
285 self.ArrayPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
285 self.ArrayPanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
286 typeinfos_sizer.AddWindow(self.ArrayPanel, 1) |
286 typeinfos_sizer.AddWindow(self.ArrayPanel, 1) |
287 |
287 |
288 array_panel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
288 array_panel_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
289 array_panel_sizer.AddGrowableCol(0) |
289 array_panel_sizer.AddGrowableCol(0) |
290 array_panel_sizer.AddGrowableCol(1) |
290 array_panel_sizer.AddGrowableCol(1) |
291 array_panel_sizer.AddGrowableRow(1) |
291 array_panel_sizer.AddGrowableRow(1) |
292 |
292 |
293 array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL) |
293 array_panel_leftSizer = wx.BoxSizer(wx.HORIZONTAL) |
294 array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW) |
294 array_panel_sizer.AddSizer(array_panel_leftSizer, flag=wx.GROW) |
295 |
295 |
296 array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:')) |
296 array_basetype_label = wx.StaticText(self.ArrayPanel, label=_('Base Type:')) |
297 array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5, |
297 array_panel_leftSizer.AddWindow(array_basetype_label, 1, border=5, |
298 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
298 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
299 |
299 |
300 self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY) |
300 self.ArrayBaseType = wx.ComboBox(self.ArrayPanel, style=wx.CB_READONLY) |
301 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType) |
301 self.Bind(wx.EVT_COMBOBOX, self.OnInfosChanged, self.ArrayBaseType) |
302 array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5, |
302 array_panel_leftSizer.AddWindow(self.ArrayBaseType, 1, border=5, |
303 flag=wx.GROW|wx.ALL) |
303 flag=wx.GROW|wx.ALL) |
304 |
304 |
305 array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) |
305 array_panel_rightsizer = wx.BoxSizer(wx.HORIZONTAL) |
306 array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW) |
306 array_panel_sizer.AddSizer(array_panel_rightsizer, flag=wx.GROW) |
307 |
307 |
308 array_initialvalue_label = wx.StaticText(self.ArrayPanel, |
308 array_initialvalue_label = wx.StaticText(self.ArrayPanel, |
309 label=_('Initial Value:')) |
309 label=_('Initial Value:')) |
310 array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5, |
310 array_panel_rightsizer.AddWindow(array_initialvalue_label, 1, border=5, |
311 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
311 flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL) |
312 |
312 |
313 self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel, |
313 self.ArrayInitialValue = wx.TextCtrl(self.ArrayPanel, |
314 style=wx.TE_PROCESS_ENTER|wx.TE_RICH) |
314 style=wx.TE_PROCESS_ENTER|wx.TE_RICH) |
315 self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue) |
315 self.Bind(wx.EVT_TEXT_ENTER, self.OnReturnKeyPressed, self.ArrayInitialValue) |
316 array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5, |
316 array_panel_rightsizer.AddWindow(self.ArrayInitialValue, 1, border=5, |
317 flag=wx.ALL) |
317 flag=wx.ALL) |
318 |
318 |
319 self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel, |
319 self.ArrayDimensions = CustomEditableListBox(self.ArrayPanel, |
320 label=_("Dimensions:"), style=wx.gizmos.EL_ALLOW_NEW| |
320 label=_("Dimensions:"), style=wx.gizmos.EL_ALLOW_NEW| |
321 wx.gizmos.EL_ALLOW_EDIT| |
321 wx.gizmos.EL_ALLOW_EDIT| |
322 wx.gizmos.EL_ALLOW_DELETE) |
322 wx.gizmos.EL_ALLOW_DELETE) |
323 for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton", |
323 for func in ["_OnLabelEndEdit", "_OnAddButton", "_OnDelButton", |
324 "_OnUpButton", "_OnDownButton"]: |
324 "_OnUpButton", "_OnDownButton"]: |
325 setattr(self.ArrayDimensions, func, self.OnDimensionsChanged) |
325 setattr(self.ArrayDimensions, func, self.OnDimensionsChanged) |
326 array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5, |
326 array_panel_sizer.AddWindow(self.ArrayDimensions, 0, border=5, |
327 flag=wx.GROW|wx.ALL) |
327 flag=wx.GROW|wx.ALL) |
328 |
328 |
329 self.ArrayPanel.SetSizer(array_panel_sizer) |
329 self.ArrayPanel.SetSizer(array_panel_sizer) |
330 |
330 |
331 # Panel for Structure data types |
331 # Panel for Structure data types |
332 |
332 |
333 self.StructurePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
333 self.StructurePanel = wx.Panel(self.Editor, style=wx.TAB_TRAVERSAL) |
334 typeinfos_sizer.AddWindow(self.StructurePanel, 1) |
334 typeinfos_sizer.AddWindow(self.StructurePanel, 1) |
335 |
335 |
336 structure_panel_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
336 structure_panel_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
337 structure_panel_sizer.AddGrowableCol(0) |
337 structure_panel_sizer.AddGrowableCol(0) |
338 structure_panel_sizer.AddGrowableRow(1) |
338 structure_panel_sizer.AddGrowableRow(1) |
339 |
339 |
340 structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) |
340 structure_button_sizer = wx.FlexGridSizer(cols=5, hgap=5, rows=1, vgap=0) |
341 structure_button_sizer.AddGrowableCol(0) |
341 structure_button_sizer.AddGrowableCol(0) |
342 structure_button_sizer.AddGrowableRow(0) |
342 structure_button_sizer.AddGrowableRow(0) |
343 structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5, |
343 structure_panel_sizer.AddSizer(structure_button_sizer, 0, border=5, |
344 flag=wx.ALL|wx.GROW) |
344 flag=wx.ALL|wx.GROW) |
345 |
345 |
346 structure_elements_label = wx.StaticText(self.StructurePanel, |
346 structure_elements_label = wx.StaticText(self.StructurePanel, |
347 label=_('Elements :')) |
347 label=_('Elements :')) |
348 structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM) |
348 structure_button_sizer.AddWindow(structure_elements_label, flag=wx.ALIGN_BOTTOM) |
349 |
349 |
350 for name, bitmap, help in [ |
350 for name, bitmap, help in [ |
351 ("StructureAddButton", "add_element", _("Add element")), |
351 ("StructureAddButton", "add_element", _("Add element")), |
352 ("StructureDeleteButton", "remove_element", _("Remove element")), |
352 ("StructureDeleteButton", "remove_element", _("Remove element")), |
353 ("StructureUpButton", "up", _("Move element up")), |
353 ("StructureUpButton", "up", _("Move element up")), |
354 ("StructureDownButton", "down", _("Move element down"))]: |
354 ("StructureDownButton", "down", _("Move element down"))]: |
355 button = wx.lib.buttons.GenBitmapButton(self.StructurePanel, |
355 button = wx.lib.buttons.GenBitmapButton(self.StructurePanel, |
356 bitmap=GetBitmap(bitmap), size=wx.Size(28, 28), style=wx.NO_BORDER) |
356 bitmap=GetBitmap(bitmap), size=wx.Size(28, 28), style=wx.NO_BORDER) |
357 button.SetToolTipString(help) |
357 button.SetToolTipString(help) |
358 setattr(self, name, button) |
358 setattr(self, name, button) |
359 structure_button_sizer.AddWindow(button) |
359 structure_button_sizer.AddWindow(button) |
360 |
360 |
361 self.StructureElementsGrid = CustomGrid(self.StructurePanel, |
361 self.StructureElementsGrid = CustomGrid(self.StructurePanel, |
362 size=wx.Size(0, 150), style=wx.VSCROLL) |
362 size=wx.Size(0, 150), style=wx.VSCROLL) |
363 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, |
363 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, |
364 self.OnStructureElementsGridCellChange) |
364 self.OnStructureElementsGridCellChange) |
365 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, |
365 self.StructureElementsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, |
366 self.OnStructureElementsGridEditorShown) |
366 self.OnStructureElementsGridEditorShown) |
367 structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW) |
367 structure_panel_sizer.AddWindow(self.StructureElementsGrid, flag=wx.GROW) |
368 |
368 |
369 self.StructurePanel.SetSizer(structure_panel_sizer) |
369 self.StructurePanel.SetSizer(structure_panel_sizer) |
370 |
370 |
371 self.Editor.SetSizer(self.MainSizer) |
371 self.Editor.SetSizer(self.MainSizer) |
372 |
372 |
373 def __init__(self, parent, tagname, window, controler): |
373 def __init__(self, parent, tagname, window, controler): |
374 EditorPanel.__init__(self, parent, tagname, window, controler) |
374 EditorPanel.__init__(self, parent, tagname, window, controler) |
375 |
375 |
376 self.StructureElementDefaultValue = {"Name" : "", "Type" : "INT", "Initial Value" : ""} |
376 self.StructureElementDefaultValue = {"Name" : "", "Type" : DefaultType, "Initial Value" : ""} |
377 self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames()) |
377 self.StructureElementsTable = ElementsTable(self, [], GetElementsTableColnames()) |
378 self.StructureColSizes = [40, 150, 100, 250] |
378 self.StructureColSizes = [40, 150, 100, 250] |
379 self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
379 self.StructureColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT] |
380 |
380 |
381 self.StructureElementsGrid.SetTable(self.StructureElementsTable) |
381 self.StructureElementsGrid.SetTable(self.StructureElementsTable) |
382 self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton, |
382 self.StructureElementsGrid.SetButtons({"Add": self.StructureAddButton, |
383 "Delete": self.StructureDeleteButton, |
383 "Delete": self.StructureDeleteButton, |
384 "Up": self.StructureUpButton, |
384 "Up": self.StructureUpButton, |
385 "Down": self.StructureDownButton}) |
385 "Down": self.StructureDownButton}) |
386 |
386 |
387 def _AddStructureElement(new_row): |
387 def _AddStructureElement(new_row): |
388 self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy()) |
388 self.StructureElementsTable.InsertRow(new_row, self.StructureElementDefaultValue.copy()) |
389 self.RefreshTypeInfos() |
389 self.RefreshTypeInfos() |
390 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
390 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
391 return new_row |
391 return new_row |
392 setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement) |
392 setattr(self.StructureElementsGrid, "_AddRow", _AddStructureElement) |
393 |
393 |
394 def _DeleteStructureElement(row): |
394 def _DeleteStructureElement(row): |
395 self.StructureElementsTable.RemoveRow(row) |
395 self.StructureElementsTable.RemoveRow(row) |
396 self.RefreshTypeInfos() |
396 self.RefreshTypeInfos() |
397 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
397 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
398 setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement) |
398 setattr(self.StructureElementsGrid, "_DeleteRow", _DeleteStructureElement) |
399 |
399 |
400 def _MoveStructureElement(row, move): |
400 def _MoveStructureElement(row, move): |
401 new_row = self.StructureElementsTable.MoveRow(row, move) |
401 new_row = self.StructureElementsTable.MoveRow(row, move) |
402 if new_row != row: |
402 if new_row != row: |
403 self.RefreshTypeInfos() |
403 self.RefreshTypeInfos() |
404 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
404 self.StructureElementsTable.ResetView(self.StructureElementsGrid) |
405 return new_row |
405 return new_row |
406 setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement) |
406 setattr(self.StructureElementsGrid, "_MoveRow", _MoveStructureElement) |
407 |
407 |
408 self.StructureElementsGrid.SetRowLabelSize(0) |
408 self.StructureElementsGrid.SetRowLabelSize(0) |
409 for col in range(self.StructureElementsTable.GetNumberCols()): |
409 for col in range(self.StructureElementsTable.GetNumberCols()): |
410 attr = wx.grid.GridCellAttr() |
410 attr = wx.grid.GridCellAttr() |
411 attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE) |
411 attr.SetAlignment(self.StructureColAlignements[col], wx.ALIGN_CENTRE) |
412 self.StructureElementsGrid.SetColAttr(col, attr) |
412 self.StructureElementsGrid.SetColAttr(col, attr) |
413 self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col]) |
413 self.StructureElementsGrid.SetColMinimalWidth(col, self.StructureColSizes[col]) |
414 self.StructureElementsGrid.AutoSizeColumn(col, False) |
414 self.StructureElementsGrid.AutoSizeColumn(col, False) |
415 self.StructureElementsGrid.RefreshButtons() |
415 self.StructureElementsGrid.RefreshButtons() |
416 |
416 |
417 for datatype in GetDatatypeTypes(): |
417 for datatype in GetDatatypeTypes(): |
418 self.DerivationType.Append(_(datatype)) |
418 self.DerivationType.Append(_(datatype)) |
419 self.SubrangePanel.Hide() |
419 self.SubrangePanel.Hide() |
420 self.EnumeratedPanel.Hide() |
420 self.EnumeratedPanel.Hide() |
421 self.ArrayPanel.Hide() |
421 self.ArrayPanel.Hide() |
422 self.StructurePanel.Hide() |
422 self.StructurePanel.Hide() |
423 self.CurrentPanel = "Directly" |
423 self.CurrentPanel = "Directly" |
424 self.Highlights = [] |
424 self.Highlights = [] |
425 self.Initializing = False |
425 self.Initializing = False |
426 |
426 |
427 self.HighlightControls = { |
427 self.HighlightControls = { |
428 ("Directly", "base"): self.DirectlyBaseType, |
428 ("Directly", "base"): self.DirectlyBaseType, |
429 ("Directly", "initial"): self.DirectlyInitialValue, |
429 ("Directly", "initial"): self.DirectlyInitialValue, |
430 ("Subrange", "base"): self.SubrangeBaseType, |
430 ("Subrange", "base"): self.SubrangeBaseType, |
431 ("Subrange", "lower"): self.SubrangeMinimum, |
431 ("Subrange", "lower"): self.SubrangeMinimum, |