_builder = new SALOMEDSImpl_StudyBuilder(this);
_cb = new SALOMEDSImpl_Callback(_useCaseBuilder);
_notifier=0;
+ _genObjRegister=0;
//Put on the root label a StudyHandle attribute to store the address of this object
//It will be used to retrieve the study object by DF_Label that belongs to the study
SALOMEDSImpl_StudyHandle::Set(_doc->Main().Root(), this);
*/
//============================================================================
std::vector<SALOMEDSImpl_SObject> SALOMEDSImpl_Study::FindObjectByName(const std::string& anObjectName,
- const std::string& aComponentName)
+ const std::string& aComponentName)
{
_errorCode = "";
*/
//============================================================================
SALOMEDSImpl_SObject SALOMEDSImpl_Study::_FindObject(const SALOMEDSImpl_SObject& SO,
- const std::string& theObjectName,
- bool& _find)
+ const std::string& theObjectName,
+ bool& _find)
{
SALOMEDSImpl_SObject RefSO;
if(!SO) return RefSO;
void SALOMEDSImpl_Study::Close()
{
_errorCode = "";
+ _notifier = 0;
_doc->GetApplication()->Close(_doc);
_doc = NULL;
_mapOfSO.clear();
#endif
if(!isOpened) {
- _errorCode = std::string("Can't create a file ")+aFileName;
- SALOMEDSImpl_Tool::RemoveTemporaryFiles(thePath, aSeqOfFileNames, false);
- return false;
+ _errorCode = std::string("Can't create a file ")+aFileName;
+ SALOMEDSImpl_Tool::RemoveTemporaryFiles(thePath, aSeqOfFileNames, false);
+ return false;
}
// replace '\t' symbols
*/
//============================================================================
void SALOMEDSImpl_Study::SetStringVariable(const std::string& theVarName,
- const std::string& theValue,
- const SALOMEDSImpl_GenericVariable::VariableTypes theType)
+ const std::string& theValue,
+ const SALOMEDSImpl_GenericVariable::VariableTypes theType)
{
bool modified = false;
SALOMEDSImpl_GenericVariable* aGVar = GetVariable(theVarName);
*/
//============================================================================
void SALOMEDSImpl_Study::SetStringVariableAsDouble(const std::string& theVarName,
- const double theValue,
- const SALOMEDSImpl_GenericVariable::VariableTypes theType)
+ const double theValue,
+ const SALOMEDSImpl_GenericVariable::VariableTypes theType)
{
SALOMEDSImpl_GenericVariable* aGVar = GetVariable(theVarName);
if(SALOMEDSImpl_ScalarVariable* aSVar = dynamic_cast<SALOMEDSImpl_ScalarVariable*>(aGVar))
{
_notifier=notifier;
}
+
+static SALOMEDSImpl_AbstractCallback* & getGenObjRegister( DF_Document* doc )
+{
+ static std::vector< SALOMEDSImpl_AbstractCallback* > _genObjRegVec;
+ if ( doc->GetDocumentID() >= (int)_genObjRegVec.size() )
+ _genObjRegVec.resize( doc->GetDocumentID() + 1, 0 );
+ return _genObjRegVec[ doc->GetDocumentID() ];
+}
+
+//================================================================================
+/*!
+ * \brief Stores theRegister
+ */
+//================================================================================
+
+void SALOMEDSImpl_Study::setGenObjRegister(SALOMEDSImpl_AbstractCallback* theRegister)
+{
+ getGenObjRegister( _doc ) = theRegister;
+}
+
+//================================================================================
+/*!
+ * \brief Indirectly invokes GenericObj_i::Register()
+ */
+//================================================================================
+
+void SALOMEDSImpl_Study::RegisterGenObj (const std::string& theIOR, DF_Label label)
+{
+ if ( SALOMEDSImpl_AbstractCallback* goRegister = getGenObjRegister( label.GetDocument() ))
+ goRegister->RegisterGenObj( theIOR );
+}
+
+//================================================================================
+/*!
+ * \brief Indirectly invokes GenericObj_i::UnRegister()
+ */
+//================================================================================
+
+void SALOMEDSImpl_Study::UnRegisterGenObj(const std::string& theIOR, DF_Label label)
+{
+ if ( SALOMEDSImpl_AbstractCallback* goRegister = getGenObjRegister( label.GetDocument() ))
+ goRegister->UnRegisterGenObj( theIOR );
+}
SALOMEDSImpl_Callback* _cb;
SALOMEDSImpl_StudyBuilder* _builder;
SALOMEDSImpl_UseCaseBuilder* _useCaseBuilder;
- SALOMEDSImpl_AbstractCallback* _notifier;
+ SALOMEDSImpl_AbstractCallback* _notifier;
+ SALOMEDSImpl_AbstractCallback* _genObjRegister;
std::map<std::string, SALOMEDSImpl_SObject> _mapOfSO;
std::map<std::string, SALOMEDSImpl_SComponent> _mapOfSCO;
virtual bool modifySO_Notification(const SALOMEDSImpl_SObject& theSObject, int reason);
virtual void setNotifier(SALOMEDSImpl_AbstractCallback* notifier);
+ static void RegisterGenObj (const std::string& theIOR, DF_Label label);
+ static void UnRegisterGenObj(const std::string& theIOR, DF_Label label);
+ void setGenObjRegister(SALOMEDSImpl_AbstractCallback* theRegister);
friend class SALOMEDSImpl_StudyManager;
friend class SALOMEDSImpl_GenericAttribute;