From: srn Date: Tue, 8 Aug 2006 12:59:53 +0000 (+0000) Subject: BugID: PAL13069, added a map that contains IDs of created studies so that the studies... X-Git-Tag: For_OCT_611~10 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=270205b55767d4462942d2658ce3adaaa3a81faa;p=modules%2Fgui.git BugID: PAL13069, added a map that contains IDs of created studies so that the studies can be closed on application's exit. --- diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx index 5e73de8a6..b6e0fa83d 100644 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ b/src/SalomeApp/SalomeApp_Application.cxx @@ -61,7 +61,6 @@ #include #include -#include #include #include #include @@ -81,6 +80,8 @@ #include +#include + /*!Create new instance of SalomeApp_Application.*/ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication() { @@ -91,6 +92,8 @@ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication() SalomeApp_Application::SalomeApp_Application() : LightApp_Application() { + cout << "The constructor : " << this << endl; + _studyIDs.clear(); } /*!Destructor. @@ -1103,3 +1106,33 @@ void SalomeApp_Application::updateSavePointDataObjects( SalomeApp_Study* study ) delete it.data(); } +/*!Adds a study Id to the map of stored IDs - to be closed on the application closing*/ +void SalomeApp_Application::addStudyId(const int theId) +{ + _studyIDs[theId] = 10; +} + +/*!Removes a study Id from the map of stored IDs*/ +void SalomeApp_Application::removeStudyId(const int theId) +{ + _studyIDs.remove(theId); +} + + + +/*!Iterates all opened study and closes them*/ +void SalomeApp_Application::closeApplication() +{ + std::vector ids; + QMap::Iterator it; + for (it = _studyIDs.begin(); it != _studyIDs.end(); it++) { + ids.push_back(it.key()); + } + + LightApp_Application::closeApplication(); + + for(int i = 0,sz = ids.size(); iGetStudyByID(ids[i]); + if (aStudy) studyMgr()->Close(aStudy); + } +} diff --git a/src/SalomeApp/SalomeApp_Application.h b/src/SalomeApp/SalomeApp_Application.h index fbe0a8463..6106f3ee6 100644 --- a/src/SalomeApp/SalomeApp_Application.h +++ b/src/SalomeApp/SalomeApp_Application.h @@ -31,6 +31,8 @@ #include "SalomeApp.h" #include +#include + #include #include @@ -90,6 +92,10 @@ public: SUIT_ViewManager* newViewManager(const QString&); void updateSavePointDataObjects( SalomeApp_Study* ); + virtual void closeApplication(); + void addStudyId(const int theId); + void removeStudyId(const int theId); + public slots: virtual bool onOpenDoc( const QString& ); virtual void onLoadDoc(); @@ -127,6 +133,11 @@ private slots: void onCatalogGen(); void onRegDisplay(); void onOpenWith(); + +private: + + QMap _studyIDs; + }; #ifdef WIN32 diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx index 6cbc7b34d..74adaf2ad 100644 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ b/src/SalomeApp/SalomeApp_Study.cxx @@ -288,7 +288,14 @@ void SalomeApp_Study::closeDocument(bool permanently) _PTR(Study) studyPtr = studyDS(); if ( studyPtr ) { - if(permanently) SalomeApp_Application::studyMgr()->Close( studyPtr ); + if(permanently) { + //SRN: bug 13069: If the study is closed permanently it is closed so remove its Id from the list of + //IDs of studies to be closed on the application closing + SalomeApp_Application* app = dynamic_cast(application()); + if(app) app->removeStudyId(studyPtr->StudyId()); + //SRN: End + SalomeApp_Application::studyMgr()->Close( studyPtr ); + } SALOMEDSClient_Study* aStudy = 0; setStudyDS( _PTR(Study)(aStudy) ); } @@ -386,7 +393,13 @@ bool SalomeApp_Study::openStudyData( const QString& theFileName ) */ void SalomeApp_Study::setStudyDS( const _PTR(Study)& s ) { + myStudyDS = s; + + if(myStudyDS) { + SalomeApp_Application* app = dynamic_cast(application()); + if(app) app->addStudyId(myStudyDS->StudyId()); //Add a new study Id + } } /*!