X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModel%2FModel_Session.cpp;h=567dba4d4afcb617c8ae88f13f6dbbe2a600bf0a;hb=176403004ff97696f3c0b5f8bdf48692177fb34a;hp=e336d1652d3f7d2166cc095b231232cd09ece395;hpb=b4bccdade3d22c8375bcd5e374a9e99ab6fce250;p=modules%2Fshaper.git diff --git a/src/Model/Model_Session.cpp b/src/Model/Model_Session.cpp index e336d1652..567dba4d4 100644 --- a/src/Model/Model_Session.cpp +++ b/src/Model/Model_Session.cpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -156,9 +156,9 @@ FeaturePtr Model_Session::createFeature(string theFeatureID, Model_Document* the if (myPlugins.find(theFeatureID) != myPlugins.end()) { std::pair& aPlugin = myPlugins[theFeatureID]; // plugin and doc kind if (!aPlugin.second.empty() && aPlugin.second != theDocOwner->kind()) { - Events_Error::send( - string("Feature '") + theFeatureID + "' can be created only in document '" - + aPlugin.second + "' by the XML definition"); + Events_InfoMessage("Model_Session", + "Feature '%1' can be created only in document '%2' by the XML definition") + .arg(theFeatureID).arg(aPlugin.second).send(); return FeaturePtr(); } myCurrentPluginName = aPlugin.first; @@ -169,16 +169,18 @@ FeaturePtr Model_Session::createFeature(string theFeatureID, Model_Document* the if (myPluginObjs.find(myCurrentPluginName) != myPluginObjs.end()) { FeaturePtr aCreated = myPluginObjs[myCurrentPluginName]->createFeature(theFeatureID); if (!aCreated) { - Events_Error::send( - string("Can not initialize feature '") + theFeatureID + "' in plugin '" - + myCurrentPluginName + "'"); + Events_InfoMessage("Model_Session", + "Can not initialize feature '%1' in plugin '%2'") + .arg(theFeatureID).arg(myCurrentPluginName).send(); } return aCreated; } else { - Events_Error::send(string("Can not load plugin '") + myCurrentPluginName + "'"); + Events_InfoMessage("Model_Session", + "Can not load plugin '%1'").arg(myCurrentPluginName).send(); } } else { - Events_Error::send(string("Feature '") + theFeatureID + "' not found in any plugin"); + Events_InfoMessage("Model_Session", + "Feature '%1' not found in any plugin").arg(theFeatureID).send(); } return FeaturePtr(); // return nothing @@ -189,6 +191,9 @@ std::shared_ptr Model_Session::moduleDocument() Handle(Model_Application) anApp = Model_Application::getApplication(); bool aFirstCall = !anApp->hasRoot(); if (aFirstCall) { + // to be sure that plugins are loaded, + // even before the first "createFeature" call (in unit tests) + LoadPluginsInfo(); // creation of the root document is always outside of the transaction, so, avoid checking it setCheckTransactions(false); anApp->createDocument(0); // 0 is a root ID @@ -263,7 +268,7 @@ void Model_Session::setActiveDocument( bool aWasChecked = myCheckTransactions; setCheckTransactions(false); TDF_LabelList anEmptyUpdated; - aDoc->objects()->synchronizeFeatures(anEmptyUpdated, true, true); + aDoc->objects()->synchronizeFeatures(anEmptyUpdated, true, true, true); if (aWasChecked) setCheckTransactions(true); } @@ -326,7 +331,7 @@ std::shared_ptr Model_Session::copy( TDF_CopyTool::Copy(aDS, aRT); TDF_LabelList anEmptyUpdated; - aNew->objects()->synchronizeFeatures(anEmptyUpdated, true, true); + aNew->objects()->synchronizeFeatures(anEmptyUpdated, true, true, true); return aNew; } @@ -356,6 +361,7 @@ void Model_Session::processEvent(const std::shared_ptr& theMessa const std::shared_ptr aMsg = std::dynamic_pointer_cast(theMessage); if (aMsg) { + // process the plugin info, load plugin if (myPlugins.find(aMsg->id()) == myPlugins.end()) { myPlugins[aMsg->id()] = std::pair( @@ -365,15 +371,16 @@ void Model_Session::processEvent(const std::shared_ptr& theMessa const std::shared_ptr aMsgAttr = std::dynamic_pointer_cast(theMessage); if (aMsgAttr) { + if (!aMsgAttr->isObligatory()) { validators()->registerNotObligatory(aMsgAttr->featureId(), aMsgAttr->attributeId()); } if(aMsgAttr->isConcealment()) { validators()->registerConcealment(aMsgAttr->featureId(), aMsgAttr->attributeId()); } - if (!aMsgAttr->caseId().empty()) { - validators()->registerCase(aMsgAttr->featureId(), aMsgAttr->attributeId(), - aMsgAttr->switchId(), aMsgAttr->caseId()); + const std::list >& aCases = aMsgAttr->getCases(); + if (!aCases.empty()) { + validators()->registerCase(aMsgAttr->featureId(), aMsgAttr->attributeId(), aCases); } } } @@ -392,7 +399,8 @@ void Model_Session::processEvent(const std::shared_ptr& theMessa } } else { // create/update/delete if (myCheckTransactions && !isOperation()) - Events_Error::send("Modification of data structure outside of the transaction"); + Events_InfoMessage("Model_Session", + "Modification of data structure outside of the transaction").send(); // if part is deleted, make the root as the current document (on undo of Parts creations) static const Events_ID kDeletedEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED); if (theMessage->eventID() == kDeletedEvent) {