X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IModule.cpp;h=a96d676e5fb28ea55f560b954a9d06ecaaedf8d1;hb=423f6b0a08a86d5e47115b87603cddeae4468b49;hp=a41824958fb45b5735dd4146ce14a2de924df9ac;hpb=9968ec652480079d0ca91b2040f6327a164807cf;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IModule.cpp b/src/ModuleBase/ModuleBase_IModule.cpp index a41824958..a96d676e5 100644 --- a/src/ModuleBase/ModuleBase_IModule.cpp +++ b/src/ModuleBase/ModuleBase_IModule.cpp @@ -32,7 +32,7 @@ #include ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) - : QObject(theParent), myWorkshop(theParent) + : QObject(theParent), myWorkshop(theParent) { connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); @@ -69,27 +69,26 @@ void ModuleBase_IModule::launchModal(const QString& theCmdId) } -void ModuleBase_IModule::launchOperation(const QString& theCmdId, - const bool isUpdatePropertyPanel) +void ModuleBase_IModule::launchOperation(const QString& theCmdId) { + /// selection should be obtained from workshop before ask if the operation can be started as + /// the canStartOperation method performs commit/abort of previous operation. + /// Sometimes commit/abort may cause selection clear(Sketch operation) as a result + /// it will be lost and is not used for preselection. + ModuleBase_ISelection* aSelection = myWorkshop->selection(); + QList aPreSelected = + aSelection->getSelected(ModuleBase_ISelection::AllControls); + if (!myWorkshop->canStartOperation(theCmdId)) return; ModuleBase_OperationFeature* aFOperation = dynamic_cast (createOperation(theCmdId.toStdString())); if (aFOperation) { - ModuleBase_ISelection* aSelection = myWorkshop->selection(); - // Initialise operation with preliminary selection - aFOperation->initSelection(aSelection, myWorkshop->viewer()); - sendOperation(aFOperation, isUpdatePropertyPanel); - } -} + aFOperation->initSelection(aPreSelected); - -void ModuleBase_IModule::sendOperation(ModuleBase_Operation* theOperation, - const bool isUpdatePropertyPanel) -{ - workshop()->processLaunchOperation(theOperation, isUpdatePropertyPanel); + workshop()->processLaunchOperation(aFOperation); + } } Handle(AIS_InteractiveObject) ModuleBase_IModule::createPresentation(const ResultPtr& theResult) @@ -121,8 +120,8 @@ ModuleBase_Operation* ModuleBase_IModule::getNewOperation(const std::string& the } bool ModuleBase_IModule::customizeObject(ObjectPtr theObject, - const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag, - const bool theUpdateViewer) + const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag, + const bool theUpdateViewer) { return false; } @@ -225,7 +224,7 @@ void ModuleBase_IModule::editFeature(FeaturePtr theFeature) (createOperation(aFeatureId)); if (aFOperation) { aFOperation->setFeature(theFeature); - sendOperation(aFOperation); + workshop()->processLaunchOperation(aFOperation); } } @@ -236,7 +235,7 @@ bool ModuleBase_IModule::canActivateSelection(const ObjectPtr& theObject) const return !aFOperation || !aFOperation->hasObject(theObject); } -void ModuleBase_IModule::operationResumed(ModuleBase_Operation* theOperation) +void ModuleBase_IModule::operationResumed(ModuleBase_Operation* theOperation) { emit resumed(theOperation); }