X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.cpp;h=68dd1322176bd6a73e83687402f769d7f0e99946;hb=af851100774c4ff33b515c884abe0cd03c3f0528;hp=6119c42c80fd91df36bb17afca727d12cfeb861f;hpb=676e0178fdedf35ba607ef9d4f02d871dd06fa28;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.cpp b/src/ModuleBase/ModuleBase_Operation.cpp index 6119c42c8..68dd13221 100644 --- a/src/ModuleBase/ModuleBase_Operation.cpp +++ b/src/ModuleBase/ModuleBase_Operation.cpp @@ -85,7 +85,7 @@ FeaturePtr ModuleBase_Operation::createFeature(const bool theFlushMessage) if (myParentFeature.get()) { myFeature = myParentFeature->addFeature(getDescription()->operationId().toStdString()); } else { - std::shared_ptr aDoc = document(); + std::shared_ptr aDoc = ModelAPI_Session::get()->activeDocument(); myFeature = aDoc->addFeature(getDescription()->operationId().toStdString()); } if (myFeature) { // TODO: generate an error if feature was not created @@ -127,13 +127,6 @@ bool ModuleBase_Operation::hasObject(ObjectPtr theObj) const return false; } - -std::shared_ptr ModuleBase_Operation::document() const -{ - return ModelAPI_Session::get()->moduleDocument(); -} - - void ModuleBase_Operation::start() { QString anId = getDescription()->operationId(); @@ -142,8 +135,17 @@ void ModuleBase_Operation::start() } ModelAPI_Session::get()->startOperation(anId.toStdString()); - if (!myIsEditing) - createFeature(); + if (!myIsEditing) { + FeaturePtr aFeature = createFeature(); + // if the feature is not created, there is no sense to start the operation + if (aFeature.get() == NULL) { + // it is necessary to abor the operation in the session and emit the aborted signal + // in order to update commands status in the workshop, to be exact the feature action + // to be unchecked + abort(); + return; + } + } startOperation(); emit started(); @@ -218,6 +220,7 @@ void ModuleBase_Operation::activateByPreselection() QList::const_iterator aWIt; QList::const_iterator aPIt; bool isSet = false; + // 1. apply the selection to controls for (aWIt = aWidgets.constBegin(), aPIt = myPreSelection.constBegin(); (aWIt != aWidgets.constEnd()) && (aPIt != myPreSelection.constEnd()); ++aWIt) { @@ -235,7 +238,15 @@ void ModuleBase_Operation::activateByPreselection() aFilledWgt = aWgt; } } + // 2. ignore not obligatory widgets + /*for (; aWIt != aWidgets.constEnd(); ++aWIt) { + aWgt = (*aWIt); + if (aWgt && aWgt->isObligatory()) + continue; + aFilledWgt = aWgt; + }*/ + // 3. activate the next obligatory widget myPropertyPanel->activateNextWidget(aFilledWgt); if (aFilledWgt) emit activatedByPreselection();