55 |
55 |
56 class DurationEditorDialog(wx.Dialog): |
56 class DurationEditorDialog(wx.Dialog): |
57 |
57 |
58 def __init__(self, parent): |
58 def __init__(self, parent): |
59 wx.Dialog.__init__(self, parent, title=_('Edit Duration')) |
59 wx.Dialog.__init__(self, parent, title=_('Edit Duration')) |
60 |
60 |
61 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
61 main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
62 main_sizer.AddGrowableCol(0) |
62 main_sizer.AddGrowableCol(0) |
63 main_sizer.AddGrowableRow(0) |
63 main_sizer.AddGrowableRow(0) |
64 |
64 |
65 controls_sizer = wx.FlexGridSizer(cols=len(CONTROLS), hgap=10, rows=2, vgap=10) |
65 controls_sizer = wx.FlexGridSizer(cols=len(CONTROLS), hgap=10, rows=2, vgap=10) |
66 main_sizer.AddSizer(controls_sizer, border=20, |
66 main_sizer.AddSizer(controls_sizer, border=20, |
67 flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW) |
67 flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW) |
68 |
68 |
69 controls = [] |
69 controls = [] |
70 for i, (name, label) in enumerate(CONTROLS): |
70 for i, (name, label) in enumerate(CONTROLS): |
71 controls_sizer.AddGrowableCol(i) |
71 controls_sizer.AddGrowableCol(i) |
72 |
72 |
73 st = wx.StaticText(self, label=label) |
73 st = wx.StaticText(self, label=label) |
74 txtctrl = wx.TextCtrl(self, value='0', style=wx.TE_PROCESS_ENTER) |
74 txtctrl = wx.TextCtrl(self, value='0', style=wx.TE_PROCESS_ENTER) |
75 self.Bind(wx.EVT_TEXT_ENTER, |
75 self.Bind(wx.EVT_TEXT_ENTER, |
76 self.GetControlValueTestFunction(txtctrl), |
76 self.GetControlValueTestFunction(txtctrl), |
77 txtctrl) |
77 txtctrl) |
78 setattr(self, name, txtctrl) |
78 setattr(self, name, txtctrl) |
79 |
79 |
80 controls.append((st, txtctrl)) |
80 controls.append((st, txtctrl)) |
81 |
81 |
82 for st, txtctrl in controls: |
82 for st, txtctrl in controls: |
83 controls_sizer.AddWindow(st, flag=wx.GROW) |
83 controls_sizer.AddWindow(st, flag=wx.GROW) |
84 |
84 |
85 for st, txtctrl in controls: |
85 for st, txtctrl in controls: |
86 controls_sizer.AddWindow(txtctrl, flag=wx.GROW) |
86 controls_sizer.AddWindow(txtctrl, flag=wx.GROW) |
87 |
87 |
88 button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
88 button_sizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
89 self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton()) |
89 self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton()) |
90 main_sizer.AddSizer(button_sizer, border=20, |
90 main_sizer.AddSizer(button_sizer, border=20, |
91 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
91 flag=wx.ALIGN_RIGHT|wx.BOTTOM|wx.LEFT|wx.RIGHT) |
92 |
92 |
93 self.SetSizer(main_sizer) |
93 self.SetSizer(main_sizer) |
94 self.Fit() |
94 self.Fit() |
95 self.Days.SetFocus() |
95 self.Days.SetFocus() |
96 |
96 |
97 def SetDuration(self, value): |
97 def SetDuration(self, value): |
98 result = IEC_TIME_MODEL.match(value.upper()) |
98 result = IEC_TIME_MODEL.match(value.upper()) |
99 if result is not None: |
99 if result is not None: |
100 values = result.groups() |
100 values = result.groups() |
101 for control, index in [(self.Days, 1), (self.Hours, 2), |
101 for control, index in [(self.Days, 1), (self.Hours, 2), |
128 def GetDuration(self): |
128 def GetDuration(self): |
129 milliseconds = 0 |
129 milliseconds = 0 |
130 for control, factor in [(self.Days, DAY), (self.Hours, HOUR), |
130 for control, factor in [(self.Days, DAY), (self.Hours, HOUR), |
131 (self.Minutes, MINUTE), (self.Seconds, SECOND), |
131 (self.Minutes, MINUTE), (self.Seconds, SECOND), |
132 (self.Milliseconds, MILLISECONDS), (self.Microseconds, MICROSECONDS)]: |
132 (self.Milliseconds, MILLISECONDS), (self.Microseconds, MICROSECONDS)]: |
133 |
133 |
134 milliseconds += float(control.GetValue()) * factor |
134 milliseconds += float(control.GetValue()) * factor |
135 |
135 |
136 not_null = False |
136 not_null = False |
137 duration = "T#" |
137 duration = "T#" |
138 for value, format in [(int(milliseconds) / DAY, "%dd"), |
138 for value, format in [(int(milliseconds) / DAY, "%dd"), |
139 ((int(milliseconds) % DAY) / HOUR, "%dh"), |
139 ((int(milliseconds) % DAY) / HOUR, "%dh"), |
140 ((int(milliseconds) % HOUR) / MINUTE, "%dm"), |
140 ((int(milliseconds) % HOUR) / MINUTE, "%dm"), |
141 ((int(milliseconds) % MINUTE) / SECOND, "%ds")]: |
141 ((int(milliseconds) % MINUTE) / SECOND, "%ds")]: |
142 |
142 |
143 if value > 0 or not_null: |
143 if value > 0 or not_null: |
144 duration += format % value |
144 duration += format % value |
145 not_null = True |
145 not_null = True |
146 |
146 |
147 duration += "%gms" % (milliseconds % SECOND) |
147 duration += "%gms" % (milliseconds % SECOND) |
148 return duration |
148 return duration |
149 |
149 |
150 def OnOK(self, event): |
150 def OnOK(self, event): |
151 self.OnCloseDialog() |
151 self.OnCloseDialog() |
152 |
152 |
153 def OnCloseDialog(self): |
153 def OnCloseDialog(self): |
154 errors = [] |
154 errors = [] |
155 for control, name in [(self.Days, _("days")), (self.Hours, _("hours")), |
155 for control, name in [(self.Days, _("days")), (self.Hours, _("hours")), |
156 (self.Minutes, _("minutes")), (self.Seconds, _("seconds")), |
156 (self.Minutes, _("minutes")), (self.Seconds, _("seconds")), |
157 (self.Milliseconds, _("milliseconds"))]: |
157 (self.Milliseconds, _("milliseconds"))]: |
158 try: |
158 try: |
159 value = float(control.GetValue()) |
159 value = float(control.GetValue()) |
160 except ValueError, e: |
160 except ValueError, e: |