VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtKeyMapManager.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)