From 9fafb49af210e956d43d6a00106558d1a00d13df Mon Sep 17 00:00:00 2001 From: Simon Poirier Date: Thu, 02 Jul 2009 05:27:27 +0000 Subject: * Modularized actions and event filters through add-on components * Working serialization * Working editor with addons * began refactoring actions and events ** fixed some tests to work with addons ** filters and actions tests won't pass until refactoring is done --- (limited to 'src/sugar/tutorius/filters.py') diff --git a/src/sugar/tutorius/filters.py b/src/sugar/tutorius/filters.py index 594ad6a..aa8c997 100644 --- a/src/sugar/tutorius/filters.py +++ b/src/sugar/tutorius/filters.py @@ -22,35 +22,39 @@ logger = logging.getLogger("filters") from sugar.tutorius.gtkutils import find_widget from sugar.tutorius.services import ObjectStore +from sugar.tutorius import properties -class EventFilter(object): +class EventFilter(properties.TPropContainer): """ Base class for an event filter """ - def __init__(self, next_state): + + next_state = properties.TStringProperty("None") + + def __init__(self, next_state=None): """ Constructor. @param next_state name of the next state """ - self._next_state = next_state + super(EventFilter, self).__init__() + if next_state: + self.next_state = next_state self._callback = None def get_next_state(self): """ Getter for the next state """ - return self._next_state + return self.next_state def set_next_state(self, new_next_name): """ Setter for the next state. Should only be used during construction of the event_fitler, not while the tutorial is running. """ - self._next_state = new_next_name + self.next_state = new_next_name - next_state = property(fget=get_next_state, fset=set_next_state) - def install_handlers(self, callback, **kwargs): """ install_handlers is called for eventfilters to setup all @@ -133,46 +137,6 @@ class TimerEvent(EventFilter): self.do_callback() return False #Stops timeout -class GtkWidgetEventFilter(EventFilter): - """ - Basic Event filter for Gtk widget events - """ - def __init__(self, next_state, object_id, event_name): - """Constructor - @param next_state default EventFilter param, passed on to EventFilter - @param object_id object fqdn-style identifier - @param event_name event to attach to - """ - super(GtkWidgetEventFilter,self).__init__(next_state) - self._callback = None - self._object_id = object_id - self._event_name = event_name - self._widget = None - self._handler_id = None - - def install_handlers(self, callback, **kwargs): - """install handlers - @param callback default EventFilter callback arg - @param activity keyword argument activity must be present to install - the event handler into the activity's widget hierarchy - """ - super(GtkWidgetEventFilter, self).install_handlers(callback, **kwargs) - if not "activity" in kwargs: - raise TypeError("activity argument is Mandatory") - - #find the widget and connect to its event - self._widget = find_widget(kwargs["activity"], self._object_id) - self._handler_id = self._widget.connect( \ - self._event_name, self.do_callback ) - - def remove_handlers(self): - """remove handlers""" - super(GtkWidgetEventFilter, self).remove_handlers() - #if an event was connected, disconnect it - if self._handler_id: - self._widget.handler_disconnect(self._handler_id) - self._handler_id=None - class GtkWidgetTypeFilter(EventFilter): """ Event Filter that listens for keystrokes on a widget -- cgit v0.9.1