X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ActionsMgr.cpp;h=8d2eada7c492bd5ae4a04d0a51c8c03182e2d5ce;hb=8ebc9a7d5f87057b61b174e7568e01e44571549d;hp=851e3fef0adff9e5feb81c9e2eb35d4f5c9b7f49;hpb=3d7368386762b057fff327d24d0079b4a73c3004;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ActionsMgr.cpp b/src/XGUI/XGUI_ActionsMgr.cpp index 851e3fef0..8d2eada7c 100644 --- a/src/XGUI/XGUI_ActionsMgr.cpp +++ b/src/XGUI/XGUI_ActionsMgr.cpp @@ -128,51 +128,71 @@ void XGUI_ActionsMgr::updateCheckState() void XGUI_ActionsMgr::updateOnViewSelection() { - XGUI_Selection* aSelection = myWorkshop->selector()->selection(); - if (aSelection->getSelected().size() == 0 || !myOperationMgr->hasOperation()) + if (!myOperationMgr->hasOperation()) return; - ModuleBase_Operation* anOperation = myOperationMgr->currentOperation(); - FeaturePtr anActiveFeature = anOperation->feature(); - if(!anActiveFeature.get()) + + QStringList aIdList = myOperationMgr->operationList(); + //ModuleBase_Operation* anOperation = myOperationMgr->currentOperation(); + //FeaturePtr anActiveFeature = anOperation->feature(); + //if(!anActiveFeature.get()) + if (aIdList.isEmpty()) return; - QString aFeatureId = QString::fromStdString(anActiveFeature->getKind()); - - SessionPtr aMgr = ModelAPI_Session::get(); - ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - foreach(QString aId, nestedCommands(aFeatureId)) { - std::list aValidators; - std::list > anArguments; - if (!anArguments.empty()) { - std::list firstArg = anArguments.front(); - } - aFactory->validators(aId.toStdString(), aValidators, anArguments); - std::list::iterator aValidator = aValidators.begin(); - std::list >::iterator aValidatorArgs = anArguments.begin(); - for (; aValidator != aValidators.end(); aValidator++, aValidatorArgs++) { - if (!(*aValidator)) - continue; - const ModuleBase_SelectionValidator* aSelValidator = - dynamic_cast(*aValidator); - if (!aSelValidator) - continue; - setActionEnabled(aId, aSelValidator->isValid(aSelection, *aValidatorArgs)); + //QString aFeatureId = QString::fromStdString(anActiveFeature->getKind()); + XGUI_Selection* aSelection = myWorkshop->selector()->selection(); + // only viewer selection is processed + if (aSelection->getSelected(ModuleBase_ISelection::Viewer).size() == 0) { + // it seems that this code is not nesessary anymore. It leads to incorrect case: + // sketch operation start, click in any place in the viewer. The result is all nested + // entities are enabled(but the sketch plane is not selected yet). Any sketch operation + // can be started but will be incorrect on preview build before it uses the sketch unset plane. + /*foreach(QString aFeatureId, aIdList) { + foreach(QString aId, nestedCommands(aFeatureId)) { + setActionEnabled(aId, true); + } + }*/ + } else { + SessionPtr aMgr = ModelAPI_Session::get(); + ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); + foreach(QString aFeatureId, aIdList) { + foreach(QString aId, nestedCommands(aFeatureId)) { + ModelAPI_ValidatorsFactory::Validators aValidators; + aFactory->validators(aId.toStdString(), aValidators); + ModelAPI_ValidatorsFactory::Validators::iterator aValidatorIt = aValidators.begin(); + for (; aValidatorIt != aValidators.end(); ++aValidatorIt) { + const ModuleBase_SelectionValidator* aSelValidator = + dynamic_cast(aFactory->validator(aValidatorIt->first)); + if (!aSelValidator) + continue; + setActionEnabled(aId, aSelValidator->isValid(aSelection, aValidatorIt->second)); + } + } } } } -QKeySequence XGUI_ActionsMgr::registerShortcut(const QString& theKeySequence) +QKeySequence XGUI_ActionsMgr::registerShortcut(const QKeySequence& theKeySequence) { if (theKeySequence.isEmpty()) { return QKeySequence(); } - QKeySequence aResult(theKeySequence); - if (myShortcuts.contains(aResult)) { - QString aMessage = tr("Shortcut %1 is already defined. Ignore.").arg(theKeySequence); + if (myShortcuts.contains(theKeySequence)) { + QString aMessage = tr("Shortcut %1 is already defined. Ignore."); + aMessage = aMessage.arg(theKeySequence.toString()); Events_Error::send(aMessage.toStdString()); return QKeySequence(); } - myShortcuts.append(aResult); + myShortcuts.append(theKeySequence); + return theKeySequence; +} + +QKeySequence XGUI_ActionsMgr::registerShortcut(const QString& theKeySequence) +{ + if (theKeySequence.isEmpty()) { + return QKeySequence(); + } + QKeySequence aResult(theKeySequence); + registerShortcut(aResult); return aResult; } @@ -203,6 +223,51 @@ void XGUI_ActionsMgr::processEvent(const std::shared_ptr& theMes } } +QAction* XGUI_ActionsMgr::operationStateAction(OperationStateActionId theId, QObject* theParent) +{ + QAction* aResult = NULL; + if (myOperationActions.contains(theId)) { + aResult = myOperationActions.value(theId); + if (theParent && aResult->parent() != theParent) { + aResult->setParent(theParent); + } + } else { + switch (theId) { + case Accept: + case AcceptAll: + aResult = new QAction(QIcon(":pictures/button_ok.png"), "", theParent); + break; + case Abort: + case AbortAll: { + aResult = new QAction(QIcon(":pictures/button_cancel.png"), "", theParent); + if(theId == Abort) { + aResult->setShortcut(QKeySequence(Qt::Key_Escape)); + } + } + break; + case Help: + aResult = new QAction(QIcon(":pictures/button_help.png"), "", theParent); + break; + default: + break; + } + myOperationActions.insert(theId, aResult); + } + return aResult; +} + +ActionInfo XGUI_ActionsMgr::actionInfoById(const QString& theId) +{ + ActionInfo aResult; + if(myActions.contains(theId)) { + aResult.initFrom(myActions.value(theId)); + } else { + aResult.id = theId; + aResult.text = theId; + } + return aResult; +} + void XGUI_ActionsMgr::setAllEnabled(bool isEnabled) { foreach(QString eachAction, myActions.keys()) @@ -234,6 +299,7 @@ void XGUI_ActionsMgr::setNestedStackEnabled(ModuleBase_Operation* theOperation) return; FeaturePtr aFeature = theOperation->feature(); QString aFeatureId = QString::fromStdString(aFeature->getKind()); + setActionEnabled(aFeatureId, true); setNestedCommandsEnabled(true, aFeatureId); setNestedStackEnabled(myOperationMgr->previousOperation(theOperation)); @@ -286,8 +352,8 @@ void XGUI_ActionsMgr::updateByPlugins(FeaturePtr anActiveFeature) { static Events_ID aStateRequestEventId = Events_Loop::loop()->eventByName( EVENT_FEATURE_STATE_REQUEST); - std::shared_ptr aMsg = - std::make_shared(aStateRequestEventId, this); + std::shared_ptr aMsg( + new ModelAPI_FeatureStateMessage(aStateRequestEventId, this)); aMsg->setFeature(anActiveFeature); Events_Loop::loop()->send(aMsg, false); }