![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: tmApplication.h,v $ $Revision: 1.148 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef TACTICALMAPAPPLICATION_H 00013 #define TACTICALMAPAPPLICATION_H 00014 00015 #include "tmqt/tmqtDefines.h" 00016 #include "symbolMapper/modelDataDict.h" 00017 #include "tmqt/tmAppOptions.h" 00018 00019 #include <geometry/point.h> 00020 #include <QtCore/QList> 00021 #include <map> 00022 #include <string> 00023 00024 class QAction; 00025 class QTimerEvent; 00026 class DtFeatureActionManager; 00027 class DtTMFactory; 00028 class DtTMMiniMap; 00029 class DtModelData; 00030 class DtBaseWindow; 00031 class DtTMAppOptions; 00032 class DtBaseSymbolMapper; 00033 class DtPopupMenu; 00034 class DtToolbarFactoryManager; 00035 class DtTMMapArea; 00036 class DtDrawerColl; 00037 class DtTMDisplayOptions; 00038 class DtSymbol; 00039 class DtViewDriver; 00040 class DtEventController; 00041 class DtTerrainDatabase; 00042 class DtPaperMapDatabase; 00043 class DtUnitDisplayManager; 00044 class DtUnitConverterFactory; 00045 class DtRecursiveTimer; 00046 class DtCoordinateSystemCollection; 00047 class QSplashScreen; 00048 class QProgressBar; 00049 class DtTMPluginManager; 00050 class DtTMPlugin; 00051 class DtEventSignaller; 00052 class DtEnvironmentalModelData; 00053 class DtTMArea; 00054 class QDockWidget; 00055 class DtArchiver; 00056 class DtMsgItem; 00057 class DtMsgGuiPrinter; 00058 00059 #include <QtGui/QApplication> 00060 #include <QtCore/QDateTime> 00061 #include <QtCore/QTextStream> 00062 00063 #include "tmqt/eventSignaller.h" 00064 00065 typedef QList<DtBaseWindow*> DtWindowList; 00066 typedef QList<DtTMArea*> DtAreaList; 00067 00068 const int DtWindow_NoAction = 0; 00069 const int DtMenu_Hide = 0x00000001; 00070 const int DtMenu_DoNotCreate = 0x00000002; 00071 const int DtToolbars_Hide = 0x00000004; 00072 const int DtToolbars_DoNotCreate = 0x00000008; 00073 00074 class DT_DLL_tmqt DtTMApplication : public QObject 00075 { 00076 Q_OBJECT 00077 00078 public: 00079 00080 static DtTMApplication* app(); 00081 00083 DtTMApplication(); 00084 00086 DtTMApplication(int& argc, char** argv); 00087 00089 virtual ~DtTMApplication(); 00090 00093 virtual bool init(DtTMFactory* f, bool bShowSplashScreen = true); 00094 00098 virtual void initializeQApplicationObject(); 00099 00108 virtual DtBaseWindow* createWindow(QWidget* parent, int mode = DtMenu_Hide, 00109 const Qt::WindowFlags& flags = 0); 00110 00113 virtual QVector<DtModelKey> selectedModelKeys() const; 00114 00115 public: 00117 virtual const DtTMFactory* factory() const; 00118 virtual DtTMFactory* factory(); 00119 00121 virtual void setFactory(DtTMFactory* f); 00122 00124 virtual bool initConnections(); 00125 00127 virtual DtTMMiniMap* globalMiniMap() const; 00128 00130 virtual DtModelDataDict& ModelDataDict(); 00131 00133 virtual DtModelDataIter* ModelDataIter() const; 00134 00136 virtual DtBaseWindow* createNewWindow(QWidget* parent = NULL, 00137 int mode = DtWindow_NoAction, 00138 const Qt::WindowFlags& f = 0); 00139 00141 virtual DtBaseWindow* activeWindow() const; 00142 00143 DtTMAppOptions* options() const; 00144 DtTMDisplayOptions* displayOptions() const; 00145 00146 virtual DtDrawerColl* drawerColl(); 00147 00148 virtual const QString& filenameInUse(); 00149 virtual void setFilenameInUse(const QString& filename); 00150 00152 virtual DtBaseSymbolMapper* baseSymbolMapper() const; 00153 00155 DtArchiver* archiver(); 00156 00158 virtual DtBaseWindow* mainWindowFromObject(QObject* o, DtBaseWindow* defaultWindow) const; 00159 00161 virtual void addWindow(const DtBaseWindow* w); 00162 00165 virtual void addManagedArea(DtTMArea*); 00166 00168 virtual bool hasWindows() const; 00169 00171 virtual DtWindowList* windowList(); 00172 00175 virtual int fastestFrameRate(); 00176 00179 virtual bool exec(); 00180 00185 virtual void startTickTimer(int mSec, bool allowFutureOverride = true); 00186 virtual void setAllowTickTimerOverride(bool b); 00187 virtual bool allowTickTimerOverride(); 00188 00191 virtual void adjustTickTimerToMeet(int mSec); 00192 00194 virtual int tickTimerRate(); 00195 00197 virtual void setSuspendTicking(bool b); 00198 virtual bool suspendTicking(); 00199 00201 virtual void setInTick(bool b); 00202 00206 virtual DtModelData* dataWithName(const QString& name, const QVector<int>* except = NULL); 00207 00209 virtual DtModelData* findLocalDataFor(const DtModelKey& key); 00210 00212 virtual const DtModelKey* findLocalModelKey(DtSymbol* s); 00213 00215 virtual DtModelData* findModelData(DtSymbol* s); 00216 00218 virtual DtViewDriver* viewDriverFor(DtSymbol* s); 00219 00221 virtual DtViewDriver* viewDriverFor(const DtModelKey& key); 00222 00225 virtual DtPopupMenu* menuFromAction(QAction*); 00226 00228 virtual void markForUpdate(DtModelDataIter* iter); 00229 00232 virtual void modelDataChanged(const DtModelData& data, int iChangedFlags); 00233 00237 virtual DtModelData* checkForDuplicateName(const DtModelData* checker, QString name, const QVector<int>* except = NULL); 00238 00240 virtual void setDuplicateNameCheck(bool b); 00241 virtual bool duplicateNameCheck() const; 00242 00245 virtual DtEventSignaller* eventSignaller(); 00246 00248 virtual DtEventController& eventController(); 00249 virtual const DtEventController& eventController() const; 00250 00253 virtual const DtTerrainDatabase* terrainDatabase() const; 00254 virtual DtTerrainDatabase* terrainDatabase(); 00255 00256 virtual const DtPaperMapDatabase* paperMapDatabase() const; 00257 virtual DtPaperMapDatabase* paperMapDatabase(); 00258 00260 virtual bool fullScreenMode() const; 00261 00263 virtual bool isConcave(QVector<DtPoint>* pointList); 00264 00266 virtual void addSymbol(const DtModelData&, bool force = true); 00267 virtual void addSymbol(const DtModelData&, DtSymbol*); 00268 00271 virtual void removeSymbol(const DtModelData&, bool removeFromDict = false); 00272 00275 virtual void clear(); 00276 00278 virtual void symbolMapChanged(); 00279 00282 virtual bool needsTerrainDatabase() const; 00283 00285 virtual bool terrainLoaded() const; 00286 virtual DtCoordinateSystemCollection* coordinateSystemCollection() const; 00287 virtual DtUnitDisplayManager* unitDisplayManager() const; 00288 virtual DtUnitConverterFactory* unitConverterFactory() const; 00289 00292 virtual bool allowTerrainProfileTracking() const; 00293 00295 virtual void setUpdateOnTick(bool b, bool updateMini = false); 00296 00298 virtual void setPrintMode(bool b); 00299 virtual bool printMode() const; 00300 00303 virtual QString dataFolder(); 00304 00307 virtual QString makeRelativeTo(QString filename, QString path); 00308 00310 virtual QString relativePath(); 00311 00312 int settingsVersion() const; 00313 00314 virtual QString appName() const; 00315 virtual QString appVersion() const; 00316 virtual QString pluginVersion() const; 00317 virtual QString buildDate() const; 00318 00320 virtual DtString pluginName() const; 00321 00323 virtual void setSplashScreenMessage(const QString&); 00324 00326 virtual bool startSplashScreenProgress(const QString& title, int iTotalSteps); 00327 virtual void updateSplashScreenProgress(int); 00328 virtual void endSplashScreenProgress(); 00329 00331 virtual bool splashScreenIsActive() const; 00332 00334 bool applicationInitialized() const; 00335 00339 virtual void attachEventController(DtEventController*); 00340 00342 QList<DtEventController*>& attachedEventControllers(); 00343 00344 virtual void tickEventControllers(); 00345 virtual void clearCurrentEvents(); 00346 00348 virtual void setSplashScreenImage(const QString&); 00349 00351 virtual DtTMMapArea* mapContainsData(const DtModelData* data) const; 00352 00354 virtual bool eventFilter(QObject *o, QEvent* e); 00355 virtual bool event(QEvent* e); 00356 00358 virtual QString resolveFile(const QString&) const; 00359 00360 virtual DtTMPluginManager* pluginManager() const; 00361 00363 virtual void mergeFeatureActionManager(const DtFeatureActionManager&); 00364 00366 virtual void mergeToolbarManager(const DtToolbarFactoryManager&); 00367 00369 virtual void revertToolbars(); 00370 00371 public: 00381 virtual DtEnvironmentalModelData* createObject(const QString& object, QVector<DtPoint>& points, 00382 const QString& name = QString::null); 00383 00384 public: 00386 virtual bool canPaste() const; 00387 virtual void setPasteData(const QByteArray&); 00388 virtual void clearPasteData(); 00389 const QByteArray& pasteData() const; 00390 00391 #ifdef WIN32 00392 virtual void startPerformanceCounter(const std::string&); 00393 virtual void endPerformanceCounter(const std::string&); 00394 virtual void outputPerformanceCounters(); 00395 bool markTime() const; 00396 #endif 00397 00398 public: 00399 static DtTMApplication* create(int argc, char** argv); 00400 00401 signals: 00402 00404 void filenameInUseChanged(const QString& s); 00405 void symbolMapChangedSignal(); 00406 void pluginLoaded(const DtTMPlugin*); 00407 void pasteAvailable(); 00408 void pasteUnavailable(); 00409 00410 public slots: 00411 virtual void removeAttachedEventController(QObject*); 00412 00414 00415 virtual DtBaseWindow* fileNewWindow(bool show = true); 00416 00417 virtual void fileExit(); 00418 00420 virtual void removeWindow(const DtBaseWindow* w); 00421 virtual void windowDestroyed(QObject* w); 00422 00424 virtual void modelDataAdded(const DtModelKey& key); 00425 00427 virtual void modelDataRemoved(const DtModelKey& key); 00428 00431 virtual void setDisplayFrameRate(int iFramesPerSecond); 00432 00434 virtual int displayFrameRate() const; 00435 00437 virtual void tick(); 00438 virtual void tickInternal(); 00439 00445 virtual void setFullScreenMode(bool b); 00446 00448 virtual void saveSettingsFile(); 00449 virtual void saveSettings(QTextStream& stream); 00450 00452 virtual void readSettingsFile(DtBaseWindow* w, bool windowOnly = false); 00453 virtual void readSettings(DtBaseWindow* w, QTextStream& stream, bool windowOnly = false); 00454 00455 virtual void splashScreenDestroyed(); 00456 00458 virtual void removeManagedArea(QObject*); 00459 00461 virtual void removeFromUpdate(const DtModelData& data); 00462 00463 virtual void markForUpdate(const DtModelData&); 00464 virtual void markForUpdate(const DtModelKey&); 00465 00467 virtual void showSplashScreen(); 00468 00470 virtual void closeSplashScreen(); 00471 virtual void showSplashScreen(bool show); 00472 00473 virtual void processMsgItem(const DtMsgItem& item); 00474 00476 virtual bool shouldTick(); 00477 00479 static void addUserDataFor(const DtEntityMapperKey&, DtArchivableObjectCreator); 00480 static void removeUserDataFor(const DtEntityMapperKey&); 00481 00482 public slots: 00483 virtual void addToUpdate(const DtModelData& data); 00484 virtual void addToRemoval(const DtModelData& data); 00485 00486 protected: 00487 virtual void postAppInit(); 00488 00490 virtual DtTMPluginManager* createPluginManager(DtTMFactory*); 00491 virtual void initPlugins(DtTMFactory* f); 00492 virtual bool readOptions(DtTMFactory* f); 00493 00496 virtual bool setupOptions(); 00497 00498 virtual bool processOptions(DtTMFactory* f); 00499 00501 virtual bool initGlobalMiniMap(); 00502 00505 virtual bool initUnitConverterFactory(DtTMFactory* f); 00506 00508 virtual bool initUnitDisplayManager(DtTMFactory* f); 00509 00511 virtual bool initMenuSystem(); 00512 00515 virtual void setupApplicationFromSettings(); 00516 00517 virtual bool setupFromOptions(); 00518 00520 virtual bool setupMapReaders(); 00521 00522 virtual bool initSymbolMapper(DtTMFactory* f); 00523 00524 virtual void setupWindowFromSettings(DtBaseWindow* w, bool show); 00525 00528 virtual bool createCoordinateSystemCollection(const DtTMFactory* f); 00529 00534 virtual bool shouldClear(const DtModelData* data); 00535 00536 virtual void initGlobalMiniMapConnections(); 00537 00539 virtual const QString& splashScreenImage() const; 00540 00542 virtual DtTMPlugin* loadPlugin(const QString&); 00543 00547 virtual void applicationReady(); 00548 00550 virtual bool loadTranslationFiles(const QString& lang); 00551 00552 virtual bool loadSymbolMapFilesAtStartup() const; 00553 00556 virtual DtString initialLogFile() const; 00557 virtual bool useConsole() const; 00558 00561 virtual void setEnableGuiPrinter(bool enable, int level); 00562 00563 virtual void timerEvent(QTimerEvent *e); 00564 00565 virtual void initUserData(); 00566 00568 virtual void addUserDataFor(DtEnvironmentalModelData*); 00569 00570 virtual void setupLanguage(); 00571 00572 protected: 00573 00574 static DtTMApplication* theApplication; 00575 00576 DtTMFactory* myFactory; 00577 00578 //The global minimap 00579 DtTMMiniMap* myTMGlobalMiniMap; 00580 00581 DtBaseSymbolMapper* myMapper; 00582 00584 DtModelDataDict* myModelDataDict; 00585 DtModelDataIter* myModelDataIter; 00586 00587 DtTMAppOptions* myOptions; 00588 00589 int myArgc; 00590 char** myArgv; 00591 00592 QString myFilenameInUse; 00593 00594 DtWindowList myWindows; 00595 DtAreaList *myManagedAreas; 00596 00598 bool mySuspendTicking; 00599 bool myInTick; 00600 00601 int myTickTimerRate; 00602 bool myAllowTickTimerOverride; 00603 00605 bool myDuplicateNameCheck; 00606 00608 DtEventController* myEventController; 00609 00610 bool myFullScreenMode; 00611 bool myLoadedSettings; 00612 bool myPrintMode; 00613 DtArchiver* myArchiver; 00614 00615 DtDrawerColl* myDrawerColl; 00616 DtCoordinateSystemCollection* myCoordinateSystemCollection; 00617 00621 QList<QObject*> myInactiveWindows; 00622 00623 int mySettingsVersion; 00624 int myTimerId; 00625 00626 QSplashScreen* mySplashScreen; 00627 QProgressBar* mySplashProgress; 00628 00629 DtTMPluginManager* myPluginManager; 00630 00634 DtEventSignaller myEventSignaller; 00635 00636 QString mySplashScreenMessage; 00637 QString mySplashScreenImage; 00638 bool myApplicationInitialized; 00639 bool myNeedsPostAppInit; 00640 QList<DtEventController*>* myAttachedEventControllers; 00641 00642 QHash<DtModelKey, DtModelData*> myUpdateData; 00643 QHash<DtModelKey, DtModelData*> myRemoveData; 00644 00645 bool myResetPruneStatus; 00646 bool myStashPrune; 00647 bool myMarkTime; 00648 00649 QByteArray myPasteBuffer; 00650 00651 int myTickCount; 00652 std::map<std::string, double> myTickTimes; 00653 00654 DtUnitConverterFactory* myUnitConverterFactory; 00655 DtUnitDisplayManager* myUnitDisplayManager; 00656 00657 #ifdef WIN32 00658 std::map<std::string, __int64> myPerformanceCounters; 00659 #endif 00660 00661 DtMsgGuiPrinter* myGuiPrinter; 00662 00663 DtRecursiveTimer* myRecursiveTimer; 00664 00665 static QHash<QString, DtArchivableObjectCreator> theUserData; 00666 }; 00667 00668 inline DtEventSignaller* DtTMApplication::eventSignaller() 00669 { 00670 return &myEventSignaller; 00671 } 00672 00673 inline QList<DtEventController*>& DtTMApplication::attachedEventControllers() 00674 { 00675 return *myAttachedEventControllers; 00676 } 00677 00678 inline int DtTMApplication::settingsVersion() const 00679 { 00680 return mySettingsVersion; 00681 } 00682 00683 inline bool DtTMApplication::applicationInitialized() const 00684 { 00685 return myApplicationInitialized; 00686 } 00687 00688 inline bool DtTMApplication::canPaste() const 00689 { 00690 return (myPasteBuffer.length() != 0); 00691 } 00692 00693 inline const QByteArray& DtTMApplication::pasteData() const 00694 { 00695 return myPasteBuffer; 00696 } 00697 00698 #ifdef WIN32 00699 inline bool DtTMApplication::markTime() const 00700 { 00701 return myMarkTime; 00702 } 00703 #endif 00704 00705 inline DtTMAppOptions* DtTMApplication::options() const 00706 { 00707 return myOptions; 00708 } 00709 00710 inline DtTMDisplayOptions* DtTMApplication::displayOptions() const 00711 { 00712 return myOptions->displayOptions(); 00713 } 00714 00715 inline DtArchiver* DtTMApplication::archiver() 00716 { 00717 return myArchiver; 00718 } 00719 00720 #endif 00721