First batch of pylint(1) fixes
[munter.git] / munter / gui.py
index 141a24ca84e782ccb2fd2141e39859d6e3baf73a..87ccd081dfb0ef5775b47b152f4bdfdd83624a8b 100644 (file)
@@ -7,6 +7,8 @@ GUI implementation
 
 import wx
 from . import munter
 
 import wx
 from . import munter
+from . import __progname__ as progname
+from . import __version__ as version
 
 class MainFrame(wx.Frame):
     """
 
 class MainFrame(wx.Frame):
     """
@@ -16,80 +18,75 @@ class MainFrame(wx.Frame):
     def __init__(self, *args, **kw):
         super(MainFrame, self).__init__(*args, **kw)
 
     def __init__(self, *args, **kw):
         super(MainFrame, self).__init__(*args, **kw)
 
-        self.SetTitle('Munter.py')
+        self.SetTitle(progname)
         self.SetSize(600, 400)
 
         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)
 
 
         self.pnl = wx.Panel(self)
 
-        st = wx.StaticText(self.pnl, label="Munter.py")
+        st = wx.StaticText(self.pnl, label=progname)
         font = st.GetFont()
         font.PointSize += 10
         font = font.Bold()
 
         st.SetFont(font)
 
         font = st.GetFont()
         font.PointSize += 10
         font = font.Bold()
 
         st.SetFont(font)
 
-        #sizer = wx.BoxSizer(wx.VERTICAL)
         sizer = wx.BoxSizer(wx.HORIZONTAL)
         sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 0))
         sizer = wx.BoxSizer(wx.HORIZONTAL)
         sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 0))
-        #self.pnl.SetSizer(sizer)
 
         # text entry fields
 
         # text entry fields
-        self.st_distance = wx.StaticText(self.pnl, label="Distance: ")
+        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.te_distance = wx.TextCtrl(self.pnl, value="0", size=(140, -1))
 
-        self.st_elevation = wx.StaticText(self.pnl, label="Elevation: ")
+        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.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)
-
-        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)
-
-        self.st_units   = wx.StaticText(self.pnl, label="Units: ")
-        cb_units_choices = ['imperial', 'metric']
-        cb_units_default = 'imperial'
-
-        self.cb_units = []
-        for choice in range(len(cb_units_choices)):
-            label = cb_units_choices[choice]
+        self.st_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)
+        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)
+        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
             style = wx.RB_GROUP if not choice else 0
-            self.cb_units.append(wx.RadioButton(self.pnl, label=label, style=style))
+            self.rb_units.append(wx.RadioButton(self.pnl, label=label, style=style))
 
         # static text
 
         # 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)
 
                 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)
         # 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.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)
 
 
-        for cb in self.cb_units:
+        for cb in self.rb_units:
             cb.Bind(wx.EVT_RADIOBUTTON, self.update_units)
 
             cb.Bind(wx.EVT_RADIOBUTTON, self.update_units)
 
-        # buttons
-        b_clear = wx.Button(self.pnl, wx.NewId(), '&Clear', (-1, -1),
-                wx.DefaultSize)
-
         # layout
         b = 5
         w = 100
         # layout
         b = 5
         w = 100
@@ -108,18 +105,18 @@ class MainFrame(wx.Frame):
 
         hsizer_fitness = wx.BoxSizer(wx.HORIZONTAL)
         hsizer_fitness.Add(self.st_fitness, 0, wx.RIGHT, b)
 
         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_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_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)
-        for cb in range(len(self.cb_units)):
-            hsizer_units.Add(self.cb_units[cb], cb + 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)
         hsizer_units.SetItemMinSize(self.st_units, (w, -1))
 
         hsizer_mtc = wx.BoxSizer(wx.HORIZONTAL)
@@ -127,7 +124,7 @@ class MainFrame(wx.Frame):
         hsizer_mtc.SetItemMinSize(self.st_mtc, (w, -1))
 
         hsizer5 = wx.BoxSizer(wx.HORIZONTAL)
         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)
 
         b = 5
         vsizer1 = wx.BoxSizer(wx.VERTICAL)
@@ -143,27 +140,49 @@ class MainFrame(wx.Frame):
 
         self.pnl.SetSizerAndFit(vsizer1)
         self.pnl.SetClientSize(vsizer1.GetSize())
 
         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()
         if value:
 
     def update_distance(self, event):
         value = self.te_distance.GetValue()
         if value:
-            self.props['distance'] = float(value)
+            try:
+                new_val = float(value)
+                self.props['distance'] = new_val
+            except:
+                # reset GUI to last-accepted val
+                self.te_distance.SetValue(str(self.props['distance']))
+                pass
         self.update_mtc()
 
     def update_elevation(self, event):
         value = self.te_elevation.GetValue()
         if value:
         self.update_mtc()
 
     def update_elevation(self, event):
         value = self.te_elevation.GetValue()
         if value:
-            self.props['elevation'] = int(value)
+            try:
+                new_val = int(value)
+                self.props['elevation'] = new_val
+            except:
+                # reset GUI to last-accepted val
+                self.te_elevation.SetValue(str(self.props['elevation']))
+                pass
         self.update_mtc()
 
     def update_fitness(self, event):
         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):
         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()
         if value:
             self.props['travel_mode'] = value
         self.update_mtc()
@@ -194,6 +213,15 @@ class MainFrame(wx.Frame):
 
         self.pnl.Layout()
 
 
         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)
 def startup():
     app = wx.App()
     frm = MainFrame(None)