dialogs/DurationEditorDialog.py
changeset 714 131ea7f237b9
parent 584 c04e7af597d9
--- a/dialogs/DurationEditorDialog.py	Fri Jun 15 18:03:25 2012 +0200
+++ b/dialogs/DurationEditorDialog.py	Mon Jun 25 20:03:53 2012 +0200
@@ -26,6 +26,10 @@
 
 import wx
 
+#-------------------------------------------------------------------------------
+#                                  Helpers
+#-------------------------------------------------------------------------------
+
 MICROSECONDS = 0.001
 MILLISECONDS = 1
 SECOND = 1000
@@ -35,139 +39,58 @@
 
 IEC_TIME_MODEL = re.compile("(?:(?:T|TIME)#)?(-)?(?:(%(float)s)D_?)?(?:(%(float)s)H_?)?(?:(%(float)s)M(?!S)_?)?(?:(%(float)s)S_?)?(?:(%(float)s)MS)?" % {"float": "[0-9]+(?:\.[0-9]+)?"})
 
+CONTROLS = [
+    ("Days", _('Days:')),
+    ("Hours", _('Hours:')),
+    ("Minutes", _('Minutes:')),
+    ("Seconds", _('Seconds:')),
+    ("Milliseconds", _('Milliseconds:')),
+    ("Microseconds", _('Microseconds:')),
+]
+
 #-------------------------------------------------------------------------------
 #                         Edit Duration Value Dialog
 #-------------------------------------------------------------------------------
 
-[ID_DURATIONEDITORDIALOG, ID_DURATIONEDITORDIALOGDAYSLABEL,
- ID_DURATIONEDITORDIALOGDAYS, ID_DURATIONEDITORDIALOGHOURSLABEL, 
- ID_DURATIONEDITORDIALOGHOURS, ID_DURATIONEDITORDIALOGMINUTESLABEL,
- ID_DURATIONEDITORDIALOGMINUTES, ID_DURATIONEDITORDIALOGSECONDSLABEL, 
- ID_DURATIONEDITORDIALOGSECONDS, ID_DURATIONEDITORDIALOGMILLISECONDSLABEL,
- ID_DURATIONEDITORDIALOGMILLISECONDS, ID_DURATIONEDITORDIALOGMICROSECONDSLABEL,
- ID_DURATIONEDITORDIALOGMICROSECONDS, 
-] = [wx.NewId() for _init_ctrls in range(13)]
+class DurationEditorDialog(wx.Dialog):
 
-class DurationEditorDialog(wx.Dialog):
-    
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id = None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
-
-    def _init_coll_MainSizer_Items(self, parent):
-        parent.AddSizer(self.ControlsSizer, 0, border=20, flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW)
-        parent.AddSizer(self.ButtonSizer, 0, border=20, flag=wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.GROW)
+    def __init__(self, parent):
+        wx.Dialog.__init__(self, parent, 
+              size=wx.Size(700, 200), title=_('Edit Duration'))
         
-    def _init_coll_MainSizer_Growables(self, parent):
-        parent.AddGrowableCol(0)
-        parent.AddGrowableRow(0)
+        main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
+        main_sizer.AddGrowableCol(0)
+        main_sizer.AddGrowableRow(0)
         
-    def _init_coll_ControlsSizer_Items(self, parent):
-        parent.AddWindow(self.DaysLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.HoursLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.MinutesLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.SecondsLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.MillisecondsLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.MicrosecondsLabel, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Days, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Hours, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Minutes, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Seconds, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Milliseconds, 0, border=0, flag=wx.GROW)
-        parent.AddWindow(self.Microseconds, 0, border=0, flag=wx.GROW)
+        controls_sizer = wx.FlexGridSizer(cols=len(CONTROLS), hgap=10, rows=2, vgap=10)
+        main_sizer.AddSizer(controls_sizer, border=20, 
+              flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW)
         
-    def _init_coll_ControlsSizer_Growables(self, parent):
-        parent.AddGrowableCol(0)
-        parent.AddGrowableCol(1)
-        parent.AddGrowableCol(2)
-        parent.AddGrowableCol(3)
-        parent.AddGrowableCol(4)
-        parent.AddGrowableCol(5)
-
-    def _init_sizers(self):
-        self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
-        self.ControlsSizer = wx.FlexGridSizer(cols=6, hgap=10, rows=2, vgap=10)
+        controls = []
+        for i, (name, label) in enumerate(CONTROLS):
+            controls_sizer.AddGrowableCol(i)
+            
+            st = wx.StaticText(self, label=label)
+            txtctrl = wx.TextCtrl(self, value='0', style=wx.TE_PROCESS_ENTER)
+            self.Bind(wx.EVT_TEXT_ENTER, 
+                      self.GetControlValueTestFunction(txtctrl), 
+                      txtctrl)
+            setattr(self, name, txtctrl)
         
-        self._init_coll_MainSizer_Items(self.MainSizer)
-        self._init_coll_MainSizer_Growables(self.MainSizer)
-        self._init_coll_ControlsSizer_Items(self.ControlsSizer)
-        self._init_coll_ControlsSizer_Growables(self.ControlsSizer)
+            controls.append((st, txtctrl))
+            
+        for st, txtctrl in controls:
+            controls_sizer.AddWindow(st, flag=wx.GROW)
+            
+        for st, txtctrl in controls:
+            controls_sizer.AddWindow(txtctrl, flag=wx.GROW)
         
-        self.SetSizer(self.MainSizer)
-
-    def _init_ctrls(self, prnt):
-        wx.Dialog.__init__(self, id=ID_DURATIONEDITORDIALOG, 
-              name='DurationEditorDialog', parent=prnt,  
-              size=wx.Size(700, 200), style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
-              title=_('Edit Duration'))
+        button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
+        self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
+        main_sizer.AddSizer(button_sizer, border=20, 
+              flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT)
         
-        self.DaysLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGDAYSLABEL,
-              label=_('Days:'), name='DaysLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Days = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGDAYS, value='0',
-              name='Days', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Days), id=ID_DURATIONEDITORDIALOGDAYS)
-        
-        self.HoursLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGHOURSLABEL,
-              label=_('Hours:'), name='HoursLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Hours = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGHOURS, value='0',
-              name='Hours', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Hours), id=ID_DURATIONEDITORDIALOGHOURS)
-        
-        self.MinutesLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGMINUTESLABEL,
-              label=_('Minutes:'), name='MinutesLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Minutes = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGMINUTES, value='0',
-              name='Minutes', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Minutes), id=ID_DURATIONEDITORDIALOGMINUTES)
-        
-        self.SecondsLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGSECONDSLABEL,
-              label=_('Seconds:'), name='SecondsLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Seconds = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGSECONDS, value='0',
-              name='Seconds', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Seconds), id=ID_DURATIONEDITORDIALOGSECONDS)
-        
-        self.MillisecondsLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGMILLISECONDSLABEL,
-              label=_('Milliseconds:'), name='MillisecondsLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Milliseconds = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGMILLISECONDS, value='0',
-              name='Milliseconds', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Milliseconds), id=ID_DURATIONEDITORDIALOGMILLISECONDS)
-        
-        self.MicrosecondsLabel = wx.StaticText(id=ID_DURATIONEDITORDIALOGMICROSECONDSLABEL,
-              label=_('Microseconds:'), name='MicrosecondsLabel', parent=self,
-              pos=wx.Point(0, 0), size=wx.Size(0, 17), style=0)
-        
-        self.Microseconds = wx.TextCtrl(id=ID_DURATIONEDITORDIALOGMICROSECONDS, value='0',
-              name='Microseconds', parent=self, pos=wx.Point(0, 0),
-              size=wx.Size(0, 24), style=wx.TE_PROCESS_ENTER)
-        self.Bind(wx.EVT_TEXT_ENTER, self.GetControlValueTestFunction(self.Milliseconds), id=ID_DURATIONEDITORDIALOGMICROSECONDS)
-        
-        self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE)
-        if wx.VERSION >= (2, 5, 0):
-            self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId())
-        else:
-            self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId())
-        
-        self._init_sizers()
-    
-    def __init__(self, parent):
-        self._init_ctrls(parent)
+        self.SetSizer(main_sizer)
         
         self.Days.SetFocus()