llviewerkeyboard.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:3k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llviewerkeyboard.h
  3.  * @brief LLViewerKeyboard class header file
  4.  *
  5.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2005-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLVIEWERKEYBOARD_H
  33. #define LL_LLVIEWERKEYBOARD_H
  34. #include "llkeyboard.h" // For EKeystate
  35. const S32 MAX_NAMED_FUNCTIONS = 100;
  36. const S32 MAX_KEY_BINDINGS = 128; // was 60
  37. class LLNamedFunction
  38. {
  39. public:
  40. LLNamedFunction() : mFunction(NULL) { };
  41. ~LLNamedFunction() { };
  42. std::string mName;
  43. LLKeyFunc mFunction;
  44. };
  45. typedef enum e_keyboard_mode
  46. {
  47. MODE_FIRST_PERSON,
  48. MODE_THIRD_PERSON,
  49. MODE_EDIT,
  50. MODE_EDIT_AVATAR,
  51. MODE_SITTING,
  52. MODE_COUNT
  53. } EKeyboardMode;
  54. void bind_keyboard_functions();
  55. class LLViewerKeyboard
  56. {
  57. public:
  58. LLViewerKeyboard();
  59. BOOL handleKey(KEY key, MASK mask, BOOL repeated);
  60. void bindNamedFunction(const std::string& name, LLKeyFunc func);
  61. S32 loadBindings(const std::string& filename); // returns number bound, 0 on error
  62. EKeyboardMode getMode();
  63. BOOL modeFromString(const std::string& string, S32 *mode); // False on failure
  64. void scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
  65. protected:
  66. BOOL bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name);
  67. S32 mNamedFunctionCount;
  68. LLNamedFunction mNamedFunctions[MAX_NAMED_FUNCTIONS];
  69. // Hold all the ugly stuff torn out to make LLKeyboard non-viewer-specific here
  70. S32 mBindingCount[MODE_COUNT];
  71. LLKeyBinding mBindings[MODE_COUNT][MAX_KEY_BINDINGS];
  72. typedef std::map<U32, U32> key_remap_t;
  73. key_remap_t mRemapKeys[MODE_COUNT];
  74. std::set<KEY> mKeysSkippedByUI;
  75. BOOL mKeyHandledByUI[KEY_COUNT]; // key processed successfully by UI
  76. };
  77. extern LLViewerKeyboard gViewerKeyboard;
  78. #endif // LL_LLVIEWERKEYBOARD_H