root / trunk / tbeta / Windows / libs / openFrameworks / events / ofEventUtils.h @ 139

View | Annotate | Download (2.2 KB)

1
#include "ofConstants.h"
2
3
#ifdef OF_USING_POCO
4
5
#include "Poco/FIFOEvent.h"
6
#include "Poco/Delegate.h"
7
8
using Poco::delegate;
9
10
11
//-----------------------------------------
12
// define ofEvent as a poco FIFOEvent
13
// to create your own events use:
14
// ofEvent<argType> myEvent
15
16
template <typename ArgumentsType>
17
class ofEvent: public Poco::FIFOEvent<ArgumentsType> {};
18
19
20
21
//----------------------------------------------------
22
// register any method of any class to an event.
23
// the method must provide one of the following
24
// signatures:
25
//     void method(ArgumentsType & args)
26
//     void method(const void * sender, ArgumentsType &args)
27
// ie:
28
//     ofAddListener(addon.newIntEvent, this, &Class::method)
29
30
template <class EventType,typename ArgumentsType, class ListenerClass>
31
static void ofAddListener(EventType & event, ListenerClass  * listener, void (ListenerClass::*listenerMethod)(ArgumentsType&)){
32
    event += delegate(listener, listenerMethod);
33
}
34
35
36
//----------------------------------------------------
37
// unregister any method of any class to an event.
38
// the method must provide one the following
39
// signatures:
40
//     void method(ArgumentsType & args)
41
//     void method(const void * sender, ArgumentsType &args)
42
// ie:
43
//     ofAddListener(addon.newIntEvent, this, &Class::method)
44
45
template <class EventType,typename ArgumentsType, class ListenerClass>
46
static void ofRemoveListener(EventType & event, ListenerClass  * listener, void (ListenerClass::*listenerMethod)(ArgumentsType&)){
47
    event -= delegate(listener, listenerMethod);
48
}
49
50
//----------------------------------------------------
51
// notifies an event so all the registered listeners
52
// get called
53
// ie:
54
//        ofNotifyEvent(addon.newIntEvent, intArgument, this)
55
//
56
// or in case there's no sender:
57
//        ofNotifyEvent(addon.newIntEvent, intArgument)
58
59
template <class EventType,typename ArgumentsType, typename SenderType>
60
static void ofNotifyEvent(EventType & event, ArgumentsType & args, SenderType * sender){
61
        event.notify(sender,args);
62
}
63
64
template <class EventType,typename ArgumentsType>
65
static void ofNotifyEvent(EventType & event, ArgumentsType & args){
66
        event.notify(NULL,args);
67
}
68
69
70
#endif