X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSalomeApp%2FSalomeApp_Study.cxx;h=8f3b4673a8b4f13db14a4a916187420851e49261;hb=331294345d3e1716fbf79ae25a2851011729be79;hp=ef989b5a4540d54ee55c16483fe715988a6a61e7;hpb=bb8609caf7881d966fbb88dec0a7822736da93f5;p=modules%2Fgui.git diff --git a/src/SalomeApp/SalomeApp_Study.cxx b/src/SalomeApp/SalomeApp_Study.cxx index ef989b5a4..8f3b4673a 100644 --- a/src/SalomeApp/SalomeApp_Study.cxx +++ b/src/SalomeApp/SalomeApp_Study.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 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 @@ -6,7 +6,7 @@ // 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 @@ -20,6 +20,10 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +#ifndef DISABLE_PYCONSOLE + #include "SalomeApp_PyInterp.h" // WARNING! This include must be the first! +#endif + #include "SalomeApp_Study.h" #include "SalomeApp_Module.h" @@ -41,6 +45,9 @@ #include #include #include +#include +#include +#include #include @@ -75,9 +82,8 @@ class SalomeApp_Study::Observer_i : public virtual POA_SALOMEDS::Observer, QObje public: - Observer_i(_PTR(Study) aStudyDS, SalomeApp_Study* aStudy):QObject(aStudy) + Observer_i( SalomeApp_Study* aStudy):QObject(aStudy) { - myStudyDS=aStudyDS; myStudy=aStudy; fillEntryMap(); } @@ -115,7 +121,7 @@ public: switch(event) { case 1: { //Add sobject - _PTR(SObject) aSObj = myStudyDS->FindObjectID(theID); + _PTR(SObject) aSObj = SalomeApp_Application::getStudy()->FindObjectID(theID); _PTR(SComponent) aSComp = aSObj->GetFatherComponent(); if (!aSComp || aSComp->IsNull()) { @@ -124,7 +130,7 @@ public: } // Mantis issue 0020136: Drag&Drop in OB - _PTR(UseCaseBuilder) aUseCaseBuilder = myStudyDS->GetUseCaseBuilder(); + _PTR(UseCaseBuilder) aUseCaseBuilder = SalomeApp_Application::getStudy()->GetUseCaseBuilder(); if (aUseCaseBuilder->IsUseCaseNode(aSComp)) { // BEGIN: work with tree nodes structure if (!aUseCaseBuilder->IsUseCaseNode(aSObj)) { // tree node is not yet set, it is a normal situation @@ -154,6 +160,12 @@ public: if (oldFather) { oldFather->removeChild(suit_obj, false); SalomeApp_Application* app = dynamic_cast( myStudy->application() ); +// MESSAGE("myStudy: " << myStudy->id() << " app " << app); +// MESSAGE("objectBrowser: "<< app->objectBrowser()); + if (!app->objectBrowser()) { + MESSAGE("Object Browser not found. Problem ??"); + return; + } SUIT_AbstractModel* model = dynamic_cast(app->objectBrowser()->model()); model->forgetObject( suit_obj ); @@ -183,6 +195,22 @@ public: //aFatherDO->insertChild(suit_obj, pos); aFatherDO->updateItem(); + /* Define visibility state */ + bool isComponent = dynamic_cast( 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 ); @@ -232,12 +260,13 @@ public: std::string::size_type debut = 0; std::string::size_type fin; SalomeApp_DataObject* anObj = dynamic_cast( myStudy->root() ); - while ( 1 ) { + while ( anObj ) { fin = obj_id.find_first_of( ':', debut ); if ( fin == std::string::npos ) { //last id anObj = dynamic_cast(anObj->childObject(atoi(obj_id.substr(debut).c_str())-1)); - entry2SuitObject[parent_id] = anObj; + if ( anObj ) + entry2SuitObject[parent_id] = anObj; break; } anID = root_id + obj_id.substr( 0, fin ); @@ -245,13 +274,15 @@ public: if ( it2 == entry2SuitObject.end() ) { //the ID is not known in entry2SuitObject anObj = dynamic_cast(anObj->childObject(atoi(obj_id.substr(debut, fin-debut).c_str())-1)); - entry2SuitObject[anID] = anObj; + if ( anObj ) + entry2SuitObject[anID] = anObj; } else anObj = it2->second; debut = fin+1; } - anObj->insertChildAtTag( suit_obj, tag ); + if ( anObj ) + anObj->insertChildAtTag( suit_obj, tag ); } } entry2SuitObject[theID] = suit_obj; @@ -264,14 +295,11 @@ public: if ( it != entry2SuitObject.end() ) { suit_obj = it->second; - // VSR: object is not removed, since SALOMEDS::SObject is not actually removed, - // only its attributes are cleared; - // thus, the object can be later reused suit_obj->updateItem(); - //SUIT_DataObject* father=suit_obj->parent(); - //if(father) - // father->removeChild(suit_obj); - //entry2SuitObject.erase(it); + SUIT_DataObject* father=suit_obj->parent(); + if(father) + father->removeChild(suit_obj); + entry2SuitObject.erase(it); } else { @@ -311,18 +339,20 @@ public: myStudy->setVisibilityState( theID.c_str(), Qtx::HiddenState ); //MESSAGE("Object with entry : "<< theID <<" CAN be displayed !!!"); } - else - MESSAGE("Object with entry : "<< theID <<" CAN'T be displayed !!!"); + //else + //MESSAGE("Object with entry : "<< theID <<" CAN'T be displayed !!!"); } } } break; } +#ifndef DISABLE_PYCONSOLE case 6: //NoteBook variables were modified { - myStudy->onNoteBookVarUpdate( QString( theID.c_str() ) ); - break; + myStudy->onNoteBookVarUpdate( QString( theID.c_str() ) ); + break; } +#endif default:MESSAGE("Unknown event: " << event);break; } //switch } //notifyObserverID_real @@ -335,7 +365,7 @@ private: while (o) { SalomeApp_DataObject* so = dynamic_cast( o ); if ( so ) { - std::string entry = so->entry().toLatin1().constData(); + std::string entry = so->entry().toUtf8().constData(); if ( entry.size() ) entry2SuitObject[entry] = so; } @@ -361,7 +391,6 @@ private: } private: - _PTR(Study) myStudyDS; SalomeApp_Study* myStudy; EntryMap entry2SuitObject; }; @@ -373,6 +402,7 @@ private: SalomeApp_Study::SalomeApp_Study( SUIT_Application* app ) : LightApp_Study( app ), myObserver( 0 ) { + myStudyDS = SalomeApp_Application::getStudy(); } /*! @@ -386,21 +416,12 @@ SalomeApp_Study::~SalomeApp_Study() } } +#ifndef DISABLE_PYCONSOLE void SalomeApp_Study::onNoteBookVarUpdate( QString theVarName) { emit notebookVarUpdated( theVarName ); } - -/*! - Gets study id. -*/ -int SalomeApp_Study::id() const -{ - int id = -1; - if ( studyDS() ) - id = studyDS()->StudyId(); - return id; -} +#endif /*! Get study name. @@ -411,7 +432,7 @@ QString SalomeApp_Study::studyName() const // 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()->URL().c_str()); if ( LightApp_Study::studyName() != newName ) { SalomeApp_Study* that = const_cast( this ); that->setStudyName( newName ); @@ -436,14 +457,7 @@ bool SalomeApp_Study::createDocument( const QString& theStr ) { MESSAGE( "createDocument" ); - // initialize myStudyDS, read HDF file - QString aName = newStudyName(); - _PTR(Study) study ( SalomeApp_Application::studyMgr()->NewStudy( aName.toUtf8().data() ) ); - if ( !study ) - return false; - - setStudyDS( study ); - setStudyName( aName ); + setStudyName( QString::fromUtf8(myStudyDS->URL().c_str()) ); // create myRoot SalomeApp_RootObject* aRoot=new SalomeApp_RootObject( this ); @@ -455,7 +469,7 @@ bool SalomeApp_Study::createDocument( const QString& theStr ) bool aRet = CAM_Study::createDocument( theStr ); #ifdef WITH_SALOMEDS_OBSERVER - myObserver = new Observer_i(myStudyDS,this); + myObserver = new Observer_i(this); //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif @@ -473,12 +487,30 @@ bool SalomeApp_Study::openDocument( const QString& theFileName ) { MESSAGE( "openDocument" ); - // initialize myStudyDS, read HDF file - _PTR(Study) study ( SalomeApp_Application::studyMgr()->Open( theFileName.toUtf8().data() ) ); - if ( !study ) + // read HDF file + bool res = false; + bool showError = !application()->property("open_study_from_command_line").isValid() || + !application()->property("open_study_from_command_line").toBool(); + try { + res = myStudyDS->Open( theFileName.toUtf8().data() ); + } + catch(const SALOME_Exception& ex) { + application()->putInfo(tr(ex.what())); + if ( showError ) + SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(), + tr("ERR_ERROR"), tr(ex.what())); return false; + } + catch(...) { + application()->putInfo(tr("OPEN_DOCUMENT_PROBLEM")); + if ( showError ) + SUIT_MessageBox::critical( SUIT_Session::session()->activeApplication()->desktop(), + tr("ERR_ERROR"), tr("OPEN_DOCUMENT_PROBLEM")); + return false; + } - setStudyDS( study ); + if ( !res) + return false; setRoot( new SalomeApp_RootObject( this ) ); // create myRoot @@ -496,15 +528,15 @@ bool SalomeApp_Study::openDocument( const QString& theFileName ) #ifdef WITH_SALOMEDS_OBSERVER dynamic_cast( root() )->setToSynchronize(false); - myObserver = new Observer_i(myStudyDS,this); + myObserver = new Observer_i(this); //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif - bool res = CAM_Study::openDocument( theFileName ); + res = CAM_Study::openDocument( theFileName ); emit opened( this ); - study->IsSaved(true); + myStudyDS->IsSaved(true); bool restore = application()->resourceMgr()->booleanValue( "Study", "store_visual_state", true ); if ( restore ) { @@ -518,20 +550,13 @@ bool SalomeApp_Study::openDocument( const QString& theFileName ) } /*! - Connects GUI study to SALOMEDS one already loaded into StudyManager + Connects GUI study to SALOMEDS one \param theStudyName - name of study */ bool SalomeApp_Study::loadDocument( const QString& theStudyName ) { MESSAGE( "loadDocument" ); - // obtain myStudyDS from StudyManager - _PTR(Study) study ( SalomeApp_Application::studyMgr()->GetStudyByName( theStudyName.toUtf8().data() ) ); - if ( !study ) - return false; - - setStudyDS( study ); - setRoot( new SalomeApp_RootObject( this ) ); // create myRoot //SRN: BugID IPAL9021, put there the same code as in a method openDocument @@ -551,7 +576,7 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName ) #ifdef WITH_SALOMEDS_OBSERVER dynamic_cast( root() )->setToSynchronize(false); - myObserver = new Observer_i(myStudyDS,this); + myObserver = new Observer_i(this); //attach an observer to the study with notification of modifications myStudyDS->attach(myObserver->_this(),true); #endif @@ -607,9 +632,7 @@ bool SalomeApp_Study::saveDocumentAs( const QString& theFileName ) bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? - SalomeApp_Application::studyMgr()->SaveAsASCII( theFileName.toUtf8().data(), studyDS(), isMultiFile ) : - SalomeApp_Application::studyMgr()->SaveAs ( theFileName.toUtf8().data(), studyDS(), isMultiFile )) + bool res = studyDS()->SaveAs( theFileName.toUtf8().data(), isMultiFile, isAscii ) && CAM_Study::saveDocumentAs( theFileName ); res = res && saveStudyData(theFileName); @@ -652,9 +675,7 @@ bool SalomeApp_Study::saveDocument() bool isMultiFile = resMgr->booleanValue( "Study", "multi_file", false ); bool isAscii = resMgr->booleanValue( "Study", "ascii_file", false ); - bool res = (isAscii ? - SalomeApp_Application::studyMgr()->SaveASCII( studyDS(), isMultiFile ) : - SalomeApp_Application::studyMgr()->Save ( studyDS(), isMultiFile )) && CAM_Study::saveDocument(); + bool res = studyDS()->Save( isMultiFile, isAscii ) && CAM_Study::saveDocument(); res = res && saveStudyData(studyName()); if ( res ) @@ -671,14 +692,18 @@ void SalomeApp_Study::closeDocument(bool permanently) LightApp_Study::closeDocument(permanently); // close SALOMEDS document - _PTR(Study) studyPtr = studyDS(); - if ( studyPtr ) - { - if(permanently) { - SalomeApp_Application::studyMgr()->Close( studyPtr ); - } - SALOMEDSClient_Study* aStudy = 0; - setStudyDS( _PTR(Study)(aStudy) ); + if ( myObserver ) + myStudyDS->detach( myObserver->_this() ); + if ( permanently ) { + SUIT_Desktop* desk = SUIT_Session::session()->activeApplication()->desktop(); + bool isBlocked = desk->signalsBlocked(); + desk->blockSignals( true ); + myStudyDS->Clear(); + desk->blockSignals( isBlocked ); +#ifndef DISABLE_PYCONSOLE + SalomeApp_Application* app = dynamic_cast( application() ); + app->getPyInterp()->destroy(); +#endif } } @@ -705,13 +730,12 @@ bool SalomeApp_Study::dump( const QString& theFileName, int savePoint; _PTR(AttributeParameter) ap; _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - _PTR(Study) aStudy = studyDS(); - if( ip->isDumpPython( aStudy ) ) - ip->setDumpPython( aStudy ); //Unset DumpPython flag. + if( ip->isDumpPython() ) + ip->setDumpPython(); //Unset DumpPython flag. if ( toSaveGUI ) { //SRN: Store a visual state of the study at the save point for DumpStudy method - ip->setDumpPython( aStudy ); + ip->setDumpPython(); //SRN: create a temporary save point savePoint = SalomeApp_VisualState( dynamic_cast( application() ) ).storeState(); @@ -741,10 +765,10 @@ bool SalomeApp_Study::dump( const QString& theFileName, // Now dump SALOMEDS part that also involves SalomeApp_Engine in case if // 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); + bool res = myStudyDS->DumpStudy( aFileInfo.absolutePath().toUtf8().data(), + aFileInfo.baseName().toUtf8().data(), + toPublish, + isMultiFile); if ( toSaveGUI ) removeSavePoint( savePoint ); //SRN: remove the created temporary save point. @@ -773,8 +797,7 @@ bool SalomeApp_Study::isModified() const */ void SalomeApp_Study::Modified() { - if(_PTR(Study) aStudy = studyDS()) - aStudy->Modified(); + myStudyDS->Modified(); LightApp_Study::Modified(); } @@ -860,14 +883,6 @@ bool SalomeApp_Study::openStudyData( const QString& theFileName ) return true; } -/*! - Set studyDS. -*/ -void SalomeApp_Study::setStudyDS( const _PTR(Study)& s ) -{ - myStudyDS = s; -} - /*! Virtual method re-implemented from LightApp_Study in order to create the module object connected to SALOMEDS - SalomeApp_ModuleObject. @@ -901,11 +916,7 @@ CAM_ModuleObject* SalomeApp_Study::createModuleObject( LightApp_DataModel* theDa } if ( !res ){ - _PTR(Study) aStudy = studyDS(); - if ( !aStudy ) - return res; - - _PTR(SComponent) aComp = aStudy->FindComponent( + _PTR(SComponent) aComp = myStudyDS->FindComponent( theDataModel->module()->name().toStdString() ); if ( !aComp ) return res; @@ -937,16 +948,13 @@ void SalomeApp_Study::addComponent(const CAM_DataModel* dm) // 1. aModule == 0 means that this is a light module (no CORBA enigine) if (!aModule) { // Check SComponent existance - _PTR(Study) aStudy = studyDS(); - if (!aStudy) - return; std::string aCompDataType = dm->module()->name().toStdString(); - _PTR(SComponent) aComp = aStudy->FindComponent(aCompDataType); + _PTR(SComponent) aComp = myStudyDS->FindComponent(aCompDataType); if (!aComp) { // Create SComponent - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + _PTR(StudyBuilder) aBuilder = myStudyDS->NewBuilder(); aComp = aBuilder->NewComponent(aCompDataType); aBuilder->SetName(aComp, dm->module()->moduleName().toStdString()); QString anIconName = dm->module()->iconName(); @@ -965,7 +973,7 @@ void SalomeApp_Study::addComponent(const CAM_DataModel* dm) SalomeApp_DataModel::synchronize( aComp, this ); } else { - _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder(); + _PTR(StudyBuilder) aBuilder = myStudyDS->NewBuilder(); aBuilder->SetName(aComp, dm->module()->moduleName().toStdString()); QString anIconName = dm->module()->iconName(); if (!anIconName.isEmpty()) { @@ -988,7 +996,6 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm // SalomeApp_DataModel* aDM = (SalomeApp_DataModel*)(dm); SalomeApp_Module* aModule = dynamic_cast( dm->module() ); - _PTR(Study) aStudy = studyDS(); // shared_ptr cannot be used here _PTR(SComponent) aSComp; QString anEngine; // 1. aModule == 0 means that this is a light module (no CORBA enigine) @@ -996,7 +1003,7 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm // Issue 21377 - using separate engine for each type of light module std::string aCompDataType = dm->module()->name().toStdString(); anEngine = SalomeApp_Engine_i::EngineIORForComponent( aCompDataType.c_str(), true ).c_str(); - aSComp = aStudy->FindComponent( aCompDataType ); + aSComp = myStudyDS->FindComponent( aCompDataType ); } else { SalomeApp_DataModel* aDM = dynamic_cast( dm ); @@ -1007,11 +1014,11 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm anEngine = aDM->getModule()->engineIOR(); if ( anEngine.isEmpty() ) return false; - aSComp = aStudy->FindComponentID( std::string( anId.toLatin1() ) ); + aSComp = myStudyDS->FindComponentID( std::string( anId.toLatin1() ) ); } } if ( aSComp ) { - _PTR(StudyBuilder) aBuilder( aStudy->NewBuilder() ); + _PTR(StudyBuilder) aBuilder( myStudyDS->NewBuilder() ); if ( aBuilder ) { try { aBuilder->LoadWith( aSComp, std::string( anEngine.toLatin1() ) ); @@ -1035,6 +1042,8 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm // for this module by LightApp_Engine_i::Load() bool isMultiFile = false; // TODO: decide, how to access this parameter RemoveTemporaryFiles( dm->module()->name().toStdString().c_str(), isMultiFile ); + std::vector listOfFiles ; + SetListOfFiles( dm->module()->name().toStdString().c_str(), listOfFiles ); // Something has been read -> create data model tree LightApp_DataModel* aDM = dynamic_cast( dm ); @@ -1045,28 +1054,6 @@ bool SalomeApp_Study::openDataModel( const QString& studyName, CAM_DataModel* dm return false; } -/*! - Create new study name. -*/ -QString SalomeApp_Study::newStudyName() const -{ - std::vector studies = SalomeApp_Application::studyMgr()->GetOpenStudies(); - QString prefix( "Study%1" ), newName, curName; - int i = 1, j, n = studies.size(); - while ( newName.isEmpty() ){ - curName = prefix.arg( i ); - for ( j = 0 ; j < n; j++ ){ - if ( !strcmp( studies[j].c_str(), curName.toLatin1() ) ) - break; - } - if ( j == n ) - newName = curName; - else - i++; - } - return newName; -} - /*! Note that this method does not create or activate SalomeApp_Engine_i instance, therefore it can be called safely for any kind of module, but for full @@ -1079,7 +1066,7 @@ std::vector SalomeApp_Study::GetListOfFiles( const char* theModuleN // Issue 21377 - using separate engine for each type of light module SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance( theModuleName, false ); if (aDefaultEngine) - return aDefaultEngine->GetListOfFiles(id()); + return aDefaultEngine->GetListOfFiles(); std::vector aListOfFiles; return aListOfFiles; @@ -1099,7 +1086,7 @@ void SalomeApp_Study::SetListOfFiles ( const char* theModuleName, // Issue 21377 - using separate engine for each type of light module SalomeApp_Engine_i* aDefaultEngine = SalomeApp_Engine_i::GetInstance( theModuleName, false ); if (aDefaultEngine) - aDefaultEngine->SetListOfFiles(theListOfFiles, id()); + aDefaultEngine->SetListOfFiles(theListOfFiles); } /*! @@ -1120,20 +1107,21 @@ void SalomeApp_Study::RemoveTemporaryFiles ( const char* theModuleName, const bo if (isMultiFile) return; - std::vector aListOfFiles = GetListOfFiles( theModuleName ); + SALOMEDS_Tool::ListOfFiles aListOfFiles = GetListOfFiles( theModuleName ); if (aListOfFiles.size() > 0) { std::string aTmpDir = aListOfFiles[0]; const int n = aListOfFiles.size() - 1; - SALOMEDS::ListOfFileNames_var aSeq = new SALOMEDS::ListOfFileNames; - aSeq->length(n); + std::vector aSeq; + aSeq.reserve(n); for (int i = 0; i < n; i++) - aSeq[i] = CORBA::string_dup(aListOfFiles[i + 1].c_str()); + aSeq.push_back(CORBA::string_dup(aListOfFiles[i + 1].c_str())); - SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.c_str(), aSeq.in(), true); + SALOMEDS_Tool::RemoveTemporaryFiles(aTmpDir.c_str(), aSeq, true); } } +#ifndef DISABLE_PYCONSOLE /*! Mark the study as saved in the file \param theFileName - the name of file @@ -1141,13 +1129,20 @@ void SalomeApp_Study::RemoveTemporaryFiles ( const char* theModuleName, const bo void SalomeApp_Study::updateFromNotebook( const QString& theFileName, bool isSaved ) { setStudyName(theFileName); - studyDS()->Name(theFileName.toStdString()); + studyDS()->URL(theFileName.toStdString()); setIsSaved( isSaved ); } +#endif LightApp_DataObject* SalomeApp_Study::findObjectByEntry( const QString& theEntry ) { - LightApp_DataObject* o = dynamic_cast( myObserver ? myObserver->findObject( theEntry.toLatin1().constData() ) : 0 ); + LightApp_DataObject* o = 0; + if ( myObserver ) { + o = dynamic_cast( myObserver->findObject( theEntry.toUtf8().constData() ) ); + } + if ( !o ) { + o = LightApp_Study::findObjectByEntry( theEntry ); + } return o; }