#pragma once
#include "pluginterfaces/base/ftypes.h"
namespace Steinberg {
enum VirtualKeyCodes
{
KEY_BACK = 1,
KEY_TAB,
KEY_CLEAR,
KEY_RETURN,
KEY_PAUSE,
KEY_ESCAPE,
KEY_SPACE,
KEY_NEXT,
KEY_END,
KEY_HOME,
KEY_LEFT,
KEY_UP,
KEY_RIGHT,
KEY_DOWN,
KEY_PAGEUP,
KEY_PAGEDOWN,
KEY_SELECT,
KEY_PRINT,
KEY_ENTER,
KEY_SNAPSHOT,
KEY_INSERT,
KEY_DELETE,
KEY_HELP,
KEY_NUMPAD0,
KEY_NUMPAD1,
KEY_NUMPAD2,
KEY_NUMPAD3,
KEY_NUMPAD4,
KEY_NUMPAD5,
KEY_NUMPAD6,
KEY_NUMPAD7,
KEY_NUMPAD8,
KEY_NUMPAD9,
KEY_MULTIPLY,
KEY_ADD,
KEY_SEPARATOR,
KEY_SUBTRACT,
KEY_DECIMAL,
KEY_DIVIDE,
KEY_F1,
KEY_F2,
KEY_F3,
KEY_F4,
KEY_F5,
KEY_F6,
KEY_F7,
KEY_F8,
KEY_F9,
KEY_F10,
KEY_F11,
KEY_F12,
KEY_NUMLOCK,
KEY_SCROLL,
KEY_SHIFT,
KEY_CONTROL,
KEY_ALT,
KEY_EQUALS, KEY_CONTEXTMENU,
KEY_MEDIA_PLAY,
KEY_MEDIA_STOP,
KEY_MEDIA_PREV,
KEY_MEDIA_NEXT,
KEY_VOLUME_UP,
KEY_VOLUME_DOWN,
KEY_F13,
KEY_F14,
KEY_F15,
KEY_F16,
KEY_F17,
KEY_F18,
KEY_F19,
KEY_F20,
KEY_F21,
KEY_F22,
KEY_F23,
KEY_F24,
KEY_SUPER,
VKEY_FIRST_CODE = KEY_BACK,
VKEY_LAST_CODE = KEY_SUPER,
VKEY_FIRST_ASCII = 128
};
inline SMTG_CONSTEXPR14 tchar VirtualKeyCodeToChar (uint8 vKey)
{
if (vKey >= VKEY_FIRST_ASCII)
return (tchar)(vKey - VKEY_FIRST_ASCII + 0x30);
else if (vKey == KEY_SPACE)
return ' ';
return 0;
}
inline SMTG_CONSTEXPR14 uint8 CharToVirtualKeyCode (tchar character)
{
if ((character >= 0x30 && character <= 0x39) || (character >= 0x41 && character <= 0x5A))
return (uint8)(character - 0x30 + VKEY_FIRST_ASCII);
if (character == ' ')
return (uint8)KEY_SPACE;
return 0;
}
enum KeyModifier
{
kShiftKey = 1 << 0, kAlternateKey = 1 << 1, kCommandKey = 1 << 2, kControlKey = 1 << 3 };
struct KeyCode
{
tchar character {0};
uint8 virt {0};
uint8 modifier {0};
SMTG_CONSTEXPR14 KeyCode (tchar character = 0, uint8 virt = 0, uint8 modifier = 0)
: character (character), virt (virt), modifier (modifier)
{
}
SMTG_CONSTEXPR14 KeyCode& operator= (const KeyCode& other) SMTG_NOEXCEPT
{
character = other.character;
virt = other.virt;
modifier = other.modifier;
return *this;
}
};
namespace KeyCodes {}
namespace KeyCodes {
template <typename Key>
bool isModifierOnlyKey (const Key& key)
{
return (key.character == 0 && (key.virt == KEY_SHIFT || key.virt == KEY_ALT ||
key.virt == KEY_CONTROL || key.virt == KEY_SUPER));
}
} }