Model_Application::getApplication()->deleteAllDocuments();
}
-void Model_Session::startOperation(const std::string& theId)
+void Model_Session::startOperation(const std::string& theId, const bool theAttachedToNested)
{
+ myOperationAttachedToNext = theAttachedToNested;
ROOT_DOC->startOperation();
ROOT_DOC->operationId(theId);
static std::shared_ptr<Events_Message> aStartedMsg
{
setCheckTransactions(false);
ROOT_DOC->finishOperation();
+ if (myOperationAttachedToNext) { // twice, with nested
+ ROOT_DOC->finishOperation();
+ myOperationAttachedToNext = false;
+ }
setCheckTransactions(true);
}
{
setCheckTransactions(false);
ROOT_DOC->abortOperation();
+ if (myOperationAttachedToNext) { // twice, with nested
+ ROOT_DOC->abortOperation();
+ myOperationAttachedToNext = false;
+ }
setCheckTransactions(true);
// here the update mechanism may work after abort, so, supress the warnings about
// modifications outside of the transactions
/// makes the last feature in the document as the current
static void makeCurrentLast(std::shared_ptr<ModelAPI_Document> theDoc) {
if (theDoc.get()) {
- FeaturePtr aLastFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theDoc->object(
- ModelAPI_Feature::group(), theDoc->size(ModelAPI_Feature::group()) - 1));
- theDoc->setCurrentFeature(aLastFeature, false);
+ FeaturePtr aLast = std::dynamic_pointer_cast<Model_Document>(theDoc)->lastFeature();
+ theDoc->setCurrentFeature(aLast, false);
}
}
std::shared_ptr<ModelAPI_Document> theDoc, bool theSendSignal)
{
if (myCurrentDoc != theDoc) {
+ if (myCurrentDoc.get())
+ myCurrentDoc->setActive(false);
+ if (theDoc.get())
+ theDoc->setActive(true);
+
std::shared_ptr<ModelAPI_Document> aPrevious = myCurrentDoc;
myCurrentDoc = theDoc;
if (theDoc.get() && theSendSignal) {
{
myPluginsInfoLoaded = false;
myCheckTransactions = true;
+ myOperationAttachedToNext = false;
ModelAPI_Session::setSession(std::shared_ptr<ModelAPI_Session>(this));
// register the configuration reading listener
Events_Loop* aLoop = Events_Loop::loop();
static Model_ValidatorsFactory* aFactory = new Model_ValidatorsFactory;
return aFactory;
}
+
+int Model_Session::transactionID()
+{
+ return ROOT_DOC->transactionID();
+}