X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FVISU_I%2FVISUConfig.cc;h=2194f55f19d597ef9ff8615854c6cd594f0ab177;hb=beb81786a547c52957609d458e6649a58139f361;hp=e2229e199f405e8d644881d3278618b75b87c0da;hpb=841f0997ef150283cedda4a8e3fd5d8e0f783ac0;p=modules%2Fvisu.git diff --git a/src/VISU_I/VISUConfig.cc b/src/VISU_I/VISUConfig.cc index e2229e19..2194f55f 100644 --- a/src/VISU_I/VISUConfig.cc +++ b/src/VISU_I/VISUConfig.cc @@ -1,23 +1,23 @@ // VISU OBJECT : interactive object for VISU entities implementation // // Copyright (C) 2003 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. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // File : VISUConfig.cc @@ -26,6 +26,14 @@ #include "VISUConfig.hh" +#include "SUIT_ResourceMgr.h" +#include "SUIT_Session.h" + +#include +#include + +#include + using namespace std; #ifdef _DEBUG_ @@ -35,7 +43,21 @@ static int MYDEBUG = 0; #endif namespace VISU{ + + SUIT_Session* + GetSession() + { + return SUIT_Session::session(); + } + + SUIT_ResourceMgr* + GetResourceMgr() + { + return GetSession()->resourceMgr(); + } + //=========================================================================== + QMutex* Base_i::myMutex = NULL; //apo - &VISUMutex; CORBA::ORB_var Base_i::myOrb; PortableServer::POA_var Base_i::myPoa; @@ -58,32 +80,18 @@ namespace VISU{ //=========================================================================== static int mySCnt = 0; - static int myQCnt = 0; - static int myIsBatchMode = 0; + static QMutex aMutex(TRUE); - Mutex::Mutex(QMutex* theMutex, QApplication* theQApp, int theDelay) : - myQApp(theQApp), isQAppLocked(theQApp->locked()), myDelay(theDelay), - myMutex(theMutex), isSessionLocked(theMutex->locked()) - { - if(MYDEBUG) MESSAGE("Mutex::Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt)); - if(!myIsBatchMode && isQAppLocked) myIsBatchMode++; - if(!isSessionLocked && !mySCnt) { myMutex->lock();}; mySCnt++; - if(!isQAppLocked && !myQCnt) { - myQApp->lock(); - myQApp->syncX(); - }; - myQCnt++; + Mutex::Mutex(QMutex* theMutex): myMutex(&aMutex){ + if(MYDEBUG) MESSAGE("Mutex::Mutex : "<lock(); } + Mutex::~Mutex(){ - myQCnt--; - if(!isQAppLocked && !myQCnt) { - myQApp->flushX(); - //if(myDelay > 0) - myQApp->processEvents(myDelay+3); - myQApp->unlock(); - } - mySCnt--; if(!isSessionLocked && !mySCnt) { myMutex->unlock();} - if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<<(!isQAppLocked && !myQCnt)<<" "<<(!isSessionLocked && !mySCnt)); + if(!(--mySCnt)) + myMutex->unlock(); + if(MYDEBUG) MESSAGE("Mutex::~Mutex : "<> dupliacte registring !!!"); @@ -151,7 +158,6 @@ namespace VISU{ } Storable* Storable::Create(SALOMEDS::SObject_ptr theSObject, const string& thePrefix, const string& theLocalPersistentID) - throw (std::runtime_error&) { try{ QString strIn( theLocalPersistentID.c_str() ); @@ -166,15 +172,14 @@ namespace VISU{ return (i->second)(theSObject,thePrefix,aMap); } }catch(std::logic_error& exc){ - INFOS("Follow exception was accured :\n"<reference_to_servant(theObject); return aServant; } catch (...) { - INFOS("GetServant - Unknown exception was accured!!!"); + INFOS("GetServant - Unknown exception was occured!!!"); return NULL; } } @@ -216,7 +221,25 @@ namespace VISU{ anObj = anORB->string_to_object(aValue); } }catch(...){ - INFOS("SObjectToObject - Unknown exception was accured!!!"); + INFOS("SObjectToObject - Unknown exception was occured!!!"); + } + return anObj; + } + + //=========================================================================== + CORBA::Object_var ClientSObjectToObject(_PTR(SObject) theSObject){ + _PTR(GenericAttribute) anAttr; + CORBA::Object_var anObj; + try{ + if(theSObject->FindAttribute(anAttr, "AttributeIOR")){ + _PTR(AttributeIOR) anIOR = anAttr; + CORBA::String_var aValue = anIOR->Value().c_str(); + CORBA::ORB_ptr anORB = Base_i::GetORB(); + if(strcmp(aValue,"") != 0) + anObj = anORB->string_to_object(aValue); + } + }catch(...){ + INFOS("ClientSObjectToObject - Unknown exception was occured!!!"); } return anObj; } @@ -278,7 +301,7 @@ namespace VISU{ anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment"); SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr); aCmnt->SetValue(theComment); - INFOS("CreateAttributes - Comment = "<FindObjectID(theRefFatherEntry); @@ -291,14 +314,94 @@ namespace VISU{ INFOS("CreateAttributes - StudyId = "<StudyId()<<"; anEntry = "<NewBuilder(); + _PTR(SObject) aFather = theStudyDocument->FindObjectID(theFatherEntry); + _PTR(SObject) newObj; + if (theCreateNew) + newObj = aStudyBuilder->NewObject(aFather); + else + newObj = aFather; + + _PTR(GenericAttribute) anAttr; + if (strcmp(theIOR, "") != 0) { + anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeIOR"); + _PTR(AttributeIOR) anIOR (anAttr); + anIOR->SetValue(theIOR); + } + if (strcmp(theName, "") != 0) { + anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeName"); + _PTR(AttributeName) aName (anAttr); + aName->SetValue(theName); + } + if (strcmp(thePersistentRef, "") != 0) { + anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributePersistentRef"); + _PTR(AttributePersistentRef) aPRef (anAttr); + aPRef->SetValue(thePersistentRef); + } + if (strcmp(theComment, "") != 0) { + anAttr = aStudyBuilder->FindOrCreateAttribute(newObj, "AttributeComment"); + _PTR(AttributeComment) aCmnt (anAttr); + aCmnt->SetValue(theComment); + if (MYDEBUG) INFOS("CreateAttributes - Comment = " << theComment); + } + if (strcmp(theRefFatherEntry, "") != 0) { + _PTR(SObject) aRefFather = theStudyDocument->FindObjectID(theRefFatherEntry); + _PTR(SObject) anObj = aStudyBuilder->NewObject(aRefFather); + aStudyBuilder->Addreference(anObj, newObj); + } + string aRet = newObj->GetID(); + if (MYDEBUG) + INFOS("CreateAttributes - StudyId = " << theStudyDocument->StudyId() + << "; anEntry = " << aRet << "; IOR = '" << theIOR << "'"); + return aRet; + } + + QString GenerateName(const string& theFmt, int theId){ + static QString aName; + if(theId > 0) + aName.sprintf("%s:%d",theFmt.c_str(),theId); + else + aName.sprintf("%s",theFmt.c_str()); + return aName; + } -QString VISU::GenerateName(const string& theFmt, int theId){ - static QString aName; - if(theId > 0) - aName.sprintf("%s:%d",theFmt.c_str(),theId); - else - aName.sprintf("%s",theFmt.c_str()); - return aName; + SALOMEDS::StudyManager_var GetStudyManager() + { + static SALOMEDS::StudyManager_var aStudyManager; + if(CORBA::is_nil(aStudyManager)){ + SALOME_NamingService *aNamingService = SalomeApp_Application::namingService(); + CORBA::Object_var anObject = aNamingService->Resolve("/myStudyManager"); + aStudyManager = SALOMEDS::StudyManager::_narrow(anObject); + } + return aStudyManager; + } + + + SALOMEDS::Study_var GetDSStudy(_PTR(Study) theStudy) + { + std::string aStudyName = theStudy->Name(); + return GetStudyManager()->GetStudyByName(aStudyName.c_str()); + } + + SALOMEDS::SObject_var GetSObject( _PTR(SObject) obj ) + { + _PTR(Study) aStudy = obj->GetStudy(); + SALOMEDS::Study_var aSalomeDSStudy = GetDSStudy( aStudy ); + std::string id = obj->GetID(); + return aSalomeDSStudy->FindObjectID( id.c_str() ); + } + + _PTR(SObject) GetClientSObject( SALOMEDS::SObject_var obj, + _PTR(Study) study ) + { + return study->FindObjectID( obj->GetID() ); + + } }