Fix bug #5347 - Weight button showing wrong unit
[pedometerwidget] / src / usr / lib / hildon-desktop / pedometer_widget_home.py
index 57f1c98..586690c 100644 (file)
@@ -150,7 +150,6 @@ class PedoValues():
         self.steps = steps
         self.calories = calories
         self.dist = dist
-        self.unit = unit
 
     def __add__(self, other):
         return PedoValues(self.time + other.time,
@@ -175,20 +174,22 @@ class PedoValues():
         return strtime
 
     def get_print_distance(self):
+        global unit
         if self.dist > 1000:
-            if self.unit == 0:
+            if unit == 0:
                 return "%.2f km" % (self.dist / 1000)
             else:
                 return "%.2f mi" % (self.dist / 1609.344)
         else:
-            if self.unit == 0:
+            if unit == 0:
                 return "%d m" % self.dist
             else:
                 return "%d ft" % int(self.dist * 3.2808)
 
     def get_avg_speed(self):
+        global unit
         conv = 0
-        if self.unit:
+        if unit:
             conv = 2.23693629
         else:
             conv = 3.6
@@ -199,9 +200,10 @@ class PedoValues():
         return speed * conv
 
     def get_print_avg_speed(self):
+        global unit
         suffix = ""
         conv = 0
-        if self.unit:
+        if unit:
             suffix = "mi/h"
             conv = 2.23693629
         else:
@@ -460,6 +462,8 @@ class PedoController(Singleton):
 
     def reset_all_values(self):
         self.repository.reset_values()
+        self.v[0] = PedoValues()
+        self.v[1] = PedoValues()
         self.notify()
 
     def stop_pedometer(self):
@@ -518,11 +522,14 @@ class PedoController(Singleton):
     def set_mode(self, mode):
         self.mode = mode
         self.set_height(self.height_interval)
+        self.pedometerInterval.set_mode(self.mode)
         self.notify()
 
     def set_unit(self, new_unit):
         self.unit = new_unit
+        global unit
         unit = new_unit
+        self.notify()
 
     def get_str_weight_unit(self):
         if self.unit == 0:
@@ -1381,15 +1388,26 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
             widget.controller.set_mode(widget.mode)
 
         def selectorH_changed(selector, data):
-            widget.height = selectorH.get_active(0)
+            widget.height = selector.get_active(0)
             widget.client.set_int(HEIGHT, widget.height)
             widget.controller.set_height(widget.height)
 
         def selectorUnit_changed(selector, data):
-            widget.unit = selectorUnit.get_active(0)
+            widget.unit = selector.get_active(0)
             widget.client.set_int(UNIT, widget.unit)
             widget.controller.set_unit(widget.unit)
 
+            if widget.unit == 0:
+                self.heightPicker.set_active(widget.height)
+                self.heightPicker.show()
+                self.heightPicker_English.hide()
+            else:
+                self.heightPicker_English.set_active(widget.height)
+                self.heightPicker_English.show()
+                self.heightPicker.hide()
+
+            update_weight_button()
+
         def selectorUI_changed(selector, data):
             widget.aspect = selectorUI.get_active(0)
             widget.client.set_int(ASPECT, widget.aspect)
@@ -1404,6 +1422,10 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
             widget.client.set_bool(NOIDLETIME, widget.no_idle_time)
             widget.controller.set_no_idle_time(widget.no_idle_time)
 
+        def update_weight_button():
+            weightButton.set_value(str(self.controller.get_weight()) + \
+                                           " " + self.controller.get_str_weight_unit() )
+
         def weight_dialog(button):
             dialog = gtk.Dialog("Weight", self.dialog)
             dialog.add_button("OK", gtk.RESPONSE_OK)
@@ -1431,8 +1453,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
                         raise ValueError
                     self.controller.set_weight(value)
                     self.client.set_int(WEIGHT, value)
-                    weightButton.set_value(str(self.controller.get_weight()) + \
-                                           " " + self.controller.get_str_weight_unit() )
+                    update_weight_button()
                     break
                 except:
                     hildon.hildon_banner_show_information(self, "None", "Invalid weight")
@@ -1478,12 +1499,30 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         selectorH.append_text(" > 1.95 m")
         selectorH.connect("changed", selectorH_changed)
 
+        selectorH_English = hildon.TouchSelector(text=True)
+        selectorH_English.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE)
+        selectorH_English.append_text("< 5 ft")
+        selectorH_English.append_text("5 - 5.5 ft")
+        selectorH_English.append_text("5.5 - 6 ft")
+        selectorH_English.append_text("6 - 6.5 ft")
+        selectorH_English.append_text("> 6.5 ft")
+        selectorH_English.connect("changed", selectorH_changed)
+
         heightPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
         heightPicker.set_alignment(0.0, 0.5, 1.0, 1.0)
         heightPicker.set_title("Height")
         heightPicker.set_selector(selectorH)
         heightPicker.set_active(widget.height)
 
+        heightPicker_English = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+        heightPicker_English.set_alignment(0.0, 0.5, 1.0, 1.0)
+        heightPicker_English.set_title("Height")
+        heightPicker_English.set_selector(selectorH_English)
+        heightPicker_English.set_active(widget.height)
+
+        self.heightPicker = heightPicker
+        self.heightPicker_English = heightPicker_English
+
         weightButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
         weightButton.set_title("Weight")
         weightButton.set_alignment(0, 0.8, 1, 1)
@@ -1532,6 +1571,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         vbox.add(alarmButton)
         vbox.add(modePicker)
         vbox.add(heightPicker)
+        vbox.add(heightPicker_English)
         vbox.add(weightButton)
         vbox.add(unitPicker)
         vbox.add(UIPicker)
@@ -1544,6 +1584,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
 
         dialog.vbox.add(pan_area)
         dialog.show_all()
+
+        if widget.unit == 0:
+            self.heightPicker_English.hide()
+        else:
+            self.heightPicker.hide()
+
         response = dialog.run()
         #hildon.hildon_banner_show_information(self, "None", "You have to Stop/Start the counter to apply the new settings")
         dialog.destroy()
@@ -1566,6 +1612,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem):
         else:
             self.controller.start_pedometer()
             self.button.set_icon(ICONSPATH + "stop.png")
+            hildon.hildon_banner_show_information(self, "None", "Keep the N900 in a pocket close to your hip for best results")
 
     def do_expose_event(self, event):
         cr = self.window.cairo_create()