X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_MenuMgr.cpp;h=4e1dedeffc1eccdcf51ce120ba6bd5411264e630;hb=79b3cdc4791257ddc2d41dd891e41509459a02af;hp=8dff16c1f295fbd9ce53bd3039a810b6608eaa7e;hpb=a4ffa6e5a1578063cf8e3003b3ef98dbd3f32324;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_MenuMgr.cpp b/src/XGUI/XGUI_MenuMgr.cpp index 8dff16c1f..4e1dedeff 100755 --- a/src/XGUI/XGUI_MenuMgr.cpp +++ b/src/XGUI/XGUI_MenuMgr.cpp @@ -60,16 +60,11 @@ void XGUI_MenuMgr::addFeature(const std::shared_ptr& theM #endif return; } - { - std::string aWchName = theMessage->workbenchId(); - std::shared_ptr aWorkbench = findWorkbench(aWchName); - - std::string aGroupName = theMessage->groupId(); - std::shared_ptr aGroup = aWorkbench->findGroup(aGroupName); - - aGroup->setFeatureInfo(theMessage); - } - +#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); @@ -83,32 +78,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); + QAction* anAction = anActionsMgr->operationStateAction(XGUI_ActionsMgr::AbortAll); QObject::connect(anAction, SIGNAL(triggered()), anOperationMgr, SLOT(abortAllOperations())); 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); @@ -138,7 +118,7 @@ void XGUI_MenuMgr::addFeature(const std::shared_ptr& theM #endif } -std::shared_ptr XGUI_MenuMgr::findWorkbench(std::string& theWorkbenchName) +std::shared_ptr XGUI_MenuMgr::findWorkbench(const std::string& theWorkbenchName) { std::list< std::shared_ptr >::const_iterator anIt = myWorkbenches.begin(), aLast = myWorkbenches.end(); @@ -154,3 +134,75 @@ std::shared_ptr XGUI_MenuMgr::findWorkbench(std::string& the } 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(); + int 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(abortAllOperations())); + aNestedActList << anAction; + } + anAction = aSalomeConnector->addFeatureOfNested(theWchName.c_str(), aFeatureInfo, + aNestedActList); + } + else { + //Issue #650: in the SALOME mode the tooltip should be same as text + aFeatureInfo.toolTip = aFeatureInfo.text; + anAction = aSalomeConnector->addFeature(theWchName.c_str(), aFeatureInfo, aUseSeparator); + } +#endif + return anAction; +}