diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/api/EventManager.cpp | 13 | ||||
| -rw-r--r-- | src/crepe/api/EventManager.h | 2 | ||||
| -rw-r--r-- | src/crepe/api/EventManager.hpp | 15 | ||||
| -rw-r--r-- | src/crepe/api/IKeyListener.cpp | 72 | ||||
| -rw-r--r-- | src/crepe/api/IKeyListener.h | 4 | ||||
| -rw-r--r-- | src/crepe/api/IMouseListener.cpp | 40 | ||||
| -rw-r--r-- | src/crepe/api/IMouseListener.h | 4 | ||||
| -rw-r--r-- | src/crepe/api/KeyCodes.h | 386 | 
8 files changed, 295 insertions, 241 deletions
diff --git a/src/crepe/api/EventManager.cpp b/src/crepe/api/EventManager.cpp index a04f08b..7f47938 100644 --- a/src/crepe/api/EventManager.cpp +++ b/src/crepe/api/EventManager.cpp @@ -8,10 +8,12 @@ EventManager & EventManager::get_instance() {  }  void EventManager::dispatch_events() { -	using HandlersMap = std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>; +	using HandlersMap = std::unordered_map< +		int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>;  	using HandlersVec = std::vector<std::unique_ptr<IEventHandlerWrapper>>; -	for (auto event_it = this->events_queue.begin(); event_it != this->events_queue.end();) { +	for (auto event_it = this->events_queue.begin(); +		 event_it != this->events_queue.end();) {  		std::unique_ptr<Event> & event = std::get<0>(*event_it);  		int channel = std::get<1>(*event_it);  		std::type_index event_type = std::get<2>(*event_it); @@ -25,7 +27,8 @@ void EventManager::dispatch_events() {  				auto handlers = handlers_map.find(channel);  				if (handlers != handlers_map.end()) {  					HandlersVec & callbacks = handlers->second; -					for (auto handler_it = callbacks.begin(); handler_it != callbacks.end(); ++handler_it) { +					for (auto handler_it = callbacks.begin(); +						 handler_it != callbacks.end(); ++handler_it) {  						if ((*handler_it)->exec(*event)) {  							event_it = events_queue.erase(event_it);  							event_handled = true; @@ -39,7 +42,8 @@ void EventManager::dispatch_events() {  			auto handlers_it = this->subscribers.find(event_type);  			if (handlers_it != this->subscribers.end()) {  				HandlersVec & handlers = handlers_it->second; -				for (auto handler_it = handlers.begin(); handler_it != handlers.end(); ++handler_it) { +				for (auto handler_it = handlers.begin(); +					 handler_it != handlers.end(); ++handler_it) {  					// remove event from queue since and continue when callback returns true  					if ((*handler_it)->exec(*event)) {  						event_it = this->events_queue.erase(event_it); @@ -55,4 +59,3 @@ void EventManager::dispatch_events() {  		}  	}  } - diff --git a/src/crepe/api/EventManager.h b/src/crepe/api/EventManager.h index 1ff4031..783db62 100644 --- a/src/crepe/api/EventManager.h +++ b/src/crepe/api/EventManager.h @@ -11,7 +11,7 @@  #include "EventHandler.h"  namespace crepe { -	 +  /**   * \class EventManager   * \brief The EventManager class is responsible for managing the subscription, triggering,  diff --git a/src/crepe/api/EventManager.hpp b/src/crepe/api/EventManager.hpp index 1e505f4..d901492 100644 --- a/src/crepe/api/EventManager.hpp +++ b/src/crepe/api/EventManager.hpp @@ -4,7 +4,8 @@ namespace crepe {  template <typename EventType>  void EventManager::subscribe(EventHandler<EventType> && callback, int channel) { -	using HandlersMap = std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>; +	using HandlersMap = std::unordered_map< +		int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>;  	using HandlersVec = std::vector<std::unique_ptr<IEventHandlerWrapper>>;  	std::type_index event_type = typeid(EventType); @@ -29,7 +30,8 @@ template <typename EventType>  void EventManager::queue_event(EventType && event, int channel) {  	std::type_index event_type = std::type_index(typeid(EventType)); -	auto event_ptr = std::make_unique<EventType>(std::forward<EventType>(event)); +	auto event_ptr +		= std::make_unique<EventType>(std::forward<EventType>(event));  	std::tuple<std::unique_ptr<Event>, int, std::type_index> tuple(  		std::move(event_ptr), channel, event_type); @@ -38,7 +40,8 @@ void EventManager::queue_event(EventType && event, int channel) {  template <typename EventType>  void EventManager::trigger_event(const EventType & event, int channel) { -	using HandlersMap = std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>; +	using HandlersMap = std::unordered_map< +		int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>;  	using HandlersVec = std::vector<std::unique_ptr<IEventHandlerWrapper>>;  	std::type_index event_type = std::type_index(typeid(EventType)); @@ -68,8 +71,10 @@ void EventManager::trigger_event(const EventType & event, int channel) {  }  template <typename EventType> -void EventManager::unsubscribe(const EventHandler<EventType> & callback, int channel) { -	using HandlersMap = std::unordered_map<int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>; +void EventManager::unsubscribe(const EventHandler<EventType> & callback, +							   int channel) { +	using HandlersMap = std::unordered_map< +		int, std::vector<std::unique_ptr<IEventHandlerWrapper>>>;  	using HandlersVec = std::vector<std::unique_ptr<IEventHandlerWrapper>>;  	std::type_index event_type(typeid(EventType)); diff --git a/src/crepe/api/IKeyListener.cpp b/src/crepe/api/IKeyListener.cpp index 81d30b8..cd255df 100644 --- a/src/crepe/api/IKeyListener.cpp +++ b/src/crepe/api/IKeyListener.cpp @@ -3,64 +3,68 @@  using namespace crepe;  // Constructor with default channel -IKeyListener::IKeyListener() : channel(0), active(true), event_manager(EventManager::get_instance()) { -    this->subscribe_events(); +IKeyListener::IKeyListener() +	: channel(0), +	  active(true), +	  event_manager(EventManager::get_instance()) { +	this->subscribe_events();  }  // Constructor with specified channel -IKeyListener::IKeyListener(int channel) : channel(channel), active(true), event_manager(EventManager::get_instance()) { -    this->subscribe_events(); +IKeyListener::IKeyListener(int channel) +	: channel(channel), +	  active(true), +	  event_manager(EventManager::get_instance()) { +	this->subscribe_events();  }  // Destructor, unsubscribe events -IKeyListener::~IKeyListener() { -    this->unsubscribe_events(); -} +IKeyListener::~IKeyListener() { this->unsubscribe_events(); }  // Subscribe to key events  void IKeyListener::subscribe_events() { -    key_pressed_handler = [this](const KeyPressEvent& event) { -        return this->on_key_pressed(event); -    }; -    key_released_handler = [this](const KeyReleaseEvent& event) { -        return this->on_key_released(event); -    }; +	key_pressed_handler = [this](const KeyPressEvent & event) { +		return this->on_key_pressed(event); +	}; +	key_released_handler = [this](const KeyReleaseEvent & event) { +		return this->on_key_released(event); +	}; -    event_manager.subscribe<KeyPressEvent>( -        std::move(this->key_pressed_handler), this->channel); -    event_manager.subscribe<KeyReleaseEvent>( -        std::move(this->key_released_handler), this->channel); +	event_manager.subscribe<KeyPressEvent>(std::move(this->key_pressed_handler), +										   this->channel); +	event_manager.subscribe<KeyReleaseEvent>( +		std::move(this->key_released_handler), this->channel);  }  // Unsubscribe from key events  void IKeyListener::unsubscribe_events() { -    event_manager.unsubscribe<KeyPressEvent>( -        this->key_pressed_handler, this->channel); -    event_manager.unsubscribe<KeyReleaseEvent>( -        this->key_released_handler, this->channel); +	event_manager.unsubscribe<KeyPressEvent>(this->key_pressed_handler, +											 this->channel); +	event_manager.unsubscribe<KeyReleaseEvent>(this->key_released_handler, +											   this->channel);  }  // Activate key listening  void IKeyListener::activate_keys() { -    if (this->active) { -        return; -    } -    this->active = true; -    this->subscribe_events(); +	if (this->active) { +		return; +	} +	this->active = true; +	this->subscribe_events();  }  // Deactivate key listening  void IKeyListener::deactivate_keys() { -    if (!this->active) { -        return; -    } -    this->active = false; -    this->unsubscribe_events(); +	if (!this->active) { +		return; +	} +	this->active = false; +	this->unsubscribe_events();  }  // Set a new channel for key events  void IKeyListener::set_channel(int channel) { -    this->unsubscribe_events(); -    this->channel = channel; -    this->subscribe_events(); +	this->unsubscribe_events(); +	this->channel = channel; +	this->subscribe_events();  } diff --git a/src/crepe/api/IKeyListener.h b/src/crepe/api/IKeyListener.h index 77fbf1e..e170120 100644 --- a/src/crepe/api/IKeyListener.h +++ b/src/crepe/api/IKeyListener.h @@ -5,7 +5,7 @@  #include "EventManager.h"  namespace crepe { -	 +  /**   * \class IKeyListener   * \brief Interface for keyboard event handling in the application. @@ -78,7 +78,7 @@ private:  	EventHandler<KeyPressEvent> key_pressed_handler;  	//!< Key release event handler.  	EventHandler<KeyReleaseEvent> key_released_handler; -	EventManager& event_manager; +	EventManager & event_manager;  };  } // namespace crepe diff --git a/src/crepe/api/IMouseListener.cpp b/src/crepe/api/IMouseListener.cpp index f49004a..bfa49f8 100644 --- a/src/crepe/api/IMouseListener.cpp +++ b/src/crepe/api/IMouseListener.cpp @@ -2,19 +2,17 @@  using namespace crepe; -IMouseListener::IMouseListener(int channel)  -	: event_manager(EventManager::get_instance()), channel(channel) { -	this->subscribe_events();  +IMouseListener::IMouseListener(int channel) +	: event_manager(EventManager::get_instance()), +	  channel(channel) { +	this->subscribe_events();  } -IMouseListener::IMouseListener()  -	: event_manager(EventManager::get_instance()) { -	this->subscribe_events();  +IMouseListener::IMouseListener() : event_manager(EventManager::get_instance()) { +	this->subscribe_events();  } -IMouseListener::~IMouseListener() {  -	this->unsubscribe_events();  -} +IMouseListener::~IMouseListener() { this->unsubscribe_events(); }  void IMouseListener::subscribe_events() {  	// Define handler lambdas and subscribe them @@ -32,18 +30,26 @@ void IMouseListener::subscribe_events() {  	};  	// Subscribe event handlers (no need for std::move) -	event_manager.subscribe<MouseClickEvent>(std::move(mouse_click_handler), this->channel); -	event_manager.subscribe<MousePressEvent>(std::move(mouse_press_handler), this->channel); -	event_manager.subscribe<MouseReleaseEvent>(std::move(mouse_release_handler), this->channel); -	event_manager.subscribe<MouseMoveEvent>(std::move(mouse_move_handler), this->channel); +	event_manager.subscribe<MouseClickEvent>(std::move(mouse_click_handler), +											 this->channel); +	event_manager.subscribe<MousePressEvent>(std::move(mouse_press_handler), +											 this->channel); +	event_manager.subscribe<MouseReleaseEvent>(std::move(mouse_release_handler), +											   this->channel); +	event_manager.subscribe<MouseMoveEvent>(std::move(mouse_move_handler), +											this->channel);  }  void IMouseListener::unsubscribe_events() {  	// Unsubscribe event handlers -	event_manager.unsubscribe<MouseClickEvent>(mouse_click_handler, this->channel); -	event_manager.unsubscribe<MousePressEvent>(mouse_press_handler, this->channel); -	event_manager.unsubscribe<MouseReleaseEvent>(mouse_release_handler, this->channel); -	event_manager.unsubscribe<MouseMoveEvent>(mouse_move_handler, this->channel); +	event_manager.unsubscribe<MouseClickEvent>(mouse_click_handler, +											   this->channel); +	event_manager.unsubscribe<MousePressEvent>(mouse_press_handler, +											   this->channel); +	event_manager.unsubscribe<MouseReleaseEvent>(mouse_release_handler, +												 this->channel); +	event_manager.unsubscribe<MouseMoveEvent>(mouse_move_handler, +											  this->channel);  }  void IMouseListener::activate_mouse() { diff --git a/src/crepe/api/IMouseListener.h b/src/crepe/api/IMouseListener.h index 3b9e317..37d2f00 100644 --- a/src/crepe/api/IMouseListener.h +++ b/src/crepe/api/IMouseListener.h @@ -5,7 +5,7 @@  #include "EventManager.h"  namespace crepe { -	 +  /**   * \class IMouseListener   * \brief Interface for mouse event handling in the application. @@ -116,7 +116,7 @@ private:  	EventHandler<MouseReleaseEvent> mouse_release_handler;  	//! Mouse move event handler.  	EventHandler<MouseMoveEvent> mouse_move_handler; -	EventManager& event_manager; +	EventManager & event_manager;  };  } //namespace crepe diff --git a/src/crepe/api/KeyCodes.h b/src/crepe/api/KeyCodes.h index a326527..feed0b2 100644 --- a/src/crepe/api/KeyCodes.h +++ b/src/crepe/api/KeyCodes.h @@ -1,186 +1,222 @@  #pragma once -//! \file InputEnums.h -//! \brief Defines enums for mouse buttons and keyboard keycodes used in the application. -  //! \enum MouseButton  //! \brief Enumeration for mouse button inputs, including standard and extended buttons.  enum class MouseButton { -    //! No mouse button input. -    NONE = 0, -    //! Left mouse button. -    LEFT_MOUSE = 1, -    //! Right mouse button. -    RIGHT_MOUSE = 2, -    //! Middle mouse button (scroll wheel press). -    MIDDLE_MOUSE = 3, -    //! First extended mouse button. -    X1_MOUSE = 4, -    //! Second extended mouse button. -    X2_MOUSE = 5, -    //! Scroll wheel upward movement. -    SCROLL_UP = 6, -    //! Scroll wheel downward movement. -    SCROLL_DOWN = 7 +	//! No mouse button input. +	NONE = 0, +	//! Left mouse button. +	LEFT_MOUSE = 1, +	//! Right mouse button. +	RIGHT_MOUSE = 2, +	//! Middle mouse button (scroll wheel press). +	MIDDLE_MOUSE = 3, +	//! First extended mouse button. +	X1_MOUSE = 4, +	//! Second extended mouse button. +	X2_MOUSE = 5, +	//! Scroll wheel upward movement. +	SCROLL_UP = 6, +	//! Scroll wheel downward movement. +	SCROLL_DOWN = 7  };  //! \enum Keycode  //! \brief Enumeration for keyboard key inputs, including printable characters, function keys, and keypad keys.  enum class Keycode : int { -    //! No key input. -    NONE = 0, -    //! Spacebar. -    SPACE = 32, -    //! Apostrophe ('). -    APOSTROPHE = 39, -    //! Comma (,). -    COMMA = 44, -    //! Minus (-). -    MINUS = 45, -    //! Period (.). -    PERIOD = 46, -    //! Slash (/). -    SLASH = 47, -    //! Digit 0. -    D0 = 48, -    //! Digit 1. -    D1 = 49, -    //! Digit 2. -    D2 = 50, -    //! Digit 3. -    D3 = 51, -    //! Digit 4. -    D4 = 52, -    //! Digit 5. -    D5 = 53, -    //! Digit 6. -    D6 = 54, -    //! Digit 7. -    D7 = 55, -    //! Digit 8. -    D8 = 56, -    //! Digit 9. -    D9 = 57, -    //! Semicolon (;). -    SEMICOLON = 59, -    //! Equal sign (=). -    EQUAL = 61, -    //! Key 'A'. -    A = 65, -    //! Key 'B'. -    B = 66, -    //! Key 'C'. -    C = 67, -    //! Key 'D'. -    D = 68, -    //! Key 'E'. -    E = 69, -    //! Key 'F'. -    F = 70, -    //! Key 'G'. -    G = 71, -    //! Key 'H'. -    H = 72, -    //! Key 'I'. -    I = 73, -    //! Key 'J'. -    J = 74, -    //! Key 'K'. -    K = 75, -    //! Key 'L'. -    L = 76, -    //! Key 'M'. -    M = 77, -    //! Key 'N'. -    N = 78, -    //! Key 'O'. -    O = 79, -    //! Key 'P'. -    P = 80, -    //! Key 'Q'. -    Q = 81, -    //! Key 'R'. -    R = 82, -    //! Key 'S'. -    S = 83, -    //! Key 'T'. -    T = 84, -    //! Key 'U'. -    U = 85, -    //! Key 'V'. -    V = 86, -    //! Key 'W'. -    W = 87, -    //! Key 'X'. -    X = 88, -    //! Key 'Y'. -    Y = 89, -    //! Key 'Z'. -    Z = 90, -    //! Left bracket ([). -    LEFT_BRACKET = 91, -    //! Backslash (\). -    BACKSLASH = 92, -    //! Right bracket (]). -    RIGHT_BRACKET = 93, -    //! Grave accent (`). -    GRAVE_ACCENT = 96, -    //! Non-US key #1. -    WORLD1 = 161, -    //! Non-US key #2. -    WORLD2 = 162, -    //! Escape key. -    ESCAPE = 256, -    //! Enter key. -    ENTER = 257, -    //! Tab key. -    TAB = 258, -    //! Backspace key. -    BACKSPACE = 259, -    //! Insert key. -    INSERT = 260, -    //! Delete key. -    DELETE = 261, -    //! Right arrow key. -    RIGHT = 262, -    //! Left arrow key. -    LEFT = 263, -    //! Down arrow key. -    DOWN = 264, -    //! Up arrow key. -    UP = 265, -    //! Page Up key. -    PAGE_UP = 266, -    //! Page Down key. -    PAGE_DOWN = 267, -    //! Home key. -    HOME = 268, -    //! End key. -    END = 269, -    //! Caps Lock key. -    CAPS_LOCK = 280, -    //! Scroll Lock key. -    SCROLL_LOCK = 281, -    //! Num Lock key. -    NUM_LOCK = 282, -    //! Print Screen key. -    PRINT_SCREEN = 283, -    //! Pause key. -    PAUSE = 284, -    //! Function keys (F1-F25). -    F1 = 290, F2 = 291, F3 = 292, F4 = 293, F5 = 294, -    F6 = 295, F7 = 296, F8 = 297, F9 = 298, F10 = 299, -    F11 = 300, F12 = 301, F13 = 302, F14 = 303, F15 = 304, -    F16 = 305, F17 = 306, F18 = 307, F19 = 308, F20 = 309, -    F21 = 310, F22 = 311, F23 = 312, F24 = 313, F25 = 314, -    //! Keypad digits and operators. -    KP0 = 320, KP1 = 321, KP2 = 322, KP3 = 323, KP4 = 324, -    KP5 = 325, KP6 = 326, KP7 = 327, KP8 = 328, KP9 = 329, -    KP_DECIMAL = 330, KP_DIVIDE = 331, KP_MULTIPLY = 332, -    KP_SUBTRACT = 333, KP_ADD = 334, KP_ENTER = 335, KP_EQUAL = 336, -    //! Modifier keys. -    LEFT_SHIFT = 340, LEFT_CONTROL = 341, LEFT_ALT = 342, LEFT_SUPER = 343, -    RIGHT_SHIFT = 344, RIGHT_CONTROL = 345, RIGHT_ALT = 346, RIGHT_SUPER = 347, -    //! Menu key. -    MENU = 348 +	//! No key input. +	NONE = 0, +	//! Spacebar. +	SPACE = 32, +	//! Apostrophe ('). +	APOSTROPHE = 39, +	//! Comma (,). +	COMMA = 44, +	//! Minus (-). +	MINUS = 45, +	//! Period (.). +	PERIOD = 46, +	//! Slash (/). +	SLASH = 47, +	//! Digit 0. +	D0 = 48, +	//! Digit 1. +	D1 = 49, +	//! Digit 2. +	D2 = 50, +	//! Digit 3. +	D3 = 51, +	//! Digit 4. +	D4 = 52, +	//! Digit 5. +	D5 = 53, +	//! Digit 6. +	D6 = 54, +	//! Digit 7. +	D7 = 55, +	//! Digit 8. +	D8 = 56, +	//! Digit 9. +	D9 = 57, +	//! Semicolon (;). +	SEMICOLON = 59, +	//! Equal sign (=). +	EQUAL = 61, +	//! Key 'A'. +	A = 65, +	//! Key 'B'. +	B = 66, +	//! Key 'C'. +	C = 67, +	//! Key 'D'. +	D = 68, +	//! Key 'E'. +	E = 69, +	//! Key 'F'. +	F = 70, +	//! Key 'G'. +	G = 71, +	//! Key 'H'. +	H = 72, +	//! Key 'I'. +	I = 73, +	//! Key 'J'. +	J = 74, +	//! Key 'K'. +	K = 75, +	//! Key 'L'. +	L = 76, +	//! Key 'M'. +	M = 77, +	//! Key 'N'. +	N = 78, +	//! Key 'O'. +	O = 79, +	//! Key 'P'. +	P = 80, +	//! Key 'Q'. +	Q = 81, +	//! Key 'R'. +	R = 82, +	//! Key 'S'. +	S = 83, +	//! Key 'T'. +	T = 84, +	//! Key 'U'. +	U = 85, +	//! Key 'V'. +	V = 86, +	//! Key 'W'. +	W = 87, +	//! Key 'X'. +	X = 88, +	//! Key 'Y'. +	Y = 89, +	//! Key 'Z'. +	Z = 90, +	//! Left bracket ([). +	LEFT_BRACKET = 91, +	//! Backslash (\). +	BACKSLASH = 92, +	//! Right bracket (]). +	RIGHT_BRACKET = 93, +	//! Grave accent (`). +	GRAVE_ACCENT = 96, +	//! Non-US key #1. +	WORLD1 = 161, +	//! Non-US key #2. +	WORLD2 = 162, +	//! Escape key. +	ESCAPE = 256, +	//! Enter key. +	ENTER = 257, +	//! Tab key. +	TAB = 258, +	//! Backspace key. +	BACKSPACE = 259, +	//! Insert key. +	INSERT = 260, +	//! Delete key. +	DELETE = 261, +	//! Right arrow key. +	RIGHT = 262, +	//! Left arrow key. +	LEFT = 263, +	//! Down arrow key. +	DOWN = 264, +	//! Up arrow key. +	UP = 265, +	//! Page Up key. +	PAGE_UP = 266, +	//! Page Down key. +	PAGE_DOWN = 267, +	//! Home key. +	HOME = 268, +	//! End key. +	END = 269, +	//! Caps Lock key. +	CAPS_LOCK = 280, +	//! Scroll Lock key. +	SCROLL_LOCK = 281, +	//! Num Lock key. +	NUM_LOCK = 282, +	//! Print Screen key. +	PRINT_SCREEN = 283, +	//! Pause key. +	PAUSE = 284, +	//! Function keys (F1-F25). +	F1 = 290, +	F2 = 291, +	F3 = 292, +	F4 = 293, +	F5 = 294, +	F6 = 295, +	F7 = 296, +	F8 = 297, +	F9 = 298, +	F10 = 299, +	F11 = 300, +	F12 = 301, +	F13 = 302, +	F14 = 303, +	F15 = 304, +	F16 = 305, +	F17 = 306, +	F18 = 307, +	F19 = 308, +	F20 = 309, +	F21 = 310, +	F22 = 311, +	F23 = 312, +	F24 = 313, +	F25 = 314, +	//! Keypad digits and operators. +	KP0 = 320, +	KP1 = 321, +	KP2 = 322, +	KP3 = 323, +	KP4 = 324, +	KP5 = 325, +	KP6 = 326, +	KP7 = 327, +	KP8 = 328, +	KP9 = 329, +	KP_DECIMAL = 330, +	KP_DIVIDE = 331, +	KP_MULTIPLY = 332, +	KP_SUBTRACT = 333, +	KP_ADD = 334, +	KP_ENTER = 335, +	KP_EQUAL = 336, +	//! Modifier keys. +	LEFT_SHIFT = 340, +	LEFT_CONTROL = 341, +	LEFT_ALT = 342, +	LEFT_SUPER = 343, +	RIGHT_SHIFT = 344, +	RIGHT_CONTROL = 345, +	RIGHT_ALT = 346, +	RIGHT_SUPER = 347, +	//! Menu key. +	MENU = 348  };  |