topical media & game development

talk show tell print

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.