eventmanager.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_EVENTCHANNEL_EVENTMANAGER_H
00023 #define FIFE_EVENTCHANNEL_EVENTMANAGER_H
00024
00025
00026
00027 #include <deque>
00028 #include <map>
00029 #include <list>
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "eventchannel/command/ec_command.h"
00040 #include "eventchannel/command/ec_icommandcontroller.h"
00041 #include "eventchannel/command/ec_icommandlistener.h"
00042
00043 #include "eventchannel/key/ec_ikeycontroller.h"
00044 #include "eventchannel/key/ec_ikeylistener.h"
00045 #include "eventchannel/key/ec_keyevent.h"
00046 #include "eventchannel/key/ec_key.h"
00047
00048 #include "eventchannel/mouse/ec_imousecontroller.h"
00049 #include "eventchannel/mouse/ec_imouselistener.h"
00050 #include "eventchannel/mouse/ec_mouseevent.h"
00051
00052 #include "eventchannel/sdl/ec_isdleventcontroller.h"
00053 #include "eventchannel/sdl/ec_isdleventlistener.h"
00054
00055 namespace FIFE {
00056
00057 class ICommandListener;
00058 class InputEvent;
00059 class MouseEvent;
00060 class KeyEvent;
00061 class IKeyFilter;
00062
00065 class EventManager:
00066 public ICommandController,
00067 public IKeyController,
00068 public IMouseController,
00069 public ISdlEventController,
00070 public IEventSource {
00071 public:
00074 EventManager();
00075
00078 virtual ~EventManager();
00079
00080 void addCommandListener(ICommandListener* listener);
00081 void addCommandListenerFront(ICommandListener* listener);
00082 void removeCommandListener(ICommandListener* listener);
00083
00084 void dispatchCommand(Command& command);
00085
00086 void addKeyListener(IKeyListener* listener);
00087 void addKeyListenerFront(IKeyListener* listener);
00088 void removeKeyListener(IKeyListener* listener);
00089
00090 void addMouseListener(IMouseListener* listener);
00091 void addMouseListenerFront(IMouseListener* listener);
00092 void removeMouseListener(IMouseListener* listener);
00093
00094 void addSdlEventListener(ISdlEventListener* listener);
00095 void addSdlEventListenerFront(ISdlEventListener* listener);
00096 void removeSdlEventListener(ISdlEventListener* listener);
00097
00098 EventSourceType getEventSourceType();
00099
00104 void processEvents();
00105
00106 void setKeyFilter(IKeyFilter* keyFilter);
00107
00108 private:
00109
00110 void processActiveEvent(SDL_Event event);
00111 void processKeyEvent(SDL_Event event);
00112 void processMouseEvent(SDL_Event event);
00113 bool combineEvents(SDL_Event& event1, const SDL_Event& event2);
00114
00115
00116 bool dispatchSdlEvent(SDL_Event& evt);
00117 void dispatchKeyEvent(KeyEvent& evt);
00118 void dispatchMouseEvent(MouseEvent& evt);
00119
00120
00121 void fillModifiers(InputEvent& evt);
00122 void fillKeyEvent(const SDL_Event& sdlevt, KeyEvent& keyevt);
00123 void fillMouseEvent(const SDL_Event& sdlevt, MouseEvent& mouseevt);
00124
00125 std::deque<ICommandListener*> m_commandlisteners;
00126 std::deque<ICommandListener*> m_pending_commandlisteners;
00127 std::deque<ICommandListener*> m_pending_commandlisteners_front;
00128 std::deque<ICommandListener*> m_pending_cldeletions;
00129
00130 std::deque<IKeyListener*> m_keylisteners;
00131 std::deque<IKeyListener*> m_pending_keylisteners;
00132 std::deque<IKeyListener*> m_pending_keylisteners_front;
00133 std::deque<IKeyListener*> m_pending_kldeletions;
00134
00135 std::deque<IMouseListener*> m_mouselisteners;
00136 std::deque<IMouseListener*> m_pending_mouselisteners;
00137 std::deque<IMouseListener*> m_pending_mouselisteners_front;
00138 std::deque<IMouseListener*> m_pending_mldeletions;
00139
00140 std::deque<ISdlEventListener*> m_sdleventlisteners;
00141 std::deque<ISdlEventListener*> m_pending_sdleventlisteners;
00142 std::deque<ISdlEventListener*> m_pending_sdleventlisteners_front;
00143 std::deque<ISdlEventListener*> m_pending_sdldeletions;
00144
00145 std::map<int, bool> m_keystatemap;
00146 IKeyFilter* m_keyfilter;
00147 int m_mousestate;
00148 MouseEvent::MouseButtonType m_mostrecentbtn;
00149
00150 };
00151 }
00152
00153 #endif