Spinning Topp Logo BlackTopp Studios
inc
eventmanager.h
1 // © Copyright 2010 - 2016 BlackTopp Studios Inc.
2 /* This file is part of The Mezzanine Engine.
3 
4  The Mezzanine Engine is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  The Mezzanine Engine is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with The Mezzanine Engine. If not, see <http://www.gnu.org/licenses/>.
16 */
17 /* The original authors have included a copy of the license specified above in the
18  'Docs' folder. See 'gpl.txt'
19 */
20 /* We welcome the use of the Mezzanine engine to anyone, including companies who wish to
21  Build professional software and charge for their product.
22 
23  However there are some practical restrictions, so if your project involves
24  any of the following you should contact us and we will try to work something
25  out:
26  - DRM or Copy Protection of any kind(except Copyrights)
27  - Software Patents You Do Not Wish to Freely License
28  - Any Kind of Linking to Non-GPL licensed Works
29  - Are Currently In Violation of Another Copyright Holder's GPL License
30  - If You want to change our code and not add a few hundred MB of stuff to
31  your distribution
32 
33  These and other limitations could cause serious legal problems if you ignore
34  them, so it is best to simply contact us or the Free Software Foundation, if
35  you have any questions.
36 
37  Joseph Toppi - toppij@gmail.com
38  John Blackwood - makoenergy02@gmail.com
39 */
40 #ifndef _eventmanager_h
41 #define _eventmanager_h
42 ///////////////////////////////////////////////////////////////////////////////
43 //This will capture all event and store them for easy dispatching.
44 //There will be an instance of this class in the world.
45 ///////////////////////////////////////
46 
47 #include "entresolmanager.h"
48 #include "entresolmanagerfactory.h"
49 #include "eventbase.h"
50 #include "singleton.h"
51 #include "vector2.h"
52 
53 #ifndef SWIG
54  #include "Input/metacode.h"
55  #include "XML/xml.h"
56  #include "Threading/workunit.h"
57 #endif
58 
59 ///////////////////////////////////////////////////////////////////////////////
60 // Class External << Operators for streaming or assignment
61 namespace Mezzanine
62 {
63  class EventManager; //forward declaration so we can use this in our << and >> operators
64 }
65 
66 #if !(defined(SWIG) && defined(MEZZLUA51)) // Stop Swig from making lua bindings but allow other languages
67  /// @brief Serializes the passed Mezzanine::EventManager to XML
68  /// @param stream The ostream to send the xml to.
69  /// @param Mgr the Mezzanine::EventManager to be serialized
70  /// @return this returns the ostream, now with the serialized data
71  std::ostream& MEZZ_LIB operator << (std::ostream& stream, const Mezzanine::EventManager& Mgr);
72 
73  /// @brief Deserialize a Mezzanine::EventManager
74  /// @param stream The istream to get the xml from to (re)make the Mezzanine::EventManager.
75  /// @param Mgr the Mezzanine::EventManager to be deserialized.
76  /// @return this returns the ostream, advanced past the Mezzanine::EventManager that was recreated onto Ev.
77  std::istream& MEZZ_LIB operator >> (std::istream& stream, Mezzanine::EventManager& Mgr);
78 
79  /// @brief Set all values of a Mezzanine::EventManager from parsed xml.
80  /// @param OneNode The istream to get the xml from to (re)make the Mezzanine::EventManager.
81  /// @param Mgr the Mezzanine::EventManager to be reset.
82  /// @return This returns theXML::Node that was passed in.
84 #endif // \!SWIG && LUA
85 
86 namespace Mezzanine
87 {
88  /// Forward Declarations
89  class Entresol;
90  class EventGameWindow;
91  class EventManager;
92  class EventUserInput;
93  class EventQuit;
94 
95  namespace Internal {
96  class EventManagerInternalData;
97  }
98 
99  // Used by the scripting language binder to help create bindgings for this class. SWIG does know to creation template instances
100  #ifdef SWIG
101  %template(SingletonEventManager) Singleton<EventManager>;
102  #endif
103 
104  ///////////////////////////////////////////////////////////////////////////////
105  /// @brief Every frame the OS must be queried for changes to the state, this does that querying on behalf of an eventmanager.
106  /// @details
107  ///////////////////////////////////////
109  {
110  protected:
111  /// @internal
112  /// @brief The Manager this does the work for.
114  /// @internal
115  /// @brief Protected copy constructor. THIS IS NOT ALLOWED.
116  /// @param Other The other work unit being copied from. WHICH WILL NEVER HAPPEN.
117  EventPumpWorkUnit(const EventPumpWorkUnit& Other);
118  /// @internal
119  /// @brief Protected assignment operator. THIS IS NOT ALLOWED.
120  /// @param Other The other work unit being copied from. WHICH WILL NEVER HAPPEN.
121  EventPumpWorkUnit& operator=(const EventPumpWorkUnit& Other);
122  public:
123  /// @brief Create the WorkUnit for getting updates from the OS.
124  /// @param Target The Manager to save this data in.
126  /// @brief Virtual Deconstructor
127  virtual ~EventPumpWorkUnit();
128 
129  ///////////////////////////////////////////////////////////////////////////////
130  // Utility
131 
132  /// @brief This does the actual work of the getting the data form the OS.
133  /// @param CurrentThreadStorage Only really used for the logger.
134  virtual void DoWork(Threading::DefaultThreadSpecificStorage::Type& CurrentThreadStorage);
135  };//EventPumpWorkUnit
136 
137  ///////////////////////////////////////////////////////////////////////////////
138  /// @class EventManager
139  /// @headerfile eventmanager.h
140  /// @brief This is a container for Events and facilitates the transfer of data.
141  /// @details The Event Manager Exists to passed important information about
142  /// Gamestate from where it is generated to where it is needed. It is the Game
143  /// Developers option whether they want to grab events directly using the get
144  /// functions that have filters, or if they want to get all the events at once
145  /// from a central location and dispatch form there. \n
146  /// Since all User input comes in the form of events, this is also where user
147  /// input Polling and optional input sources like Joysticks are controlled
148  /// from. \n
149  /// All of these event are stored in an internal Queue and order is preserved.
150  /// So the First item In will be the First Out (FIFO). This is not strictly a
151  /// FIFO buffer, there are a number of functions for getting of managing
152  /// specific kinds of events. Generally these 'Filtered' management functions
153  /// Still return the first of those kinds of event.
154  /// @warning Delete pointers you get from this. Anything can create events and
155  /// Put them here, and anything can get them out, This means the simple way to
156  /// not cause memory leaks is to have the routines extracting the events delete
157  /// the events.
158  /// @warning Currently this is not thread safe, even though it should be.
159  ///////////////////////////////////////////////////////////////////////////////
161  {
162  public:
163  /// @brief A String containing the name of this manager implementation.
165  /// @brief A ManagerType enum value used to describe the type of interface/functionality this manager provides.
167  protected:
168  /// @internal
169  /// @brief All the internal data for this EventManager
171 
172  /// @internal
173  /// @brief Checks for quit messages and adds them to the queue
174  void UpdateQuitEvents();
175 
176  /// @brief Private copy semantics, because copying this will cause problems.
177  /// @param Dummy A dummy argument
178  /// @details Since copying, or having more than one event manager doesn't seem to make sense
179  /// I just made it non-copyable.
181  {}
182 
183  friend class EventWorkUnit;
184  friend std::ostream& MEZZ_LIB ::operator << (std::ostream& stream, const Mezzanine::EventManager& Mgr);
185  friend std::istream& MEZZ_LIB ::operator >> (std::istream& stream, Mezzanine::EventManager& Mgr);
186  friend void MEZZ_LIB ::operator >> (const Mezzanine::XML::Node& OneNode, Mezzanine::EventManager& Mgr);
187  public:
188  /// @brief Default constructor.
189  EventManager();
190  /// @brief XML constructor.
191  /// @param XMLNode The node of the xml document to construct from.
192  EventManager(const XML::Node& XMLNode);
193  /// @brief Default Deconstructor.
194  virtual ~EventManager();
195 
196  ///////////////////////////////////////////////////////////////////////////////
197  // Management functions - Work with all events
198 
199  /// @brief Gets a count of events
200  /// @details This returns a total count of all events stored in this EventManager.
201  /// @return This returns an unsigned integer with the amount of of total events
202  size_t GetRemainingEventCount();
203 
204  /// @brief Return a pointer to the Next event
205  /// @details This returns a pointer to the next Event. It is advisable to use this for performance reasons
206  /// because it runs in constant time. However it does not return a specific kind of event, and must be cast
207  /// in order to use the true content. This returns a pointer to 0 if there are no events in the queue.
208  /// @return A pointer to a Event, that still needs to be removed from the event manager and deleted.
209  EventBase* GetNextEvent();
210 
211  /// @brief Return a pointer to the Next event, and removes the Event from storage
212  /// @details This functions just like GetNextEvent , except that it also removes the item from the internal storage
213  /// of the EventManager. This returns a pointer to 0 if there are no events in the que.
214  /// @return A pointer to a Event, that will need to be deleted once it has been used.
215  EventBase* PopNextEvent();
216 
217  /// @brief Removes an Event From the que without looking at it.
218  /// @details This together with GetNextEvent() are the same as call PopNextEvent().
219  /// @warning If you did not call GetNextEvent() and haven't deleted or stored, or somehow dealt with this pointer, then this is a memory leak.
220  /// Don't use this unless you are certain you have taken care of the pointer appropriately
221  /// @exception This can throw any STL exception a que could. Any with likely throw some kind of except if called when there are no Events in the Que.
222  void RemoveNextEvent();
223 
224  /// @brief Adds an event of any kind to the end of the Event Queue.
225  /// @param EventToAdd This is a pointer to an Event.
226  /// @details This adds the existing event to the Queue. Be careful this is not delete, and does not go out of scope. Deleting the Event is now the
227  /// responsibilty of the code that pulls it out of Event Manager.
228  void AddEvent(EventBase* EventToAdd);
229 
230  /// @brief Removes an event of any kind from the Event Queue.
231  /// @param EventToRemove Pointer to the event that will be removed.
232  /// @details In most cases you will want to use the PopNextEvent() methods when going through events. In some expert use cases however you may want
233  /// to remove a specific event at an arbitrary place in the Queue. This is the method for doing so.
234  void RemoveEvent(EventBase* EventToRemove);
235 
236  /// @brief Pulls Events from the all the subsystems for use in the EventManager.
237  /// @details The work this function does is already performed in the main loop. This only really needs to be used
238  /// If a game developer chooses to use his own main loop. This adds system events, like EventQuit and Other Windows manager events,
239  /// and if any user input event actions, this generates one EventUserInput that stores everythin that happened.
240  void UpdateEvents();
241 
242  ///////////////////////////////////////////////////////////////////////////////
243  // Filtered management functions - GameWindow Events
244 
245  /// @brief Returns a pointer to the Next GameWindow event
246  /// @details This Filtered event management function returns a pointer to the next GameWindow event. It is inadvisable to use
247  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
248  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no GameWindow
249  /// events in the que.
250  /// @return A pointer to a EventGameWindow, that still needs to be removed from the event manager and deleted.
251  EventGameWindow* GetNextGameWindowEvent();
252 
253  /// @brief Returns a pointer to the Next GameWindow event and removes it from the Que
254  /// @details This Filtered event management function returns a pointer to the next GameWindow event. It is inadvisable to use
255  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
256  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no GameWindow
257  /// events in the que. This also removes the returned pointer form the Que.
258  /// @return A pointer to a EventGameWindow, that still needs to be removed from the event manager and deleted.
259  EventGameWindow* PopNextGameWindowEvent();
260 
261  /// @brief Removes the First GameWindow Event From the que without looking at it.
262  /// @details This together with GetNextGameWindowEvent() are the pretty much same as call PopNextGameWindowEvent().
263  /// @warning If you did not call GetNextGameWindowEvent() and haven't deleted or stored, or somehow dealt with this pointer, then this is a memory leak.
264  /// Don't use this unless you are certain you have taken care of the pointer appropriately
265  /// @exception This can throw any STL exception a queue could. And with likely throw some kind of except if called when there are no Events in the Que.
266  void RemoveNextGameWindowEvent();
267 
268  /// @brief This returns a complete list of all the Render Time events.
269  /// @details This finds all the EventUserInput Events then creates a new list and returns that. This runs in linear time relative to the amounts of events.
270  /// @return This returns a list<EventGameWindow*> pointer which is this a subset of this classes event pointer list. Use this carefully, it can cause errors if used improperly. This list pointer must be deleted, but not the events in it.
271  std::list<EventGameWindow*>* GetAllGameWindowEvents();
272 
273  ///////////////////////////////////////////////////////////////////////////////
274  // Filtered management functions - User Input Events
275 
276  /// @brief Returns a pointer to the Next User Input event
277  /// @details This Filtered event management function returns a pointer to the next User Input event. It is inadvisable to use
278  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
279  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no User Input
280  /// events in the que.
281  /// @return A pointer to a EventUserInput, that still needs to be removed from the event manager and deleted.
282  EventUserInput* GetNextUserInputEvent();
283 
284  /// @brief Returns a pointer to the Next User Input event and removes it from the Que
285  /// @details This Filtered event management function returns a pointer to the next User Input event. It is inadvisable to use
286  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
287  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no User Input
288  /// events in the que. This also removes the returned pointer form the Que.
289  /// @return A pointer to a EventUserInput, that still needs to be removed from the event manager and deleted.
290  EventUserInput* PopNextUserInputEvent();
291 
292  /// @brief Removes the First User Input Event From the que without looking at it.
293  /// @details This together with GetNextUserInputEvent() are the pretty much same as call PopNextUserInputEvent().
294  /// @warning If you did not call GetNextUserInputEvent() and haven't deleted or stored, or somehow dealt with this pointer, then this is a memory leak.
295  /// Don't use this unless you are certain you have taken care of the pointer appropriately
296  /// @exception This can throw any STL exception a queue could. And with likely throw some kind of except if called when there are no Events in the Que.
297  void RemoveNextUserInputEvent();
298 
299  /// @brief This returns a complete list of all the User Input events.
300  /// @details This finds all the EventUserInput Events then creates a new list and returns that. This runs in linear time relative to the amounts of events.
301  /// @return This returns a std::list<EventUserInput*> pointer which is this a subset of this classes event pointer list. Use this carefully, it can cause errors if used improperly. Additionally this list pointer must be deleted, but not the events in it.
302  std::list<EventUserInput*>* GetAllUserInputEvents();
303 
304  ///////////////////////////////////////////////////////////////////////////////
305  // Filtered management functions - Quit Events
306 
307  /// @brief Returns a pointer to the Next EventQuit
308  /// @details This Filtered event management function returns a pointer to the next EventQuit. It is inadvisable to use
309  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
310  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no EventQuit
311  /// events in the que.
312  /// @return A pointer to a EventQuit, that still needs to be removed from the event manager and deleted.
313  EventQuit* GetNextQuitEvent();
314 
315  /// @brief Returns a pointer to the Next EventQuit and removes it from the Que.
316  /// @details This Filtered event management function returns a pointer to the next EventQuit. It is inadvisable to use
317  /// this for performance reasons because it runs in linear time relative to the amount of events. However, it will return an immediately
318  /// usable pointer for case where an extreme level of performance is not required. This returns a pointer to 0 if there are no EventQuit
319  /// events in the que. This also removes the returned pointer form the Que.
320  /// @return A pointer to a EventQuit, that still needs to be removed from the event manager and deleted.
321  EventQuit* PopNextQuitEvent();
322 
323  /// @brief Removes the First EventQuit From the que without looking at it.
324  /// @details This together with GetNextQuitEvent() are the pretty much same as call PopNextQuitEvent().
325  /// @warning If you did not call GetNextQuitEvent() and haven't deleted or stored, or somehow dealt with this pointer, then this is a memory leak.
326  /// Don't use this unless you are certain you have taken care of the pointer appropriately
327  /// @exception This can throw any STL exception a queue could. And with likely throw some kind of except if called when there are no Events in the Que.
328  void RemoveNextQuitEvent();
329 
330  /// @brief This returns a complete list of all the quit events.
331  /// @details This finds all the EventQuit Events then creates a new list and returns that. This runs in linear time relative to the amounts of events.
332  /// @warning Something is wrong if you have more than a few quit events. These should be checked for in each iteration of the main loop.
333  /// @return This returns a std::list<EventQuit*> pointer which is this a subset of this classes event pointer list. Use this carefully, it can cause errors if used improperly. Additionally this list pointer must be deleted, but not the events in it.
334  std::list<EventQuit*>* GetAllQuitEvents();
335 
336  ///////////////////////////////////////////////////////////////////////////////
337  // Filtered management functions - You choose YAYYYY!!!
338 
339  /// @brief Returns a pointer to the Next kind event of the Specified type
340  /// @param SpecificType This is a Event::EventType that defines the type you want this to work with
341  /// @details This and the other NextSpecificEvent functions are the core of the Event Filtering System. In general the other filtering
342  /// functions call one of these and does very little work on their own. \n This performs a linear search starting with the oldest (first entered
343  /// Events) and simply checks if it the of the correct type. Then this returns a pointer to the next event of the specified type, or returns
344  /// a pointer to 0 if there are none of the correct pointers in the Que. It is inadvisable to use
345  /// this for performance reasons because it runs in linear time relative to the amount of events.
346  /// @return A pointer to a EventUserInput, that still needs to be removed from the event manager and deleted.
347  EventBase* GetNextSpecificEvent(EventBase::EventType SpecificType);
348 
349  /// @brief Returns a pointer to the Next kind event of the Specified type, and removes it from the Que
350  /// @param SpecificType This is a Event::EventType that defines the type you want this to work with
351  /// @details This is just like GetNextSpecificEvent(Event::EventType SpecificType) but it also removes the item from the Que.
352  /// @return A pointer to a EventUserInput, that still needs to be removed from the event manager and deleted.
353  EventBase* PopNextSpecificEvent(EventBase::EventType SpecificType);
354 
355  /// @brief Returns a pointer to the Next kind event of the Specified type, and removes it from the Que
356  /// @param SpecificType This is a Event::EventType that defines the type you want this to work with
357  /// @details This is just like PopNextSpecificEvent(Event::EventType SpecificType) but exept it doesn't bother with any of the needed
358  /// structure involved with returning data, and just removes the specific event from the Queue.
359  /// @warning If you did not call GetNextSpecificEvent(Event::EventType SpecificType) and haven't deleted or stored, or somehow dealt with
360  /// this pointer, then this is a memory leak. Don't use this unless you are certain you have taken care of the pointer appropriately.
361  /// @exception This can throw any STL exception a queue could. And with likely throw some kind of except if called when there are no Events in the Que.
362  void RemoveNextSpecificEvent(EventBase::EventType SpecificType);
363 
364  /// @brief This returns a complete list of all the specified events.
365  /// @details This finds all the events that are of the specified type in the event manager, then creates a new list
366  /// and return that. This runs in linear time relative to the amounts of events.
367  /// @warning The pointers contained in this list must be used carefully. Do not delete them, this will cause errors.
368  /// @return This returns a std::list<EventBase*> pointer which is this a subset of this classes event pointer list. Use this carefully, it can cause errors if used improperly. Additionally this list pointer must be deleted, but not the events in it.
369  std::list<EventBase*>* GetAllSpecificEvents(EventBase::EventType SpecificType);
370 
371  /// @brief This removes all the events of the specified type.
372  /// @details This finds all the events that are of the specified type in the event manager, then removes them.
373  /// @warning This does not delete the events. This is a memory leak unless used with GetAllSpecificEvents so that the events can be tracked indeendantly, and deleted.
374  void RemoveAllSpecificEvents(EventBase::EventType SpecificType);
375 
376  ///////////////////////////////////////////////////////////////////////////////
377  // Polling management functions
378 
379  /// @brief Generates extra events each iteration of the main loop, based on user input polling
380  /// @param InputToTryPolling This accepts a MetaCode and will try to watch for occurences like this one
381  /// @details This will trigger the input system to generate an event (or add to an exiting event) when polling for the given kind of event. Each
382  /// Iteration of the main loop there will be a EventUserInput that created. That Event will Include all the normal metacodes for user input
383  /// that happened, and it will also have a meta code for each time this function was called. The added metacode may be partialky ignored, the
384  /// Metavalue is almost always ignored, and in a situation where the can only be one of a given input on a system, the ID is ignore and 0 is assumed.
385  /// @exception "Unsupported Polling Check on this Platform" When the metacode passed cannot be polled on this platform
386  void AddPollingCheck(const Input::MetaCode& InputToTryPolling);
387 
388  /// @brief Removes Events from the list(s) of what needs to be polled
389  /// @param InputToStopPolling This accepts a MetaCode and will try to Remove Watches like this one
390  /// @details This will remove any check for polling that share the same inputcode and ID. This
391  /// @exception "Polling check not present" Is thrown
392  void RemovePollingCheck(const Input::MetaCode& InputToStopPolling);
393 
394  ///////////////////////////////////////////////////////////////////////////////
395  // Utility
396 
397  /// @copydoc ManagerBase::Initialize()
398  virtual void Initialize();
399  /// @copydoc ManagerBase::Deinitialize()
400  virtual void Deinitialize();
401 
402  /// @brief Gets the work unit responsible for pumping events from the OS.
403  /// @return Returns a pointer to the ActorUpdateWorkUnit used by this manager.
404  EventPumpWorkUnit* GetEventPumpWork();
405 
406  ///////////////////////////////////////////////////////////////////////////////
407  // Type Identifier Methods
408 
409  /// @copydoc ManagerBase::GetInterfaceType()
410  virtual ManagerType GetInterfaceType() const;
411  /// @copydoc ManagerBase::GetImplementationTypeName()
412  virtual String GetImplementationTypeName() const;
413  };//EventManager
414 
415  ///////////////////////////////////////////////////////////////////////////////
416  /// @class DefaultEventManagerFactory
417  /// @headerfile eventmanager.h
418  /// @brief A factory responsible for the creation and destruction of the default eventmanager.
419  ///////////////////////////////////////
421  {
422  public:
423  /// @brief Class constructor.
425  /// @brief Class destructor.
426  virtual ~DefaultEventManagerFactory();
427 
428  /// @copydoc ManagerFactory::GetManagerImplName()
429  String GetManagerImplName() const;
430  /// @copydoc ManagerFactory::GetManagerType() const
431  ManagerBase::ManagerType GetManagerType() const;
432 
433  /// @copydoc EntresolManagerFactory::CreateManager(const NameValuePairList&)
434  EntresolManager* CreateManager(const NameValuePairList& Params);
435  /// @copydoc EntresolManagerFactory::CreateManager(const XML::Node&)
436  EntresolManager* CreateManager(const XML::Node& XMLNode);
437  /// @copydoc EntresolManagerFactory::DestroyManager(EntresolManager*)
438  void DestroyManager(EntresolManager* ToBeDestroyed);
439  };//DefaultEventManagerFactory
440 }//Mezzanine
441 
442 #endif
std::ostream & operator<<(std::ostream &stream, const Mezzanine::LinearInterpolator< T > &Lint)
Used to Serialize an Mezzanine::LinearInterpolator to a human readable stream.
Definition: interpolator.h:433
Default implementation of WorkUnit. This represents on piece of work through time.
Definition: workunit.h:160
Used to increase encapsulation, just a bit.
ManagerType
A listing of Manager Types.
Definition: managerbase.h:65
This is a base class for factories that construct managers used by the Entresol class.
This is a container for MetaCodes that is used in the EventManager.
Every frame the OS must be queried for changes to the state, this does that querying on behalf of an ...
Definition: eventmanager.h:108
static const String ImplementationName
A String containing the name of this manager implementation.
Definition: eventmanager.h:164
Internal::EventManagerInternalData * _Data
All the internal data for this EventManager.
Definition: eventmanager.h:170
A thread specific collection of double-buffered and algorithm specific resources. ...
static const ManagerBase::ManagerType InterfaceType
A ManagerType enum value used to describe the type of interface/functionality this manager provides...
Definition: eventmanager.h:166
EventType
A listing of values that can be used to identify Events.
Definition: eventbase.h:66
This is the base class for all managers that do no describe properties of a single world...
The base class for all events.
Definition: eventbase.h:61
A light-weight handle for manipulating nodes in DOM tree.
Definition: node.h:89
This is intended to convey the message that quitting needs to happen.
Definition: eventquit.h:63
EventManager(const EventManager &Dummy)
Private copy semantics, because copying this will cause problems.
Definition: eventmanager.h:180
A factory responsible for the creation and destruction of the default eventmanager.
Definition: eventmanager.h:420
std::list< NameValuePair > NameValuePairList
This is a datatype mostly used for describing settings or parameters that can't be declared in advanc...
Definition: datatypes.h:206
This Determines the kind of user input.
Definition: metacode.h:93
#define MEZZ_LIB
Some platforms require special decorations to denote what is exported/imported in a share library...
The bulk of the engine components go in this namspace.
Definition: actor.cpp:56
std::istream & operator>>(std::istream &stream, Mezzanine::LinearInterpolator< T > &Lint)
Used to de-serialize an Mezzanine::LinearInterpolator from a stream.
Definition: interpolator.h:448
Convey the message that Something happened to a game window.
EventManager * TargetManager
The Manager this does the work for.
Definition: eventmanager.h:113
This is a container for Events and facilitates the transfer of data.
Definition: eventmanager.h:160
std::string String
A datatype used to a series of characters.
Definition: datatypes.h:159
This file has the definition of the workunit.