![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtKeyMap.h,v $ $Revision: 1.10 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #ifndef DtKeyMap_H_ 00014 #define DtKeyMap_H_ 00015 00016 #include <vrvCore/vrvCore.h> 00017 #include <boost/function.hpp> 00018 #include <boost/serialization/version.hpp> 00019 00020 #include <vrvCore/DtKeyEvent.h> 00021 #include <vrvCore/DtKeyState.h> 00022 #include <makArchives/DtSerialize.h> 00023 00024 #include <map> 00025 #include <list> 00026 00027 namespace makArchives 00028 { 00029 class DtKeyMapRecord; 00030 } 00031 00032 namespace makVrv 00033 { 00034 00040 class DT_DLL_VRVCORE DtKeyFunctionNameList 00041 { 00042 public: 00043 typedef std::list<std::string> KeyFunctionNameList; 00044 00046 DtKeyFunctionNameList(); 00047 00049 DtKeyFunctionNameList(const KeyFunctionNameList& list); 00050 00052 ~DtKeyFunctionNameList(); 00053 00055 DtKeyFunctionNameList& operator=( const DtKeyFunctionNameList& orig ); 00056 00058 DtKeyFunctionNameList( const DtKeyFunctionNameList& orig); 00059 00061 void addKeyFunctionName( const std::string& functionName ); 00062 00064 void clearFunctionNameList(); 00065 00067 const KeyFunctionNameList& functionNameList() const; 00068 KeyFunctionNameList& functionNameList(); 00069 00075 DT_DECLARE_serialize_FUNCTIONS 00076 00077 protected: 00078 00079 template<class Archive> 00080 void _serialize(Archive & ar, const unsigned int version) 00081 { 00082 ar & DT_SERIALIZE_MEMBER(myKeyFunctionNameList); 00083 } 00084 00085 KeyFunctionNameList myKeyFunctionNameList; 00086 }; 00087 00091 class DT_DLL_VRVCORE DtKeyFunctionSet 00092 { 00093 public: 00095 DtKeyFunctionSet(); 00096 00098 ~DtKeyFunctionSet(); 00099 00101 DtKeyFunctionSet& operator=( const DtKeyFunctionSet& orig ); 00102 00104 DtKeyFunctionSet( const DtKeyFunctionSet& orig ); 00105 00107 void setUnmodifiedFunction( const DtKeyFunctionNameList& func ); 00108 00110 DtKeyFunctionNameList& unmodifiedFunction(); 00111 const DtKeyFunctionNameList& unmodifiedFunction() const; 00112 00114 void setShiftModifiedFunction( const DtKeyFunctionNameList& func ); 00115 00117 DtKeyFunctionNameList& shiftModifiedFunction(); 00118 const DtKeyFunctionNameList& shiftModifiedFunction() const; 00119 00121 void setCtrlModifiedFunction( const DtKeyFunctionNameList& func ); 00122 00124 DtKeyFunctionNameList& ctrlModifiedFunction(); 00125 const DtKeyFunctionNameList& ctrlModifiedFunction() const; 00126 00128 void setAltModifiedFunction( const DtKeyFunctionNameList& func ); 00129 00131 DtKeyFunctionNameList& altModifiedFunction(); 00132 const DtKeyFunctionNameList& altModifiedFunction() const; 00133 00135 void setShiftCtrlModifiedFunction( const DtKeyFunctionNameList& func ); 00136 00138 DtKeyFunctionNameList& shiftCtrlModifiedFunction(); 00139 const DtKeyFunctionNameList& shiftCtrlModifiedFunction() const; 00140 00142 void setShiftAltModifiedFunction( const DtKeyFunctionNameList& func ); 00143 00145 DtKeyFunctionNameList& shiftAltModifiedFunction(); 00146 const DtKeyFunctionNameList& shiftAltModifiedFunction() const; 00147 00149 void setCtrlAltModifiedFunction( const DtKeyFunctionNameList& func ); 00150 00152 DtKeyFunctionNameList& ctrlAltModifiedFunction(); 00153 const DtKeyFunctionNameList& ctrlAltModifiedFunction() const; 00154 00156 void setShiftCtrlAltModifiedFunction( const DtKeyFunctionNameList& func ); 00157 00159 DtKeyFunctionNameList& shiftCtrlAltModifiedFunction(); 00160 const DtKeyFunctionNameList& shiftCtrlAltModifiedFunction() const; 00161 00167 DT_DECLARE_serialize_FUNCTIONS 00168 00169 protected: 00170 00171 template<class Archive> 00172 void _serialize(Archive & ar, const unsigned int version) 00173 { 00174 ar & DT_SERIALIZE_MEMBER(myUnmodified); 00175 ar & DT_SERIALIZE_MEMBER(myShiftModified); 00176 ar & DT_SERIALIZE_MEMBER(myCtrlModified); 00177 ar & DT_SERIALIZE_MEMBER(myAltModified); 00178 ar & DT_SERIALIZE_MEMBER(myShiftCtrlModified); 00179 ar & DT_SERIALIZE_MEMBER(myShiftAltModified); 00180 ar & DT_SERIALIZE_MEMBER(myCtrlAltModified); 00181 ar & DT_SERIALIZE_MEMBER(myShiftCtrlAltModified); 00182 } 00183 00184 DtKeyFunctionNameList myUnmodified; 00185 DtKeyFunctionNameList myShiftModified; 00186 DtKeyFunctionNameList myCtrlModified; 00187 DtKeyFunctionNameList myAltModified; 00188 DtKeyFunctionNameList myShiftCtrlModified; 00189 DtKeyFunctionNameList myShiftAltModified; 00190 DtKeyFunctionNameList myCtrlAltModified; 00191 DtKeyFunctionNameList myShiftCtrlAltModified; 00192 }; 00193 00197 class DT_DLL_VRVCORE DtKeyFunctionMapEntry 00198 { 00199 public: 00201 DtKeyFunctionMapEntry(); 00202 00204 ~DtKeyFunctionMapEntry(); 00205 00207 DtKeyFunctionMapEntry( const DtKeyFunctionMapEntry& orig ); 00208 00210 DtKeyFunctionMapEntry& operator=( const DtKeyFunctionMapEntry& orig ); 00211 00213 void setDownFunctions( const DtKeyFunctionSet& downFunctions ); 00214 00216 DtKeyFunctionSet& downFunctions(); 00217 const DtKeyFunctionSet& downFunctions() const; 00218 00220 void setUpFunctions( const DtKeyFunctionSet& upFunctions ); 00221 00223 DtKeyFunctionSet& upFunctions(); 00224 const DtKeyFunctionSet& upFunctions() const; 00225 00226 00232 DT_DECLARE_serialize_FUNCTIONS 00233 00234 protected: 00235 00236 template<class Archive> 00237 void _serialize(Archive & ar, const unsigned int version) 00238 { 00239 ar & DT_SERIALIZE_MEMBER(myDownFunctions); 00240 ar & DT_SERIALIZE_MEMBER(myUpFunctions); 00241 } 00242 00243 DtKeyFunctionSet myDownFunctions; 00244 DtKeyFunctionSet myUpFunctions; 00245 }; 00246 00249 class DT_DLL_VRVCORE DtKeyMapping : public DtKeyEvent 00250 { 00251 public: 00252 DtKeyMapping(); 00253 00254 DtKeyMapping( const DtKeyEvent& keyEvent ); 00255 00256 DtKeyMapping( const DtKeyMapping& orig ); 00257 DtKeyMapping& operator=( const DtKeyMapping& orig ); 00258 00259 std::string parentFunctionName() const; 00260 void setParentFunctionName( const std::string& parentFunctionName ); 00261 00262 protected: 00264 std::string myParentFunctionName; 00265 }; 00266 00271 class DT_DLL_VRVCORE DtReverseKeyMap 00272 { 00273 public: 00274 typedef std::list<DtKeyMapping*> MappedKeyList; 00275 00277 typedef std::map<std::string, MappedKeyList*> ReverseKeyMap; 00279 DtReverseKeyMap(); 00280 00282 virtual ~DtReverseKeyMap(); 00283 00285 DtReverseKeyMap( const DtReverseKeyMap& orig ); 00286 00288 DtReverseKeyMap& operator=( const DtReverseKeyMap& orig ); 00289 00290 ReverseKeyMap& map(); 00291 const ReverseKeyMap& map() const; 00292 00293 void addKeyBinding( std::string functionName, DtKeyState::KeyType key, 00294 DtKeyState::KeyModifier modifiers, DtKeyEvent::KeyEventType eventType ); 00295 00296 void removeKeyBinding( std::string functionName, DtKeyState::KeyType key, 00297 DtKeyState::KeyModifier modifiers, DtKeyEvent::KeyEventType eventType ); 00298 00299 void clearMap(); 00300 00301 protected: 00302 00303 void copyMap( const ReverseKeyMap& orig ); 00304 00305 protected: 00306 ReverseKeyMap myReverseKeyMap; 00307 }; 00308 00309 class DtKeyMapManager; 00310 00315 class DT_DLL_VRVCORE DtKeyMap 00316 { 00317 public: 00318 typedef std::map<DtKeyState::KeyType, DtKeyFunctionMapEntry*> KeyMap; 00319 typedef std::list<DtKeyMapping*> MappedKeyList; 00320 00321 private: 00323 DtKeyMap(); 00324 00325 public: 00327 DtKeyMap( const std::string& name, DtKeyMapManager& keyMapManager ); 00328 00330 virtual ~DtKeyMap(); 00331 00333 DtKeyMap( const DtKeyMap& orig ); 00334 00336 DtKeyMap& operator=( const DtKeyMap& orig ); 00337 00339 DtKeyMap* clone( const std::string& newName ); 00340 00342 const std::string& name() const { return myName; }; 00343 00348 void addKeyBinding( DtKeyState::KeyType key, std::string functionName, 00349 DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER, 00350 bool replace=false, 00351 DtKeyEvent::KeyEventType eventType = DtKeyEvent::KEY_DOWN ); 00352 00353 virtual void removeKeyBinding( DtKeyState::KeyType key, std::string functionName, 00354 DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER, 00355 DtKeyEvent::KeyEventType eventType = DtKeyEvent::KEY_DOWN ); 00356 00357 void addBinaryKeyBinding( DtKeyState::KeyType key, std::string binaryName, 00358 DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER, 00359 bool replace = false ); 00360 00361 virtual void removeBinaryKeyBinding( DtKeyState::KeyType key, std::string functionName, 00362 DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER ); 00363 00365 DtKeyFunctionNameList getKeyFunctionNameList( const DtKeyEvent& keyEvent ); 00366 00368 DtKeyFunctionMapEntry* findKeyFunctions( DtKeyState::KeyType key ); 00369 00372 virtual MappedKeyList findKeyMappings( const std::string& functionName ); 00373 00376 virtual MappedKeyList findBinaryKeyMappings( const std::string& functionName ); 00377 00379 void getRecord(makArchives::DtKeyMapRecord& record) const; 00380 00382 void setFromRecord(const makArchives::DtKeyMapRecord& record); 00383 00384 protected: 00385 00386 void buildReverseKeyMap(); 00387 00390 void determineParentFunctions(); 00391 00392 void processKeyFunctionSet( const DtKeyFunctionSet& functionSet, 00393 DtKeyState::KeyType keyType, DtKeyEvent::KeyEventType eventType ); 00394 00395 void processKeyFunctionNameList( const DtKeyFunctionNameList& functionNames, 00396 DtKeyState::KeyType keyType, DtKeyEvent::KeyEventType eventType, 00397 DtKeyState::KeyModifier modifiers ); 00398 00403 void processAddKeyBind( DtKeyFunctionNameList& functionList, std::string functionName, 00404 DtKeyState::KeyType keyType, DtKeyEvent::KeyEventType eventType, 00405 DtKeyState::KeyModifier modifiers, bool replace ); 00406 00407 void processRemoveKeyBind( DtKeyFunctionNameList& functionList, std::string functionName, 00408 DtKeyState::KeyType keyType, DtKeyEvent::KeyEventType eventType, 00409 DtKeyState::KeyModifier modifiers ); 00410 00411 void processClearKeyBind( DtKeyFunctionNameList& functionList, 00412 DtKeyState::KeyType keyType, DtKeyEvent::KeyEventType eventType, 00413 DtKeyState::KeyModifier modifiers ); 00414 00415 void copyMap( const KeyMap& orig ); 00416 00417 void clearMap(); 00418 00419 protected: 00420 00421 std::string myName; 00422 KeyMap myKeyMap; 00423 DtReverseKeyMap myReverseKeyMap; 00424 DtKeyMapManager& myKeyMapManager; 00425 }; 00426 } 00427 00428 #endif 00429