VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtInputDriver.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: DtInputDriver.h,v $ $Revision: 1.80 $ $State: Exp $
00007 ******************************************************************************/
00008 
00012 
00013 #pragma once 
00014 #include <vrvCore/vrvCore.h>
00015 #include <makArchives/DtObserverStateRecord.h>
00016 #include <vrvCore/DtElementEntry.h>
00017 #include <vrvCore/DtDriver.h>
00018 #include <vrvCore/DtKeyMapManager.h>
00019 #include <vrvCore/DtViewStateProcessor.h>
00020 #include <vrvCore/DtKeyEvent.h>
00021 #include <vrvUtil/DtObserverConfiguration.h> 
00022 #include <boost/signal.hpp>
00023 
00024 #include <string>
00025 #include <map>
00026 #include <vector>
00027 #include <list>
00028 
00029 namespace makVrv
00030 {
00031    class DtAgentManager;
00032    class DtChannel;
00033    class DtChannelManager;
00034    class DtDe;
00035    class DtEventProcessorInterface;
00036    class DtInputDriverConfiguration;
00037    class DtKeyAndMouseEventListener;   
00038    class DtKeyMap;
00039    class DtKeyMapManager;
00040    class DtMouseEvent;
00041    class DtObserver;
00042    class DtObserverController;
00043    class DtChannelConfiguration;
00044 
00048    class DT_DLL_VRVCORE DtInputDriver : public DtDriver
00049    {
00050    public:
00053       typedef std::list<DtEventProcessorInterface*> EventProcessorList;
00054 
00056       typedef std::map<std::string, makArchives::DtObserverStateRecord> ObserverStateMap;
00057 
00059       typedef std::map<std::string, DtObserverConfiguration> ObserverConfigurationMap;
00060 
00062       DtInputDriver( DtAgentManager& agentManager, 
00063          const std::string& instanceName );
00064 
00066       virtual ~DtInputDriver();
00067 
00069       virtual bool onStart();
00070 
00072       virtual bool onStop();
00073 
00075       virtual bool onTick();
00076 
00078       virtual const std::string& className() const;
00079 
00081       virtual bool processKeyEvent( const DtKeyEvent& keyEvent,
00082          DtChannel* channel  );
00083 
00085       virtual bool processMouseEvent( const DtMouseEvent& mouseEvent,
00086          DtChannel* channel  );
00087 
00089       virtual void hideMouse( DtChannel* channel, float mouseX, float mouseY );
00090 
00092       virtual bool isMouseHidden() const;
00093 
00095       virtual void showMouse( DtChannel* channel );
00096 
00098       virtual void centerMouse( DtChannel* channel );
00099 
00101       virtual void setMousePosition(DtChannel* channel, float x, float y);
00102 
00105       virtual void clearState();
00106 
00112       DtChannel* currentChannel() const;
00113 
00116       virtual void addEventProcessorToFront(DtEventProcessorInterface* epi);
00117 
00122       virtual void addEventProcessorToBack(DtEventProcessorInterface* epi);
00123 
00127       virtual EventProcessorList& eventProcessorList();
00128 
00131       virtual DtEventProcessorInterface* findEventProcessor(
00132          const std::string& className);
00133 
00138       virtual void removeEventProcessor(DtEventProcessorInterface* epi);        
00139 
00141       bool saveKeyMapToFile(const DtKeyMap& keyMap, const std::string& filename) const;
00142 
00145       DtKeyMap* loadKeyMapFromFile(const std::string& filename, bool createBackup = false);
00146 
00148       //
00151       void setKeyMap( const std::string& mapName );
00152 
00154       const std::string& keyMap() const;
00155 
00157       DtKeyMap* createKeyMap(  const std::string& mapName );
00158 
00160       DtKeyMap* findKeyMap( const std::string& mapName );
00161 
00163       void addKeyBinding( DtKeyMap* map, DtKeyState::KeyType key, 
00164          std::string functionName,
00165          DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER, 
00166          bool replace = false,
00167          DtKeyEvent::KeyEventType eventType = DtKeyEvent::KEY_DOWN );
00168 
00171       void addBinaryKeyBinding(  DtKeyMap* map, DtKeyState::KeyType key, 
00172          std::string binaryName, 
00173          DtKeyState::KeyModifier modifiers = DtKeyState::NO_MODIFIER,
00174          bool replace = false );
00175 
00177       virtual void realizeConfiguration(
00178          const DtInputDriverConfiguration& configuration);
00179 
00180       virtual void realizeObserverConfiguration(
00181          const DtObserverConfiguration& configuration);
00182 
00183       const ObserverConfigurationMap& observerConfigurations() const;
00184 
00189       void addObserverConfiguration( const DtObserverConfiguration& config );
00190 
00193       void addObserverState( const std::string& observerName,
00194          const makArchives::DtObserverStateRecord& stateRecord );
00195 
00199       void initializeObserver( DtObserver* observer, 
00200          const makArchives::DtObserverStateRecord& stateRecord );        
00201 
00202       //-----
00204 
00206       virtual void addObserver( DtObserver* observer);
00207 
00209       virtual void removeObserver( DtObserver* observer );
00210 
00212       virtual void removeObserver( const std::string& name );
00213 
00215       virtual std::vector<DtObserver*> observers() const;
00216 
00218 
00219       virtual DtObserver* findObserverByName( const std::string& name );
00220       virtual const DtObserver* findObserverByName( const std::string& name ) const;      
00222 
00224       void setCurrentObserver( const std::string& observerName );
00225 
00227       DtObserver* currentObserver() const;
00228 
00230       void setTerrainContextEnabled(bool enabled);
00231       bool terrainContextEnabled() const;
00232 
00234 
00236       virtual void performObserverAction(DtViewStateProcessor::ObserverAction& action);
00237 
00239       virtual void toggleTerrainScaling();
00240 
00242       virtual void incrementTerrainScaleFactor();
00243 
00245       virtual void decrementTerrainScaleFactor();
00246 
00248       virtual void toggleEntityLabels();
00249 
00251       virtual void toggleTacticalGraphics();
00252 
00254       virtual void toggleEntityHatLines();
00255 
00257       virtual void toggleTacticalGraphicsHatLines();
00259       virtual void toggleEntityHatMode();
00260 
00262       virtual void toggleTacticalGraphicsHatMode();
00263 
00265       virtual void togglePropTransparencySelected();
00266 
00268       void resetObservers(DtUniqueID id);
00269 
00272       void setAllowObserverReset(bool allow);
00273 
00275       void saveObservers(const std::string& filename);
00276 
00278       void loadObservers(const std::string& filename);
00279 
00280       DtElementEntry::ObjectType typeFromId(const DtUniqueID& id);
00281 
00282    protected:
00283 
00284       void setCurrentObserver( DtObserver* observer );
00285 
00287       virtual void initializeKeyMapManager( const std::string& defaultKeyMap );
00288       virtual void bindFunctions();
00290       virtual void createMaps();
00291 
00294       virtual void loadMaps(bool loadFromFactory = false);
00295 
00297       typedef std::map<std::string, DtObserver*> ObserversMap;
00298 
00299       void removeObserver( ObserversMap& observers, DtObserver* observer );         
00300       void removeObserver(ObserversMap& observers, const std::string& name );        
00301 
00302       void destroyObservers();
00303 
00304       bool setCurrentObserverFromChannel(const DtChannel& channel );      
00305 
00306       void slot_channelCreated( DtChannelManager* channelManager, DtChannel* channel);
00307       void slot_channelDestroyed( DtChannelManager* channelManager, DtChannel* channel);
00308       void slot_channelConfigurationModified(const std::string& deName, 
00309          const std::string& winName, const std::string& oldChannelName,
00310          const DtChannelConfiguration& config);
00311       void slot_attachedToChanged( DtObserver* observer );
00312 
00313 
00314       void createRequiredObservers(  const std::string& engineName );
00315 
00317       virtual void slot_displayEngineAdded(const DtDeRecord& igRecord);
00318 
00322       std::string restoreObserversPart1();
00323 
00325       void restoreObserversPart2( const std::string& filename );
00326 
00327       virtual void slot_displayEngineRealized( const std::string&, 
00328          const std::string& engineName );
00329 
00330    private:      
00332       DtInputDriver( const DtInputDriver& );
00333 
00335       DtInputDriver& operator=( const DtInputDriver& );           
00336 
00337    protected:
00338       DtDe& myDe;
00339 
00340       EventProcessorList myEventProcessors;
00341 
00342       ObserversMap myObservers;
00343       DtObserverController* myObserverController;
00344 
00345       ObserverConfigurationMap myObserverConfigurations;
00346       ObserverStateMap myObserverStates;
00347 
00348       std::string myClassName;
00349       DtKeyAndMouseEventListener* myKeyAndMouseEventListener;           
00350 
00352       DtObserver* myCurrentObserver;     
00353 
00355       bool myAllowResetFlag;
00356 
00358       bool myIsTerrainContextEnabled;
00359 
00360       DtChannel* myCurrentChannel;
00361 
00362       DtKeyMapManager& myCachedKeyMapManager;
00363 
00364       bool mySyncingObservers;
00365    };
00366 
00369    class DT_DLL_VRVCORE DtInputDriverCreator : public DtVirtualBaseClass
00370    {
00371    public:
00372 
00374       DtInputDriverCreator();      
00375 
00377       virtual ~DtInputDriverCreator();
00378 
00380       static DtInputDriverCreator& instance(DtDe& de);
00381 
00385       static void registerInstance(DtDe& de, DtInputDriverCreator* creator);
00386 
00388       virtual DtInputDriver* create(DtAgentManager& sm);
00389 
00390    };
00391 
00392 }

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)