X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=pedometer_widget_home.py;h=9e53b45cce700116de1caef7698cfdf1033b6e17;hb=725b0619fcb38b171207ee62824d5bebbae7f19b;hp=da1c33a93a666c6902762069efb633f0720b5e88;hpb=14981512290a29b5e5f27df8532e39bcd97c1f3f;p=pedometerwidget diff --git a/pedometer_widget_home.py b/pedometer_widget_home.py index da1c33a..9e53b45 100644 --- a/pedometer_widget_home.py +++ b/pedometer_widget_home.py @@ -1,214 +1,26 @@ import gtk +import cairo import hildondesktop import gobject import os import time import hildon import gnome.gconf as gconf +from threading import Thread -print "!!!!" #gobject.threads_init() +#gtk.gdk.threads_init() PATH="/apps/pedometerhomewidget" COUNTER=PATH+"/counter" +TIMER=PATH+"/timer" MODE=PATH+"/mode" HEIGHT=PATH+"/height" +UNIT=PATH+"/unit" +ASPECT=PATH+"/aspect" +LOGGING=PATH+"/logging" -class PedometerHomePlugin(hildondesktop.HomePluginItem): - button = None - loader = None - labelTimer = None - labelLastCount = None - labelTotalCount = None - labelDistance = None - labelAvgDistance = None - - pedometer = None - startTime = None - totalCounter = 0 - - def __init__(self): - - gtk.gdk.threads_init() - hildondesktop.HomePluginItem.__init__(self) - - self.client = gconf.client_get_default() - try: - self.totalCounter = self.client.get_int(COUNTER) - self.mode = self.client.get_int(MODE) - self.height = self.client.get_int(HEIGHT) - except: - self.client.set_int(COUNTER, 0) - self.client.set_int(MODE, 0) - self.client.set_int(HEIGHT, 0) - self.totalCounter = 0 - self.mode = 0 - self.height = 0 - - self.button = gtk.Button("Start") - self.button.connect("clicked", self.button_clicked) - - self.labelTimer = gtk.Label("00:00:00") - self.labelLastCount = gtk.Label("--") - self.labelTotalCount = gtk.Label("%d steps" % self.totalCounter) - self.labelDistance = gtk.Label("--") - - mainVBox = gtk.VBox(spacing=1) - mainVBox.add(self.button) - mainVBox.add(self.labelTimer) - mainVBox.add(self.labelLastCount) - mainVBox.add(self.labelTotalCount) - mainVBox.add(self.labelDistance) - - mainVBox.show_all() - self.add(mainVBox) - - self.connect("unrealize", self.close_requested) - self.set_settings(True) - self.connect("show-settings", self.show_settings) - - - def show_settings(self, widget): - def reset_total_counter(arg): - widget.totalCounter = 0 - widget.labelTotalCount.set_label("%d steps" % widget.totalCounter) - hildon.hildon_banner_show_information(self,"None", "Total counter was resetted") - - def selector_changed(selector, data): - widget.mode = selector.get_active(0) - widget.client.set_int(MODE, widget.mode) - - def selectorH_changed(selector, data): - widget.height = selectorH.get_active(0) - widget.client.set_int(HEIGHT, widget.height) - - dialog = gtk.Dialog() - dialog.set_transient_for(self) - dialog.set_title("Settings") - - dialog.add_button("OK", gtk.RESPONSE_OK) - 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) - - selector = hildon.TouchSelector(text=True) - selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) - selector.append_text("Walk") - selector.append_text("Run") - selector.connect("changed", selector_changed) - - 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_selector(selector) - modePicker.set_active(widget.mode) - - selectorH = hildon.TouchSelector(text=True) - selectorH.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) - selectorH.append_text("< 1.50 m") - selectorH.append_text("1.50 - 1.65 m") - selectorH.append_text("1.66 - 1.80 m") - selectorH.append_text("1.81 - 1.95 m") - selectorH.append_text(" > 1.95 m") - selectorH.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_selector(selectorH) - heightPicker.set_active(widget.height) - - dialog.vbox.add(button) - dialog.vbox.add(modePicker) - dialog.vbox.add(heightPicker) - dialog.show_all() - 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.pedometer.isAlive(): - self.pedometer.join() - - def update_values(self, totalCurent, lastInterval): - print "update" - - self.totalCounter += lastInterval - dist = self.pedometer.get_distance(self.totalCounter) - - tdelta = time.time() - self.startTime - hours = int(tdelta / 3600) - tdelta -= 3600 * hours - mins = int(tdelta / 60) - tdelta -= 60 * mins - secs = int(tdelta) - - strtime = "%.2d:%.2d:%.2d" % ( hours, mins, secs) - - self.labelTimer.set_label(strtime) - self.labelLastCount.set_label(str(totalCurent) + " steps") - self.labelTotalCount.set_label(str(self.totalCounter) + " steps") - if dist >= 1000: - self.labelDistance.set_label(str(dist/1000) + " km") - else: - self.labelDistance.set_label(str(dist) + " m") - - def button_clicked(self, button): - print "button clicked" - - if self.pedometer is not None and self.pedometer.isAlive(): - #counter is running - self.pedometer.request_stop() - self.pedometer.join() - self.client.set_int(COUNTER, self.totalCounter) - self.button.set_label("Start") - else: - self.pedometer = PedoCounter(self.update_values) - self.pedometer.set_mode(self.mode) - self.pedometer.set_height(self.height) - - self.labelTimer.set_label("00:00:00") - self.labelLastCount.set_label("0 steps") - self.labelTotalCount.set_label("%d steps" % self.totalCounter) - self.labelDistance.set_label("0 m") - - self.pedometer.start() - self.startTime = time.time() - self.button.set_label("Stop") - - print "button clicked finished" - -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 - -from threading import Thread - -logger = logging.getLogger("pedometer") -logger.setLevel(logging.INFO) - -ch = logging.StreamHandler() -formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") -ch.setFormatter(formatter) -logger.addHandler(ch) +ICONSPATH = "/opt/pedometerhomewidget/" class PedoIntervalCounter: MIN_THRESHOLD = 500 @@ -292,6 +104,7 @@ class PedoIntervalCounter: class PedoCounter(Thread): 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" COORD_GET_INTERVAL = 0.01 COUNT_INTERVAL = 5 @@ -303,6 +116,9 @@ class PedoCounter(Thread): counter = 0 stop_requested = False update_function = None + logging = False + + mode = 0 def __init__(self, update_function = None): Thread.__init__(self) @@ -313,26 +129,33 @@ class PedoCounter(Thread): def set_mode(self, mode): #runnig, higher threshold to prevent fake steps + self.mode = mode if mode == 1: - self.MIN_THRESHOLD = 600 + self.MIN_THRESHOLD = 650 self.MIN_TIME_STEPS = 0.35 #walking else: self.MIN_THRESHOLD = 500 self.MIN_TIME_STEPS = 0.5 + def set_logging(self, value): + self.logging = value + #set height, will affect the distance def set_height(self, height_interval): if height_interval == 0: - STEP_LENGTH = 0.5 + self.STEP_LENGTH = 0.59 elif height_interval == 1: - STEP_LENGTH = 0.6 + self.STEP_LENGTH = 0.64 elif height_interval == 2: - STEP_LENGTH = 0.7 + self.STEP_LENGTH = 0.71 elif height_interval == 3: - STEP_LENGTH = 0.8 + self.STEP_LENGTH = 0.77 elif height_interval == 4: - STEP_LENGTH = 0.9 + self.STEP_LENGTH = 0.83 + #increase step length if RUNNING + if self.mode == 1: + self.STEP_LENGTH *= 1.45 def get_rotation(self): f = open(self.COORD_FNAME, 'r') @@ -357,6 +180,9 @@ class PedoCounter(Thread): coords[1].append(int(y)) coords[2].append(int(z)) now = time.time()-stime + if self.logging: + self.file.write("%d %d %d %f\n" %(coords[0][-1], coords[1][-1], coords[2][-1], now)) + t.append(now) time.sleep(self.COORD_GET_INTERVAL) pic = PedoIntervalCounter(coords, t) @@ -373,11 +199,18 @@ class PedoCounter(Thread): def run(self): logger.info("Thread started") + if self.logging: + fname = "%d_%d_%d_%d_%d_%d" % time.localtime()[0:6] + self.file = open(self.LOGFILE + fname + ".txt", "w") + while 1 and not self.stop_requested: last_cnt = self.start_interval() if self.update_function is not None: gobject.idle_add(self.update_function, self.counter, last_cnt) + if self.logging: + self.file.close() + logger.info("Thread has finished") def get_distance(self, steps=None): @@ -385,3 +218,460 @@ class PedoCounter(Thread): steps = self.counter return self.STEP_LENGTH * steps; +class CustomButton(hildon.Button): + def __init__(self, icon): + hildon.Button.__init__(self, gtk.HILDON_SIZE_AUTO_WIDTH, hildon.BUTTON_ARRANGEMENT_VERTICAL) + self.icon = icon + self.set_size_request(int(32*1.4), int(30*1.0)) + self.retval = self.connect("expose_event", self.expose) + + def set_icon(self, icon): + self.icon = icon + + def expose(self, widget, event): + self.context = widget.window.cairo_create() + self.context.rectangle(event.area.x, event.area.y, + event.area.width, event.area.height) + + self.context.clip() + rect = self.get_allocation() + self.context.rectangle(rect.x, rect.y, rect.width, rect.height) + self.context.set_source_rgba(1, 1, 1, 0) + + style = self.rc_get_style() + color = style.lookup_color("DefaultBackgroundColor") + if self.state == gtk.STATE_ACTIVE: + style = self.rc_get_style() + color = style.lookup_color("SelectionColor") + self.context.set_source_rgba (color.red/65535.0, color.green/65335.0, color.blue/65535.0, 0.75); + self.context.fill() + + #img = cairo.ImageSurface.create_from_png(self.icon) + + #self.context.set_source_surface(img) + #self.context.set_source_surface(img, rect.width/2 - img.get_width() /2, 0) + img = gtk.Image() + img.set_from_file(self.icon) + buf = img.get_pixbuf() + buf = buf.scale_simple(int(32 * 1.5), int(30 * 1.5), gtk.gdk.INTERP_BILINEAR) + + self.context.set_source_pixbuf(buf, rect.x+(event.area.width/2-15)-8, rect.y+1) + self.context.scale(200,200) + self.context.paint() + + return self.retval + +class PedometerHomePlugin(hildondesktop.HomePluginItem): + button = None + + #labels for current steps + labels = ["timer", "count", "dist", "avgSpeed"] + #labelsC = { "timer" : None, "count" : None, "dist" : None, "avgSpeed" : None } + + #labels for all time steps + #labelsT = { "timer" : None, "count" : None, "dist" : None, "avgSpeed" : None } + labelsC = {} + labelsT = {} + + pedometer = None + startTime = None + + totalCounter = 0 + totalTime = 0 + mode = 0 + height = 0 + unit = 0 + + counter = 0 + time = 0 + aspect = 0 + logging = False + + def __init__(self): + + gtk.gdk.threads_init() + #gobject.threads_init() + hildondesktop.HomePluginItem.__init__(self) + + self.client = gconf.client_get_default() + try: + self.totalCounter = self.client.get_int(COUNTER) + self.totalTime = self.client.get_int(TIMER) + 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.logging = self.client.get_bool(LOGGING) + except: + self.client.set_int(COUNTER, 0) + self.client.set_int(TIMER, 0) + 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_bool(LOGGING, False) + + self.pedometer = PedoCounter(self.update_values) + self.pedometer.set_mode(self.mode) + self.pedometer.set_height(self.height) + + #self.button = gtk.Button("Start") + self.button = CustomButton(ICONSPATH + "play.png") + self.button.connect("clicked", self.button_clicked) + + self.create_labels(self.labelsC) + self.create_labels(self.labelsT) + + self.update_ui_values(self.labelsC, 0, 0) + self.update_ui_values(self.labelsT, self.totalTime, self.totalCounter) + + mainHBox = gtk.HBox(spacing=1) + + descVBox = gtk.VBox(spacing=1) + descVBox.add(self.new_label_heading()) + descVBox.add(self.new_label_heading("Time:")) + descVBox.add(self.new_label_heading("Steps:")) + descVBox.add(self.new_label_heading("Distance:")) + descVBox.add(self.new_label_heading("Avg Speed:")) + + currentVBox = gtk.VBox(spacing=1) + currentVBox.add(self.new_label_heading("Current")) + currentVBox.add(self.labelsC["timer"]) + currentVBox.add(self.labelsC["count"]) + currentVBox.add(self.labelsC["dist"]) + currentVBox.add(self.labelsC["avgSpeed"]) + self.currentBox = currentVBox + + totalVBox = gtk.VBox(spacing=1) + totalVBox.add(self.new_label_heading("Total")) + totalVBox.add(self.labelsT["timer"]) + totalVBox.add(self.labelsT["count"]) + totalVBox.add(self.labelsT["dist"]) + totalVBox.add(self.labelsT["avgSpeed"]) + self.totalBox = totalVBox + + buttonVBox = gtk.VBox(spacing=1) + buttonVBox.add(self.new_label_heading("")) + buttonVBox.add(self.button) + buttonVBox.add(self.new_label_heading("")) + + mainHBox.add(buttonVBox) + mainHBox.add(descVBox) + mainHBox.add(currentVBox) + mainHBox.add(totalVBox) + + self.mainhbox = mainHBox + + mainHBox.show_all() + self.add(mainHBox) + self.update_aspect() + + self.connect("unrealize", self.close_requested) + self.set_settings(True) + self.connect("show-settings", self.show_settings) + + def new_label_heading(self, title=""): + l = gtk.Label(title) + hildon.hildon_helper_set_logical_font(l, "SmallSystemFont") + return l + + def create_labels(self, new_labels): + for label in self.labels: + l = gtk.Label() + hildon.hildon_helper_set_logical_font(l, "SmallSystemFont") + hildon.hildon_helper_set_logical_color(l, gtk.RC_FG, gtk.STATE_NORMAL, "ActiveTextColor") + new_labels[label] = l + + def update_aspect(self): + if self.aspect == 0: + self.currentBox.show_all() + self.totalBox.show_all() + elif self.aspect == 1: + self.currentBox.show_all() + self.totalBox.hide_all() + else: + self.currentBox.hide_all() + self.totalBox.show_all() + + def update_ui_values(self, labels, timer, steps): + def get_str_distance(meters): + if meters > 1000: + if self.unit == 0: + return "%.2f km" % (meters/1000) + else: + return "%.2f mi" % (meters/1609.344) + else: + if self.unit == 0: + return "%d m" % meters + else: + return "%d ft" % int(meters*3.2808) + + def get_avg_speed(timer, dist): + suffix = "" + conv = 0 + if self.unit: + suffix = "mi/h" + conv = 2.23693629 + else: + suffix = "km/h" + conv = 3.6 + + if timer == 0: + return "N/A " + suffix + speed = 1.0 *dist / timer + #convert from meters per second to km/h or mi/h + speed *= conv + return "%.2f %s" % (speed, suffix) + + tdelta = timer + hours = int(tdelta / 3600) + tdelta -= 3600 * hours + mins = int(tdelta / 60) + tdelta -= 60 * mins + secs = int(tdelta) + + strtime = "%.2d:%.2d:%.2d" % ( hours, mins, secs) + + labels["timer"].set_label(strtime) + labels["count"].set_label(str(steps)) + + dist = self.pedometer.get_distance(steps) + + labels["dist"].set_label(get_str_distance(dist)) + labels["avgSpeed"].set_label(get_avg_speed(timer, dist)) + + def update_current(self): + self.update_ui_values(self.labelsC, self.time, self.counter) + + def update_total(self): + self.update_ui_values(self.labelsT, self.totalTime, self.totalCounter) + + 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") + + def selector_changed(selector, data): + widget.mode = selector.get_active(0) + widget.client.set_int(MODE, widget.mode) + widget.pedometer.set_mode(widget.mode) + widget.pedometer.set_height(widget.height) + widget.update_current() + widget.update_total() + + def selectorH_changed(selector, data): + widget.height = selectorH.get_active(0) + widget.client.set_int(HEIGHT, widget.height) + widget.pedometer.set_height(widget.height) + widget.update_current() + widget.update_total() + + + def selectorUnit_changed(selector, data): + widget.unit = selectorUnit.get_active(0) + widget.client.set_int(UNIT, widget.unit) + widget.update_current() + widget.update_total() + + def selectorUI_changed(selector, data): + widget.aspect = selectorUI.get_active(0) + widget.client.set_int(ASPECT, widget.aspect) + widget.update_aspect() + + def logButton_changed(checkButton): + widget.logging = checkButton.get_active() + widget.client.set_bool(LOGGING, widget.logging) + + dialog = gtk.Dialog() + dialog.set_transient_for(self) + dialog.set_title("Settings") + + dialog.add_button("OK", gtk.RESPONSE_OK) + 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) + + selector = hildon.TouchSelector(text=True) + selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selector.append_text("Walk") + selector.append_text("Run") + selector.connect("changed", selector_changed) + + 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_selector(selector) + modePicker.set_active(widget.mode) + + selectorH = hildon.TouchSelector(text=True) + selectorH.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorH.append_text("< 1.50 m") + selectorH.append_text("1.50 - 1.65 m") + selectorH.append_text("1.66 - 1.80 m") + selectorH.append_text("1.81 - 1.95 m") + selectorH.append_text(" > 1.95 m") + selectorH.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_selector(selectorH) + heightPicker.set_active(widget.height) + + selectorUnit = hildon.TouchSelector(text=True) + selectorUnit.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorUnit.append_text("Metric (km)") + selectorUnit.append_text("English (mi)") + selectorUnit.connect("changed", selectorUnit_changed) + + 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_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") + selectorUI.append_text("Show only current") + selectorUI.append_text("Show only total") + selectorUI.connect("changed", selectorUI_changed) + + UIPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + UIPicker.set_alignment(0.0, 0.5, 1.0, 1.0) + UIPicker.set_title("Widget aspect") + UIPicker.set_selector(selectorUI) + UIPicker.set_active(widget.aspect) + + logButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) + logButton.set_label("Log data") + logButton.set_active(widget.logging) + logButton.connect("toggled", logButton_changed) + + dialog.vbox.add(button) + dialog.vbox.add(modePicker) + dialog.vbox.add(heightPicker) + dialog.vbox.add(unitPicker) + dialog.vbox.add(UIPicker) + dialog.vbox.add(logButton) + + dialog.show_all() + 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.pedometer.isAlive(): + self.pedometer.join() + + def update_values(self, totalCurent, lastInterval): + self.totalCounter += lastInterval + self.counter = totalCurent + + tdelta = time.time() - self.time - self.startTime + self.time += tdelta + self.totalTime += tdelta + + self.update_current() + self.update_total() + + def button_clicked(self, button): + if self.pedometer is not None and self.pedometer.isAlive(): + #counter is running + self.pedometer.request_stop() + self.pedometer.join() + self.client.set_int(COUNTER, self.totalCounter) + self.client.set_int(TIMER, int(self.totalTime)) + #self.button.set_label("Start") + self.button.set_icon(ICONSPATH + "play.png") + else: + self.pedometer = PedoCounter(self.update_values) + self.pedometer.set_mode(self.mode) + self.pedometer.set_height(self.height) + self.pedometer.set_logging(self.logging) + + self.time = 0 + self.counter = 0 + + self.update_current() + + self.pedometer.start() + self.startTime = time.time() + #self.button.set_label("Stop") + self.button.set_icon(ICONSPATH + "stop.png") + + def do_expose_event(self, event): + cr = self.window.cairo_create() + cr.region(event.window.get_clip_region()) + cr.clip() + #cr.set_source_rgba(0.4, 0.64, 0.564, 0.5) + style = self.rc_get_style() + color = style.lookup_color("DefaultBackgroundColor") + cr.set_source_rgba (color.red/65535.0, color.green/65335.0, color.blue/65535.0, 0.75); + + radius = 5 + width = self.allocation.width + height = self.allocation.height + + x = self.allocation.x + y = self.allocation.y + + cr.move_to(x+radius, y) + cr.line_to(x + width - radius, y) + cr.curve_to(x + width - radius, y, x + width, y, x + width, y + radius) + cr.line_to(x + width, y + height - radius) + cr.curve_to(x + width, y + height - radius, x + width, y + height, x + width - radius, y + height) + cr.line_to(x + radius, y + height) + cr.curve_to(x + radius, y + height, x, y + height, x, y + height - radius) + cr.line_to(x, y + radius) + cr.curve_to(x, y + radius, x, y, x + radius, y) + + cr.set_operator(cairo.OPERATOR_SOURCE) + cr.fill_preserve() + + color = style.lookup_color("ActiveTextColor") + cr.set_source_rgba (color.red/65535.0, color.green/65335.0, color.blue/65535.0, 0.5); + cr.set_line_width(1) + cr.stroke() + + hildondesktop.HomePluginItem.do_expose_event(self, event) + + def do_realize(self): + screen = self.get_screen() + self.set_colormap(screen.get_rgba_colormap()) + self.set_app_paintable(True) + hildondesktop.HomePluginItem.do_realize(self) + +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 + +from threading import Thread + +logger = logging.getLogger("pedometer") +logger.setLevel(logging.INFO) + +ch = logging.StreamHandler() +formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +ch.setFormatter(formatter) +logger.addHandler(ch) +