PolyEventDispatcher.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * PolyEventDispatcher.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 3/28/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyEventDispatcher.h"
  10. namespace Polycode {
  11. EventDispatcher::EventDispatcher() : EventHandler() {
  12. }
  13. EventDispatcher::~EventDispatcher() {
  14. }
  15. void EventDispatcher::addEventListener(EventHandler *handler, int eventCode) {
  16. EventEntry newEntry;
  17. newEntry.handler = handler;
  18. newEntry.eventCode = eventCode;
  19. handlerEntries.push_back(newEntry);
  20. }
  21. void EventDispatcher::removeAllHandlers() {
  22. handlerEntries.clear();
  23. }
  24. void EventDispatcher::removeAllHandlersForListener(void *listener) {
  25. for(int i=0;i<handlerEntries.size();i++) {
  26. if(handlerEntries[i].handler == listener) {
  27. handlerEntries.erase(handlerEntries.begin()+i);
  28. i--;
  29. }
  30. }
  31. }
  32. void EventDispatcher::removeEventListener(EventHandler *handler, int eventCode) {
  33. for(int i=0;i<handlerEntries.size();i++) {
  34. if(handlerEntries[i].eventCode == eventCode && handlerEntries[i].handler == handler) {
  35. handlerEntries.erase(handlerEntries.begin()+i);
  36. }
  37. }
  38. }
  39. void EventDispatcher::__dispatchEvent(Event *event, int eventCode) {
  40. // event->setDispatcher(dynamic_cast<void*>(this));
  41. event->setDispatcher(this);
  42. event->setEventCode(eventCode);
  43. for(int i=0;i<handlerEntries.size();i++) {
  44. if(handlerEntries[i].eventCode == eventCode) {
  45. // if(handlerEntries[i].handler->onEvent != NULL) {
  46. // handlerEntries[i].handler->onEvent(event);
  47. // }
  48. handlerEntries[i].handler->handleEvent(event);
  49. handlerEntries[i].handler->secondaryHandler(event);
  50. }
  51. }
  52. }
  53. void EventDispatcher::dispatchEventNoDelete(Event *event, int eventCode) {
  54. __dispatchEvent(event,eventCode);
  55. }
  56. void EventDispatcher::dispatchEvent(Event *event, int eventCode) {
  57. __dispatchEvent(event,eventCode);
  58. delete event;
  59. }
  60. }