![]() |
VR-Forces 4.0.4 Class Documentation
|
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 }