#include <SALOME_ModuleCatalog_impl.hxx>
#include <SALOME_LifeCycleCORBA.hxx>
-#include <qmap.h>
#include <qaction.h>
#include <qcombobox.h>
#include <qlistbox.h>
#include <SALOMEDSClient_ClientFactory.hxx>
+#include <vector>
+
/*!Create new instance of SalomeApp_Application.*/
extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication()
{
SalomeApp_Application::SalomeApp_Application()
: LightApp_Application()
{
+ cout << "The constructor : " << this << endl;
+ _studyIDs.clear();
}
/*!Destructor.
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<int> ids;
+ QMap<int, int>::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(); i<sz; i++) {
+ _PTR(Study) aStudy = studyMgr()->GetStudyByID(ids[i]);
+ if (aStudy) studyMgr()->Close(aStudy);
+ }
+}
#include "SalomeApp.h"
#include <LightApp_Application.h>
+#include <qmap.h>
+
#include <CORBA.h>
#include <SALOMEconfig.h>
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();
void onCatalogGen();
void onRegDisplay();
void onOpenWith();
+
+private:
+
+ QMap<int,int> _studyIDs;
+
};
#ifdef WIN32
_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<SalomeApp_Application*>(application());
+ if(app) app->removeStudyId(studyPtr->StudyId());
+ //SRN: End
+ SalomeApp_Application::studyMgr()->Close( studyPtr );
+ }
SALOMEDSClient_Study* aStudy = 0;
setStudyDS( _PTR(Study)(aStudy) );
}
*/
void SalomeApp_Study::setStudyDS( const _PTR(Study)& s )
{
+
myStudyDS = s;
+
+ if(myStudyDS) {
+ SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(application());
+ if(app) app->addStudyId(myStudyDS->StudyId()); //Add a new study Id
+ }
}
/*!