X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_MenuMgr.cpp;h=577685a87a0a792cc83dca533665432292f7e2bf;hb=3ef3b583309df4b9d0593c7abd181ab9d6fed42e;hp=085797eb06960545aefa2a382c347a59f7b96b29;hpb=88e8b404bd38608fe57b1720e94173b677612976;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_MenuMgr.cpp b/src/XGUI/XGUI_MenuMgr.cpp index 085797eb0..577685a87 100755 --- a/src/XGUI/XGUI_MenuMgr.cpp +++ b/src/XGUI/XGUI_MenuMgr.cpp @@ -1,13 +1,29 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: XGUI_MenuMgr.cpp -// Created: 13 Apr 2016 -// Author: Natalia ERMOLAEVA +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// 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 +// #include #include #include #include +#include +#include #include #include @@ -20,6 +36,8 @@ #include #include #include +#else +#include #endif #include @@ -39,7 +57,8 @@ XGUI_MenuMgr::XGUI_MenuMgr(XGUI_Workshop* theWorkshop) void XGUI_MenuMgr::processEvent(const std::shared_ptr& theMessage) { //A message to start feature creation received. - if (theMessage->eventID() == Events_Loop::loop()->eventByName(Config_FeatureMessage::GUI_EVENT())) { + if (theMessage->eventID() == + Events_Loop::loop()->eventByName(Config_FeatureMessage::GUI_EVENT())) { std::shared_ptr aFeatureMsg = std::dynamic_pointer_cast(theMessage); if (!aFeatureMsg->isInternal()) { @@ -56,7 +75,11 @@ void XGUI_MenuMgr::addFeature(const std::shared_ptr& theM #endif return; } - +#ifdef HAVE_SALOME + std::shared_ptr aWorkbench = findWorkbench(theMessage->workbenchId()); + std::shared_ptr aGroup = aWorkbench->findGroup(theMessage->groupId()); + aGroup->setFeatureInfo(theMessage); +#else ActionInfo aFeatureInfo; aFeatureInfo.initFrom(theMessage); @@ -70,32 +93,17 @@ void XGUI_MenuMgr::addFeature(const std::shared_ptr& theM XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr(); XGUI_ActionsMgr* anActionsMgr = myWorkshop->actionsMgr(); if (aNestedActions.contains(FEATURE_WHEN_NESTED_ACCEPT)) { - QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll, NULL); + QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll); QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(commitAllOperations())); aNestedActList << anAction; } if (aNestedActions.contains(FEATURE_WHEN_NESTED_ABORT)) { - QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll, NULL); - QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(abortAllOperations())); + QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll); + QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(onAbortAllOperation())); aNestedActList << anAction; } } -#ifdef HAVE_SALOME - XGUI_SalomeConnector* aSalomeConnector = myWorkshop->salomeConnector(); - QAction* aAction; - if (isColumnButton) { - aAction = aSalomeConnector->addFeatureOfNested(aWchName, aFeatureInfo, aNestedActList); - } else { - //Issue #650: in the SALOME mode the tooltip should be same as text - aFeatureInfo.toolTip = aFeatureInfo.text; - aAction = aSalomeConnector->addFeature(aWchName, aFeatureInfo); - } - aSalomeConnector->setFeatureInfo(aFeatureInfo.id, theMessage); - - myWorkshop->actionsMgr()->addCommand(aAction); - myWorkshop->module()->actionCreated(aAction); -#else //Find or create Workbench AppElements_MainMenu* aMenuBar = myWorkshop->mainWindow()->menuObject(); AppElements_Workbench* aPage = aMenuBar->findWorkbench(aWchName); @@ -124,3 +132,92 @@ void XGUI_MenuMgr::addFeature(const std::shared_ptr& theM myWorkshop->module()->actionCreated(aCommand); #endif } + +std::shared_ptr XGUI_MenuMgr::findWorkbench(const std::string& theWorkbenchName) +{ + std::list< std::shared_ptr >::const_iterator anIt = myWorkbenches.begin(), + aLast = myWorkbenches.end(); + std::shared_ptr aResultWorkbench; + for (; anIt != aLast && !aResultWorkbench; anIt++) { + std::shared_ptr aWorkbench = *anIt; + if (aWorkbench->getName() == theWorkbenchName) + aResultWorkbench = aWorkbench; + } + if (!aResultWorkbench) { + aResultWorkbench = + std::shared_ptr(new XGUI_MenuWorkbench(theWorkbenchName)); + myWorkbenches.push_back(aResultWorkbench); + } + return aResultWorkbench; +} + +void XGUI_MenuMgr::createFeatureActions() +{ +#ifdef HAVE_SALOME + std::list< std::shared_ptr >::const_iterator anIt = myWorkbenches.begin(), + aLast = myWorkbenches.end(); + XGUI_SalomeConnector* aSalomeConnector = myWorkshop->salomeConnector(); + for (; anIt != aLast; anIt++) { + std::shared_ptr aWorkbench = *anIt; + std::string aWchName = aWorkbench->getName(); + const std::list >& aGroups = aWorkbench->groups(); + std::list >::const_iterator aGIt = aGroups.begin(), + aGLast = aGroups.end(); + for (; aGIt != aGLast; aGIt++) { + const std::shared_ptr aGroup = *aGIt; + std::string aGName = aGroup->getName(); + const std::list >& aFeaturesInfo = + aGroup->featuresInfo(); + std::list >::const_iterator aFIt = + aFeaturesInfo.begin(), aFLast = aFeaturesInfo.end(); + size_t aFSize = aFeaturesInfo.size(); + for(int i = 0; aFIt != aFLast; aFIt++, i++) { + std::shared_ptr aMessage = *aFIt; + bool aUseSeparator = i == aFSize-1; + QAction* aAction = buildAction(aMessage, aWchName, aUseSeparator); + + aSalomeConnector->setFeatureInfo(QString::fromStdString(aMessage->id()), aMessage); + myWorkshop->actionsMgr()->addCommand(aAction); + myWorkshop->module()->actionCreated(aAction); + } + } + } +#endif +} + +QAction* XGUI_MenuMgr::buildAction(const std::shared_ptr& theMessage, + const std::string& theWchName, const bool aUseSeparator) const +{ + QAction* anAction = 0; + +#ifdef HAVE_SALOME + XGUI_SalomeConnector* aSalomeConnector = myWorkshop->salomeConnector(); + + ActionInfo aFeatureInfo; + aFeatureInfo.initFrom(theMessage); + QStringList aNestedFeatures = + QString::fromStdString(theMessage->nestedFeatures()).split(" ", QString::SkipEmptyParts); + QList aNestedActList; + if (!aNestedFeatures.isEmpty()) { + QString aNestedActions = QString::fromStdString(theMessage->actionsWhenNested()); + XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr(); + XGUI_ActionsMgr* anActionsMgr = myWorkshop->actionsMgr(); + if (aNestedActions.contains(FEATURE_WHEN_NESTED_ACCEPT)) { + QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AcceptAll); + QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(commitAllOperations())); + aNestedActList << anAction; + } + if (aNestedActions.contains(FEATURE_WHEN_NESTED_ABORT)) { + QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll); + QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(onAbortAllOperation())); + aNestedActList << anAction; + } + anAction = aSalomeConnector->addFeatureOfNested(theWchName.c_str(), aFeatureInfo, + aNestedActList); + } + else { + anAction = aSalomeConnector->addFeature(theWchName.c_str(), aFeatureInfo, aUseSeparator); + } +#endif + return anAction; +}