From 7a4d9fd9e4c0b651c64c912b1d42c9f38fef2a2b Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 19 Nov 2004 19:51:14 +0000 Subject: Added support for custom user shortcut keys. git-svn-id: http://svn.leocad.org/trunk@363 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/defines.h | 5 +- common/file.cpp | 3 + common/file.h | 116 +++++++--------- common/keyboard.cpp | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++ common/keyboard.h | 143 ++++++++++++++++++++ 5 files changed, 583 insertions(+), 66 deletions(-) create mode 100644 common/keyboard.cpp create mode 100644 common/keyboard.h (limited to 'common') diff --git a/common/defines.h b/common/defines.h index 1ca0fd3..9c05646 100644 --- a/common/defines.h +++ b/common/defines.h @@ -7,10 +7,13 @@ ///////////////////////////////////////////////////////////////////////////// // System specific -#if ! ( defined( LC_WINDOWS ) || defined( LC_LINUX ) || defined( LC_MACINTOSH )) +#if !(defined(LC_WINDOWS) || defined(LC_LINUX)) #error YOU NEED TO DEFINE YOUR OS #endif +// ============================================================================ +// Old defines (mostly deprecated). + #ifdef LC_WINDOWS #define LC_MAXPATH 260 //_MAX_PATH #define KEY_SHIFT VK_SHIFT diff --git a/common/file.cpp b/common/file.cpp index 2df77f1..8962401 100644 --- a/common/file.cpp +++ b/common/file.cpp @@ -400,6 +400,9 @@ int FileDisk::PutChar(int c) bool FileDisk::Open(const char *filename, const char *mode) { + if (*filename == 0) + return false; + strcpy(FileName, filename); m_hFile = fopen(filename, mode); diff --git a/common/file.h b/common/file.h index 950a5e6..d891e9c 100644 --- a/common/file.h +++ b/common/file.h @@ -1,7 +1,3 @@ -// -// file.h -//////////////////////////////////////////////////// - #ifndef _FILE_H_ #define _FILE_H_ @@ -12,46 +8,46 @@ class File { public: - // Constructors - File(); - virtual ~File(); + // Constructors + File(); + virtual ~File(); - // Implementation + // Implementation public: - virtual unsigned long GetPosition() const = 0; - virtual unsigned long Seek(long lOff, int nFrom) = 0; - virtual void SetLength(unsigned long nNewLen) = 0; - virtual unsigned long GetLength() const = 0; - - virtual char* ReadString(char* pBuf, unsigned long nMax)=0; - virtual unsigned long Read(void* pBuf, unsigned long nCount)=0; - virtual unsigned long Write(const void* pBuf, unsigned long nCount)=0; - virtual int GetChar()=0; - virtual int PutChar(int c)=0; - - unsigned long ReadByte (void* pBuf, unsigned long nCount); - unsigned long ReadShort (void* pBuf, unsigned long nCount); - unsigned long ReadLong (void* pBuf, unsigned long nCount); - unsigned long ReadFloat (void* pBuf, unsigned long nCount); - unsigned long ReadDouble (void* pBuf, unsigned long nCount); - unsigned long WriteByte (const void* pBuf, unsigned long nCount); - unsigned long WriteShort (const void* pBuf, unsigned long nCount); - unsigned long WriteLong (const void* pBuf, unsigned long nCount); - unsigned long WriteFloat (const void* pBuf, unsigned long nCount); - unsigned long WriteDouble (const void* pBuf, unsigned long nCount); - - virtual void Abort()=0; - virtual void Flush()=0; - virtual void Close()=0; - - const char* GetFileName() const - { return FileName; } - - void SetFileName(const char* Name) - { strncpy(FileName, Name, LC_MAXPATH); } + virtual unsigned long GetPosition() const = 0; + virtual unsigned long Seek(long lOff, int nFrom) = 0; + virtual void SetLength(unsigned long nNewLen) = 0; + virtual unsigned long GetLength() const = 0; + + virtual char* ReadString(char* pBuf, unsigned long nMax)=0; + virtual unsigned long Read(void* pBuf, unsigned long nCount)=0; + virtual unsigned long Write(const void* pBuf, unsigned long nCount)=0; + virtual int GetChar()=0; + virtual int PutChar(int c)=0; + + unsigned long ReadByte(void* pBuf, unsigned long nCount); + unsigned long ReadShort(void* pBuf, unsigned long nCount); + unsigned long ReadLong(void* pBuf, unsigned long nCount); + unsigned long ReadFloat(void* pBuf, unsigned long nCount); + unsigned long ReadDouble(void* pBuf, unsigned long nCount); + unsigned long WriteByte(const void* pBuf, unsigned long nCount); + unsigned long WriteShort(const void* pBuf, unsigned long nCount); + unsigned long WriteLong(const void* pBuf, unsigned long nCount); + unsigned long WriteFloat(const void* pBuf, unsigned long nCount); + unsigned long WriteDouble(const void* pBuf, unsigned long nCount); + + virtual void Abort()=0; + virtual void Flush()=0; + virtual void Close()=0; + + const char* GetFileName() const + { return FileName; } + + void SetFileName(const char* Name) + { strncpy(FileName, Name, LC_MAXPATH); } protected: - char FileName[LC_MAXPATH]; + char FileName[LC_MAXPATH]; }; class FileMem : public File @@ -62,16 +58,6 @@ public: ~FileMem(); // Implementation -protected: - // MemFile specific: - unsigned long m_nGrowBytes; - unsigned long m_nPosition; - unsigned long m_nBufferSize; - unsigned long m_nFileSize; - unsigned char* m_pBuffer; - bool m_bAutoDelete; - void GrowFile(unsigned long nNewLen); - public: unsigned long GetPosition() const; unsigned long Seek(long lOff, int nFrom); @@ -88,6 +74,16 @@ public: void Flush(); void Close(); bool Open(const char *filename, const char *mode); + +protected: + // MemFile specific: + unsigned long m_nGrowBytes; + unsigned long m_nPosition; + unsigned long m_nBufferSize; + unsigned long m_nFileSize; + unsigned char* m_pBuffer; + bool m_bAutoDelete; + void GrowFile(unsigned long nNewLen); }; class FileDisk : public File @@ -98,11 +94,6 @@ public: ~FileDisk(); // Implementation -protected: - // DiscFile specific: - FILE* m_hFile; - bool m_bCloseOnDelete; - public: unsigned long GetPosition() const; unsigned long Seek(long lOff, int nFrom); @@ -119,16 +110,11 @@ public: void Flush(); void Close(); bool Open(const char *filename, const char *mode); -}; - - - - - - - - - +protected: + // DiscFile specific: + FILE* m_hFile; + bool m_bCloseOnDelete; +}; #endif // _FILE_H_ diff --git a/common/keyboard.cpp b/common/keyboard.cpp new file mode 100644 index 0000000..da2cf88 --- /dev/null +++ b/common/keyboard.cpp @@ -0,0 +1,382 @@ +// +// Code to handle user-defined keyboard shortcuts. +// + +#include +#include "system.h" +#include "keyboard.h" +#include "file.h" +#include "str.h" + +// ============================================================================ +// Globals. + +LC_KEYBOARD_COMMAND DefaultKeyboardShortcuts[] = +{ + { LC_FILE_NEW, "New Project", LC_KEYMOD1_CONTROL, LC_KEY_N, 0 }, + { LC_FILE_OPEN, "Open Project", LC_KEYMOD1_CONTROL, LC_KEY_O, 0 }, + { LC_FILE_MERGE, "Merge Project", 0, 0, 0 }, + { LC_FILE_SAVE, "Save Project", LC_KEYMOD1_CONTROL, LC_KEY_S, 0 }, + { LC_FILE_SAVEAS, "Save Project As", 0, 0, 0 }, + { LC_FILE_PICTURE, "Save Picture", 0, 0, 0 }, + { LC_FILE_3DS, "Export 3D Studio", 0, 0, 0 }, + { LC_FILE_HTML, "Export HTML", 0, 0, 0 }, + { LC_FILE_POVRAY, "Export POV-Ray", 0, 0, 0 }, + { LC_FILE_WAVEFRONT, "Export Wavefront", 0, 0, 0 }, + { LC_FILE_PROPERTIES, "Project Properties", 0, 0, 0 }, +// { LC_FILE_TERRAIN, "Terrain Editor", 0, 0, 0 }, + { LC_FILE_LIBRARY, "Piece Library Manager", 0, 0, 0 }, +// { LC_FILE_RECENT, "Open Recent File", 0, 0, 0 }, + { LC_EDIT_UNDO, "Undo", LC_KEYMOD1_CONTROL, LC_KEY_Z, 0 }, + { LC_EDIT_REDO, "Redo", LC_KEYMOD1_CONTROL, LC_KEY_Y, 0 }, + { LC_EDIT_CUT, "Cut", LC_KEYMOD1_CONTROL, LC_KEY_X, 0 }, + { LC_EDIT_COPY, "Copy", LC_KEYMOD1_CONTROL, LC_KEY_C, 0 }, + { LC_EDIT_PASTE, "Paste", LC_KEYMOD1_CONTROL, LC_KEY_V, 0 }, + { LC_EDIT_SELECT_ALL, "Select All", LC_KEYMOD1_CONTROL, LC_KEY_A, 0 }, + { LC_EDIT_SELECT_NONE, "Select None", 0, 0, 0 }, + { LC_EDIT_SELECT_INVERT, "Select Invert", 0, 0, 0 }, + { LC_EDIT_SELECT_BYNAME, "Select By Name", 0, 0, 0 }, + { LC_PIECE_INSERT, "Piece Insert", 0, LC_KEY_INSERT, 0 }, + { LC_PIECE_DELETE, "Piece Delete", 0, LC_KEY_DELETE, 0 }, +// { LC_PIECE_MINIFIG, "Minifig Wizard", 0, 0, 0 }, + { LC_PIECE_ARRAY, "Piece Array", 0, 0, 0 }, +// { LC_PIECE_COPYKEYS, "", 0, 0, 0 }, + { LC_PIECE_GROUP, "Piece Group", LC_KEYMOD1_CONTROL, LC_KEY_G, 0 }, + { LC_PIECE_UNGROUP, "Piece Ungroup", LC_KEYMOD1_CONTROL, LC_KEY_U, 0 }, + { LC_PIECE_GROUP_ADD, "Group Add Piece", 0, 0, 0 }, + { LC_PIECE_GROUP_REMOVE, "Group Remove Piece", 0, 0, 0 }, + { LC_PIECE_GROUP_EDIT, "Group Edit", 0, 0, 0 }, + { LC_PIECE_HIDE_SELECTED, "Hide Selection", LC_KEYMOD1_CONTROL, LC_KEY_H, 0 }, + { LC_PIECE_HIDE_UNSELECTED, "Unhide Selection", 0, 0, 0 }, + { LC_PIECE_UNHIDE_ALL, "Unhide All", 0, 0, 0 }, + { LC_PIECE_PREVIOUS, "Piece Previous Step", 0, 0, 0 }, + { LC_PIECE_NEXT, "Piece Next Step", 0, 0, 0 }, + { LC_VIEW_PREFERENCES, "Preferences", 0, 0, 0 }, +// { LC_VIEW_ZOOM, "", 0, 0, 0 }, + { LC_VIEW_ZOOMIN, "Zoom In", 0, 0, 0 }, + { LC_VIEW_ZOOMOUT, "Zoom Out", 0, 0, 0 }, + { LC_VIEW_ZOOMEXTENTS, "Zoom Extents", 0, 0, 0 }, +// { LC_VIEW_VIEWPORTS, "", 0, 0, 0 }, + { LC_VIEW_STEP_NEXT, "Step Next", 0, 0, 0 }, + { LC_VIEW_STEP_PREVIOUS, "Step Previous", 0, 0, 0 }, + { LC_VIEW_STEP_FIRST, "Step First", 0, 0, 0 }, + { LC_VIEW_STEP_LAST, "Step Last", 0, 0, 0 }, +// { LC_VIEW_STEP_CHOOSE, "", 0, 0, 0 }, +// { LC_VIEW_STEP_SET, "", 0, 0, 0 }, + { LC_VIEW_STEP_INSERT, "Step Insert", 0, 0, 0 }, + { LC_VIEW_STEP_DELETE, "Step Delete", 0, 0, 0 }, +// { LC_VIEW_STOP, "", 0, 0, 0 }, +// { LC_VIEW_PLAY, "", 0, 0, 0 }, +// { LC_VIEW_CAMERA_MENU, "", 0, 0, 0 }, +// { LC_VIEW_CAMERA_RESET, "", 0, 0, 0 }, +// { LC_VIEW_AUTOPAN, "", 0, 0, 0 }, +// { LC_HELP_ABOUT, "", 0, 0, 0 }, +// { LC_TOOLBAR_ANIMATION, "", 0, 0, 0 }, +// { LC_TOOLBAR_ADDKEYS, "", 0, 0, 0 }, +// { LC_TOOLBAR_SNAPMENU, "", 0, 0, 0 }, +// { LC_TOOLBAR_LOCKMENU, "", 0, 0, 0 }, +// { LC_TOOLBAR_SNAPMOVEMENU, "", 0, 0, 0 }, +// { LC_TOOLBAR_FASTRENDER, "", 0, 0, 0 }, +// { LC_TOOLBAR_BACKGROUND, "", 0, 0, 0 }, +}; + +const int KeyboardShortcutsCount = sizeof(DefaultKeyboardShortcuts)/sizeof(KeyboardShortcuts[0]); + +LC_KEYBOARD_COMMAND KeyboardShortcuts[KeyboardShortcutsCount]; + +// ============================================================================ +// Functions + +bool SaveKeyboardShortcuts(const char* FileName) +{ + FileDisk f; + + if (!f.Open(FileName, "wt")) + return false; + + for (int i = 0; i < KeyboardShortcutsCount; i++) + { + LC_KEYBOARD_COMMAND& Cmd = KeyboardShortcuts[i]; + String str; + + str = Cmd.Description; + str += "="; + + if (Cmd.Key1) + { + if (Cmd.Modifiers & LC_KEYMOD1_SHIFT) + str += "Shift+"; + + if (Cmd.Modifiers & LC_KEYMOD1_CONTROL) + str += "Ctrl+"; + + str += "\""; + str += GetKeyName(Cmd.Key1); + str += "\""; + } + + if (Cmd.Key2) + { + str += ","; + + if (Cmd.Modifiers & LC_KEYMOD2_SHIFT) + str += "Shift+"; + + if (Cmd.Modifiers & LC_KEYMOD2_CONTROL) + str += "Ctrl+"; + + str += "\""; + str += GetKeyName(Cmd.Key2); + str += "\""; + } + + str += "\n"; + + f.Write((const char*)str, str.GetLength()); + } + + return true; +} + +bool LoadKeyboardShortcuts(const char* FileName) +{ + FileDisk f; + int i; + + if (!f.Open(FileName, "rt")) + return false; + + // Remove all existing shortcuts + for (i = 0; i < KeyboardShortcutsCount; i++) + { + LC_KEYBOARD_COMMAND& Cmd = KeyboardShortcuts[i]; + + Cmd.Key1 = 0; + Cmd.Key2 = 0; + Cmd.Modifiers = 0; + } + + char Line[1024]; + while (f.ReadString(Line, 1024)) + { + char* ptr = strchr(Line, '='); + + if (ptr == NULL) + continue; + + *ptr = 0; + ptr++; + + + for (i = 0; i < KeyboardShortcutsCount; i++) + { + LC_KEYBOARD_COMMAND& Cmd = KeyboardShortcuts[i]; + + if (strcmp(Line, Cmd.Description)) + continue; + + if (!strncmp(ptr, "Shift+", 6)) + { + Cmd.Modifiers |= LC_KEYMOD1_SHIFT; + ptr += 6; + } + + if (!strncmp(ptr, "Ctrl+", 5)) + { + Cmd.Modifiers |= LC_KEYMOD1_CONTROL; + ptr += 5; + } + + ptr++; + char* ptr2 = strchr(ptr, '\"'); + + if (ptr2 == NULL) + { + Cmd.Modifiers = 0; + continue; + } + + *ptr2 = 0; + Cmd.Key1 = GetKeyFromName(ptr); + + ptr = ptr2 + 1; + + if (*ptr != ',') + continue; + ptr++; + + if (!strncmp(ptr, "Shift+", 6)) + { + Cmd.Modifiers |= LC_KEYMOD2_SHIFT; + ptr += 6; + } + + if (!strncmp(ptr, "Ctrl+", 5)) + { + Cmd.Modifiers |= LC_KEYMOD2_CONTROL; + ptr += 5; + } + + ptr++; + ptr2 = strchr(ptr, '\"'); + + if (ptr2 == NULL) + { + Cmd.Modifiers &= ~(LC_KEYMOD2_SHIFT | LC_KEYMOD2_CONTROL); + continue; + } + + *ptr2 = 0; + Cmd.Key2 = GetKeyFromName(ptr); + } + } + + return true; +} + +void ResetKeyboardShortcuts() +{ + memcpy(KeyboardShortcuts, DefaultKeyboardShortcuts, sizeof(KeyboardShortcuts)); +} + +void InitKeyboardShortcuts() +{ + const char* FileName = Sys_ProfileLoadString("Settings", "Keyboard", ""); + + ResetKeyboardShortcuts(); + LoadKeyboardShortcuts(FileName); +} + +typedef struct +{ + int Key; + const char* Name; + +} LC_KEYNAME_ENTRY; + +static LC_KEYNAME_ENTRY KeyNames[] = +{ + { LC_KEY_BACK, "Backspace" }, + { LC_KEY_TAB, "Tab" }, + { LC_KEY_RETURN, "Return" }, + { LC_KEY_PAUSE, "Pause" }, + { LC_KEY_CAPITAL, "Caps" }, + { LC_KEY_ESCAPE, "Escape" }, + { LC_KEY_SPACE, "Space" }, + { LC_KEY_PRIOR, "Page Up" }, + { LC_KEY_NEXT, "Page Down" }, + { LC_KEY_END, "End" }, + { LC_KEY_HOME, "Home" }, + { LC_KEY_LEFT, "Left" }, + { LC_KEY_UP, "Up" }, + { LC_KEY_RIGHT, "Right" }, + { LC_KEY_DOWN, "Down" }, + { LC_KEY_SELECT, "Select" }, + { LC_KEY_PRINT, "Print" }, + { LC_KEY_INSERT, "Insert" }, + { LC_KEY_DELETE, "Delete" }, + { LC_KEY_0, "0" }, + { LC_KEY_1, "1" }, + { LC_KEY_2, "2" }, + { LC_KEY_3, "3" }, + { LC_KEY_4, "4" }, + { LC_KEY_5, "5" }, + { LC_KEY_6, "6" }, + { LC_KEY_7, "7" }, + { LC_KEY_8, "8" }, + { LC_KEY_9, "9" }, + { LC_KEY_A, "A" }, + { LC_KEY_B, "B" }, + { LC_KEY_C, "C" }, + { LC_KEY_D, "D" }, + { LC_KEY_E, "E" }, + { LC_KEY_F, "F" }, + { LC_KEY_G, "G" }, + { LC_KEY_H, "H" }, + { LC_KEY_I, "I" }, + { LC_KEY_J, "J" }, + { LC_KEY_K, "K" }, + { LC_KEY_L, "L" }, + { LC_KEY_M, "M" }, + { LC_KEY_N, "N" }, + { LC_KEY_O, "O" }, + { LC_KEY_P, "P" }, + { LC_KEY_Q, "Q" }, + { LC_KEY_R, "R" }, + { LC_KEY_S, "S" }, + { LC_KEY_T, "T" }, + { LC_KEY_U, "U" }, + { LC_KEY_V, "V" }, + { LC_KEY_W, "W" }, + { LC_KEY_X, "X" }, + { LC_KEY_Y, "Y" }, + { LC_KEY_Z, "Z" }, + { LC_KEY_NUMPAD0, "Numpad 0" }, + { LC_KEY_NUMPAD1, "Numpad 1" }, + { LC_KEY_NUMPAD2, "Numpad 2" }, + { LC_KEY_NUMPAD3, "Numpad 3" }, + { LC_KEY_NUMPAD4, "Numpad 4" }, + { LC_KEY_NUMPAD5, "Numpad 5" }, + { LC_KEY_NUMPAD6, "Numpad 6" }, + { LC_KEY_NUMPAD7, "Numpad 7" }, + { LC_KEY_NUMPAD8, "Numpad 8" }, + { LC_KEY_NUMPAD9, "Numpad 9" }, + { LC_KEY_MULTIPLY, "Numpad *" }, + { LC_KEY_ADD, "Numpad +" }, + { LC_KEY_SUBTRACT, "Numpad -" }, + { LC_KEY_DECIMAL, "Numpad ." }, + { LC_KEY_DIVIDE, "Numpad /" }, + { LC_KEY_F1, "F1" }, + { LC_KEY_F2, "F2" }, + { LC_KEY_F3, "F3" }, + { LC_KEY_F4, "F4" }, + { LC_KEY_F5, "F5" }, + { LC_KEY_F6, "F6" }, + { LC_KEY_F7, "F7" }, + { LC_KEY_F8, "F8" }, + { LC_KEY_F9, "F9" }, + { LC_KEY_F10, "F10" }, + { LC_KEY_F11, "F11" }, + { LC_KEY_F12, "F12" }, + { LC_KEY_F13, "F13" }, + { LC_KEY_F14, "F14" }, + { LC_KEY_F15, "F15" }, + { LC_KEY_F16, "F16" }, + { LC_KEY_F17, "F17" }, + { LC_KEY_F18, "F18" }, + { LC_KEY_F19, "F19" }, + { LC_KEY_F20, "F20" }, + { LC_KEY_F21, "F21" }, + { LC_KEY_F22, "F22" }, + { LC_KEY_F23, "F23" }, + { LC_KEY_F24, "F24" }, + { LC_KEY_NUMLOCK, "Num Lock" }, + { LC_KEY_SCROLL, "Scroll" } +}; + +// Returns a string with the name of the key. +const char* GetKeyName(char Key) +{ + int Count = sizeof(KeyNames)/sizeof(KeyNames[0]); + + for (int i = 0; i < Count; i++) + { + if (Key == KeyNames[i].Key) + return KeyNames[i].Name; + } + + return NULL; +} + +char GetKeyFromName(const char* Name) +{ + int Count = sizeof(KeyNames)/sizeof(KeyNames[0]); + + for (int i = 0; i < Count; i++) + { + if (!strcmp(Name, KeyNames[i].Name)) + return KeyNames[i].Key; + } + + return 0; +} diff --git a/common/keyboard.h b/common/keyboard.h new file mode 100644 index 0000000..9151542 --- /dev/null +++ b/common/keyboard.h @@ -0,0 +1,143 @@ +#ifndef _KEYBOARD_H_ +#define _KEYBOARD_H_ + +#include "typedefs.h" + +// ============================================================================ +// Keyboard keys. + +#define LC_KEY_BACK 0x08 +#define LC_KEY_TAB 0x09 + +#define LC_KEY_RETURN 0x0D + +#define LC_KEY_PAUSE 0x13 +#define LC_KEY_CAPITAL 0x14 + +#define LC_KEY_ESCAPE 0x1B + +#define LC_KEY_SPACE 0x20 +#define LC_KEY_PRIOR 0x21 +#define LC_KEY_NEXT 0x22 +#define LC_KEY_END 0x23 +#define LC_KEY_HOME 0x24 +#define LC_KEY_LEFT 0x25 +#define LC_KEY_UP 0x26 +#define LC_KEY_RIGHT 0x27 +#define LC_KEY_DOWN 0x28 +#define LC_KEY_SELECT 0x29 +#define LC_KEY_PRINT 0x2A +#define LC_KEY_INSERT 0x2D +#define LC_KEY_DELETE 0x2E + +#define LC_KEY_0 0x30 +#define LC_KEY_1 0x31 +#define LC_KEY_2 0x32 +#define LC_KEY_3 0x33 +#define LC_KEY_4 0x34 +#define LC_KEY_5 0x35 +#define LC_KEY_6 0x36 +#define LC_KEY_7 0x37 +#define LC_KEY_8 0x38 +#define LC_KEY_9 0x39 + +#define LC_KEY_A 0x41 +#define LC_KEY_B 0x42 +#define LC_KEY_C 0x43 +#define LC_KEY_D 0x44 +#define LC_KEY_E 0x45 +#define LC_KEY_F 0x46 +#define LC_KEY_G 0x47 +#define LC_KEY_H 0x48 +#define LC_KEY_I 0x49 +#define LC_KEY_J 0x4A +#define LC_KEY_K 0x4B +#define LC_KEY_L 0x4C +#define LC_KEY_M 0x4D +#define LC_KEY_N 0x4E +#define LC_KEY_O 0x4F +#define LC_KEY_P 0x50 +#define LC_KEY_Q 0x51 +#define LC_KEY_R 0x52 +#define LC_KEY_S 0x53 +#define LC_KEY_T 0x54 +#define LC_KEY_U 0x55 +#define LC_KEY_V 0x56 +#define LC_KEY_W 0x57 +#define LC_KEY_X 0x58 +#define LC_KEY_Y 0x59 +#define LC_KEY_Z 0x5A + +#define LC_KEY_NUMPAD0 0x60 +#define LC_KEY_NUMPAD1 0x61 +#define LC_KEY_NUMPAD2 0x62 +#define LC_KEY_NUMPAD3 0x63 +#define LC_KEY_NUMPAD4 0x64 +#define LC_KEY_NUMPAD5 0x65 +#define LC_KEY_NUMPAD6 0x66 +#define LC_KEY_NUMPAD7 0x67 +#define LC_KEY_NUMPAD8 0x68 +#define LC_KEY_NUMPAD9 0x69 +#define LC_KEY_MULTIPLY 0x6A +#define LC_KEY_ADD 0x6B +//#define LC_KEY_SEPARATOR 0x6C +#define LC_KEY_SUBTRACT 0x6D +#define LC_KEY_DECIMAL 0x6E +#define LC_KEY_DIVIDE 0x6F +#define LC_KEY_F1 0x70 +#define LC_KEY_F2 0x71 +#define LC_KEY_F3 0x72 +#define LC_KEY_F4 0x73 +#define LC_KEY_F5 0x74 +#define LC_KEY_F6 0x75 +#define LC_KEY_F7 0x76 +#define LC_KEY_F8 0x77 +#define LC_KEY_F9 0x78 +#define LC_KEY_F10 0x79 +#define LC_KEY_F11 0x7A +#define LC_KEY_F12 0x7B +#define LC_KEY_F13 0x7C +#define LC_KEY_F14 0x7D +#define LC_KEY_F15 0x7E +#define LC_KEY_F16 0x7F +#define LC_KEY_F17 0x80 +#define LC_KEY_F18 0x81 +#define LC_KEY_F19 0x82 +#define LC_KEY_F20 0x83 +#define LC_KEY_F21 0x84 +#define LC_KEY_F22 0x85 +#define LC_KEY_F23 0x86 +#define LC_KEY_F24 0x87 + +#define LC_KEY_NUMLOCK 0x90 +#define LC_KEY_SCROLL 0x91 + +// ============================================================================ +// Functions. + +#define LC_KEYMOD1_SHIFT 0x01 +#define LC_KEYMOD1_CONTROL 0x02 +#define LC_KEYMOD2_SHIFT 0x10 +#define LC_KEYMOD2_CONTROL 0x20 + +typedef struct +{ + LC_COMMANDS ID; + const char* Description; + unsigned char Modifiers; + unsigned char Key1; + unsigned char Key2; +} LC_KEYBOARD_COMMAND; + +extern LC_KEYBOARD_COMMAND KeyboardShortcuts[]; +extern const int KeyboardShortcutsCount; + +const char* GetKeyName(char Key); +char GetKeyFromName(const char* Name); + +void InitKeyboardShortcuts(); +void ResetKeyboardShortcuts(); +bool SaveKeyboardShortcuts(const char* FileName); +bool LoadKeyboardShortcuts(const char* FileName); + +#endif // _KEYBOARD_H_ -- cgit v1.2.3