1 /* 2 ** c_bind.h 3 ** 4 **--------------------------------------------------------------------------- 5 ** Copyright 1998-2006 Randy Heit 6 ** All rights reserved. 7 ** 8 ** Redistribution and use in source and binary forms, with or without 9 ** modification, are permitted provided that the following conditions 10 ** are met: 11 ** 12 ** 1. Redistributions of source code must retain the above copyright 13 ** notice, this list of conditions and the following disclaimer. 14 ** 2. Redistributions in binary form must reproduce the above copyright 15 ** notice, this list of conditions and the following disclaimer in the 16 ** documentation and/or other materials provided with the distribution. 17 ** 3. The name of the author may not be used to endorse or promote products 18 ** derived from this software without specific prior written permission. 19 ** 20 ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 ** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 ** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 ** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 ** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 ** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 **--------------------------------------------------------------------------- 31 ** 32 */ 33 34 #ifndef __C_BINDINGS_H__ 35 #define __C_BINDINGS_H__ 36 37 #include "doomdef.h" 38 39 struct event_t; 40 class FConfigFile; 41 class FCommandLine; 42 43 void C_NameKeys (char *str, int first, int second); 44 45 class FKeyBindings 46 { 47 FString Binds[NUM_KEYS]; 48 49 public: 50 void PerformBind(FCommandLine &argv, const char *msg); 51 bool DoKey(event_t *ev); 52 void ArchiveBindings(FConfigFile *F, const char *matchcmd = NULL); 53 int GetKeysForCommand (const char *cmd, int *first, int *second); 54 void UnbindACommand (const char *str); 55 void UnbindAll (); 56 void UnbindKey(const char *key); 57 void DoBind (const char *key, const char *bind); 58 void DefaultBind(const char *keyname, const char *cmd); 59 SetBind(unsigned int key,const char * bind)60 void SetBind(unsigned int key, const char *bind) 61 { 62 if (key < NUM_KEYS) Binds[key] = bind; 63 } 64 GetBinding(unsigned int index)65 const FString &GetBinding(unsigned int index) const 66 { 67 return Binds[index]; 68 } 69 GetBind(unsigned int index)70 const char *GetBind(unsigned int index) const 71 { 72 if (index < NUM_KEYS) return Binds[index]; 73 else return NULL; 74 } 75 76 }; 77 78 extern FKeyBindings Bindings; 79 extern FKeyBindings DoubleBindings; 80 extern FKeyBindings AutomapBindings; 81 extern FKeyBindings MenuBindings; 82 83 84 bool C_DoKey (event_t *ev, FKeyBindings *binds, FKeyBindings *doublebinds); 85 86 // Stuff used by the customize controls menu 87 void C_SetDefaultBindings (); 88 void C_UnbindAll (); 89 90 extern const char *KeyNames[]; 91 92 struct FKeyAction 93 { 94 FString mTitle; 95 FString mAction; 96 }; 97 98 struct FKeySection 99 { 100 FString mTitle; 101 FString mSection; 102 TArray<FKeyAction> mActions; 103 }; 104 extern TArray<FKeySection> KeySections; 105 106 #endif //__C_BINDINGS_H__ 107