VR-Forces 4.0.4 Class Documentation
include/vrvVrl/DtVrlinkDriver.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2011 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00009 
00010 #pragma once
00011 
00012 #include <vrvVrl/vrvVrl.h>
00013 #include <vrvCore/DtDriver.h>
00014 #include <vrvUtil/DtLockedBufferedQueue.h>
00015 #include <vrvCore/DtSelectionManager.h>
00016 #include <vrvUtil/DtSignalConnectionManager.h>
00017 #include <vrvCore/DtViewStateProcessor.h>
00018 
00019 #include <vlutil/vlRunnable.h>
00020 
00021 #include <string>
00022 #include <boost/function.hpp>
00023 #include <boost/signal.hpp>
00024 
00025 class DtThread;
00026 class DtThreadStart;
00027 class DtEntityType;
00028 
00029 namespace makVrv
00030 {
00031    class DtAsynchronousEventQueue;
00032    class DtAsynchronousAgentManager;   
00033    class DtConnection;
00034    class DtEntityTypeMapper;
00035    class DtObserver;
00036    class DtSelectionManager;
00037    class DtMouseState;
00038 
00041    class DT_DLL_VRVVRL DtVrlinkDriver : public DtDriver, 
00042       protected DtRunnable
00043    {
00044    public:
00045 
00047       DtVrlinkDriver(DtAgentManager& agentManager, 
00048          const std::string& uniqueName, const std::string& className);
00049 
00051       virtual ~DtVrlinkDriver();
00052 
00054       virtual const std::string& className() const;
00055 
00057       virtual bool observersPublished() const;
00058 
00060       virtual void setObserversPublished(bool isPublished);
00061       
00063       virtual bool viewControlEnabled() const;
00064 
00066       virtual void setViewControlEnabled(bool enabled);
00067 
00069       virtual void queueSimulationFunction(const boost::function<void ()>& function);
00070 
00072       bool useThreadFlag() const
00073       {
00074          return myUseThreadFlag;
00075       }
00076 
00077       DtConnection* connection()
00078       {
00079          return myConnection;
00080       }
00081 
00083       boost::signal<void (DtConnection*)> signal_simulationCreated;
00084 
00086       boost::signal<void (DtConnection*)> signal_simulationAboutToBeDestroyed;
00087       
00088    protected:
00089    
00091       virtual DtConnection* createConnection() = 0;
00092 
00095       virtual bool onStart();
00096 
00099       virtual bool onStop();
00100 
00102       virtual void run();
00103 
00105       void startPublishingObservers();
00106 
00108       void stopPublishingObservers();
00109 
00112       virtual bool onTick();
00113 
00116       void startThread();
00117 
00120       void stopThread();
00121       
00123       void setConnectionState( bool state );
00124 
00126       virtual void slot_displayEngineAdded( const DtDeRecord& igRecord );
00127 
00129 
00131       virtual void connectToDynamicSignals();
00132 
00135       virtual void disconnectFromDynamicSignals();
00136 
00137       virtual void slot_onViewChanged(
00138          DtViewStateProcessor::ObserverAction& action);
00139 
00140       virtual void slot_onCurrentSelectionChanged( 
00141          const DtSelectionManager::IdSet& selected,
00142          const DtSelectionManager::IdSet& deselected);
00143 
00144       virtual void slot_onVertexSelected( const DtUniqueID& selected,
00145          const DtUniqueID& parentOfSelected);
00146 
00147       virtual void slot_onVertexDeselected( const DtUniqueID& deselected,
00148          const DtUniqueID& parentOfDeselected);
00149 
00150       virtual void slot_onEntityInfoToggled( 
00151          const DtSelectionManager::IdSet& entityIds);
00152 
00155       virtual void slot_onEntityIndicatorMouseDown(DtMouseState& mouseState,
00156          const DtUniqueID& id, const std::string& displayEngineName,
00157          const std::string& windowName, const std::string& channelName);
00158       
00159       virtual void slot_onEntityIndicatorMouseUp(DtMouseState& mouseState,
00160          const DtUniqueID& id, const std::string& displayEngineName,
00161          const std::string& windowName, const std::string& channelName);
00162       
00163       virtual void slot_onEntityIndicatorMouseDblClick(DtMouseState& mouseState,
00164          const DtUniqueID& id, const std::string& displayEngineName,
00165          const std::string& windowName, const std::string& channelName);
00166 
00169       virtual void slot_onTacticalGraphicIndicatorMouseDown(
00170          DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00171          const std::string& windowName, 
00172          const std::string& channelName);
00173       
00174       virtual void slot_onTacticalGraphicIndicatorMouseUp(
00175          DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00176          const std::string& windowName, 
00177          const std::string& channelName);
00178       
00179       virtual void slot_onTacticalGraphicIndicatorMouseDblClick(
00180          DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00181          const std::string& windowName, 
00182          const std::string& channelName);
00183 
00185       virtual void slot_onCoordinateSystemChanged( 
00186          const std::string& coordinateSystem, 
00187          const std::string& coordinateParameters );
00188 
00190       virtual void slot_onObserverObjectAttached(
00191          const std::string& observerName, DtUniqueID id);
00192 
00194       virtual void slot_onObserverDetached(const std::string& observerName);
00195 
00197       virtual void attachObserverObject(const std::string& observerName,
00198          DtUniqueID id);
00199     
00201       virtual void toggleEntitySelected(const DtUniqueID& id);
00202 
00203       virtual void performObserverAction(
00204          DtViewStateProcessor::ObserverAction& action);
00205 
00207 
00208       virtual void slot_onObserverDestroyed(DtObserver* observer);
00209 
00210       virtual void slot_onObserverCreated(DtObserver* observer);
00211 
00213       virtual void startPublishingObserver( DtObserver* observer );
00214 
00216       virtual void stopPublishingObserver( DtObserver* observer );
00217 
00219       virtual void updateObservers();
00220 
00221       void indicatorMouseDown(DtMouseState& mouseState,
00222          const DtUniqueID& id, const std::string& displayEngineName,
00223          const std::string& windowName, const std::string& channelName);
00224 
00225       void indicatorMouseUp(DtMouseState& mouseState,
00226          const DtUniqueID& id, const std::string& displayEngineName,
00227          const std::string& windowName, const std::string& channelName);
00228 
00229       void indicatorMouseDblClick(DtMouseState& mouseState,
00230          const DtUniqueID& id, const std::string& displayEngineName,
00231          const std::string& windowName, const std::string& channelName);
00232 
00233       typedef DtLockedBufferedQueue<boost::function<void ()> > FunctionCallQueue;
00234       typedef std::vector<boost::function<void ()> > FunctionCallList;
00235 
00236       enum FunctionType {Create, Update, Destroy};
00237 
00239       virtual void runFunctionQueue(FunctionCallQueue& queue);
00240 
00241    protected:
00242 
00243       //Main thread variables.
00244       std::string myClassName;
00245 
00247       //Cross thread variables.  They are used between the two threads for
00248       //communication.
00249       bool myUseThreadFlag;
00250       DtThreadStart* myStart;
00251       DtThread* myThread;
00252       
00253       FunctionCallQueue mySimulationThreadFunctions;
00254       FunctionCallQueue myDriverThreadFunctions;
00255       DtAsynchronousAgentManager* myAsynchronousInterface;
00257 
00258       DtConnection* myConnection;
00259       DtAsynchronousEventQueue* myAsynchronousEventQueue;
00260       bool myConnectionState;
00261 
00262       DtSignalConnectionManager myDynamicSignals;
00263 
00264       double myObserverUpdateTimeInterval;
00265       double myLastObserverUpdateTime;
00266       bool myObserversPublished;
00267       bool myViewControlEnabled;
00268 
00269       DtSelectionManager& mySelectionManager;
00270 
00271    };
00272 }

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)