// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#ifndef RZ_EVENT_DESCRIPTOR_H
#define RZ_EVENT_DESCRIPTOR_H
#include "nel/misc/types_nl.h"
// ----------------------------------------------------------------------------
class CEventDescriptor
{
public:
enum EEventType
{
key = 0,
mouse = 1,
system = 2
};
EEventType getType() const
{
return _EventType;
}
protected:
//type of the event
EEventType _EventType;
};
/** encode key events.
*/
class CEventDescriptorKey : public CEventDescriptor
{
public:
enum EKeyEventType
{
keydown = 0, // a key has been press down. The key value is stored as a TKey
keyup, // a key has been released. The key value is stored as a TKey
keychar, // a key has been stroke. The key is a ucchar
keystring, // a string has been sent. The string is a ucstring
unknown, // uninitialized event
};
CEventDescriptorKey() : _KeyEvent(unknown)
{
_EventType = key;
}
// ctrcuct from a CEventKey obj
CEventDescriptorKey(const NLMISC::CEventKey &ev) : _KeyEvent(unknown)
{
_EventType = key;
init(ev);
}
// get the type of the key event
EKeyEventType getKeyEventType() const { return _KeyEvent; }
// return the key that has been pressed. The key event type MUST be 'keydown' or 'keyup', else => assert
NLMISC::TKey getKey() const
{
nlassert(_KeyEvent == keydown || _KeyEvent == keyup);
return _Key;
}
// return the char that has been pressed. The key event type MUST be 'keychar', else => assert
ucchar getChar() const
{
nlassert(_KeyEvent == keychar);
return _Char;
}
// return the string that has been sent. The key event type MUST be 'keystring', else => assert
ucstring getString() const
{
nlassert(_KeyEvent == keystring);
return _String;
}
bool getKeyCtrl() const // is CTRL pressed ?
{
return _CtrlState;
}
bool getKeyShift() const // is SHIFT (right or left) pressed ?
{
return _ShiftState;
}
bool getKeyAlt() const // is ALT (right or left) pressed ?
{
return _AltState;
}
// init from a CEventKey obj
void init(const NLMISC::CEventKey &ev);
private:
EKeyEventType _KeyEvent;
bool _CtrlState;
bool _ShiftState;
bool _AltState;
union
{
NLMISC::TKey _Key;
ucchar _Char;
};
ucstring _String;
};
// ----------------------------------------------------------------------------
class CEventDescriptorMouse : public CEventDescriptor
{
public:
enum EEventTypeExtended
{
mouseleftdown=0,
mouseleftup=1,
mouserightdown=2,
mouserightup=3,
mousewheel=4, // Complementary info stored in wheel
mousemove=5, // Complementary info stored in x and y
mouseleftdblclk= 6,
mouserightdblclk= 7,
};
CEventDescriptorMouse()
{
_EventType = mouse;
_X = _Y = _Wheel = 0;
}
CEventDescriptorMouse (sint32 x, sint32 y)
{
_X = x;
_Y = y;
}
sint32 getX() const
{
return _X;
}
sint32 getY() const
{
return _Y;
}
sint32 getWheel() const
{
return _Wheel;
}
sint32 getEventTypeExtended() const
{
return _EventTypeExtended;
}
void setX (sint32 x)
{
_X = x;
}
void setY (sint32 y)
{
_Y = y;
}
void setWheel (sint32 w)
{
_Wheel = w;
}
void setEventTypeExtended (sint32 e)
{
_EventTypeExtended = e;
}
protected:
sint32 _X;
sint32 _Y;
sint32 _Wheel;
sint32 _EventTypeExtended;
};
// ----------------------------------------------------------------------------
class CEventDescriptorSystem : public CEventDescriptor
{
public:
enum EEventTypeExtended
{
activecalledonparent= 0,
clocktick,
setfocus,
unknown
};
sint32 getEventTypeExtended() const
{
return _EventTypeExtended;
}
void setEventTypeExtended (sint32 e)
{
_EventTypeExtended = e;
}
CEventDescriptorSystem() : _EventTypeExtended(unknown)
{
_EventType = system;
}
protected:
sint32 _EventTypeExtended;
};
// ----------------------------------------------------------------------------
class CEventDescriptorActiveCalledOnParent : public CEventDescriptorSystem
{
public:
bool getActive() const { return _Active; }
void setActive(bool active) { _Active = active; }
CEventDescriptorActiveCalledOnParent(bool active = false) : _Active(active)
{
setEventTypeExtended(activecalledonparent);
}
protected:
bool _Active;
};
// ----------------------------------------------------------------------------
class CEventDescriptorSetFocus : public CEventDescriptorSystem
{
public:
bool hasFocus() const { return _HasFocus; }
CEventDescriptorSetFocus(bool hasFocus = false) : _HasFocus(hasFocus)
{
setEventTypeExtended(setfocus);
}
protected:
bool _HasFocus;
};
#endif // RZ_EVENT_DESCRIPTOR_H
/* End of event_descriptor.h */