GUI
EventEmitter.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 by Maciej Wiecierzewski
3  */
4 
5 #include "EventEmitter.h"
6 
7 #include <algorithm>
8 #include <utility>
9 
10 #include "GUISystem.h"
11 
12 using namespace gui;
13 
15  lastListenerId(0)
16 {
17 }
18 
20 {
21 }
22 
24 {
25  addToQueue = addFunction;
26 }
27 
29 {
30  EventListener listener(listenerFunc);
31  listener.id = ++lastListenerId;
32  eventListeners.emplace(eventType, listener);
33 
34  return listener.id;
35 }
36 
38 {
39  auto iter = std::find_if(eventListeners.begin(), eventListeners.end(), MapPredicate(listenerId));
40 
41  eventListeners.erase(iter);
42 }
43 
45 {
46  auto range = eventListeners.equal_range(event.getType());
47 
48  for(Map::iterator i = range.first; i != range.second; i++)
49  {
50  Event evtCopy = guiSystem->cloneEvent(event);
51  addToQueue(std::move(evtCopy), i->second);
52 
53  break;
54  }
55 }