import gtk
import cairo
+import pygst
+pygst.require("0.10")
+import gst
+
import hildondesktop
import hildon
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
self.pedometer.start()
self.notify(True)
+ def reset_all_values(self):
+ self.repository.reset_values()
+ self.notify()
+
def stop_pedometer(self):
self.is_running = False
self.pedometer.request_stop()
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()
+ 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)
+
+ 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"
dialog.vbox.add(enableButton)
dialog.vbox.add(fileButton)
+ dialog.vbox.add(testButton)
dialog.vbox.add(typePicker)
dialog.vbox.add(hbox)
dialog.show_all()
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)
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")
pan_area = hildon.PannableArea()
vbox = gtk.VBox()
- vbox.add(button)
vbox.add(alarmButton)
vbox.add(modePicker)
vbox.add(heightPicker)
vbox.add(unitPicker)
vbox.add(UIPicker)
vbox.add(idleButton)
+ vbox.add(resetButton)
#vbox.add(logButton)
pan_area.add_with_viewport(vbox)
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
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()