mojo_client/src/Client/GUI/GUIEventReceiver.h
shlainn e820f0a5a4 * Fixed lots of warnings in GCC
* Purely cosmetic ;)
2009-05-07 07:46:35 +00:00

119 lines
3.4 KiB
C++

#ifndef GUIEVENTRECEIVER_H
#define GUIEVENTRECEIVER_H
#include <queue>
class GUIEventReceiver : public IEventReceiver
{
public:
GUIEventReceiver()
{
buttons = 0;
react_to_keys = true;
store_gui = true;
store_keys = true;
store_mouse = true;
}
virtual bool OnEvent(const SEvent& event)
{
// copy all 3 event types into different stores for later external use
if(event.EventType == EET_GUI_EVENT)
{
guieventqueue.push_back(event.GUIEvent);
}
else if(event.EventType == EET_KEY_INPUT_EVENT)
{
keyeventqueue.push_back(event.KeyInput);
}
else if(event.EventType == EET_MOUSE_INPUT_EVENT)
{
mouseeventqueue.push_back(event.MouseInput);
}
bool proc = false;
//GUI EVENT
if (event.EventType == EET_GUI_EVENT)
{
s32 id = event.GUIEvent.Caller->getID();
DEBUG(logdev("GUIEventReceiver: event type %u ID %u",event.GUIEvent.EventType,id));
switch(event.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
buttons += id;
proc = true;
break;
case EGET_MESSAGEBOX_OK: // triggered on enter or ok button click
case EGET_MESSAGEBOX_CANCEL: // triggered on escape
react_to_keys = true; // popup is gone, main window can react to keys again
proc = true;
break;
default:DEBUG(logdev("Unhandled event type %u ID %u",event.GUIEvent.EventType,id));
break;
}
if(customHandledEvents.find(event.GUIEvent.EventType) != customHandledEvents.end())
proc = true;
}
if(react_to_keys && event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
{
std::map<u32,u32>::iterator it = keyToButtonMap.find(event.KeyInput.Key);
if( it != keyToButtonMap.end() )
{
buttons += it->second;
proc = true;
}
}
return proc;
}
inline bool HasMouseEvent(void) { return mouseeventqueue.size(); }
inline bool HasGUIEvent(void) { return guieventqueue.size(); }
inline bool HasKeyEvent(void) { return keyeventqueue.size(); }
inline const SEvent::SMouseInput NextMouseEvent(void)
{
ASSERT(HasMouseEvent())
const SEvent::SMouseInput ev = mouseeventqueue.front();
mouseeventqueue.pop_front();
return ev;
}
inline const SEvent::SGUIEvent NextGUIEvent(void)
{
ASSERT(HasGUIEvent())
SEvent::SGUIEvent ev = guieventqueue.front();
guieventqueue.pop_front();
return ev;
}
inline const SEvent::SKeyInput NextKeyEvent(void)
{
ASSERT(HasKeyEvent())
SEvent::SKeyInput ev = keyeventqueue.front();
keyeventqueue.pop_front();
return ev;
}
bool react_to_keys, store_mouse, store_keys, store_gui;
u32 buttons;
std::map<u32,u32> keyToButtonMap; // to simulate button press on key input
std::set<u32> customHandledEvents;
protected:
std::list<SEvent::SGUIEvent> guieventqueue;
std::list<SEvent::SMouseInput> mouseeventqueue;
std::list<SEvent::SKeyInput> keyeventqueue;
};
#endif