X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_MenuMgr.cpp;h=9b82b66c3460a2bba5e43223dd5def81c76164ae;hb=d9aad73be5a44ff8e42162a30a0d9045df7f3837;hp=9b5919c20d411df18d759c8cbe87ccc36781c5ee;hpb=4df8e41bd2fdbee3bb669a84abf7b080c386a76f;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_MenuMgr.cpp b/src/PartSet/PartSet_MenuMgr.cpp index 9b5919c20..9b82b66c3 100644 --- a/src/PartSet/PartSet_MenuMgr.cpp +++ b/src/PartSet/PartSet_MenuMgr.cpp @@ -22,12 +22,15 @@ #include #include +#include +#include #include #include #include #include #include +#include #include #include @@ -76,10 +79,6 @@ void PartSet_MenuMgr::createActions() connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePart(bool))); myActions["ACTIVATE_PART_CMD"] = aAction; - aAction = new QAction(QIcon(":icons/deactivate.png"), tr("Deactivate"), this); - connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool))); - myActions["DEACTIVATE_PART_CMD"] = aAction; - // Activate PartSet aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this); connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool))); @@ -291,6 +290,8 @@ void PartSet_MenuMgr::onLineDetach(QAction* theAction) } else { aPnt = PartSet_Tools::getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_B()); + if (aPnt.get() == NULL) + return; aP = aPnt->impl(); if (aOrig->isEqual(aPnt)) { aToDelFeatures.append(aConstrFeature); @@ -303,15 +304,21 @@ void PartSet_MenuMgr::onLineDetach(QAction* theAction) XGUI_ModuleConnector* aConnector = dynamic_cast(myModule->workshop()); XGUI_Workshop* aWorkshop = aConnector->workshop(); ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation(); - if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) - anOperation->abort(); - - SessionPtr aMgr = ModelAPI_Session::get(); - QString aName = tr("Detach %1").arg(aLine->data()->name().c_str()); - aMgr->startOperation(aName.toStdString()); + ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction( + tr("Detach %1").arg(aLine->data()->name().c_str()), myModule); + bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation); + XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr(); + // the active nested sketch operation should be aborted unconditionally + // the Delete action should be additionally granted for the Sketch operation + // in order to do not abort/commit it + if (!anOpMgr->canStartOperation(anOpAction->id(), isSketchOp/*granted*/)) + return; // the objects are processed but can not be deleted + + anOpMgr->startOperation(anOpAction); aWorkshop->deleteFeatures(aToDelFeatures); - aMgr->finishOperation(); + + anOpMgr->commitOperation(); } myCoinsideLines.clear(); } @@ -341,8 +348,11 @@ void PartSet_MenuMgr::setAuxiliary(const bool isChecked) bool isUseTransaction = false; // 1. change auxiliary type of a created feature if (PartSet_SketcherMgr::isNestedCreateOperation(anOperation) && - PartSet_SketcherMgr::isEntity(anOperation->id().toStdString()) ) { - anObjects.append(anOperation->feature()); + PartSet_SketcherMgr::isEntity(anOperation->id().toStdString()) ) { + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (anOperation); + if (aFOperation) + anObjects.append(aFOperation->feature()); } else { isUseTransaction = true; @@ -352,11 +362,18 @@ void PartSet_MenuMgr::setAuxiliary(const bool isChecked) } QAction* anAction = action("AUXILIARY_CMD"); - SessionPtr aMgr = ModelAPI_Session::get(); + //SessionPtr aMgr = ModelAPI_Session::get(); + ModuleBase_OperationAction* anOpAction = 0; + XGUI_ModuleConnector* aConnector = dynamic_cast(myModule->workshop()); + XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr(); if (isUseTransaction) { - if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) - anOperation->abort(); - aMgr->startOperation(anAction->text().toStdString()); + anOpAction = new ModuleBase_OperationAction(anAction->text(), myModule); + bool isSketchOp = PartSet_SketcherMgr::isSketchOperation(anOperation); + + if (!anOpMgr->canStartOperation(anOpAction->id(), isSketchOp/*granted*/)) + return; // the objects are processed but can not be deleted + + anOpMgr->startOperation(anOpAction); } myModule->sketchMgr()->storeSelection(); @@ -378,12 +395,8 @@ void PartSet_MenuMgr::setAuxiliary(const bool isChecked) } } } - if (isUseTransaction) { - aMgr->finishOperation(); - XGUI_ModuleConnector* aConnector = dynamic_cast(myModule->workshop()); - XGUI_Workshop* aWorkshop = aConnector->workshop(); - aWorkshop->updateCommandStatus(); - } + if (isUseTransaction) + anOpMgr->commitOperation(); Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); myModule->sketchMgr()->restoreSelection(); @@ -403,7 +416,9 @@ bool PartSet_MenuMgr::canSetAuxiliary(bool& theValue) const // 1. change auxiliary type of a created feature if (PartSet_SketcherMgr::isNestedCreateOperation(anOperation) && PartSet_SketcherMgr::isEntity(anOperation->id().toStdString()) ) { - anObjects.append(anOperation->feature()); + ModuleBase_OperationFeature* aFOperation = dynamic_cast(anOperation); + if (aFOperation) + anObjects.append(aFOperation->feature()); } else { /// The operation should not be aborted here, because the method does not changed @@ -462,16 +477,17 @@ void PartSet_MenuMgr::onActivatePartSet(bool) { if (myModule->workshop()->currentOperation()) return; + activatePartSet(); +} + +void PartSet_MenuMgr::activatePartSet() const +{ SessionPtr aMgr = ModelAPI_Session::get(); bool isNewTransaction = !aMgr->isOperation(); // activation may cause changes in current features in document, so it must be in transaction - if (isNewTransaction) { - aMgr->startOperation("Activation"); - } + if (isNewTransaction) aMgr->startOperation("Activation"); aMgr->setActiveDocument(aMgr->moduleDocument()); - if (isNewTransaction) { - aMgr->finishOperation(); - } + if (isNewTransaction) aMgr->finishOperation(); } void PartSet_MenuMgr::onEdit(bool)