X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IModule.cpp;h=942d9ec6584ef3a288b08f1746d3ee1238a7cd8f;hb=c8ab29e531ee03054976a7606076f2c4ee1d9f6b;hp=0e2ce8d7f6bc7545a1c204fd6d6f2e670bdd8bcb;hpb=7bf19255421b34594c7b0a76d0ce28166d0ce895;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IModule.cpp b/src/ModuleBase/ModuleBase_IModule.cpp index 0e2ce8d7f..942d9ec65 100644 --- a/src/ModuleBase/ModuleBase_IModule.cpp +++ b/src/ModuleBase/ModuleBase_IModule.cpp @@ -7,17 +7,29 @@ #include "ModuleBase_Operation.h" #include "ModuleBase_ISelection.h" #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 #include #include +#include +#include "ModelAPI_Tools.h" #include #include #include #include +#include +#include +#include +#include +#include ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) : QObject(theParent), myWorkshop(theParent) @@ -37,17 +49,39 @@ 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) { if (!myWorkshop->canStartOperation(theCmdId)) return; - ModuleBase_Operation* anOperation = createOperation(theCmdId.toStdString()); - ModuleBase_ISelection* aSelection = myWorkshop->selection(); - // Initialise operation with preliminary selection - anOperation->initSelection(aSelection, myWorkshop->viewer()); - sendOperation(anOperation); + 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); + } } @@ -60,41 +94,71 @@ void ModuleBase_IModule::sendOperation(ModuleBase_Operation* theOperation) Events_Loop::loop()->send(aMessage); } +Handle(AIS_InteractiveObject) ModuleBase_IModule::createPresentation(const ResultPtr& theResult) +{ + return Handle(AIS_InteractiveObject)(); +} + +bool ModuleBase_IModule::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const +{ + return true; +} + +QString ModuleBase_IModule::getFeatureError(const FeaturePtr& theFeature) +{ + std::string aMsg = ModelAPI_Tools::getFeatureError(theFeature); + ModuleBase_Tools::translate(theFeature->getKind(), aMsg); + + return aMsg.c_str(); +} + +void ModuleBase_IModule::grantedOperationIds(ModuleBase_Operation* theOperation, + QStringList& theIds) const +{ +} + ModuleBase_Operation* ModuleBase_IModule::getNewOperation(const std::string& theFeatureId) { - return new ModuleBase_Operation(theFeatureId.c_str(), this); + return new ModuleBase_OperationFeature(theFeatureId.c_str(), this); } -ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& theFeatureId) +bool ModuleBase_IModule::customizeObject(ObjectPtr theObject, + const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag, + const bool theUpdateViewer) { - ModuleBase_Operation* anOperation = getNewOperation(theFeatureId); + return false; +} - // If the operation is launched as sub-operation of another then we have to initialise +ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& theFeatureId) +{ + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (getNewOperation(theFeatureId)); + // If the operation is launched as sub-operation of another then we have to initialize // parent feature - ModuleBase_Operation* aCurOperation = myWorkshop->currentOperation(); + ModuleBase_OperationFeature* aCurOperation = dynamic_cast + (myWorkshop->currentOperation()); if (aCurOperation) { FeaturePtr aFeature = aCurOperation->feature(); - CompositeFeaturePtr aCompFea = std::dynamic_pointer_cast(aFeature); - if (aCompFea) - anOperation->setParentFeature(aCompFea); + CompositeFeaturePtr aCompFeature = + std::dynamic_pointer_cast(aFeature); + if (aCompFeature) { + aFOperation->setParentFeature(aCompFeature); + } } - 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)); + std::string aXmlCfg, aDescription; + getXMLRepresentation(theFeatureId, aXmlCfg, aDescription); + aFOperation->getDescription()->setDescription(QString::fromStdString(aDescription)); + aFOperation->getDescription()->setXmlRepresentation(QString::fromStdString(aXmlCfg)); - return anOperation; + return aFOperation; } void ModuleBase_IModule::createFeatures() { registerValidators(); registerFilters(); + registerProperties(); Config_ModuleReader aXMLReader = Config_ModuleReader(); aXMLReader.readAll(); @@ -104,27 +168,89 @@ void ModuleBase_IModule::createFeatures() void ModuleBase_IModule::actionCreated(QAction* theFeature) { + theFeature->setStatusTip(theFeature->text()); connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered())); } +bool ModuleBase_IModule::canEraseObject(const ObjectPtr& theObject) const +{ + return true; +} + +bool ModuleBase_IModule::canDisplayObject(const ObjectPtr& theObject) const +{ + return true; +} + +bool ModuleBase_IModule::canUndo() const +{ + SessionPtr aMgr = ModelAPI_Session::get(); + return aMgr->hasModuleDocument() && aMgr->canUndo() && !aMgr->isOperation(); +} + +bool ModuleBase_IModule::canRedo() const +{ + SessionPtr aMgr = ModelAPI_Session::get(); + return aMgr->hasModuleDocument() && aMgr->canRedo() && !aMgr->isOperation(); +} void ModuleBase_IModule::onFeatureTriggered() { QAction* aCmd = dynamic_cast(sender()); //Do nothing on uncheck - if (aCmd->isCheckable() && !aCmd->isChecked()) - return; - launchOperation(aCmd->data().toString()); + if (aCmd->isCheckable() && !aCmd->isChecked()) { + ModuleBase_Operation* anOperation = myWorkshop->findStartedOperation(aCmd->data().toString()); + if (myWorkshop->canStopOperation(anOperation)) + myWorkshop->stopOperation(anOperation); + else { + aCmd->setChecked(true); + } + } + else { + QString aCmdId = aCmd->data().toString(); + std::shared_ptr aInfo = myWorkshop->featureInfo(aCmdId); + if (aInfo.get() && aInfo->isModal()) { + launchModal(aCmdId); + } else { + launchOperation(aCmdId); + emit operationLaunched(); + } + } } - void ModuleBase_IModule::editFeature(FeaturePtr theFeature) { std::string aFeatureId = theFeature->getKind(); if (!myWorkshop->canStartOperation(aFeatureId.c_str())) return; - ModuleBase_Operation* anOperation = createOperation(aFeatureId); - anOperation->setFeature(theFeature); - sendOperation(anOperation); -} \ No newline at end of file + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (createOperation(aFeatureId)); + if (aFOperation) { + aFOperation->setFeature(theFeature); + sendOperation(aFOperation); + } +} + +bool ModuleBase_IModule::canActivateSelection(const ObjectPtr& theObject) const +{ + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (myWorkshop->currentOperation()); + return !aFOperation || !aFOperation->hasObject(theObject); +} + +void ModuleBase_IModule::operationResumed(ModuleBase_Operation* theOperation) +{ + emit resumed(theOperation); +} + +void ModuleBase_IModule::getXMLRepresentation(const std::string& theFeatureId, + std::string& theXmlCfg, std::string& theDescription) +{ + std::string aPluginFileName = myFeaturesInFiles[theFeatureId]; + Config_WidgetReader aWdgReader = Config_WidgetReader(aPluginFileName); + aWdgReader.readAll(); + + theXmlCfg = aWdgReader.featureWidgetCfg(theFeatureId); + theDescription = aWdgReader.featureDescription(theFeatureId); +}