X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_ActionsMgr.cpp;h=aa05544afe020c19395efa03ecdb88e0cc9a999e;hb=3692e4ddfe1d709b235b6f1a8b96218ead1a45c5;hp=2468786c43859ced97f6586a46310ef28c820908;hpb=ba08b49c900003e00c5fdb67d80d1a9bb8134358;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_ActionsMgr.cpp b/src/XGUI/XGUI_ActionsMgr.cpp index 2468786c4..aa05544af 100644 --- a/src/XGUI/XGUI_ActionsMgr.cpp +++ b/src/XGUI/XGUI_ActionsMgr.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> - -/* - * XGUI_ActionsMgr.cpp - */ +// Copyright (C) 2014-2024 CEA, EDF +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef HAVE_SALOME #include @@ -16,7 +29,7 @@ #include #include -#include +#include #include #include @@ -24,9 +37,14 @@ #include #include #include - +#include #include +#include + +#ifdef WIN32 +#pragma warning(disable : 4456) // for nested foreach +#endif #ifdef _DEBUG #include @@ -65,7 +83,11 @@ void XGUI_ActionsMgr::addCommand(QAction* theCmd) myActions.insert(aId, theCmd); #ifdef HAVE_SALOME XGUI_Workshop* aWorkshop = static_cast(parent()); - myNestedActions[aId] = aWorkshop->salomeConnector()->nestedActions(aId); + const std::shared_ptr& anInfo = + aWorkshop->salomeConnector()->featureInfo(aId); + if (anInfo.get()) + myNestedActions[aId] = QString::fromStdString(anInfo->nestedFeatures()) + .split(" ", QString::SkipEmptyParts); #else AppElements_Command* aXCmd = dynamic_cast(theCmd); myNestedActions[aId] = aXCmd->nestedCommands(); @@ -97,22 +119,22 @@ bool XGUI_ActionsMgr::isNested(const QString& theId) const void XGUI_ActionsMgr::updateCommandsStatus() { - setAllEnabled(true); + setAllEnabled(); XGUI_Selection* aSelection = myWorkshop->selector()->selection(); - if (aSelection->getSelected(ModuleBase_ISelection::Viewer).size() > 0) + if (aSelection->getSelected(ModuleBase_ISelection::AllControls).size() > 0) updateOnViewSelection(); FeaturePtr anActiveFeature = FeaturePtr(); ModuleBase_OperationFeature* aFOperation = dynamic_cast (myOperationMgr->currentOperation()); if (aFOperation) { - anActiveFeature = aFOperation->feature(); + anActiveFeature = aFOperation->feature(); QStringList aNested = allNestedCommands(aFOperation); foreach(QString aAction, myActions.keys()) { if (!aNested.contains(aAction)) setActionEnabled(aAction, false); } - } else + } else setNestedCommandsEnabled(false); updateByPlugins(anActiveFeature); @@ -157,7 +179,8 @@ void XGUI_ActionsMgr::updateOnViewSelection() ModelAPI_ValidatorsFactory::Validators::iterator aValidatorIt = aValidators.begin(); for (; aValidatorIt != aValidators.end(); ++aValidatorIt) { const ModuleBase_SelectionValidator* aSelValidator = - dynamic_cast(aFactory->validator(aValidatorIt->first)); + dynamic_cast + (aFactory->validator(aValidatorIt->first)); if (aSelValidator) setActionEnabled(aId, aSelValidator->isValid(aSelection, theOperation)); } @@ -173,7 +196,7 @@ QKeySequence XGUI_ActionsMgr::registerShortcut(const QKeySequence& theKeySequenc if (myShortcuts.contains(theKeySequence)) { QString aMessage = tr("Shortcut %1 is already defined. Ignore."); aMessage = aMessage.arg(theKeySequence.toString()); - Events_Error::send(aMessage.toStdString()); + Events_InfoMessage("XGUI_ActionsMgr", aMessage.toStdString()).send(); return QKeySequence(); } myShortcuts.append(theKeySequence); @@ -217,34 +240,43 @@ void XGUI_ActionsMgr::processEvent(const std::shared_ptr& theMes } } -QAction* XGUI_ActionsMgr::operationStateAction(OperationStateActionId theId, QObject* theParent) +QAction* XGUI_ActionsMgr::operationStateAction(OperationStateActionId theId) { QAction* aResult = NULL; if (myOperationActions.contains(theId)) { aResult = myOperationActions.value(theId); - if (theParent && aResult->parent() != theParent) { - aResult->setParent(theParent); - } + //if (theParent && aResult->parent() != theParent) { + // aResult->setParent(theParent); + //} } else { + QWidget* aParent = myWorkshop->desktop(); switch (theId) { case Accept: case AcceptAll: { - aResult = new QAction(QIcon(":pictures/button_ok.png"), "", theParent); - aResult->setToolTip("Apply"); + aResult = ModuleBase_Tools::createAction(QIcon(":pictures/button_ok.png"), + tr("Apply"), aParent); + } + break; + case AcceptPlus: { + aResult = ModuleBase_Tools::createAction(QIcon(":pictures/button_ok-plus.png"), + tr("Apply and continue"), aParent); } break; case Abort: case AbortAll: { - aResult = new QAction(QIcon(":pictures/button_cancel.png"), "", theParent); - aResult->setToolTip("Cancel"); - if (theId == Abort) { - aResult->setShortcut(QKeySequence(Qt::Key_Escape)); - } + aResult = ModuleBase_Tools::createAction(QIcon(":pictures/button_cancel.png"), tr("Cancel"), + aParent); } break; case Help: { - aResult = new QAction(QIcon(":pictures/button_help.png"), "", theParent); - aResult->setToolTip("Help"); + aResult = ModuleBase_Tools::createAction(QIcon(":pictures/button_help.png"), tr("Help"), + aParent); + } + break; + case Preview: { + aResult = ModuleBase_Tools::createAction(QIcon(), tr("See preview"), + aParent, 0, 0, tr("Compute preview")); + aResult->setStatusTip(aResult->toolTip()); } break; default: @@ -276,10 +308,13 @@ ActionInfo XGUI_ActionsMgr::actionInfoById(const QString& theId) return aResult; } -void XGUI_ActionsMgr::setAllEnabled(bool isEnabled) +void XGUI_ActionsMgr::setAllEnabled() { foreach(QString eachAction, myActions.keys()) { - setActionEnabled(eachAction, isEnabled); + if (myActions.contains(eachAction)) { + QAction* aAction = myActions[eachAction]; + aAction->setEnabled(true); + } } } @@ -302,7 +337,8 @@ void XGUI_ActionsMgr::setNestedCommandsEnabled(bool theEnabled, const QString& t void XGUI_ActionsMgr::setNestedStackEnabled(ModuleBase_Operation* theOperation) { - ModuleBase_OperationFeature* anOperation = dynamic_cast(theOperation); + ModuleBase_OperationFeature* anOperation = + dynamic_cast(theOperation); if(!anOperation || !anOperation->feature()) return; FeaturePtr aFeature = anOperation->feature(); @@ -316,7 +352,8 @@ void XGUI_ActionsMgr::setNestedStackEnabled(ModuleBase_Operation* theOperation) QStringList XGUI_ActionsMgr::allNestedCommands(ModuleBase_Operation* theOperation) { QStringList aFeatures; - ModuleBase_OperationFeature* anOperation = dynamic_cast(theOperation); + ModuleBase_OperationFeature* anOperation = + dynamic_cast(theOperation); if(!anOperation || !anOperation->feature()) return aFeatures; FeaturePtr aFeature = anOperation->feature(); @@ -356,17 +393,20 @@ void XGUI_ActionsMgr::updateByDocumentKind() { std::string aStdDocKind = ModelAPI_Session::get()->activeDocument()->kind(); QString aDocKind = QString::fromStdString(aStdDocKind); +#ifdef HAVE_SALOME XGUI_Workshop* aWorkshop = static_cast(parent()); +#endif foreach(QAction* eachAction, myActions.values()) { QString aCmdDocKind; #ifdef HAVE_SALOME QString aId = eachAction->data().toString(); if (!aId.isEmpty()) { - aCmdDocKind = aWorkshop->salomeConnector()->documentKind(aId); + aCmdDocKind = QString::fromStdString( + aWorkshop->salomeConnector()->featureInfo(aId)->documentKind()); } #else AppElements_Command* aCmd = dynamic_cast(eachAction); - aCmdDocKind = aCmd->documentKind(); + aCmdDocKind = QString::fromStdString(aCmd->featureMessage()->documentKind()); #endif if(!aCmdDocKind.isEmpty() && aCmdDocKind != aDocKind) { eachAction->setEnabled(false);