![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: DtVrfSimBackEndManager.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #pragma once 00015 00016 #include <vrfGuiCore/vrfGuiCore.h> 00017 #include <vrfGuiCore/DtVrfBackendState.h> 00018 #include <vrfGuiCore/DtQueuedManager.h> 00019 00020 #include <vrvCore/DtSimData.h> 00021 #include <vrvCore/DtDe.h> 00022 00023 #include <boost/function.hpp> 00024 #include <boost/signal.hpp> 00025 00026 class DtBackend; 00027 class DtSimulationAddress; 00028 class DtSimMessage; 00029 class DtIfLoadComplete; 00030 class DtIfSaveComplete; 00031 00032 namespace makVrv 00033 { 00034 class DtBaseSimulation; 00035 } 00036 00038 const int DtSessionChangedTerrain = 0x00000001; 00039 const int DtSessionChangedScenario = 0x00000002; 00040 const int DtSessionChangedNumberBEs = 0x00000004; 00041 const int DtSessionScenarioJustLoaded = 0x00000008; 00042 00043 namespace makVrf 00044 { 00045 class DtVrfBackEndState; 00046 00052 class DT_DLL_VRFGUICORE DtVrfSimBackendManager : public DtQueuedManager 00053 { 00054 public: 00055 typedef std::map<std::string, DtVrfBackendState*> DtVrfSimBackendStates; 00056 00057 public: 00058 DtVrfSimBackendManager(makVrv::DtDe&); 00059 virtual ~DtVrfSimBackendManager(); 00060 00062 static DtVrfSimBackendManager& instance(makVrv::DtDe& de); 00063 00064 public: 00066 virtual bool backEndsPresent() const; 00067 00069 virtual bool anyBackendsLoaded() const; 00070 00072 virtual bool allBackendsLoaded() const; 00073 00075 virtual bool backendLoaded(const DtSimulationAddress&) const; 00076 00078 virtual bool backendSaving(const DtSimulationAddress&) const; 00079 00081 virtual bool anyBackendsPlaying() const; 00082 00084 virtual bool anyBackendsInControlState(int state) const; 00085 00087 virtual bool allBackendsCanSimulate() const; 00088 00090 virtual bool backendCanSimulate(const DtSimulationAddress&) const; 00091 00093 virtual void duplicateBackendDiscovered(const DtSimulationAddress&); 00094 00100 00101 virtual void removeAllBackends(); 00102 virtual void addBackend(const DtBackend*); 00103 virtual void backendRemoved(const DtSimulationAddress&); 00104 virtual void backendUpdated(const DtSimulationAddress&, const DtBackend*); 00106 00107 DtVrfBackendState* stateFor(const DtSimulationAddress&) const; 00108 00109 const DtSimulationAddress& selectedBackend() const 00110 { 00111 return mySelectedBackend; 00112 } 00113 00114 void setSelectedBackend(const DtSimulationAddress&); 00115 00116 virtual int numberOfBackends() const; 00117 00119 virtual void clearSelectedBackend(); 00120 00122 virtual double simTime() const; 00123 00125 virtual double simStartSimTime() const; 00126 00127 const DtVrfSimBackendStates& backendStates() const 00128 { 00129 return myBackendStates; 00130 } 00131 00132 public: 00134 virtual void signalWhenAllBackendsClosed(); 00135 00137 virtual void signalIfAllBackendsClosed(); 00138 boost::signal<void ()> signal_allBackendsClosed; 00139 00142 virtual void signalWhenAllBackendsLoaded(); 00143 00146 virtual void signalIfAllBackendsLoaded(); 00147 boost::signal<void ()> signal_allBackendsLoaded; 00148 00150 virtual void signalWhenAllBackendsSaved(); 00151 00153 virtual void signalIfAllBackendsSaved(); 00154 boost::signal<void ()> signal_allBackendsSaved; 00155 00156 const std::string& sessionScenario() const 00157 { 00158 return mySessionScenarioName; 00159 } 00160 00161 const std::string& sessionTerrain() const 00162 { 00163 return mySessionTerrainName; 00164 } 00165 00166 public: 00167 boost::signal<void (const DtVrfBackendState&)> signal_frameRatesUpdated; 00168 boost::signal<void (const DtVrfBackendState&)> signal_backendDiscovered; 00169 boost::signal<void (const DtVrfBackendState&)> signal_backendRemoved; 00170 boost::signal<void (const DtVrfBackendState&, int)> signal_backendUpdated; 00171 boost::signal<void (int)> signal_sessionUpdated; 00172 boost::signal<void (const DtVrfBackendState&)> signal_duplicateSimulationAddress; 00173 boost::signal<void (const DtSimulationAddress& old, const DtSimulationAddress& newaddr)> signal_selectedBackendChanged; 00174 boost::signal<void ()> signal_allBackendsAboutToBeRemoved; 00175 00176 protected: 00177 virtual void slot_frameRatesUpdated(const DtVrfBackendState&); 00178 virtual void simulationBackendRemoved(DtVrfBackendState*); 00179 virtual void simulationBackendDiscovered(DtVrfBackendState*); 00180 virtual void simulationBackendUpdated(DtSimulationAddress, int); 00181 virtual void duplicateSimulationBackendDiscovered(DtSimulationAddress); 00182 00183 virtual void processLoadCompleteCallback(DtSimMessage*); 00184 virtual void processSaveCompleteCallback(DtSimMessage*); 00185 00187 virtual void backendSaved(const std::string&); 00188 00189 virtual void setBackendSaving(const DtSimulationAddress&, bool b); 00190 00192 virtual void updateSessionInformation(int sessionFlags = 0); 00193 00194 protected: 00195 makVrv::DtBaseSimulation* mySimulation; 00196 DtVrfSimBackendStates myBackendStates; 00197 DtSimulationAddress mySelectedBackend; 00198 bool mySignalWhenAllBackendsClosed; 00199 bool mySignalWhenAllBackendsLoaded; 00200 bool mySignalWhenAllBackendsSaved; 00201 std::map<std::string, char> myBackendsWaitingForSave; 00202 std::map<std::string, bool> myAlreadyDuplicateWarned; 00203 std::map<std::string, bool> myNeedToLoad; 00204 std::vector<std::string> myNeedToSave; 00205 00206 std::string mySessionTerrainName; 00207 std::string mySessionScenarioName; 00208 00209 std::map<std::string, bool> myJustLoadedMap; 00210 }; 00211 }