X-Git-Url: https://wylark.com/src/munter.git/blobdiff_plain/de57724f5a4113e74cc23794cb9578661686b3cd..d9e9fa4ec43811215bf42bd70ef9ba694245678d:/munter/gui.py?ds=sidebyside diff --git a/munter/gui.py b/munter/gui.py index c8e4130..fc5d82a 100644 --- a/munter/gui.py +++ b/munter/gui.py @@ -19,12 +19,7 @@ class MainFrame(wx.Frame): self.SetTitle('Munter.py') self.SetSize(600, 400) - self.props = dict() - self.props['distance'] = 0 - self.props['elevation'] = 0 - self.props['fitness'] = 'average' - self.props['units'] = 'imperial' - self.props['travel_mode'] = 'uphill' + self.props = self.init_props() self.pnl = wx.Panel(self) @@ -35,10 +30,8 @@ class MainFrame(wx.Frame): st.SetFont(font) - #sizer = wx.BoxSizer(wx.VERTICAL) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 0)) - #self.pnl.SetSizer(sizer) # text entry fields self.st_distance = wx.StaticText(self.pnl, label="Distance: ") @@ -48,41 +41,49 @@ class MainFrame(wx.Frame): self.te_elevation = wx.TextCtrl(self.pnl, value="0", size=(140, -1)) self.st_fitness = wx.StaticText(self.pnl, label="Fitness: ") - cb_fitness_choices = ['slow', 'average', 'fast'] - cb_fitness_default = 'average' - self.cb_fitness = wx.ComboBox(self.pnl, choices=cb_fitness_choices, - value=cb_fitness_default, style=wx.CB_READONLY) + rb_fitness_choices = ['slow', 'average', 'fast'] + rb_fitness_default = 'average' + self.rb_fitness = wx.ComboBox(self.pnl, choices=rb_fitness_choices, + value=rb_fitness_default, style=wx.CB_READONLY) self.st_travel_mode = wx.StaticText(self.pnl, label="Travel Mode: ") - cb_travel_mode_choices = ['uphill', 'flat', 'downhill', 'bushwhacking'] - cb_travel_mode_default = 'uphill' - self.cb_travel_mode = wx.ComboBox(self.pnl, choices=cb_travel_mode_choices, - value=cb_travel_mode_default, style=wx.CB_READONLY) + rb_travel_mode_choices = ['uphill', 'flat', 'downhill', 'bushwhacking'] + rb_travel_mode_default = 'uphill' + self.rb_travel_mode = wx.ComboBox(self.pnl, + choices=rb_travel_mode_choices, + value=rb_travel_mode_default, style=wx.CB_READONLY) self.st_units = wx.StaticText(self.pnl, label="Units: ") - cb_units_choices = ['imperial', 'metric'] - cb_units_default = 'imperial' - self.cb_units = wx.ComboBox(self.pnl, choices=cb_units_choices, - value=cb_units_default, style=wx.CB_READONLY) + rb_units_choices = ['imperial', 'metric'] + rb_units_default = 'imperial' + + self.rb_units = [] + for choice in range(len(rb_units_choices)): + label = rb_units_choices[choice] + style = wx.RB_GROUP if not choice else 0 + self.rb_units.append(wx.RadioButton(self.pnl, label=label, style=style)) # static text - self.st_mtc = wx.StaticText(self.pnl, label="0h", + self.st_mtc = wx.StaticText(self.pnl, label="", style=wx.ALIGN_CENTRE_HORIZONTAL) st_mtc_font = st.GetFont() st_mtc_font.PointSize += 10 self.st_mtc.SetFont(st_mtc_font) + # buttons + self.b_reset = wx.Button(self.pnl, wx.NewId(), '&Reset', (-1, -1), + wx.DefaultSize) + # bindings self.pnl.Bind(wx.EVT_TEXT, self.update_distance, self.te_distance) self.pnl.Bind(wx.EVT_TEXT, self.update_elevation, self.te_elevation) - self.cb_fitness.Bind(wx.EVT_COMBOBOX, self.update_fitness) - self.cb_travel_mode.Bind(wx.EVT_COMBOBOX, self.update_travel_mode) - self.cb_units.Bind(wx.EVT_COMBOBOX, self.update_units) + self.rb_fitness.Bind(wx.EVT_COMBOBOX, self.update_fitness) + self.rb_travel_mode.Bind(wx.EVT_COMBOBOX, self.update_travel_mode) + self.b_reset.Bind(wx.EVT_BUTTON, self.reset) - # buttons - b_clear = wx.Button(self.pnl, wx.NewId(), '&Clear', (-1, -1), - wx.DefaultSize) + for cb in self.rb_units: + cb.Bind(wx.EVT_RADIOBUTTON, self.update_units) # layout b = 5 @@ -102,17 +103,18 @@ class MainFrame(wx.Frame): hsizer_fitness = wx.BoxSizer(wx.HORIZONTAL) hsizer_fitness.Add(self.st_fitness, 0, wx.RIGHT, b) - hsizer_fitness.Add(self.cb_fitness, 1, wx.GROW, b) + hsizer_fitness.Add(self.rb_fitness, 1, wx.GROW, b) hsizer_fitness.SetItemMinSize(self.st_fitness, (w, -1)) hsizer_travel_mode = wx.BoxSizer(wx.HORIZONTAL) hsizer_travel_mode.Add(self.st_travel_mode, 0, wx.RIGHT, b) - hsizer_travel_mode.Add(self.cb_travel_mode, 1, wx.GROW, b) + hsizer_travel_mode.Add(self.rb_travel_mode, 1, wx.GROW, b) hsizer_travel_mode.SetItemMinSize(self.st_travel_mode, (w, -1)) hsizer_units = wx.BoxSizer(wx.HORIZONTAL) hsizer_units.Add(self.st_units, 0, wx.RIGHT, b) - hsizer_units.Add(self.cb_units, 1, wx.GROW, b) + for cb in range(len(self.rb_units)): + hsizer_units.Add(self.rb_units[cb], cb + 1, wx.GROW, b) hsizer_units.SetItemMinSize(self.st_units, (w, -1)) hsizer_mtc = wx.BoxSizer(wx.HORIZONTAL) @@ -120,7 +122,7 @@ class MainFrame(wx.Frame): hsizer_mtc.SetItemMinSize(self.st_mtc, (w, -1)) hsizer5 = wx.BoxSizer(wx.HORIZONTAL) - hsizer5.Add(b_clear, 0) + hsizer5.Add(self.b_reset, 0) b = 5 vsizer1 = wx.BoxSizer(wx.VERTICAL) @@ -136,6 +138,16 @@ class MainFrame(wx.Frame): self.pnl.SetSizerAndFit(vsizer1) self.pnl.SetClientSize(vsizer1.GetSize()) + self.update_mtc() + + def init_props(self): + props = dict() + props['distance'] = 0 + props['elevation'] = 0 + props['fitness'] = 'average' + props['units'] = 'imperial' + props['travel_mode'] = 'uphill' + return props def update_distance(self, event): value = self.te_distance.GetValue() @@ -150,19 +162,20 @@ class MainFrame(wx.Frame): self.update_mtc() def update_fitness(self, event): - value = self.cb_fitness.GetValue() + value = self.rb_fitness.GetValue() if value: self.props['fitness'] = value self.update_mtc() def update_travel_mode(self, event): - value = self.cb_travel_mode.GetValue() + value = self.rb_travel_mode.GetValue() if value: self.props['travel_mode'] = value self.update_mtc() def update_units(self, event): - value = self.cb_units.GetValue() + rb = event.GetEventObject() + value = rb.GetLabel() if value: self.props['units'] = value self.update_mtc() @@ -186,6 +199,15 @@ class MainFrame(wx.Frame): self.pnl.Layout() + def reset(self, event): + self.props = self.init_props() + self.te_distance.SetValue(str(self.props['distance'])) + self.te_elevation.SetValue(str(self.props['elevation'])) + self.rb_fitness.SetValue(str(self.props['fitness'])) + self.rb_travel_mode.SetValue(str(self.props['travel_mode'])) + # leave units as the user selected + self.update_mtc() + def startup(): app = wx.App() frm = MainFrame(None)