X-Git-Url: https://wylark.com/src/munter.git/blobdiff_plain/7696f22cef86459d3632069953d73167628f8c29..29e71e0e4095d097b9c420ed7a4757651cafa6b4:/munter/gui.py?ds=sidebyside diff --git a/munter/gui.py b/munter/gui.py index 50ee5d5..59ff7f6 100644 --- a/munter/gui.py +++ b/munter/gui.py @@ -27,6 +27,13 @@ class MainFrame(wx.Frame): self.props = self.init_props() self.pnl = wx.Panel(self) + # wx item vars + self.wx_items = dict() + self.wx_items['StaticText'] = dict() + self.wx_items['TextEntry'] = dict() + self.wx_items['RadioButton'] = dict() + self.wx_items['ComboBox'] = dict() + # setup the GUI itself self.create_wx_items() self.establish_wx_bindings() @@ -55,46 +62,62 @@ class MainFrame(wx.Frame): self.program_name.SetFont(font) # text entry fields - self.st_distance = wx.StaticText(self.pnl, label="Distance: ", style=wx.ALIGN_RIGHT) - self.te_distance = wx.TextCtrl(self.pnl, value="0", size=(140, -1)) - - self.st_elevation = wx.StaticText(self.pnl, label="Elevation: ", style=wx.ALIGN_RIGHT) - self.te_elevation = wx.TextCtrl(self.pnl, value="0", size=(140, -1)) - - self.st_fitness = wx.StaticText(self.pnl, label="Fitness: ", style=wx.ALIGN_RIGHT) + self.wx_items['StaticText']['distance'] = wx.StaticText(self.pnl, + label="Distance: ", + style=wx.ALIGN_RIGHT) + self.wx_items['TextEntry']['distance'] = wx.TextCtrl(self.pnl, + value="0", + size=(140, -1)) + + self.wx_items['StaticText']['elevation'] = wx.StaticText(self.pnl, + label="Elevation: ", + style=wx.ALIGN_RIGHT) + self.wx_items['TextEntry']['elevation'] = wx.TextCtrl(self.pnl, + value="0", + size=(140, -1)) + + self.wx_items['StaticText']['fitness'] = wx.StaticText(self.pnl, + label="Fitness: ", + style=wx.ALIGN_RIGHT) 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: ", - style=wx.ALIGN_RIGHT) + self.wx_items['RadioButton']['fitness'] = wx.ComboBox(self.pnl, + choices=rb_fitness_choices, + value=rb_fitness_default, + style=wx.CB_READONLY) + + self.wx_items['StaticText']['travel_mode'] = wx.StaticText(self.pnl, + label="Travel Mode: ", + style=wx.ALIGN_RIGHT) 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: ", style=wx.ALIGN_RIGHT) + self.wx_items['RadioButton']['travel_mode'] = wx.ComboBox(self.pnl, + choices=rb_travel_mode_choices, + value=rb_travel_mode_default, + style=wx.CB_READONLY) + + self.wx_items['StaticText']['units'] = wx.StaticText(self.pnl, + label="Units: ", + style=wx.ALIGN_RIGHT) rb_units_choices = ['imperial', 'metric'] rb_units_default = 'imperial' - self.rb_units = [] + self.wx_items['RadioButton']['units'] = [] for choice in rb_units_choices: label = choice style = wx.RB_GROUP if choice == rb_units_default else 0 - self.rb_units.append(wx.RadioButton(self.pnl, label=label, style=style)) + self.wx_items['RadioButton']['units'].append(wx.RadioButton(self.pnl, + label=label, + style=style)) # static text - self.st_mtc = wx.StaticText(self.pnl, label="", - style=wx.ALIGN_CENTRE_HORIZONTAL) + self.wx_items['StaticText']['mtc'] = wx.StaticText(self.pnl, + label="", + style=wx.ALIGN_CENTRE_HORIZONTAL) st_mtc_font = self.program_name.GetFont() st_mtc_font.PointSize += 10 - self.st_mtc.SetFont(st_mtc_font) + self.wx_items['StaticText']['mtc'].SetFont(st_mtc_font) # buttons self.b_reset = wx.Button(self.pnl, wx.NewId(), '&Reset', (-1, -1), @@ -102,13 +125,13 @@ class MainFrame(wx.Frame): def establish_wx_bindings(self): """establish wxPython 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.rb_fitness.Bind(wx.EVT_COMBOBOX, self.update_fitness) - self.rb_travel_mode.Bind(wx.EVT_COMBOBOX, self.update_travel_mode) + self.pnl.Bind(wx.EVT_TEXT, self.update_distance, self.wx_items['TextEntry']['distance']) + self.pnl.Bind(wx.EVT_TEXT, self.update_elevation, self.wx_items['TextEntry']['elevation']) + self.wx_items['RadioButton']['fitness'].Bind(wx.EVT_COMBOBOX, self.update_fitness) + self.wx_items['RadioButton']['travel_mode'].Bind(wx.EVT_COMBOBOX, self.update_travel_mode) self.b_reset.Bind(wx.EVT_BUTTON, self.reset) - for rb_unit in self.rb_units: + for rb_unit in self.wx_items['RadioButton']['units']: rb_unit.Bind(wx.EVT_RADIOBUTTON, self.update_units) def do_wx_layout(self): @@ -122,34 +145,37 @@ class MainFrame(wx.Frame): static_line = wx.StaticLine(self.pnl, wx.NewId(), style=wx.LI_HORIZONTAL) hsizer_distance = wx.BoxSizer(wx.HORIZONTAL) - hsizer_distance.Add(self.st_distance, 0, wx.RIGHT, border) - hsizer_distance.Add(self.te_distance, 1, wx.GROW, border) - hsizer_distance.SetItemMinSize(self.st_distance, (width, -1)) + hsizer_distance.Add(self.wx_items['StaticText']['distance'], 0, wx.RIGHT, border) + hsizer_distance.Add(self.wx_items['TextEntry']['distance'], 1, wx.GROW, border) + hsizer_distance.SetItemMinSize(self.wx_items['StaticText']['distance'], (width, -1)) hsizer_elevation = wx.BoxSizer(wx.HORIZONTAL) - hsizer_elevation.Add(self.st_elevation, 0, wx.RIGHT, border) - hsizer_elevation.Add(self.te_elevation, 1, wx.GROW, border) - hsizer_elevation.SetItemMinSize(self.st_elevation, (width, -1)) + hsizer_elevation.Add(self.wx_items['StaticText']['elevation'], 0, wx.RIGHT, border) + hsizer_elevation.Add(self.wx_items['TextEntry']['elevation'], 1, wx.GROW, border) + hsizer_elevation.SetItemMinSize(self.wx_items['StaticText']['elevation'], (width, -1)) hsizer_fitness = wx.BoxSizer(wx.HORIZONTAL) - hsizer_fitness.Add(self.st_fitness, 0, wx.RIGHT, border) - hsizer_fitness.Add(self.rb_fitness, 1, wx.GROW, border) - hsizer_fitness.SetItemMinSize(self.st_fitness, (width, -1)) + hsizer_fitness.Add(self.wx_items['StaticText']['fitness'], 0, wx.RIGHT, border) + hsizer_fitness.Add(self.wx_items['RadioButton']['fitness'], 1, wx.GROW, border) + hsizer_fitness.SetItemMinSize(self.wx_items['StaticText']['fitness'], (width, -1)) hsizer_travel_mode = wx.BoxSizer(wx.HORIZONTAL) - hsizer_travel_mode.Add(self.st_travel_mode, 0, wx.RIGHT, border) - hsizer_travel_mode.Add(self.rb_travel_mode, 1, wx.GROW, border) - hsizer_travel_mode.SetItemMinSize(self.st_travel_mode, (width, -1)) + hsizer_travel_mode.Add(self.wx_items['StaticText']['travel_mode'], 0, wx.RIGHT, border) + hsizer_travel_mode.Add(self.wx_items['RadioButton']['travel_mode'], 1, wx.GROW, border) + hsizer_travel_mode.SetItemMinSize(self.wx_items['StaticText']['travel_mode'], (width, -1)) hsizer_units = wx.BoxSizer(wx.HORIZONTAL) - hsizer_units.Add(self.st_units, 0, wx.RIGHT, border) - for rb_unit in range(len(self.rb_units)): - hsizer_units.Add(self.rb_units[rb_unit], rb_unit + 1, wx.GROW, border) - hsizer_units.SetItemMinSize(self.st_units, (width, -1)) + hsizer_units.Add(self.wx_items['StaticText']['units'], 0, wx.RIGHT, border) + for rb_unit in range(len(self.wx_items['RadioButton']['units'])): + hsizer_units.Add(self.wx_items['RadioButton']['units'][rb_unit], + rb_unit + 1, + wx.GROW, + border) + hsizer_units.SetItemMinSize(self.wx_items['StaticText']['units'], (width, -1)) hsizer_mtc = wx.BoxSizer(wx.HORIZONTAL) - hsizer_mtc.Add(self.st_mtc, 1, wx.GROW, border) - hsizer_mtc.SetItemMinSize(self.st_mtc, (width, -1)) + hsizer_mtc.Add(self.wx_items['StaticText']['mtc'], 1, wx.GROW, border) + hsizer_mtc.SetItemMinSize(self.wx_items['StaticText']['mtc'], (width, -1)) hsizer5 = wx.BoxSizer(wx.HORIZONTAL) hsizer5.Add(self.b_reset, 0) @@ -178,7 +204,7 @@ class MainFrame(wx.Frame): self.props['distance'] = new_val except ValueError: # reset GUI to last-accepted val - self.te_distance.SetValue(str(self.props['distance'])) + self.wx_items['TextEntry']['distance'].SetValue(str(self.props['distance'])) self.update_mtc() def update_elevation(self, event): @@ -190,7 +216,7 @@ class MainFrame(wx.Frame): self.props['elevation'] = new_val except ValueError: # reset GUI to last-accepted val - self.te_elevation.SetValue(str(self.props['elevation'])) + self.wx_items['TextEntry']['elevation'].SetValue(str(self.props['elevation'])) self.update_mtc() def update_fitness(self, event): @@ -218,10 +244,10 @@ class MainFrame(wx.Frame): """resets all values""" event.GetTimestamp() 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'])) + self.wx_items['TextEntry']['distance'].SetValue(str(self.props['distance'])) + self.wx_items['TextEntry']['elevation'].SetValue(str(self.props['elevation'])) + self.wx_items['RadioButton']['fitness'].SetValue(str(self.props['fitness'])) + self.wx_items['RadioButton']['travel_mode'].SetValue(str(self.props['travel_mode'])) # leave units as the user selected self.update_mtc() @@ -239,7 +265,7 @@ class MainFrame(wx.Frame): hours = int(est['time']) minutes = int((est['time'] - hours) * 60) - self.st_mtc.SetLabel("{human_time}".format( + self.wx_items['StaticText']['mtc'].SetLabel("{human_time}".format( human_time="{hours} hours {minutes} minutes".format( hours=hours, minutes=minutes)))