X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.cpp;h=96060b463837050075cb47244ca5f19fe8fabb13;hb=75e68c6f8a1de4ad94c3466a7b364c8c9a6a59a6;hp=5ee3daa6e6f8d88dc18427c03ed76542a05c4d52;hpb=f98f36bd009570d51eac255acf952cb09f68b5db;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.cpp b/src/ModuleBase/ModuleBase_Operation.cpp index 5ee3daa6e..96060b463 100644 --- a/src/ModuleBase/ModuleBase_Operation.cpp +++ b/src/ModuleBase/ModuleBase_Operation.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + /* * ModuleBase_Operation.cpp * @@ -9,7 +11,6 @@ #include "ModuleBase_OperationDescription.h" #include "ModuleBase_ModelWidget.h" -#include "ModuleBase_WidgetValueFeature.h" #include "ModuleBase_ViewerPrs.h" #include "ModuleBase_IPropertyPanel.h" #include "ModuleBase_ISelection.h" @@ -71,26 +72,6 @@ bool ModuleBase_Operation::isValid() const return aFactory->validate(myFeature); } -bool ModuleBase_Operation::isNestedOperationsEnabled() const -{ - return true; -} - -//void ModuleBase_Operation::storeCustomValue() -//{ -// if (!myFeature) { -//#ifdef _DEBUG -// qDebug() << "ModuleBase_Operation::storeCustom: " << -// "trying to store value without opening a transaction."; -//#endif -// return; -// } -// -// ModuleBase_ModelWidget* aCustom = dynamic_cast(sender()); -// if (aCustom) -// aCustom->storeValue(); -//} - bool ModuleBase_Operation::canBeCommitted() const { @@ -109,7 +90,7 @@ void ModuleBase_Operation::flushCreated() FeaturePtr ModuleBase_Operation::createFeature(const bool theFlushMessage) { - if (myParentFeature) { + if (myParentFeature.get()) { myFeature = myParentFeature->addFeature(getDescription()->operationId().toStdString()); } else { std::shared_ptr aDoc = document(); @@ -170,19 +151,18 @@ void ModuleBase_Operation::start() startOperation(); emit started(); + } void ModuleBase_Operation::postpone() { - if (myPropertyPanel) - disconnect(myPropertyPanel, 0, this, 0); + postponeOperation(); emit postponed(); } void ModuleBase_Operation::resume() { - // connect(myPropertyPanel, SIGNAL(widgetActivated(ModuleBase_ModelWidget*)), - // this, SLOT(onWidgetActivated(ModuleBase_ModelWidget*))); + resumeOperation(); emit resumed(); } @@ -190,8 +170,6 @@ void ModuleBase_Operation::abort() { abortOperation(); emit aborted(); - if (myPropertyPanel) - disconnect(myPropertyPanel, 0, this, 0); stopOperation(); @@ -202,9 +180,6 @@ void ModuleBase_Operation::abort() bool ModuleBase_Operation::commit() { if (canBeCommitted()) { - if (myPropertyPanel) - disconnect(myPropertyPanel, 0, this, 0); - commitOperation(); // check whether there are modifications performed during the current operation // in the model @@ -231,26 +206,32 @@ void ModuleBase_Operation::setRunning(bool theState) } } -bool ModuleBase_Operation::activateByPreselection() +void ModuleBase_Operation::activateByPreselection() { - if (!myPropertyPanel) - return false; - if (myPreSelection.empty()) - return false; + if (!myPropertyPanel || myPreSelection.empty()) { + myPropertyPanel->activateNextWidget(NULL); + return; + } const QList& aWidgets = myPropertyPanel->modelWidgets(); - if (aWidgets.empty()) - return false; + if (aWidgets.empty()) { + myPropertyPanel->activateNextWidget(NULL); + return; + } ModuleBase_ModelWidget* aWgt, *aFilledWgt = 0; QList::const_iterator aWIt; - QList::const_iterator aPIt; + QList::const_iterator aPIt; bool isSet = false; for (aWIt = aWidgets.constBegin(), aPIt = myPreSelection.constBegin(); (aWIt != aWidgets.constEnd()) && (aPIt != myPreSelection.constEnd()); - ++aWIt, ++aPIt) { + ++aWIt) { aWgt = (*aWIt); - ModuleBase_WidgetValueFeature* aValue = (*aPIt); - if (!aWgt->setValue(aValue)) { + ModuleBase_ViewerPrs aValue = (*aPIt); + if (!aWgt->canSetValue()) + continue; + + ++aPIt; + if (!aWgt->setSelection(aValue)) { isSet = false; break; } else { @@ -258,20 +239,21 @@ bool ModuleBase_Operation::activateByPreselection() aFilledWgt = aWgt; } } - if (isSet && canBeCommitted()) { - // if all widgets are filled with selection - commit - // in order to commit the operation outside of starting procedure - use timer event - QTimer::singleShot(50, this, SLOT(commit())); - return true; - } - else { - //activate next widget - if (aFilledWgt) { - myPropertyPanel->activateNextWidget(aFilledWgt); - return true; - } - } - return false; + + 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, @@ -300,16 +282,17 @@ void ModuleBase_Operation::initSelection(ModuleBase_ISelection* theSelection, // 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); - } + //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) @@ -345,20 +328,21 @@ bool ModuleBase_Operation::getViewerPoint(ModuleBase_ViewerPrs thePrs, void ModuleBase_Operation::clearPreselection() { - while (!myPreSelection.isEmpty()) { - delete myPreSelection.takeFirst(); - } + myPreSelection.clear(); } void ModuleBase_Operation::setPropertyPanel(ModuleBase_IPropertyPanel* theProp) { myPropertyPanel = theProp; myPropertyPanel->setEditingMode(isEditOperation()); - //connect(myPropertyPanel, SIGNAL(widgetActivated(ModuleBase_ModelWidget*)), this, - // SLOT(onWidgetActivated(ModuleBase_ModelWidget*))); + + // 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); -} \ No newline at end of file +}