![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: DtVrfScenarioManager.h,v $ $Revision: 1.12 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #pragma once 00015 00016 #include <vrfGuiCore/DtVrfGuiApplicationSettings.h> 00017 00018 #include <vrfGuiCoreQt/vrfGuiCoreQt.h> 00019 #include <vrfGuiCore/DtMenu.h> 00020 #include <vrfGuiCore/entityMapperKey.h> 00021 #include <vrfGuiCore/DtVrfSessionSettingsRecord.h> 00022 #include <vrvCore/DtMenuConfiguration.h> 00023 00024 #include <vrvUtil/DtVirtualBaseClass.h> 00025 #include <vrvUtil/signalslib.h> 00026 #include <vrvCore/DtDe.h> 00027 00028 #include <vrfutil/deadReckoningSettings.h> 00029 00030 #include <boost/signal.hpp> 00031 00032 #include <QtCore/QVector> 00033 #include <QtCore/QFileInfo> 00034 00036 #include <QtCore/qnamespace.h> 00037 00038 class DtScenarioLoadInformation; 00039 class DtScenario; 00040 class DtScenarioExplorer; 00041 class QFileDialog; 00042 class QWidget; 00043 class QDialog; 00044 class DtSimMessage; 00045 class DtIfServerMessage; 00046 00047 namespace makArchives 00048 { 00049 class DtTerrainOperationRecord; 00050 class DtTerrainRecord; 00051 } 00052 00053 namespace makVrv 00054 { 00055 class DtRecordSettingsBackupInterface; 00056 } 00057 00058 namespace makVrf 00059 { 00060 class DtVrfBackendState; 00061 class DtJoinSessionDialog; 00062 class DtHostilityMatrixDialog; 00063 class DtLoadScenarioDialog; 00064 class DtNeverAskAgainMessageBox; 00065 class DtScenarioSettingsDialog; 00066 class DtSessionStatusBox; 00067 class DtSessionStartupDialog; 00068 class DtScenarioDescriptionDialog; 00069 00071 class DT_DLL_VRFGUICOREQT DtVrfGuiRecentScenarios : public DtVrfGuiApplicationSetting 00072 { 00073 public: 00074 DtVrfGuiRecentScenarios(makVrv::DtDe* = 0); 00075 DtVrfGuiRecentScenarios(const DtVrfGuiRecentScenarios&); 00076 00077 virtual ~DtVrfGuiRecentScenarios(); 00078 00079 virtual DtVrfGuiApplicationSetting* clone() const; 00080 00081 const std::vector<std::string> recentScenarios() const 00082 { 00083 return myRecentScenarios; 00084 } 00085 00086 int maxSize() const 00087 { 00088 return myMaxSize; 00089 } 00090 00092 void setMaxSize(int); 00093 00094 void insertScenario(const std::string&, int pos = -1); 00095 int removeScenario(const std::string&); 00096 00097 virtual std::string classType() const; 00098 00099 protected: 00100 friend class boost::serialization::access; 00101 00102 virtual void write(boost::archive::xml_oarchive& out, const unsigned int); 00103 virtual void read(boost::archive::xml_iarchive& in, const unsigned int); 00104 00105 protected: 00106 std::vector<std::string> myRecentScenarios; 00107 unsigned int myMaxSize; 00108 }; 00109 00111 class DT_DLL_VRFGUICOREQT DtVrfScenarioManager : public makVrv::DtVirtualBaseClass 00112 { 00113 public: 00114 friend class DtSessionStatusBox; 00115 00116 enum DtJoinSessionTerrainAction 00117 { 00118 DtTerrainActionUseSessionTerrain, 00119 DtTerrainActionChooseAlternateTerrain, 00120 DtTerrainActionKeepCurrentTerrain, 00121 DtShowSessionStartupDialog, 00122 DtLoadScenarioSpecifiedInApplication 00123 }; 00124 00125 enum SessionStatusDialogs 00126 { 00127 Loading = 0x00000001, 00128 Saving = 0x00000002, 00129 Closing = 0x00000004, 00130 AllStatusDialogs = Loading | Saving | Closing 00131 }; 00132 00133 public: 00134 DtVrfScenarioManager(makVrv::DtDe&); 00135 virtual ~DtVrfScenarioManager(); 00136 00138 static DtVrfScenarioManager& instance(makVrv::DtDe& de); 00139 00141 static void init(makVrv::DtDe&); 00142 00143 const DtScenarioExplorer* scenarioExplorer() const 00144 { 00145 return myExplorer; 00146 } 00147 00148 const std::vector<DtEntityMapperKey>& controlObjects() const 00149 { 00150 return myControlObjectTypes; 00151 } 00152 00153 virtual void addControlObject(const DtEntityMapperKey& key); 00154 virtual void removeControlObject(const DtEntityMapperKey& key); 00155 virtual void clearControlObjects(); 00156 00157 virtual bool isControlObject(const DtEntityMapperKey& key) const; 00158 00159 virtual void closeScenario(bool resetScenario = true); 00160 virtual bool loadScenario(const std::string& s); 00161 virtual bool loadScenario(const DtScenarioLoadInformation& s); 00162 virtual void runScenario(); 00163 virtual void pauseScenario(); 00164 virtual void rewindScenario(); 00165 00168 virtual void tickedLoadScenario(); 00169 00172 virtual void tickedNewScenario(); 00173 00175 virtual void loadScenarioFromDialog(QWidget* p); 00176 virtual DtLoadScenarioDialog* createLoadScenarioDialog(QWidget*); 00177 00182 virtual void setHelpFile(const std::string&, bool save = false); 00183 virtual std::string helpFile() const; 00184 00187 virtual void setDefaultScenarioFile(const std::string& f, bool save = false); 00188 virtual std::string defaultScenarioFile() const; 00189 00192 virtual void setDefaultSimulationModelSetFile(const std::string& f, bool save = false); 00193 virtual std::string defaultSimulationModelSetFile() const; 00194 00196 virtual void recreateCreateMenu(); 00197 00199 virtual DtScenarioSettingsDialog* createNewScenarioDialog(QWidget* p); 00200 virtual void newScenarioFromDialog(QWidget* p); 00201 00204 virtual void newScenario(const std::string&); 00205 00207 virtual void loadBatchScenario(QWidget*); 00208 00218 virtual bool joinSession(DtJoinSessionTerrainAction terrainAction = DtTerrainActionUseSessionTerrain); 00219 00220 virtual void resignSession(bool closeTerrain = true); 00221 00222 virtual bool saveScenarioAs(); 00223 virtual bool saveScenario(); 00224 00225 virtual bool canRewind() const; 00226 00229 void setValidateForVrfObjects(bool b) 00230 { 00231 myValidateForVrfObjects = b; 00232 } 00233 00234 bool validateForVrfObjects() const 00235 { 00236 return myValidateForVrfObjects; 00237 } 00238 00239 void setScenarioDirty(bool b) 00240 { 00241 myScenarioDirty = b; 00242 } 00243 00244 bool scenarioDirty() const 00245 { 00246 return myScenarioDirty; 00247 } 00248 00249 const DtScenario* scenario() const 00250 { 00251 return myScenario; 00252 } 00253 00254 void setAskSaveIfScenarioModified(bool b) 00255 { 00256 myAskSaveIfScenarioModified = b; 00257 } 00258 00259 bool askSaveIfScenarioModified() const 00260 { 00261 return myAskSaveIfScenarioModified; 00262 } 00263 00264 bool joinedToSession() const 00265 { 00266 return myJoinedToSession; 00267 } 00268 00269 void setDisplayExistingGdbWarningMessages(bool b) 00270 { 00271 myDisplayExistingGdbWarningMessage = b; 00272 } 00273 00274 bool displatExistingGdbWarningMessages() const 00275 { 00276 return myDisplayExistingGdbWarningMessage; 00277 } 00278 00279 virtual void setCorrelated(bool); 00280 00281 bool correlated() const 00282 { 00283 return myCorrelated; 00284 } 00285 00286 DtMenu* createMenu() 00287 { 00288 return myMenu; 00289 } 00290 00291 bool initialized() const 00292 { 00293 return myInitialized; 00294 } 00295 00296 const DtDeadReckoningSettings& deadReckoningSettings() const 00297 { 00298 return myDeadReckoningSettings; 00299 } 00300 00301 virtual std::string currentlyLoadedTerrain() const; 00302 00303 virtual void processJoinSession(bool startupMessage = false); 00304 00305 virtual void setFromRecord(const DtVrfSessionSettingsRecord& rec); 00306 virtual void loadDefaultSessionSettings(bool loadOnlyFactorySettings = false); 00307 virtual void saveSessionSettingsAsDefaults(); 00308 virtual void getRecord(DtVrfSessionSettingsRecord& rec) const; 00309 00312 virtual bool autoJoinSession() const; 00313 virtual bool askToJoin() const; 00314 virtual bool alwaysJoinWithSessionDatabase() const; 00315 virtual bool alwaysJoinWithOpenDatabase() const; 00316 virtual bool displaySessionDialogs() const; 00317 virtual bool displayCorrelationWarningMessages() const; 00318 00319 makVrv::DtRecordSettingsBackupInterface* sessionSettingsBackup() 00320 { 00321 return mySessionSettingsBackup; 00322 } 00323 00325 void exportSessionSettings(const std::string& fileName); 00326 00328 void importSessionSettings(const std::string& fileName); 00329 00331 virtual void setDoNotShowSessionStartupDialog(bool); 00332 bool showSessionStartupDialog() const; 00333 00335 virtual void setStartupPreference(int); 00336 int startupPreference() const; 00337 00340 virtual void setAggregateOnCreate(bool); 00341 bool aggregateOnCreate() const; 00342 00344 virtual void setUserDefinedSmoothing(bool); 00345 bool userDefinedSmoothing() const; 00346 00348 virtual void setWindowTitle(const QString&); 00349 00351 virtual void setShowSessionStatusDialogs(SessionStatusDialogs); 00352 SessionStatusDialogs showSessionStatusDialogs() const 00353 { 00354 return myShowSessionStatusDialogs; 00355 } 00356 00358 virtual void setShowScenarioDescriptionMessageBox(bool b, bool save); 00359 virtual bool showScenarioDescriptionMessageBox() const; 00360 00362 virtual const makVrv::DtMenuConfiguration& initialCreateMenuConfiguration() const; 00363 virtual makVrv::DtMenuConfiguration initialCreateMenuConfiguration(); 00364 00365 public: 00366 virtual void slot_onScenarioModified(); 00367 virtual void slot_allBackendsClosed(); 00368 00370 virtual void editHostilityMatrix(QWidget* parent); 00371 00373 virtual DtHostilityMatrixDialog* createHostilityMatrixDialog( 00374 QWidget* p, const Qt::WindowFlags& flags) const; 00375 00377 virtual void addRecentScenario(const std::string&); 00378 00379 public: 00380 boost::signal<void (const std::string&)> signal_scenarioLoadError; 00381 boost::signal<void (DtSessionStartupDialog*)> signal_sessionStartupBoxCreated; 00382 boost::signal<void (DtHostilityMatrixDialog*)> signal_hostilityMatrixDialogCreated; 00383 boost::signal<void (const DtDeadReckoningSettings&)> signal_deadReckoningSettingsChanged; 00384 boost::signal<void (const DtScenarioExplorer&)> signal_scenarioLoaded; 00385 boost::signal<void (bool)> signal_sessionStatusChanged; 00386 boost::signal<void ()> signal_allBackendsClosed; 00387 boost::signal<void ()> signal_rewinding; 00388 00390 boost::signal<void ()> signal_scenarioJustLoaded; 00391 00393 boost::signal<void (const DtScenarioLoadInformation&)> signal_preLoadScenario; 00394 00397 boost::signal<void (const DtScenarioLoadInformation&)> signal_postLoadScenario; 00398 00402 boost::signal<void (const std::string&)> signal_preLoadBaseTerrain; 00403 00406 boost::signal<void (const std::string&)> signal_preLoadTerrain; 00407 00409 boost::signal<void (const std::string&)> signal_postLoadTerrain; 00410 00412 boost::signal<void (const DtScenarioExplorer&)> signal_preLoadForceFiles; 00413 00415 boost::signal<void (const DtScenarioExplorer&)> signal_postLoadForceFiles; 00416 00418 boost::signal<void (const DtScenarioExplorer&)> signal_preLoadArtilleryManager; 00419 00421 boost::signal<void (const DtScenarioExplorer&)> signal_postLoadArtilleryManager; 00422 00424 boost::signal<void (const DtScenarioExplorer&)> signal_preLoadModelSetFiles; 00425 00427 boost::signal<void (const DtScenarioExplorer&)> signal_postLoadModelSetFiles; 00428 00430 boost::signal<void (const DtScenarioExplorer&)> signal_preLoadCreateMenu; 00431 00433 boost::signal<void (const DtScenarioExplorer&, DtMenu*)> signal_postLoadCreateMenu; 00434 00436 boost::signal<void (const DtScenarioExplorer&)> signal_createMenuLoaded; 00437 00439 boost::signal<void ()> signal_recreateCreateMenu; 00440 00442 boost::signal<void (const DtVrfSessionSettingsRecord&)> signal_sessionSettingsChanged; 00443 00445 boost::signal<void (DtVrfGuiRecentScenarios*)> signal_recentScenariosChanged; 00446 00448 boost::signal<void (const DtScenario&)> signal_preLoadGuiScenarioSettings; 00449 00451 boost::signal<void (const DtScenario&)> signal_postLoadGuiScenarioSettings; 00452 00454 boost::signal<void ()> signal_scenarioClosed; 00455 00456 protected: 00458 virtual void cleanupSessionBox(); 00459 00461 virtual void slot_sessionStartupComplete(); 00462 00464 virtual void slot_onScenarioLoaded(const DtScenario*); 00465 00466 virtual void slot_checkBackendClosed(const DtVrfBackendState&, int); 00467 virtual void slot_checkSimulationState(const DtVrfBackendState&, int); 00468 00470 virtual bool saveIfDirty(); 00471 virtual DtJoinSessionDialog* createJoinSessionDialog(QWidget* parent, const Qt::WindowFlags& flags); 00472 00473 virtual void connectSignals(bool); 00474 00475 virtual void displayCorrelationWarningMessage(); 00476 00478 virtual void reloadScenario(const std::string& newTerrain); 00479 00482 virtual void saveScenario(std::string baseName, std::string newTerrainName); 00483 00485 virtual void slot_onScenarioSaved(std::string scenarioName, std::string newTerrain); 00486 00488 virtual void slot_onScenarioReloaded(std::string scenarioName); 00489 00491 virtual void setup(); 00492 00494 virtual void showSessionStartupDialog(); 00495 00497 virtual void sessionStatusBoxClosed(); 00498 00501 virtual void processServerMessage(DtSimMessage*); 00502 00503 protected: 00504 virtual void loadIndirectFireManager(const DtScenarioExplorer& explorer); 00505 virtual void loadForceFiles(const DtScenarioExplorer& explorer); 00506 virtual void loadCreateMenu(const DtScenarioExplorer& explorer); 00507 virtual void loadInitialCreateMenuConfiguration(const DtFilename&, bool createDefaultConfiguration = true); 00508 00509 virtual void loadGuiScenarioSettings(const DtScenario&); 00510 virtual void loadModelSetFiles(const DtScenarioExplorer& explorer); 00511 virtual bool loadTerrain(const std::string& filePath); 00512 00513 virtual DtMenu* createMenuFromFile(const DtString&) const; 00514 virtual bool isModelSet(const DtFilename& filename) const; 00515 virtual bool loadModelSet(const DtFilename& filename, DtMenu* m) const; 00516 00517 virtual void slot_onSessionUpdated(int flags); 00518 virtual void slot_onDuplicateBackendAddress(const DtVrfBackendState&); 00519 00520 virtual void slot_backendDiscovered(const DtVrfBackendState&); 00521 virtual void slot_settingReceived(const std::string&, const DtVrfBackendState*); 00522 00523 virtual bool sessionPrompt(const QString& message); 00524 00525 virtual bool openTerrainDatabaseFromUserSelection(); 00526 00527 virtual bool loadSessionTerrain(const std::string&); 00528 00529 virtual bool isSameTerrain(const std::string& terrain1, const std::string& terrain2) const; 00530 00531 virtual void slot_terrainModified(); 00532 virtual void slot_deDestructing(); 00533 00534 virtual void slot_terrainToBeCleared(); 00535 virtual void slot_terrainCleared(); 00536 00537 virtual bool checkWriteGdb(const std::string& gdb); 00538 00539 virtual void setupSessionSettings(); 00540 00542 virtual QFileInfo findTerrainFile(const std::string& terrainFile) const; 00543 00546 virtual QFileInfo findTerrainFile(const std::string& terrainFile, const std::vector<std::string>& searchPaths, 00547 const std::string& extension) const; 00548 00550 virtual void slot_scenarioAboutToBeSaved(DtScenario*); 00551 00553 virtual void createSessionStatusBox(const QString& title, const QString& message, int statusType); 00554 00555 protected: 00556 makVrv::DtDe& myDe; 00557 DtScenario* myScenario; 00558 DtMenu* myMenu; 00559 DtScenarioExplorer* myExplorer; 00560 QDialog* mySessionStatusMessageBox; 00561 std::vector<DtEntityMapperKey> myControlObjectTypes; 00562 bool myRewinding; 00563 bool myValidateForVrfObjects; 00564 bool myScenarioDirty; 00565 bool myFirstRun; 00566 bool myAskSaveIfScenarioModified; 00567 bool myAutoJoinSession; 00568 bool myJoinedToSession; 00569 bool myCorrelationWarned; 00570 std::string myLoadedTerrain; 00571 bool myCorrelated; 00572 bool myDisplayExistingGdbWarningMessage; 00573 bool myTerrainClearing; 00574 bool myLoadingScenario; 00575 int myTimeoutInterval; 00576 bool myCanSimulate; 00577 bool myInitialized; 00578 bool myIsStartup; 00579 00580 DtVrfSessionSettingsRecord mySessionSettings; 00581 DtDeadReckoningSettings myDeadReckoningSettings; 00582 makVrv::DtRecordSettingsBackupInterface* mySessionSettingsBackup; 00583 DtSessionStatusBox* mySessionStatusBox; 00584 SessionStatusDialogs myShowSessionStatusDialogs; 00585 makVrv::DtMenuConfiguration myInitialCreateMenuConfiguration; 00586 }; 00587 00588 REGISTER_APPLICATION_SETTING(DtVrfGuiRecentScenarios) 00589 } 00590 00591 BOOST_CLASS_VERSION(makVrf::DtVrfGuiRecentScenarios, 1)