Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/filters.py
blob: 44621d52fdb059e1fcac2bd3174e1c67b63a4c37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# Copyright (C) 2009, Tutorius.org
# Copyright (C) 2009, Vincent Vinet <vince.vinet@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

import logging
logger = logging.getLogger("filters")

from sugar.tutorius import properties


class EventFilter(properties.TPropContainer):
    """
    Base class for an event filter
    """

    def __init__(self):
        """
        Constructor.
        """
        super(EventFilter, self).__init__()
        self._callback = None

    def install_handlers(self, callback, **kwargs):
        """
        install_handlers is called for eventfilters to setup all
        necessary event handlers to be able to catch the desired
        event. 

        @param callback the callback function that will be called
        with the event filter as an argument when the event is catched
        and validated.
        @param **kwargs unused by this handler for now, allows subclasses
        to receive information about the context when installing

        Subclasses must call this super method to setup the callback if they 
        feel like cooperating
        """
        self._callback = callback

    def remove_handlers(self):
        """
        remove_handlers is called when a state is done so that all
        event filters can cleanup any handlers they have installed

        This function will also clear the callback function so that any 
        leftover handler that is triggered will not be able to change the
        application state.

        subclasses must call this super method to cleanup the callback if they
        collaborate and use this classe's do_callback()
        """
        self._callback = None

    def do_callback(self, *args, **kwargs):
        """
        Default callback function that calls the event filter callback
        with the event filter as only argument.
        """
        if self._callback:
            self._callback(self)