X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fusr%2Flib%2Fhildon-desktop%2Fpedometer_widget_home.py;h=1cdde5d8f8739f3373d1cf40db8860506785efca;hb=7f1af446ca74ac642ce2f3ac41a499143944a3ab;hp=56e44c9a581ff8cc44727bf1582ac0dfd9a533a4;hpb=8dff670b62325f9616b60b48d552582c684dee1f;p=pedometerwidget diff --git a/src/usr/lib/hildon-desktop/pedometer_widget_home.py b/src/usr/lib/hildon-desktop/pedometer_widget_home.py index 56e44c9..1cdde5d 100644 --- a/src/usr/lib/hildon-desktop/pedometer_widget_home.py +++ b/src/usr/lib/hildon-desktop/pedometer_widget_home.py @@ -37,6 +37,7 @@ MODE = PATH + "/mode" HEIGHT = PATH + "/height" WEIGHT = PATH + "/weight" UNIT = PATH + "/unit" +SENSITIVITY = PATH + "/sensitivity" ASPECT = PATH + "/aspect" SECONDVIEW = PATH + "/secondview" GRAPHVIEW = PATH + "/graphview" @@ -64,6 +65,8 @@ class Singleton(object): class PedoIntervalCounter(Singleton): MIN_THRESHOLD = 500 MIN_TIME_STEPS = 0.5 + sensitivity = 100 + mode = 0 x = [] y = [] z = [] @@ -81,13 +84,17 @@ class PedoIntervalCounter(Singleton): #runnig, higher threshold to prevent fake steps self.mode = mode if mode == 1: - self.MIN_THRESHOLD = 650 + self.MIN_THRESHOLD = 650.0 * (200 - self.sensitivity) / 100 self.MIN_TIME_STEPS = 0.35 #walking else: - self.MIN_THRESHOLD = 500 + self.MIN_THRESHOLD = 500.0 * (200 - self.sensitivity) / 100 self.MIN_TIME_STEPS = 0.5 + def set_sensitivity(self, value): + self.sensitivity = value + self.set_mode(self.mode) + def calc_mean(self, vals): sum = 0 for i in vals: @@ -150,7 +157,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 +181,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 +207,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: @@ -241,7 +250,9 @@ class PedoRepository(Singleton): def get_values(self): return self.values - def add_values(self, values, when=date.today()): + def add_values(self, values, when=None): + if when is None: + when = date.today() """add PedoValues values to repository """ try: self.values[when] = self.values[when] + values @@ -458,6 +469,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): @@ -516,11 +529,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: @@ -535,6 +551,13 @@ class PedoController(Singleton): def get_weight(self): return self.weight + def set_sensitivity(self, value): + self.sensitivity = value + self.pedometerInterval.set_sensitivity(value) + + def get_sensitivity(self): + return self.sensitivity + def set_second_view(self, second_view): self.second_view = second_view self.load_values() @@ -697,7 +720,7 @@ class PedoCounter(Singleton): COORD_FNAME_SDK = "/home/andrei/pedometer-widget-0.1/date.txt" LOGFILE = "/home/user/log_pedometer" #time in ms between two accelerometer data reads - COORD_GET_INTERVAL = 10 + COORD_GET_INTERVAL = 25 COUNT_INTERVAL = 5 @@ -1088,6 +1111,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): weight = 70 unit = 0 aspect = 0 + sensitivity = 100 second_view = 0 graph_view = 0 no_idle_time = False @@ -1105,6 +1129,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): self.height = self.client.get_int(HEIGHT) self.weight = self.client.get_int(WEIGHT) self.unit = self.client.get_int(UNIT) + self.sensitivity = self.client.get_int(SENSITIVITY) self.aspect = self.client.get_int(ASPECT) self.second_view = self.client.get_int(SECONDVIEW) self.graph_view = self.client.get_int(GRAPHVIEW) @@ -1116,6 +1141,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): self.controller.set_weight(self.weight) self.controller.set_mode(self.mode) self.controller.set_unit(self.unit) + self.controller.set_sensitivity(self.sensitivity) self.controller.set_second_view(self.second_view) self.controller.set_callback_ui(self.update_values) self.controller.set_no_idle_time(self.no_idle_time) @@ -1379,15 +1405,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) @@ -1402,6 +1439,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) @@ -1429,13 +1470,42 @@ 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") dialog.destroy() + def sensitivity_dialog(button): + def seekbar_changed(seekbar): + label.set_text(str(seekbar.get_position()) + " %") + + dialog = gtk.Dialog("Sensitivity", self.dialog) + dialog.add_button("OK", gtk.RESPONSE_OK) + seekbar = hildon.Seekbar() + seekbar.set_size_request(400, -1) + seekbar.set_total_time(200) + seekbar.set_position(self.controller.get_sensitivity()) + seekbar.connect("value-changed", seekbar_changed) + + hbox = gtk.HBox() + hbox.add(seekbar) + label = gtk.Label(str(self.controller.get_sensitivity()) + " %") + label.set_size_request(30, -1) + hbox.add(label) + + dialog.vbox.add(hbox) + dialog.show_all() + + if dialog.run() == gtk.RESPONSE_OK: + value = seekbar.get_position() + self.client.set_int(SENSITIVITY, value) + self.controller.set_sensitivity(value) + widget.sensitivity = value + button.set_value(str(self.controller.get_sensitivity()) + " %") + + dialog.destroy() + dialog = gtk.Dialog() dialog.set_title("Settings") dialog.add_button("OK", gtk.RESPONSE_OK) @@ -1476,12 +1546,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) @@ -1515,6 +1603,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): UIPicker.set_selector(selectorUI) UIPicker.set_active(widget.aspect) + sensitivityButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + sensitivityButton.set_title("Sensitivity") + sensitivityButton.set_alignment(0, 0.8, 1, 1) + sensitivityButton.set_value(str(self.controller.get_sensitivity()) + " %") + sensitivityButton.connect("clicked", sensitivity_dialog) + logButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) logButton.set_label("Log data") logButton.set_active(widget.logging) @@ -1530,8 +1624,10 @@ 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(sensitivityButton) vbox.add(UIPicker) vbox.add(idleButton) vbox.add(resetButton) @@ -1542,6 +1638,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() @@ -1564,6 +1666,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()