X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IModule.cpp;h=4aa92c55381718720efd46df55f3a1cacac31ac0;hb=5746238455553297ce5333502e6f27e6e5d9348b;hp=df2502fbbb4af73292b0b998b5d25cd7f405544a;hpb=9854dbe3ec458621458f78823cf31d0fc3e9de85;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IModule.cpp b/src/ModuleBase/ModuleBase_IModule.cpp index df2502fbb..4aa92c553 100644 --- a/src/ModuleBase/ModuleBase_IModule.cpp +++ b/src/ModuleBase/ModuleBase_IModule.cpp @@ -4,37 +4,62 @@ #include "ModuleBase_ViewerPrs.h" #include "ModuleBase_Operation.h" #include "ModuleBase_ISelection.h" +#include "ModuleBase_OperationDescription.h" #include #include +#include #include +#include +#include +#include ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) : QObject(theParent), myWorkshop(theParent) { + connect(myWorkshop, SIGNAL(operationStarted(ModuleBase_Operation*)), + SLOT(onOperationStarted(ModuleBase_Operation*))); + + connect(myWorkshop, SIGNAL(operationStopped(ModuleBase_Operation*)), + SLOT(onOperationStopped(ModuleBase_Operation*))); + + connect(myWorkshop, SIGNAL(operationResumed(ModuleBase_Operation*)), + SLOT(onOperationResumed(ModuleBase_Operation*))); + + connect(myWorkshop, SIGNAL(operationComitted(ModuleBase_Operation*)), + SLOT(onOperationComitted(ModuleBase_Operation*))); + + connect(myWorkshop, SIGNAL(operationAborted(ModuleBase_Operation*)), + SLOT(onOperationAborted(ModuleBase_Operation*))); + connect(myWorkshop, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), this, - SLOT(onMousePressed(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), this, - SLOT(onMouseReleased(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), this, - SLOT(onMouseMoved(QMouseEvent*))); - connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), this, - SLOT(onKeyRelease(QKeyEvent*))); - connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), this, - SLOT(onMouseDoubleClick(QMouseEvent*))); + + + //connect(myWorkshop->viewer(), SIGNAL(mousePress(QMouseEvent*)), this, + // SLOT(onMousePressed(QMouseEvent*))); + //connect(myWorkshop->viewer(), SIGNAL(mouseRelease(QMouseEvent*)), this, + // SLOT(onMouseReleased(QMouseEvent*))); + //connect(myWorkshop->viewer(), SIGNAL(mouseMove(QMouseEvent*)), this, + // SLOT(onMouseMoved(QMouseEvent*))); + //connect(myWorkshop->viewer(), SIGNAL(keyRelease(QKeyEvent*)), this, + // SLOT(onKeyRelease(QKeyEvent*))); + //connect(myWorkshop->viewer(), SIGNAL(mouseDoubleClick(QMouseEvent*)), this, + // SLOT(onMouseDoubleClick(QMouseEvent*))); } void ModuleBase_IModule::launchOperation(const QString& theCmdId) { + if (!myWorkshop->canStartOperation(theCmdId)) + return; + ModuleBase_Operation* anOperation = createOperation(theCmdId.toStdString()); ModuleBase_ISelection* aSelection = myWorkshop->selection(); // Initialise operation with preliminary selection - anOperation->initSelection(aSelection); + anOperation->initSelection(aSelection, myWorkshop->viewer()); sendOperation(anOperation); } @@ -42,8 +67,72 @@ void ModuleBase_IModule::launchOperation(const QString& theCmdId) void ModuleBase_IModule::sendOperation(ModuleBase_Operation* theOperation) { static Events_ID aModuleEvent = Events_Loop::eventByName(EVENT_OPERATION_LAUNCHED); - boost::shared_ptr aMessage = - boost::shared_ptr(new Config_PointerMessage(aModuleEvent, this)); + std::shared_ptr aMessage = + std::shared_ptr(new Config_PointerMessage(aModuleEvent, this)); aMessage->setPointer(theOperation); Events_Loop::loop()->send(aMessage); } + +ModuleBase_Operation* ModuleBase_IModule::getNewOperation(const std::string& theFeatureId) +{ + return new ModuleBase_Operation(theFeatureId.c_str(), this); +} + +ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& theFeatureId) +{ + ModuleBase_Operation* anOperation = getNewOperation(theFeatureId); + + // If the operation is launched as sub-operation of another then we have to initialise + // parent feature + ModuleBase_Operation* aCurOperation = myWorkshop->currentOperation(); + if (aCurOperation) { + FeaturePtr aFeature = aCurOperation->feature(); + CompositeFeaturePtr aCompFea = std::dynamic_pointer_cast(aFeature); + if (aCompFea) + anOperation->setParentFeature(aCompFea); + } + + std::string aPluginFileName = myFeaturesInFiles[theFeatureId]; + Config_WidgetReader aWdgReader = Config_WidgetReader(aPluginFileName); + aWdgReader.readAll(); + std::string aXmlCfg = aWdgReader.featureWidgetCfg(theFeatureId); + std::string aDescription = aWdgReader.featureDescription(theFeatureId); + + anOperation->getDescription()->setDescription(QString::fromStdString(aDescription)); + anOperation->getDescription()->setXmlRepresentation(QString::fromStdString(aXmlCfg)); + + return anOperation; +} + +void ModuleBase_IModule::createFeatures() +{ + registerValidators(); + + Config_ModuleReader aXMLReader = Config_ModuleReader(); + aXMLReader.readAll(); + myFeaturesInFiles = aXMLReader.featuresInFiles(); +} + + +void ModuleBase_IModule::actionCreated(QAction* theFeature) +{ + connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered())); +} + + +void ModuleBase_IModule::onFeatureTriggered() +{ + QAction* aCmd = dynamic_cast(sender()); + //Do nothing on uncheck + if (aCmd->isCheckable() && !aCmd->isChecked()) + return; + launchOperation(aCmd->data().toString()); +} + + +void ModuleBase_IModule::editFeature(FeaturePtr theFeature) +{ + ModuleBase_Operation* anOperation = createOperation(theFeature->getKind()); + anOperation->setFeature(theFeature); + sendOperation(anOperation); +} \ No newline at end of file