#include <XGUI_Workshop.h>
#include <XGUI_ActionsMgr.h>
#include <XGUI_OperationMgr.h>
+#include <XGUI_MenuWorkbench.h>
+#include <XGUI_MenuGroup.h>
#include <Events_Loop.h>
#include <Config_FeatureMessage.h>
#include <AppElements_MainWindow.h>
#include <AppElements_MenuGroupPanel.h>
#include <AppElements_Button.h>
+#else
+#include <XGUI_SalomeConnector.h>
#endif
#include <ModuleBase_IModule.h>
#endif
return;
}
-
+#ifdef HAVE_SALOME
+ std::shared_ptr<XGUI_MenuWorkbench> aWorkbench = findWorkbench(theMessage->workbenchId());
+ std::shared_ptr<XGUI_MenuGroup> aGroup = aWorkbench->findGroup(theMessage->groupId());
+ aGroup->setFeatureInfo(theMessage);
+#else
ActionInfo aFeatureInfo;
aFeatureInfo.initFrom(theMessage);
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);
myWorkshop->module()->actionCreated(aCommand);
#endif
}
+
+std::shared_ptr<XGUI_MenuWorkbench> XGUI_MenuMgr::findWorkbench(const std::string& theWorkbenchName)
+{
+ std::list< std::shared_ptr<XGUI_MenuWorkbench> >::const_iterator anIt = myWorkbenches.begin(),
+ aLast = myWorkbenches.end();
+ std::shared_ptr<XGUI_MenuWorkbench> aResultWorkbench;
+ for (; anIt != aLast && !aResultWorkbench; anIt++) {
+ std::shared_ptr<XGUI_MenuWorkbench> aWorkbench = *anIt;
+ if (aWorkbench->getName() == theWorkbenchName)
+ aResultWorkbench = aWorkbench;
+ }
+ if (!aResultWorkbench) {
+ aResultWorkbench = std::shared_ptr<XGUI_MenuWorkbench>(new XGUI_MenuWorkbench(theWorkbenchName));
+ myWorkbenches.push_back(aResultWorkbench);
+ }
+ return aResultWorkbench;
+}
+
+void XGUI_MenuMgr::createFeatureActions()
+{
+#ifdef HAVE_SALOME
+ std::list< std::shared_ptr<XGUI_MenuWorkbench> >::const_iterator anIt = myWorkbenches.begin(),
+ aLast = myWorkbenches.end();
+ XGUI_SalomeConnector* aSalomeConnector = myWorkshop->salomeConnector();
+ for (; anIt != aLast; anIt++) {
+ std::shared_ptr<XGUI_MenuWorkbench> aWorkbench = *anIt;
+ std::string aWchName = aWorkbench->getName();
+ const std::list<std::shared_ptr<XGUI_MenuGroup> >& aGroups = aWorkbench->groups();
+ std::list<std::shared_ptr<XGUI_MenuGroup> >::const_iterator aGIt = aGroups.begin(),
+ aGLast = aGroups.end();
+ for (; aGIt != aGLast; aGIt++) {
+ const std::shared_ptr<XGUI_MenuGroup> aGroup = *aGIt;
+ std::string aGName = aGroup->getName();
+ const std::list<std::shared_ptr<Config_FeatureMessage> >& aFeaturesInfo = aGroup->featuresInfo();
+ std::list<std::shared_ptr<Config_FeatureMessage> >::const_iterator aFIt = aFeaturesInfo.begin(),
+ aFLast = aFeaturesInfo.end();
+ int aFSize = aFeaturesInfo.size();
+ for(int i = 0; aFIt != aFLast; aFIt++, i++) {
+ std::shared_ptr<Config_FeatureMessage> 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<Config_FeatureMessage>& 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<QAction*> 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 {
+ anAction = aSalomeConnector->addFeature(theWchName.c_str(), aFeatureInfo, aUseSeparator);
+ }
+#endif
+ return anAction;
+}