1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef __FRAMEWORK_ACCELERATORS_KEYMAPPING_HXX_ 25 #define __FRAMEWORK_ACCELERATORS_KEYMAPPING_HXX_ 26 27 //__________________________________________ 28 // own includes 29 30 #include <general.h> 31 #include <stdtypes.h> 32 33 //__________________________________________ 34 // interface includes 35 #include <com/sun/star/lang/IllegalArgumentException.hpp> 36 37 //__________________________________________ 38 // other includes 39 40 //__________________________________________ 41 // definition 42 43 namespace framework 44 { 45 46 //__________________________________________ 47 /** 48 can be used to map key identifier to the 49 corresponding key codes ... 50 */ 51 class KeyMapping 52 { 53 //______________________________________ 54 // const, types 55 56 private: 57 58 //--------------------------------------- 59 /** @short is used to map a key code 60 to the right key identifier, which is 61 used to make the xml file "human readable" 62 */ 63 struct KeyIdentifierInfo 64 { 65 sal_Int16 Code ; 66 const char* Identifier; 67 }; 68 69 //--------------------------------------- 70 /** @short hash structure to map identifier to key codes. */ 71 typedef BaseHash< sal_Int16 > Identifier2CodeHash; 72 73 //--------------------------------------- 74 /** @short hash structure to map key codes to identifier. */ 75 typedef ::std::hash_map< sal_Int16 , 76 ::rtl::OUString , 77 ShortHashCode , 78 ::std::equal_to< sal_Int16 > > Code2IdentifierHash; 79 80 //______________________________________ 81 // member 82 83 private: 84 85 static KeyIdentifierInfo KeyIdentifierMap[]; 86 87 //--------------------------------------- 88 /** @short hash to map identifier to key codes. */ 89 Identifier2CodeHash m_lIdentifierHash; 90 91 //--------------------------------------- 92 /** @short hash to map key codes to identifier. */ 93 Code2IdentifierHash m_lCodeHash; 94 95 //______________________________________ 96 // interface 97 98 public: 99 100 KeyMapping(); 101 virtual ~KeyMapping(); 102 103 //---------------------------------- 104 /** @short return a suitable key code 105 for the specified key identifier. 106 107 @param sIdentifier 108 string value, which describe the key. 109 110 @return [css::awt::KeyEvent] 111 the corresponding key code as 112 short value. 113 114 @throw [css::lang::IllegalArgumentException] 115 if the given identifier does not describe 116 a well known key code. 117 */ 118 virtual sal_uInt16 mapIdentifierToCode(const ::rtl::OUString& sIdentifier); 119 120 //---------------------------------- 121 /** @short return a suitable key identifier 122 for the specified key code. 123 124 @param nCode 125 short value, which describe the key. 126 127 @return The corresponding string identifier. 128 */ 129 virtual ::rtl::OUString mapCodeToIdentifier(sal_uInt16 nCode); 130 131 //______________________________________ 132 // helper 133 134 private: 135 136 //---------------------------------- 137 /** @short check if the given string describe a numeric 138 value ... and convert it. 139 140 @param sIdentifier 141 the string value, which should be converted. 142 143 144 @param rCode 145 contains the converted code, but is defined only 146 if this method returns sal_True! 147 148 @return [boolean] 149 sal_True if conversion was successfully. 150 */ 151 sal_Bool impl_st_interpretIdentifierAsPureKeyCode(const ::rtl::OUString& sIdentifier, 152 sal_uInt16& rCode ); 153 }; 154 155 } // namespace framework 156 157 #endif // __FRAMEWORK_ACCELERATORS_KEYMAPPING_HXX_ 158