dialogs/ArrayTypeDialog.py
changeset 1730 64d8f52bc8c8
parent 1726 d51af006fa6b
child 1734 750eeb7230a1
equal deleted inserted replaced
1726:d51af006fa6b 1730:64d8f52bc8c8
    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()