X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IModule.cpp;h=a96d676e5fb28ea55f560b954a9d06ecaaedf8d1;hb=423f6b0a08a86d5e47115b87603cddeae4468b49;hp=adf2562bde77e49e3908d431eb746ed5fd613a33;hpb=03ec1386ce3681558d40af584c8fb89eac5b4627;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IModule.cpp b/src/ModuleBase/ModuleBase_IModule.cpp index adf2562bd..a96d676e5 100644 --- a/src/ModuleBase/ModuleBase_IModule.cpp +++ b/src/ModuleBase/ModuleBase_IModule.cpp @@ -9,6 +9,9 @@ #include "ModuleBase_OperationDescription.h" #include "ModuleBase_OperationFeature.h" #include "ModuleBase_ModelWidget.h" +#include "ModuleBase_WidgetFactory.h" +#include "ModuleBase_PageWidget.h" +#include "ModuleBase_Dialog.h" #include @@ -22,9 +25,14 @@ #include #include +#include +#include +#include +#include +#include ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) - : QObject(theParent), myWorkshop(theParent) + : QObject(theParent), myWorkshop(theParent) { connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); @@ -41,29 +49,46 @@ ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) // SLOT(onMouseDoubleClick(QMouseEvent*))); } +void ModuleBase_IModule::launchModal(const QString& theCmdId) +{ + if (!myWorkshop->canStartOperation(theCmdId)) + return; + + std::string aXmlCfg, aDescription; + getXMLRepresentation(theCmdId.toStdString(), aXmlCfg, aDescription); + + SessionPtr aMgr = ModelAPI_Session::get(); + aMgr->startOperation(theCmdId.toStdString()); + + ModuleBase_Dialog aDlg(myWorkshop, theCmdId, aXmlCfg); + if (aDlg.exec() == QDialog::Accepted) + aMgr->finishOperation(); + else + aMgr->abortOperation(); + myWorkshop->updateCommandStatus(); +} + + 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); - } -} - + aFOperation->initSelection(aPreSelected); -void ModuleBase_IModule::sendOperation(ModuleBase_Operation* theOperation) -{ - static Events_ID aModuleEvent = Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED); - std::shared_ptr aMessage = - std::shared_ptr(new Config_PointerMessage(aModuleEvent, this)); - aMessage->setPointer(theOperation); - Events_Loop::loop()->send(aMessage); + workshop()->processLaunchOperation(aFOperation); + } } Handle(AIS_InteractiveObject) ModuleBase_IModule::createPresentation(const ResultPtr& theResult) @@ -78,7 +103,10 @@ bool ModuleBase_IModule::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const QString ModuleBase_IModule::getFeatureError(const FeaturePtr& theFeature) { - return ModelAPI_Tools::getFeatureError(theFeature).c_str(); + std::string aMsg = ModelAPI_Tools::getFeatureError(theFeature); + ModuleBase_Tools::translate(theFeature->getKind(), aMsg); + + return aMsg.c_str(); } void ModuleBase_IModule::grantedOperationIds(ModuleBase_Operation* theOperation, @@ -92,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; } @@ -137,7 +165,6 @@ void ModuleBase_IModule::createFeatures() void ModuleBase_IModule::actionCreated(QAction* theFeature) { - theFeature->setStatusTip(theFeature->text()); connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered())); } @@ -170,14 +197,20 @@ void ModuleBase_IModule::onFeatureTriggered() if (aCmd->isCheckable() && !aCmd->isChecked()) { ModuleBase_Operation* anOperation = myWorkshop->findStartedOperation(aCmd->data().toString()); if (myWorkshop->canStopOperation(anOperation)) - myWorkshop->abortOperation(anOperation); + myWorkshop->stopOperation(anOperation); else { aCmd->setChecked(true); } } else { - launchOperation(aCmd->data().toString()); - emit operationLaunched(); + QString aCmdId = aCmd->data().toString(); + std::shared_ptr aInfo = myWorkshop->featureInfo(aCmdId); + if (aInfo.get() && aInfo->isModal()) { + launchModal(aCmdId); + } else { + launchOperation(aCmdId); + emit operationLaunched(); + } } } @@ -191,7 +224,7 @@ void ModuleBase_IModule::editFeature(FeaturePtr theFeature) (createOperation(aFeatureId)); if (aFOperation) { aFOperation->setFeature(theFeature); - sendOperation(aFOperation); + workshop()->processLaunchOperation(aFOperation); } } @@ -202,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); }