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

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)