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=5e1b7359ff5cb1123ca005d990c896e726aecc93;hpb=749abb06cea098136e96e42c5e335242fe00b31d;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 5e1b735..1cdde5d 100644 --- a/src/usr/lib/hildon-desktop/pedometer_widget_home.py +++ b/src/usr/lib/hildon-desktop/pedometer_widget_home.py @@ -25,13 +25,19 @@ import gconf import gtk import cairo +import pygst +pygst.require("0.10") +import gst + import hildondesktop import hildon PATH = "/apps/pedometerhomewidget" MODE = PATH + "/mode" HEIGHT = PATH + "/height" +WEIGHT = PATH + "/weight" UNIT = PATH + "/unit" +SENSITIVITY = PATH + "/sensitivity" ASPECT = PATH + "/aspect" SECONDVIEW = PATH + "/secondview" GRAPHVIEW = PATH + "/graphview" @@ -59,6 +65,8 @@ class Singleton(object): class PedoIntervalCounter(Singleton): MIN_THRESHOLD = 500 MIN_TIME_STEPS = 0.5 + sensitivity = 100 + mode = 0 x = [] y = [] z = [] @@ -76,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: @@ -145,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, @@ -170,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 @@ -194,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: @@ -214,7 +228,7 @@ class PedoValues(): return str(self.steps) def get_print_calories(self): - return str(self.calories) + return "%.2f" % self.calories class PedoRepository(Singleton): values = {} @@ -236,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 @@ -378,61 +394,6 @@ class PedoRepositoryPickle(PedoRepository): except Exception, e: logger.error("Error while saving data to pickle: %s" % e) -class AlarmController(Singleton): - enable = False - fname = "/home/user/MyDocs/.sounds/Ringtones/Bicycle.aac" - interval = 5 - type = 0 - - def __init__(self): - self.client = gconf.client_get_default() - try: - self.enable = self.client.get_bool(ALARM_ENABLE) - self.fname = self.client.get_string(ALARM_FNAME) - self.interval = self.client.get_int(ALARM_INTERVAL) - self.type = self.client.get_int(ALARM_TYPE) - except: - self.client.set_bool(ALARM_ENABLE, self.enable) - self.client.set_string(ALARM_FNAME, self.fname) - self.client.set_int(ALARM_INTERVAL, self.interval) - self.client.set_int(ALARM_TYPE, self.type) - - def update(self): - pass - - def play(self): - pass - - def set_enable(self, value): - self.enable = value - self.client.set_bool(ALARM_ENABLE, value) - - def get_enable(self): - return self.enable - - def set_alarm_file(self, fname): - self.fname = fname - self.client.set_string(ALARM_FNAME, fname) - - def get_alarm_file(self): - if self.fname == None: - return "" - return self.fname - - def set_interval(self, interval): - self.interval = interval - self.client.set_int(ALARM_INTERVAL, interval) - - def get_interval(self): - return self.interval - - def set_type(self, type): - self.type = type - self.client.set_int(ALARM_TYPE, type) - - def get_type(self): - return self.type - class PedoController(Singleton): mode = 0 unit = 0 @@ -451,6 +412,9 @@ class PedoController(Singleton): observers = [] + midnight_set = False + midnight_source_id = None + def __init__(self): self.pedometer = PedoCounter(self.steps_detected) self.pedometerInterval = PedoIntervalCounter() @@ -460,6 +424,29 @@ class PedoController(Singleton): self.load_values() + if not self.midnight_set: + self.update_at_midnight() + self.midnight_set = True + + def update_at_midnight(self): + next_day = date.today() + timedelta(days=1) + diff = time.mktime(next_day.timetuple()) - time.time() + diff = int(diff+5) + self.midnight_source_id = gobject.timeout_add_seconds(diff, self.midnight_callback, True) + + def stop_midnight_callback(self): + if self.midnight_source_id is not None: + gobject.source_remove(self.midnight_source_id) + + def midnight_callback(self, first=False): + self.load_values() + self.notify() + if first: + self.midnight_source_id = gobject.timeout_add_seconds(24*3600, self.midnight_callback) + return False + else: + return True + def load_values(self): if self.second_view == 0: self.v[1] = self.repository.get_alltime_values() @@ -480,6 +467,12 @@ class PedoController(Singleton): self.pedometer.start() self.notify(True) + def reset_all_values(self): + self.repository.reset_values() + self.v[0] = PedoValues() + self.v[1] = PedoValues() + self.notify() + def stop_pedometer(self): self.is_running = False self.pedometer.request_stop() @@ -506,7 +499,7 @@ class PedoController(Singleton): else: self.v[0].steps += cnt self.v[0].dist += self.get_distance(cnt) - self.v[0].calories += self.get_distance(cnt) + self.v[0].calories += self.get_calories(self.get_distance(cnt)) self.v[0].time += time.time() - self.last_time if last_steps: self.save_values() @@ -515,14 +508,55 @@ class PedoController(Singleton): self.notify(True) self.last_time = time.time() + def get_calories(self, distance): + """calculate lost calories for the distance and weight given as parameters + """ + #different coefficient for running and walking + if self.mode == 0: + coef = 0.53 + else: + coef = 0.75 + + #convert distance from meters to miles + distance *= 0.000621371192 + + weight = self.weight + #convert weight from kg to pounds + if self.unit == 0: + weight *= 2.20462262 + return weight * distance * coef + 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: + return "kg" + else: + return "lb" + + def set_weight(self, value): + self.weight = value + self.notify() + + 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 @@ -558,9 +592,6 @@ class PedoController(Singleton): steps = self.counter return self.STEP_LENGTH * steps; - def get_calories(self, steps): - return steps - def add_observer(self, func): try: self.observers.index(func) @@ -577,13 +608,119 @@ class PedoController(Singleton): for func in self.observers: func(optional) +class AlarmController(Singleton): + enable = False + fname = "/home/user/MyDocs/.sounds/Ringtones/Bicycle.aac" + interval = 5 + type = 0 + + player = None + is_playing = False + pedo_controller = None + + def __init__(self): + self.client = gconf.client_get_default() + + self.enable = self.client.get_bool(ALARM_ENABLE) + self.fname = self.client.get_string(ALARM_FNAME) + self.interval = self.client.get_int(ALARM_INTERVAL) + self.type = self.client.get_int(ALARM_TYPE) + + self.pedo_controller = PedoController() + if self.enable: + self.init_player() + self.pedo_controller.add_observer(self.update) + self.start_value = self.pedo_controller.get_first() + + def init_player(self): + self.player = gst.element_factory_make("playbin2", "player") + fakesink = gst.element_factory_make("fakesink", "fakesink") + self.player.set_property("video-sink", fakesink) + + bus = self.player.get_bus() + bus.add_signal_watch() + bus.connect("message", self.on_message) + + def on_message(self, bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + self.player.set_state(gst.STATE_NULL) + self.is_playing = False + elif t == gst.MESSAGE_ERROR: + self.player.set_state(gst.STATE_NULL) + self.is_playing = False + err, debug = message.parse_error() + logger.error("ERROR: %s, %s" % (err, debug) ) + + def update(self, optional): + diff = self.pedo_controller.get_first() - self.start_value + if self.type == 0 and diff.time >= self.interval * 60 or \ + self.type == 1 and diff.steps >= self.interval or \ + self.type == 2 and diff.dist >= self.interval or \ + self.type == 3 and diff.calories >= self.interval: + self.play() + #get new instance of current values + self.start_value = PedoValues() + self.pedo_controller.get_first() + logger.info("Alarm!") + + def play(self): + if self.player is None: + self.init_player() + if self.is_playing: + self.player.set_state(gst.STATE_NULL) + self.is_playing = False + else: + self.player.set_property("uri", "file://" + self.fname) + self.player.set_state(gst.STATE_PLAYING) + self.is_playing = True + + def stop(self): + self.player.set_state(gst.STATE_NULL) + + def set_enable(self, value): + self.enable = value + self.client.set_bool(ALARM_ENABLE, value) + if self.enable: + self.init_player() + self.pedo_controller.add_observer(self.update) + self.start_value = self.pedo_controller.get_first() + else: + self.stop() + self.player = None + self.pedo_controller.remove_observer(self.update) + + def get_enable(self): + return self.enable + + def set_alarm_file(self, fname): + self.fname = fname + self.client.set_string(ALARM_FNAME, fname) + + def get_alarm_file(self): + if self.fname == None: + return "" + return self.fname + + def set_interval(self, interval): + self.interval = interval + self.client.set_int(ALARM_INTERVAL, interval) + + def get_interval(self): + return self.interval + + def set_type(self, type): + self.type = type + self.client.set_int(ALARM_TYPE, type) + + def get_type(self): + return self.type class PedoCounter(Singleton): COORD_FNAME = "/sys/class/i2c-adapter/i2c-3/3-001d/coord" 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 @@ -967,14 +1104,14 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): second_view_labels = ["All-time", "Today", "This week"] controller = None - pedometer = None - pedometerInterval = None graph_controller = None mode = 0 height = 0 + weight = 70 unit = 0 aspect = 0 + sensitivity = 100 second_view = 0 graph_view = 0 no_idle_time = False @@ -987,30 +1124,24 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): gobject.type_register(GraphWidget) self.client = gconf.client_get_default() - try: - self.mode = self.client.get_int(MODE) - self.height = self.client.get_int(HEIGHT) - self.unit = self.client.get_int(UNIT) - self.aspect = self.client.get_int(ASPECT) - self.second_view = self.client.get_int(SECONDVIEW) - self.graph_view = self.client.get_int(GRAPHVIEW) - self.no_idle_time = self.client.get_bool(NOIDLETIME) - self.logging = self.client.get_bool(LOGGING) - except: - self.client.set_int(MODE, 0) - self.client.set_int(HEIGHT, 0) - self.client.set_int(UNIT, 0) - self.client.set_int(ASPECT, 0) - self.client.set_int(SECONDVIEW, 0) - self.client.set_int(GRAPHVIEW, 0) - self.client.set_bool(NOIDLETIME, False) - self.client.set_bool(LOGGING, False) + self.mode = self.client.get_int(MODE) + 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) + self.no_idle_time = self.client.get_bool(NOIDLETIME) + self.logging = self.client.get_bool(LOGGING) self.controller = PedoController() self.controller.set_height(self.height) + 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) @@ -1084,6 +1215,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): self.graph = graph eventBoxGraph.connect("button-press-event", self.eventBoxGraph_clicked) eventBoxGraph.connect("button-release-event", self.eventBoxGraph_clicked_release) + self.graphBox = eventBoxGraph self.mainvbox = gtk.VBox() @@ -1130,16 +1262,25 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): new_labels[label] = l def update_aspect(self): - if self.aspect == 0: + + if self.aspect > 0: + self.graphBox.hide_all() + else: + self.graphBox.show_all() + + if self.aspect == 0 or self.aspect == 1: self.currentBox.show_all() self.totalBox.show_all() - elif self.aspect == 1: + elif self.aspect == 2: self.currentBox.show_all() self.totalBox.hide_all() else: self.currentBox.hide_all() self.totalBox.show_all() + x,y = self.size_request() + self.resize(x,y) + def update_ui_values(self, labels, values): labels["timer"].set_label(values.get_print_time()) labels["count"].set_label(values.get_print_steps()) @@ -1229,6 +1370,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): dialog.vbox.add(enableButton) dialog.vbox.add(fileButton) + dialog.vbox.add(testButton) dialog.vbox.add(typePicker) dialog.vbox.add(hbox) dialog.show_all() @@ -1247,10 +1389,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): def show_settings(self, widget): def reset_total_counter(arg): - widget.totalCounter = 0 - widget.totalTime = 0 - widget.update_total() - hildon.hildon_banner_show_information(self, "None", "Total counter was resetted") + note = hildon.hildon_note_new_confirmation(self.dialog, "Are you sure you want to delete all your pedometer history?") + ret = note.run() + if ret == gtk.RESPONSE_OK: + self.controller.reset_all_values() + hildon.hildon_banner_show_information(self, "None", "All history was deleted") + note.destroy() def alarmButton_pressed(widget): self.show_alarm_settings(widget) @@ -1261,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) @@ -1284,15 +1439,82 @@ 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) + + label = gtk.Label("Weight:") + entry = gtk.Entry() + entry.set_text(str(self.controller.get_weight())) + + suffixLabel = gtk.Label(self.controller.get_str_weight_unit()) + + hbox = gtk.HBox() + hbox.add(label) + hbox.add(entry) + hbox.add(suffixLabel) + + dialog.vbox.add(hbox) + dialog.show_all() + while 1: + response = dialog.run() + if response != gtk.RESPONSE_OK: + break + try: + value = int(entry.get_text()) + if value <= 0: + raise ValueError + self.controller.set_weight(value) + self.client.set_int(WEIGHT, value) + 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) + self.dialog = dialog - - button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) - button.set_title("Reset total counter") - button.set_alignment(0, 0.8, 1, 1) - button.connect("clicked", reset_total_counter) + resetButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + resetButton.set_title("Reset total counter") + resetButton.set_alignment(0, 0.8, 1, 1) + resetButton.connect("clicked", reset_total_counter) alarmButton = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) alarmButton.set_title("Alarm") @@ -1311,7 +1533,7 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): modePicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) modePicker.set_alignment(0.0, 0.5, 1.0, 1.0) - modePicker.set_title("Select mode") + modePicker.set_title("Mode") modePicker.set_selector(selector) modePicker.set_active(widget.mode) @@ -1324,12 +1546,36 @@ 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("Select height") + 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) + weightButton.set_value(str(self.controller.get_weight()) + " " + self.controller.get_str_weight_unit() ) + weightButton.connect("clicked", weight_dialog) + selectorUnit = hildon.TouchSelector(text=True) selectorUnit.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) selectorUnit.append_text("Metric (km)") @@ -1338,13 +1584,14 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): unitPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) unitPicker.set_alignment(0.0, 0.5, 1.0, 1.0) - unitPicker.set_title("Units") + unitPicker.set_title("Unit") unitPicker.set_selector(selectorUnit) unitPicker.set_active(widget.unit) selectorUI = hildon.TouchSelector(text=True) selectorUI = hildon.TouchSelector(text=True) selectorUI.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorUI.append_text("Show current + total + graph") selectorUI.append_text("Show current + total") selectorUI.append_text("Show only current") selectorUI.append_text("Show only total") @@ -1356,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) @@ -1368,13 +1621,16 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): pan_area = hildon.PannableArea() vbox = gtk.VBox() - vbox.add(button) 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) #vbox.add(logButton) pan_area.add_with_viewport(vbox) @@ -1382,15 +1638,20 @@ 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() def close_requested(self, widget): - if self.pedometer is None: - return - - self.pedometer.request_stop() + if self.controller.is_running: + self.controller.stop_pedometer() + self.controller.stop_midnight_callback() def update_values(self): #TODO: do not update if the widget is not on the active desktop @@ -1405,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() @@ -1450,16 +1712,6 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): hd_plugin_type = PedometerHomePlugin -# The code below is just for testing purposes. -# It allows to run the widget as a standalone process. -if __name__ == "__main__": - import gobject - gobject.type_register(hd_plugin_type) - obj = gobject.new(hd_plugin_type, plugin_id="plugin_id") - obj.show_all() - gtk.main() - -############### old pedometer.py ### import math import logging @@ -1471,3 +1723,11 @@ formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(messag ch.setFormatter(formatter) logger.addHandler(ch) +# The code below is just for testing purposes. +# It allows to run the widget as a standalone process. +if __name__ == "__main__": + import gobject + gobject.type_register(hd_plugin_type) + obj = gobject.new(hd_plugin_type, plugin_id="plugin_id") + obj.show_all() + gtk.main()