X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModuleBase%2FModuleBase_Operation.cpp;h=1016d90e8e762decc26a335379bac3fbb1178789;hb=5fd2e5839ff05612b8258e55f1eaa8f1bf0d92ae;hp=3b799f6689042bbb207297df4e76c9eaf8ec0732;hpb=6ee4c5c90f88523bd433b4a9660d0262bc0261f3;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.cpp b/src/ModuleBase/ModuleBase_Operation.cpp index 3b799f668..1016d90e8 100644 --- a/src/ModuleBase/ModuleBase_Operation.cpp +++ b/src/ModuleBase/ModuleBase_Operation.cpp @@ -66,6 +66,8 @@ bool ModuleBase_Operation::isValid() const { if (!myFeature) return true; // rename operation + if (myFeature->isAction()) + return true; //Get validators for the Id SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); @@ -78,22 +80,12 @@ bool ModuleBase_Operation::canBeCommitted() const return isValid(); } -void ModuleBase_Operation::flushUpdated() -{ - Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); -} - -void ModuleBase_Operation::flushCreated() -{ - Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED)); -} - 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 @@ -109,7 +101,7 @@ FeaturePtr ModuleBase_Operation::createFeature(const bool theFlushMessage) } if (theFlushMessage) - flushCreated(); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED)); return myFeature; } @@ -131,37 +123,29 @@ bool ModuleBase_Operation::hasObject(ObjectPtr theObj) const if (theObj == (*aIt)) return true; } - CompositeFeaturePtr aCompFeature = std::dynamic_pointer_cast(aFeature); - if (aCompFeature.get() != NULL) { - for (int i = 0; i < aCompFeature->numberOfSubs(); i++) { - FeaturePtr aSubFeature = aCompFeature->subFeature(i); - std::list aResults = aSubFeature->results(); - std::list::const_iterator aIt; - for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) { - if (theObj == (*aIt)) - return true; - } - if (aSubFeature == theObj) - return true; - } - } } return false; } - -std::shared_ptr ModuleBase_Operation::document() const -{ - return ModelAPI_Session::get()->moduleDocument(); -} - - void ModuleBase_Operation::start() { - ModelAPI_Session::get()->startOperation(); - - if (!myIsEditing) - createFeature(); + QString anId = getDescription()->operationId(); + if (myIsEditing) { + anId = anId.append(EditSuffix()); + } + ModelAPI_Session::get()->startOperation(anId.toStdString()); + + 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(); @@ -215,9 +199,7 @@ bool ModuleBase_Operation::commit() void ModuleBase_Operation::setRunning(bool theState) { - if (!theState) { - abort(); - } + emit triggered(theState); } void ModuleBase_Operation::activateByPreselection() @@ -236,6 +218,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) { @@ -253,7 +236,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();