topical media & game development
lib-of-vs-libs-openFrameworks-events-ofEventUtils.h / h
include <ofConstants.h>
ifdef OF_USING_POCO
include "Poco/FIFOEvent.h"
include "Poco/Delegate.h"
using Poco::delegate;
//-----------------------------------------
// define ofEvent as a poco FIFOEvent
// to create your own events use:
// ofEvent<argType> myEvent
template <typename ArgumentsType>
class ofEvent: public Poco::FIFOEvent<ArgumentsType> {};
//----------------------------------------------------
// register any method of any class to an event.
// the method must provide one of the following
// signatures:
// void method(ArgumentsType & args)
// void method(const void * sender, ArgumentsType &args)
// ie:
// ofAddListener(addon.newIntEvent, this, &Class::method)
template <class EventType,typename ArgumentsType, class ListenerClass>
static void ofAddListener(EventType & event, ListenerClass * listener, void (ListenerClass::*listenerMethod)(ArgumentsType&)){
event += delegate(listener, listenerMethod);
}
//----------------------------------------------------
// unregister any method of any class to an event.
// the method must provide one the following
// signatures:
// void method(ArgumentsType & args)
// void method(const void * sender, ArgumentsType &args)
// ie:
// ofAddListener(addon.newIntEvent, this, &Class::method)
template <class EventType,typename ArgumentsType, class ListenerClass>
static void ofRemoveListener(EventType & event, ListenerClass * listener, void (ListenerClass::*listenerMethod)(ArgumentsType&)){
event -= delegate(listener, listenerMethod);
}
//----------------------------------------------------
// notifies an event so all the registered listeners
// get called
// ie:
// ofNotifyEvent(addon.newIntEvent, intArgument, this)
//
// or in case there's no sender:
// ofNotifyEvent(addon.newIntEvent, intArgument)
template <class EventType,typename ArgumentsType, typename SenderType>
static void ofNotifyEvent(EventType & event, ArgumentsType & args, SenderType * sender){
event.notify(sender,args);
}
template <class EventType,typename ArgumentsType>
static void ofNotifyEvent(EventType & event, ArgumentsType & args){
event.notify(NULL,args);
}
endif
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.