From 42dc1385441aaea7229c0cfa3d6ed9035b2c3941 Mon Sep 17 00:00:00 2001 From: andrei1089 Date: Fri, 12 Feb 2010 00:11:43 +0200 Subject: [PATCH 1/1] Make PedoController more general by appling the Observer pattern --- .../lib/hildon-desktop/pedometer_widget_home.py | 36 +++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/usr/lib/hildon-desktop/pedometer_widget_home.py b/src/usr/lib/hildon-desktop/pedometer_widget_home.py index 9af473f..725e1c5 100644 --- a/src/usr/lib/hildon-desktop/pedometer_widget_home.py +++ b/src/usr/lib/hildon-desktop/pedometer_widget_home.py @@ -442,7 +442,8 @@ class PedoController(Singleton): last_time = 0 is_running = False - graph_controller = None + + observers = [] def __init__(self): self.pedometer = PedoCounter(self.steps_detected) @@ -451,7 +452,6 @@ class PedoController(Singleton): self.repository = PedoRepositoryXML() self.repository.load() - self.graph_controller = GraphController() self.load_values() def load_values(self): @@ -472,7 +472,7 @@ class PedoController(Singleton): self.last_time = time.time() self.is_running = True self.pedometer.start() - self.notify_UI(True) + self.notify(True) def stop_pedometer(self): self.is_running = False @@ -504,15 +504,15 @@ class PedoController(Singleton): self.v[0].time += time.time() - self.last_time if last_steps: self.save_values() - self.notify_UI() + self.notify() else: - self.notify_UI(True) + self.notify(True) self.last_time = time.time() def set_mode(self, mode): self.mode = mode self.set_height(self.height_interval) - self.notify_UI() + self.notify() def set_unit(self, new_unit): self.unit = new_unit @@ -521,7 +521,7 @@ class PedoController(Singleton): def set_second_view(self, second_view): self.second_view = second_view self.load_values() - self.notify_UI() + self.notify() def set_callback_ui(self, func): self.callback_update_ui = func @@ -542,7 +542,7 @@ class PedoController(Singleton): #increase step length if RUNNING if self.mode == 1: self.STEP_LENGTH *= 1.45 - self.notify_UI() + self.notify() def set_no_idle_time(self, value): self.no_idle_time = value @@ -555,10 +555,22 @@ class PedoController(Singleton): def get_calories(self, steps): return steps - def notify_UI(self, optional=False): + def add_observer(self, func): + try: + self.observers.index(func) + except: + self.observers.append(func) + + def remove_observer(self, func): + self.observers.remove(func) + + def notify(self, optional=False): if self.callback_update_ui is not None: self.callback_update_ui() - self.graph_controller.update_ui(optional) + + for func in self.observers: + func(optional) + class PedoCounter(Singleton): COORD_FNAME = "/sys/class/i2c-adapter/i2c-3/3-001d/coord" @@ -721,6 +733,7 @@ class GraphController(Singleton): def __init__(self): self.repository = PedoRepositoryXML() self.last_update = 0 + PedoController().add_observer(self.update_ui) def set_graph(self, widget): self.widget = widget @@ -1050,7 +1063,6 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): eventBox.connect("button-press-event", self.eventBox_clicked) eventBox.connect("button-release-event", self.eventBox_clicked_release) - mainHBox.add(buttonVBox) mainHBox.add(descVBox) mainHBox.add(currentVBox) @@ -1204,8 +1216,6 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): typePicker.set_selector(selectorType) typePicker.set_active(self.alarm_controller.get_type()) - - hbox = gtk.HBox() hbox.add(labelEntry) hbox.add(intervalEntry) -- 1.7.9.5