X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IModule.cpp;h=1287a605abc02332a147ba7e6b1f0bdc3b8c966c;hb=d0e479afb535cd9d6542d53302428a5c8e99485f;hp=3cbe89b5b4569b9970d29541b6cf10d410f037c0;hpb=f34fba2433c87ccdf824df0dc8c34099054b1715;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IModule.cpp b/src/ModuleBase/ModuleBase_IModule.cpp index 3cbe89b5b..1287a605a 100644 --- a/src/ModuleBase/ModuleBase_IModule.cpp +++ b/src/ModuleBase/ModuleBase_IModule.cpp @@ -8,18 +8,30 @@ #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 +#include +#include ModuleBase_IModule::ModuleBase_IModule(ModuleBase_IWorkshop* theParent) : QObject(theParent), myWorkshop(theParent) @@ -39,6 +51,26 @@ 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)) @@ -64,41 +96,25 @@ void ModuleBase_IModule::sendOperation(ModuleBase_Operation* theOperation) Events_Loop::loop()->send(aMessage); } -const char* toString(ModelAPI_ExecState theExecState) +Handle(AIS_InteractiveObject) ModuleBase_IModule::createPresentation(const ResultPtr& theResult) { -#define TO_STRING(__NAME__) case __NAME__: return #__NAME__; - switch (theExecState) { - TO_STRING(ModelAPI_StateDone) - TO_STRING(ModelAPI_StateMustBeUpdated) - TO_STRING(ModelAPI_StateExecFailed) - TO_STRING(ModelAPI_StateInvalidArgument) - TO_STRING(ModelAPI_StateNothing) - default: return "Unknown ExecState."; - } -#undef TO_STRING + return Handle(AIS_InteractiveObject)(); +} + +bool ModuleBase_IModule::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const +{ + return true; } QString ModuleBase_IModule::getFeatureError(const FeaturePtr& theFeature) { - QString anError; - if (!theFeature.get() || !theFeature->data()->isValid() || theFeature->isAction()) - return anError; - - // to be removed later, this error should be got from the feature - if (theFeature->data()->execState() == ModelAPI_StateDone || - theFeature->data()->execState() == ModelAPI_StateMustBeUpdated) - return anError; - - // set error indication - anError = QString::fromStdString(theFeature->error()); - if (anError.isEmpty()) { - bool isDone = ( theFeature->data()->execState() == ModelAPI_StateDone - || theFeature->data()->execState() == ModelAPI_StateMustBeUpdated ); - if (!isDone) - anError = toString(theFeature->data()->execState()); + QString aMsg = ModelAPI_Tools::getFeatureError(theFeature).c_str(); + if (!aMsg.isEmpty()) { + std::string aStr = Config_Translator::translate(theFeature->getKind(), aMsg.toStdString()); + std::string aCodec = Config_Translator::codec(theFeature->getKind()); + aMsg = QTextCodec::codecForName(aCodec.c_str())->toUnicode(aStr.c_str()); } - - return anError; + return aMsg; } void ModuleBase_IModule::grantedOperationIds(ModuleBase_Operation* theOperation, @@ -111,7 +127,9 @@ ModuleBase_Operation* ModuleBase_IModule::getNewOperation(const std::string& the return new ModuleBase_OperationFeature(theFeatureId.c_str(), this); } -bool ModuleBase_IModule::customizeObject(ObjectPtr theObject, const bool theUpdateViewer) +bool ModuleBase_IModule::customizeObject(ObjectPtr theObject, + const ModuleBase_IModule::ModuleBase_CustomizeFlag& theFlag, + const bool theUpdateViewer) { return false; } @@ -133,12 +151,8 @@ ModuleBase_Operation* ModuleBase_IModule::createOperation(const std::string& the } } - 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); - + std::string aXmlCfg, aDescription; + getXMLRepresentation(theFeatureId, aXmlCfg, aDescription); aFOperation->getDescription()->setDescription(QString::fromStdString(aDescription)); aFOperation->getDescription()->setXmlRepresentation(QString::fromStdString(aXmlCfg)); @@ -159,6 +173,7 @@ void ModuleBase_IModule::createFeatures() void ModuleBase_IModule::actionCreated(QAction* theFeature) { + theFeature->setStatusTip(theFeature->text()); connect(theFeature, SIGNAL(triggered(bool)), this, SLOT(onFeatureTriggered())); } @@ -197,8 +212,14 @@ void ModuleBase_IModule::onFeatureTriggered() } } 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(); + } } } @@ -227,3 +248,14 @@ 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); +}