FIFE 2008.0
|
00001 /*************************************************************************** 00002 * Copyright (C) 2005-2008 by the FIFE team * 00003 * http://www.fifengine.de * 00004 * This file is part of FIFE. * 00005 * * 00006 * FIFE is free software; you can redistribute it and/or * 00007 * modify it under the terms of the GNU Lesser General Public * 00008 * License as published by the Free Software Foundation; either * 00009 * version 2.1 of the License, or (at your option) any later version. * 00010 * * 00011 * This library is distributed in the hope that it will be useful, * 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00014 * Lesser General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU Lesser General Public * 00017 * License along with this library; if not, write to the * 00018 * Free Software Foundation, Inc., * 00019 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * 00020 ***************************************************************************/ 00021 00022 #ifndef FIFE_EVENTCHANNEL_EVENTMANAGER_H 00023 #define FIFE_EVENTCHANNEL_EVENTMANAGER_H 00024 00025 // Standard C++ library includes 00026 // 00027 #include <deque> 00028 #include <map> 00029 #include <list> 00030 00031 // 3rd party library includes 00032 // 00033 00034 // FIFE includes 00035 // These includes are split up in two parts, separated by one empty line 00036 // First block: files included from the FIFE root src directory 00037 // Second block: files included from the same folder 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 // Helpers for processEvents 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 // Events dispatchers - only dispatchSdlevent may reject the event. 00116 bool dispatchSdlEvent(SDL_Event& evt); 00117 void dispatchKeyEvent(KeyEvent& evt); 00118 void dispatchMouseEvent(MouseEvent& evt); 00119 00120 // Translate events 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 } //FIFE 00152 00153 #endif