-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <SUIT_ResourceMgr.h>
#include <SUIT_TreeModel.h>
#include <SUIT_DataBrowser.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_Session.h>
+#include <SUIT_Desktop.h>
#include <LightApp_Displayer.h>
public:
- Observer_i(_PTR(Study) aStudyDS, SalomeApp_Study* aStudy)
+ Observer_i(_PTR(Study) aStudyDS, SalomeApp_Study* aStudy):QObject(aStudy)
{
myStudyDS=aStudyDS;
myStudy=aStudy;
SUIT_DataObject* oldFather = suit_obj->parent();
if (oldFather) {
oldFather->removeChild(suit_obj, false);
- SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( myStudy->application() );
- SUIT_AbstractModel* model = dynamic_cast<SUIT_AbstractModel*>(app->objectBrowser()->model());
- model->forgetObject( suit_obj );
-
+ SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( myStudy->application() );
+ SUIT_AbstractModel* model = dynamic_cast<SUIT_AbstractModel*>(app->objectBrowser()->model());
+ model->forgetObject( suit_obj );
+
if (SalomeApp_DataObject* oldFatherSA = dynamic_cast<SalomeApp_DataObject*>(oldFather)) {
oldFatherSA->updateItem();
}
entry2SuitObject[theID] = suit_obj;
}
- suit_obj->updateItem();
+ suit_obj->updateItem();
// define position in the data tree (in aFatherDO) to insert the aSObj
int pos = -1;
//int childDataObjCount = aFatherDO->childCount();
//aFatherDO->insertChild(suit_obj, pos);
aFatherDO->updateItem();
+ /* Define visibility state */
+ bool isComponent = dynamic_cast<SalomeApp_ModuleObject*>( suit_obj ) != 0;
+ if ( suit_obj && !isComponent && myStudy->visibilityState( theID.c_str() ) == Qtx::UnpresentableState ) {
+ QString moduleTitle = ((CAM_Application*)myStudy->application())->moduleTitle(suit_obj->componentDataType());
+ if (!moduleTitle.isEmpty()) {
+ LightApp_Displayer* aDisplayer = LightApp_Displayer::FindDisplayer(moduleTitle,false);
+ if (aDisplayer) {
+ if(aDisplayer->canBeDisplayed(theID.c_str())) {
+ myStudy->setVisibilityState( theID.c_str(), Qtx::HiddenState ); //hide the just added object
+ //MESSAGE("Object with entry : "<< theID <<" CAN be displayed !!!");
+ }
+ else
+ MESSAGE("Object with entry : "<< theID <<" CAN'T be displayed !!!");
+ }
+ }
+ }
} // END: work with tree nodes structure
else { // BEGIN: work with study structure
EntryMapIter it = entry2SuitObject.find( theID );
}
break;
}
+#ifndef DISABLE_PYCONSOLE
+ case 6: //NoteBook variables were modified
+ {
+ myStudy->onNoteBookVarUpdate( QString( theID.c_str() ) );
+ break;
+ }
+#endif
default:MESSAGE("Unknown event: " << event);break;
} //switch
} //notifyObserverID_real
*/
SalomeApp_Study::~SalomeApp_Study()
{
+ if ( myObserver ) {
+ PortableServer::ObjectId_var oid = myObserver->_default_POA()->servant_to_id( myObserver );
+ myObserver->_default_POA()->deactivate_object( oid.in() );
+ }
+}
+
+#ifndef DISABLE_PYCONSOLE
+void SalomeApp_Study::onNoteBookVarUpdate( QString theVarName)
+{
+ emit notebookVarUpdated( theVarName );
}
+#endif
/*!
Gets study id.
// it can be changed outside of GUI
// TEMPORARILY SOLUTION: better to be implemented with help of SALOMEDS observers
if ( studyDS() ) {
- QString newName = studyDS()->Name().c_str();
+ QString newName = QString::fromUtf8(studyDS()->Name().c_str());
if ( LightApp_Study::studyName() != newName ) {
SalomeApp_Study* that = const_cast<SalomeApp_Study*>( this );
that->setStudyName( newName );
// initialize myStudyDS, read HDF file
QString aName = newStudyName();
- _PTR(Study) study ( SalomeApp_Application::studyMgr()->NewStudy( aName.toUtf8().data() ) );
+
+ _PTR(Study) study;
+ try {
+ study = _PTR(Study)( SalomeApp_Application::studyMgr()->NewStudy( aName.toUtf8().data() ) );
+ }
+ catch(const SALOME_Exception& ex) {
+ SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(),
+ tr("ERR_ERROR"), tr(ex.what()));
+ return false;
+ }
+ catch(...) {
+ SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(),
+ tr("ERR_ERROR"), tr("CREATE_DOCUMENT_PROBLEM"));
+ return false;
+ }
+
if ( !study )
return false;
MESSAGE( "openDocument" );
// initialize myStudyDS, read HDF file
- _PTR(Study) study ( SalomeApp_Application::studyMgr()->Open( theFileName.toUtf8().data() ) );
+ _PTR(Study) study;
+ try {
+ study = _PTR(Study) ( SalomeApp_Application::studyMgr()->Open( theFileName.toUtf8().data() ) );
+ }
+ catch(const SALOME_Exception& ex) {
+ SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(),
+ tr("ERR_ERROR"), tr(ex.what()));
+ return false;
+ }
+ catch(...) {
+ SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(),
+ tr("ERR_ERROR"), tr("OPEN_DOCUMENT_PROBLEM"));
+ return false;
+ }
+
if ( !study )
return false;
#endif
bool res = CAM_Study::openDocument( theStudyName );
+
+ //rnv: to fix the "0051779: TC7.2.0: Save operation works incorrectly for study loaded from data server"
+ // mark study as "not saved" after call openDocument( ... ) method.
+ setIsSaved(false);
emit opened( this );
bool restore = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true );
// Cast to LightApp class in order to give a chance
// to light modules to save their data
if ( LightApp_DataModel* aModel =
- dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
+ dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
listOfFiles.clear();
aModel->saveAs( theFileName, this, listOfFiles );
if ( !listOfFiles.isEmpty() )
// Cast to LightApp class in order to give a chance
// to light modules to save their data
if ( LightApp_DataModel* aModel =
- dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
+ dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
listOfFiles.clear();
aModel->save(listOfFiles);
if ( !listOfFiles.isEmpty() )
_PTR(Study) studyPtr = studyDS();
if ( studyPtr )
{
- if(permanently) {
+ if ( myObserver )
+ myStudyDS->detach( myObserver->_this() );
+ if ( permanently ) {
SalomeApp_Application::studyMgr()->Close( studyPtr );
}
SALOMEDSClient_Study* aStudy = 0;
\return - true if the operation succeeds, and false otherwise.
*/
bool SalomeApp_Study::dump( const QString& theFileName,
- bool toPublish,
- bool isMultiFile,
- bool toSaveGUI )
+ bool toPublish,
+ bool isMultiFile,
+ bool toSaveGUI )
{
int savePoint;
_PTR(AttributeParameter) ap;
QStringList listOfFiles;
while ( it.hasNext() ) {
if ( LightApp_DataModel* aModel =
- dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
+ dynamic_cast<LightApp_DataModel*>( it.next() ) ) {
listOfFiles.clear();
if ( aModel->dumpPython( theFileName, this, isMultiFile, listOfFiles ) &&
- !listOfFiles.isEmpty() )
- // This call simply passes the data model's dump output to SalomeApp_Engine servant.
- // This code is shared with persistence mechanism.
- // NOTE: this should be revised if behavior of saveModuleData() changes!
+ !listOfFiles.isEmpty() )
+ // This call simply passes the data model's dump output to SalomeApp_Engine servant.
+ // This code is shared with persistence mechanism.
+ // NOTE: this should be revised if behavior of saveModuleData() changes!
saveModuleData(aModel->module()->name(), listOfFiles);
}
}
// any light module is present in the current configuration
QFileInfo aFileInfo( theFileName );
bool res = aStudy->DumpStudy( aFileInfo.absolutePath().toUtf8().data(),
- aFileInfo.baseName().toUtf8().data(),
- toPublish,
- isMultiFile);
+ aFileInfo.baseName().toUtf8().data(),
+ toPublish,
+ isMultiFile);
if ( toSaveGUI )
removeSavePoint( savePoint ); //SRN: remove the created temporary save point.
\sa LightApp_Study class, LightApp_DataModel class
*/
CAM_ModuleObject* SalomeApp_Study::createModuleObject( LightApp_DataModel* theDataModel,
- SUIT_DataObject* theParent ) const
+ SUIT_DataObject* theParent ) const
{
SalomeApp_Study* that = const_cast<SalomeApp_Study*>( this );
// Set default engine IOR
// Issue 21377 - using separate engine for each type of light module
std::string anEngineIOR = SalomeApp_Engine_i::EngineIORForComponent( aCompDataType.c_str(),
- true );
+ true );
aBuilder->DefineComponentInstance(aComp, anEngineIOR);
//SalomeApp_DataModel::BuildTree( aComp, root(), this, /*skipExisitng=*/true );
SalomeApp_DataModel::synchronize( aComp, this );
}
}
+#ifndef DISABLE_PYCONSOLE
/*!
Mark the study as saved in the file
\param theFileName - the name of file
*/
-void SalomeApp_Study::markAsSavedIn(QString theFileName)
+void SalomeApp_Study::updateFromNotebook( const QString& theFileName, bool isSaved )
{
setStudyName(theFileName);
- setIsSaved(true);
+ studyDS()->Name(theFileName.toStdString());
+ setIsSaved( isSaved );
}
+#endif
LightApp_DataObject* SalomeApp_Study::findObjectByEntry( const QString& theEntry )
{
- LightApp_DataObject* o = dynamic_cast<LightApp_DataObject*>( myObserver ? myObserver->findObject( theEntry.toLatin1().constData() ) : 0 );
+ LightApp_DataObject* o = 0;
+ if ( myObserver ) {
+ o = dynamic_cast<LightApp_DataObject*>( myObserver->findObject( theEntry.toLatin1().constData() ) );
+ }
+ if ( !o ) {
+ o = LightApp_Study::findObjectByEntry( theEntry );
+ }
return o;
}