X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.cpp;h=8b19dcd8270b9c0a57a0f5f1826ba605c911b774;hb=1a121b1e8e39095614e936eb0b8f606f9d8cdaf2;hp=96060b463837050075cb47244ca5f19fe8fabb13;hpb=75e68c6f8a1de4ad94c3466a7b364c8c9a6a59a6;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.cpp b/src/ModuleBase/ModuleBase_Operation.cpp index 96060b463..8b19dcd82 100644 --- a/src/ModuleBase/ModuleBase_Operation.cpp +++ b/src/ModuleBase/ModuleBase_Operation.cpp @@ -39,7 +39,6 @@ ModuleBase_Operation::ModuleBase_Operation(const QString& theId, QObject* theParent) : QObject(theParent), - myIsEditing(false), myIsModified(false), myPropertyPanel(NULL) { @@ -49,109 +48,43 @@ ModuleBase_Operation::ModuleBase_Operation(const QString& theId, QObject* thePar ModuleBase_Operation::~ModuleBase_Operation() { delete myDescription; - clearPreselection(); } -QString ModuleBase_Operation::id() const +const QStringList& ModuleBase_Operation::grantedOperationIds() const { - return getDescription()->operationId(); + return myGrantedIds; } -FeaturePtr ModuleBase_Operation::feature() const +void ModuleBase_Operation::setGrantedOperationIds(const QStringList& theList) { - return myFeature; + myGrantedIds = theList; } -bool ModuleBase_Operation::isValid() const -{ - if (!myFeature) - return true; // rename operation - //Get validators for the Id - SessionPtr aMgr = ModelAPI_Session::get(); - ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - return aFactory->validate(myFeature); -} - - -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(); - myFeature = aDoc->addFeature(getDescription()->operationId().toStdString()); - } - if (myFeature) { // TODO: generate an error if feature was not created - myIsModified = true; - // Model update should call "execute" of a feature. - //myFeature->execute(); - // Init default values - /*QList aWidgets = getDescription()->modelWidgets(); - QList::const_iterator anIt = aWidgets.begin(), aLast = aWidgets.end(); - for (; anIt != aLast; anIt++) { - (*anIt)->storeValue(aFeature); - }*/ - } - - if (theFlushMessage) - flushCreated(); - return myFeature; -} - -void ModuleBase_Operation::setFeature(FeaturePtr theFeature) +QString ModuleBase_Operation::id() const { - myFeature = theFeature; - myIsEditing = true; + return getDescription()->operationId(); } -bool ModuleBase_Operation::hasObject(ObjectPtr theObj) const +bool ModuleBase_Operation::isValid() const { - FeaturePtr aFeature = feature(); - if (aFeature) { - if (aFeature == theObj) - return true; - std::list aResults = aFeature->results(); - std::list::const_iterator aIt; - for (aIt = aResults.cbegin(); aIt != aResults.cend(); ++aIt) { - if (theObj == (*aIt)) - return true; - } - } - return false; + return true; } - -std::shared_ptr ModuleBase_Operation::document() const +bool ModuleBase_Operation::canBeCommitted() const { - return ModelAPI_Session::get()->moduleDocument(); + return isValid(); } - -void ModuleBase_Operation::start() +bool ModuleBase_Operation::start() { - ModelAPI_Session::get()->startOperation(); + myIsModified = false; - if (!myIsEditing) - createFeature(); + ModelAPI_Session::get()->startOperation(id().toStdString()); startOperation(); emit started(); + return true; } void ModuleBase_Operation::postpone() @@ -168,26 +101,31 @@ void ModuleBase_Operation::resume() void ModuleBase_Operation::abort() { - abortOperation(); - emit aborted(); - - stopOperation(); + // the viewer update should be blocked in order to avoid the features blinking before they are + // hidden + //std::shared_ptr aMsg = std::shared_ptr( + // new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_BLOCKED))); + //Events_Loop::loop()->send(aMsg); ModelAPI_Session::get()->abortOperation(); + emit stopped(); + // the viewer update should be unblocked in order to avoid the features blinking before they are + // hidden + //aMsg = std::shared_ptr( + // new Events_Message(Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED))); + //Events_Loop::loop()->send(aMsg); + + emit aborted(); } bool ModuleBase_Operation::commit() { if (canBeCommitted()) { + SessionPtr aMgr = ModelAPI_Session::get(); + commitOperation(); - // check whether there are modifications performed during the current operation - // in the model - // in case if there are no modifications, do not increase the undo/redo stack - if (ModelAPI_Session::get()->isModified()) - ModelAPI_Session::get()->finishOperation(); - else - ModelAPI_Session::get()->abortOperation(); + aMgr->finishOperation(); stopOperation(); emit stopped(); @@ -199,150 +137,17 @@ bool ModuleBase_Operation::commit() return false; } -void ModuleBase_Operation::setRunning(bool theState) -{ - if (!theState) { - abort(); - } -} - -void ModuleBase_Operation::activateByPreselection() -{ - if (!myPropertyPanel || myPreSelection.empty()) { - myPropertyPanel->activateNextWidget(NULL); - return; - } - const QList& aWidgets = myPropertyPanel->modelWidgets(); - if (aWidgets.empty()) { - myPropertyPanel->activateNextWidget(NULL); - return; - } - - ModuleBase_ModelWidget* aWgt, *aFilledWgt = 0; - QList::const_iterator aWIt; - QList::const_iterator aPIt; - bool isSet = false; - for (aWIt = aWidgets.constBegin(), aPIt = myPreSelection.constBegin(); - (aWIt != aWidgets.constEnd()) && (aPIt != myPreSelection.constEnd()); - ++aWIt) { - aWgt = (*aWIt); - ModuleBase_ViewerPrs aValue = (*aPIt); - if (!aWgt->canSetValue()) - continue; - - ++aPIt; - if (!aWgt->setSelection(aValue)) { - isSet = false; - break; - } else { - isSet = true; - aFilledWgt = aWgt; - } - } - - myPropertyPanel->activateNextWidget(aFilledWgt); - if (aFilledWgt) - emit activatedByPreselection(); - -} - -void ModuleBase_Operation::setParentFeature(CompositeFeaturePtr theParent) -{ - myParentFeature = theParent; -} - -CompositeFeaturePtr ModuleBase_Operation::parentFeature() const -{ - return myParentFeature; -} - -void ModuleBase_Operation::initSelection(ModuleBase_ISelection* theSelection, - ModuleBase_IViewer* theViewer) -{ - clearPreselection(); - - QList aPreSelected; - // Check that the selected result are not results of operation feature - FeaturePtr aFeature = feature(); - if (aFeature) { - QList aSelected = theSelection->getSelected(); - - std::list aResults = aFeature->results(); - QObjectPtrList aResList; - std::list::const_iterator aIt; - for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) - aResList.append(*aIt); - - foreach (ModuleBase_ViewerPrs aPrs, aSelected) { - if ((!aResList.contains(aPrs.object())) && (aPrs.object() != aFeature)) - aPreSelected.append(aPrs); - } - } else - aPreSelected = theSelection->getSelected(); - - // convert the selection values to the values, which are set to the operation widgets - - //Handle(V3d_View) aView = theViewer->activeView(); - //foreach (ModuleBase_ViewerPrs aPrs, aPreSelected) { - // ModuleBase_WidgetValueFeature* aValue = new ModuleBase_WidgetValueFeature(); - // aValue->setObject(aPrs.object()); - - // double aX, anY; - // if (getViewerPoint(aPrs, theViewer, aX, anY)) - // aValue->setPoint(std::shared_ptr(new GeomAPI_Pnt2d(aX, anY))); - // myPreSelection.append(aValue); - //} - myPreSelection = aPreSelected; -} - -//void ModuleBase_Operation::onWidgetActivated(ModuleBase_ModelWidget* theWidget) -//{ -// //activateByPreselection(); -// //if (theWidget && myPropertyPanel) { -// // myPropertyPanel->activateNextWidget(); -// //// //emit activateNextWidget(myActiveWidget); -// //} -//} - -//bool ModuleBase_Operation::setWidgetValue(ObjectPtr theFeature, double theX, double theY) -//{ -// ModuleBase_ModelWidget* aActiveWgt = myPropertyPanel->activeWidget(); -// if (!aActiveWgt) -// return false; -// ModuleBase_WidgetValueFeature* aValue = new ModuleBase_WidgetValueFeature(); -// aValue->setObject(theFeature); -// aValue->setPoint(std::shared_ptr(new GeomAPI_Pnt2d(theX, theY))); -// bool isApplyed = aActiveWgt->setValue(aValue); -// -// delete aValue; -// myIsModified = (myIsModified || isApplyed); -// return isApplyed; -//} - -bool ModuleBase_Operation::getViewerPoint(ModuleBase_ViewerPrs thePrs, - ModuleBase_IViewer* theViewer, - double& theX, double& theY) -{ - return false; -} - -void ModuleBase_Operation::clearPreselection() +void ModuleBase_Operation::onValuesChanged() { - myPreSelection.clear(); + myIsModified = true; } void ModuleBase_Operation::setPropertyPanel(ModuleBase_IPropertyPanel* theProp) { myPropertyPanel = theProp; - myPropertyPanel->setEditingMode(isEditOperation()); - - // Do not activate widgets by default if the current operation is editing operation - // Because we don't know which widget is going to be edited. - if (!isEditOperation()) - activateByPreselection(); } bool ModuleBase_Operation::isGranted(QString theId) const { - return myNestedFeatures.contains(theId); + return myGrantedIds.contains(theId); }