![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtKeyMapManager.h,v $ $Revision: 1.11 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <map> 00015 #include <list> 00016 #include <boost/function.hpp> 00017 #include <vrvCore/vrvCore.h> 00018 #include <vrvCore/DtKeyEvent.h> 00019 #include <vrvCore/DtSettingsBackup.h> 00020 #include <vrvUtil/DtVirtualBaseClass.h> 00021 #include <makArchives/DtKeyMapRecord.h> 00022 00023 namespace makVrv 00024 { 00025 class DtKeyMap; 00026 class DtDe; 00027 class DtKeyFunctionNameList; 00028 class DtSettingsBackup; 00029 00034 class DT_DLL_VRVCORE DtKeyMapManager : public DtVirtualBaseClass 00035 { 00036 public: 00037 00038 enum FunctionCategory 00039 { 00040 Movement, 00041 Rotation, 00042 Orbit, 00043 Camera, 00044 Attachment, 00045 Gain, 00046 Rendering, 00047 Display, 00048 Miscellaneous 00049 }; 00050 00051 typedef std::map<std::string, DtKeyMap*> KeyMapCatalog; 00052 00053 typedef boost::function< void ()> KeyFunction; 00054 typedef std::map<std::string, KeyFunction> KeyFunctionMap; 00055 typedef std::map<std::string, std::string> BinaryFunctionNameMap; 00056 typedef std::map<std::string, DtSettingsBackup*> BackupMap; 00057 00059 typedef std::list<std::string> CategoryList; 00060 00063 typedef std::map<FunctionCategory, CategoryList*> CategoryMap; 00064 00066 static DtKeyMapManager& instance( DtDe& de ); 00067 00069 virtual ~DtKeyMapManager(); 00070 00072 virtual DtKeyMap* createKeyMap( const std::string& mapName, bool silent = false ); 00073 00075 virtual DtKeyMap* cloneKeyMap( const std::string& mapName, 00076 const std::string& newMapName, bool silent = false ); 00077 00079 virtual void destroyKeyMap( const std::string& mapName, bool silent = false ); 00080 00082 virtual DtKeyMap* findKeyMap( const std::string& mapName ); 00083 00085 bool saveKeyMap(const DtKeyMap& keyMap) const; 00086 00088 bool saveKeyMapToFile(const DtKeyMap& keyMap, const std::string& filename) const; 00089 00091 DtKeyMap* loadKeyMapFromFile(const std::string& filename, bool createBackup = false); 00092 00095 virtual void setFromRecord(const std::string& keyMap, const makArchives::DtKeyMapRecord& rec); 00096 00098 virtual DtSettingsBackup* settingsBackup(const std::string& keyMap) const; 00099 00107 virtual void categorizeKeyFunction( const std::string& functionName, 00108 FunctionCategory functionCategory ); 00109 00110 virtual void categorizeBinaryKeyFunction( const std::string& functionName, 00111 FunctionCategory functionCategory ); 00112 00113 00116 virtual void addKeyFunction( const std::string& functionName, 00117 const KeyFunction& function, FunctionCategory functionCategory, 00118 bool categorize = true ); 00119 00121 KeyFunction findKeyFunction( const std::string& functionName ) const; 00122 00124 void removeKeyFunction( const std::string& functionName ); 00125 00127 virtual const KeyMapCatalog& keyMapCatalog() const; 00128 00129 virtual const CategoryMap& categoryMap() const; 00130 virtual const CategoryMap& binaryCategoryMap() const; 00131 00133 const BinaryFunctionNameMap& binaryDownMap() const; 00134 00136 const BinaryFunctionNameMap& binaryUpMap() const; 00137 00139 // 00142 virtual void addBinaryKeyFunction( const std::string& binaryName, 00143 const std::string& keyDownFunctionName, const KeyFunction& downFunction, 00144 const std::string& keyUpFuntionName, const KeyFunction& upFunction, 00145 FunctionCategory functionCategory ); 00146 00149 virtual std::string lookupBinaryKeyFunctionName( 00150 DtKeyEvent::KeyEventType eventType, const std::string& binaryName ) 00151 const; 00152 00155 virtual bool processKeyEvent( const std::string& mapName, 00156 const DtKeyEvent& keyEvent ); 00157 00159 virtual void activateMap( const std::string& mapName ); 00160 00162 virtual void deactivateMap( const std::string& mapName ); 00163 00164 virtual void setCurrentMap( const std::string& mapName ); 00165 00166 virtual const std::string& currentMap() const; 00167 00169 void virtual clear(); 00170 00171 protected: 00172 00174 DtKeyMapManager( DtDe& de ); 00175 00176 void invokeKeyFunctions( const DtKeyFunctionNameList& funcsToUse ); 00177 00180 virtual void createBackupFor(const std::string&, const std::string& factoryFile = ""); 00181 00182 protected: 00183 00184 DtDe& myDe; 00185 std::string myCurrentMap; 00186 KeyMapCatalog myKeyMapCatalog; 00187 KeyFunctionMap myKeyFunctionMap; 00188 BinaryFunctionNameMap myBinaryKeyFunctionUpMap; 00189 BinaryFunctionNameMap myBinaryKeyFunctionDownMap; 00190 CategoryMap myCategoryMap; 00191 CategoryMap myBinaryCategoryMap; 00192 BackupMap myBackupObjects; 00193 }; 00194 00197 class DT_DLL_VRVCORE DtKeyMapSettingsBackup : public DtSettingsBackup 00198 { 00199 public: 00201 DtKeyMapSettingsBackup(DtKeyMapManager& man, const std::string& keyMap); 00202 00204 virtual ~DtKeyMapSettingsBackup(); 00205 00207 virtual void restore(const DtSettingsBackup* from); 00208 00210 virtual std::string backupClassType() const 00211 { 00212 return myKeyMap; 00213 } 00214 00216 virtual std::string backupName() const 00217 { 00218 return backupClassType(); 00219 } 00220 00222 virtual DtSettingsBackup* create() const; 00223 00225 virtual void write(boost::archive::xml_oarchive& ar); 00226 00228 virtual void read(boost::archive::xml_iarchive& ar); 00229 00231 const makArchives::DtKeyMapRecord& restoredRecord() const 00232 { 00233 return myRestoredRecord; 00234 } 00235 00236 protected: 00237 std::string myKeyMap; 00238 makArchives::DtKeyMapRecord myRestoredRecord; 00239 DtKeyMapManager& myKeyMapManager; 00240 }; 00241 } 00242