Salome HOME
ParaView view title.
[modules/paravis.git] / src / PVGUI / PVGUI_Module.cxx
index dfd21120096977946b5748c6f0aa331f3f2ceb3b..752c7ea7a1a79ca0f82c69062ae5cc2d5808c024 100644 (file)
@@ -1,4 +1,4 @@
-// LIGHT : sample (no-corba-engine) SALOME module
+// PARAVIS : ParaView wrapper SALOME module
 //
 // Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 
 #include "PVGUI_Module.h"
+#include "PVGUI_Module_impl.h"
 #include "PVGUI_ProcessModuleHelper.h"
 #include "PVGUI_ViewModel.h"
 #include "PVGUI_ViewManager.h"
 #include "PVGUI_ViewWindow.h"
 
-#include <SUIT_MessageBox.h>
 #include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
-#include <QtxActionMenuMgr.h>
+#include <QtxActionToolMgr.h>
 
+#include <QAction>
 #include <QApplication>
-#include <QDockWidget>
-#include <QInputDialog>
-#include <QStringList>
-#include <QMenu>
+#include <QCursor>
+#include <QDir>
+#include <QFile>
+#include <QFileInfo>
 #include <QIcon>
+#include <QInputDialog>
+#include <QStatusBar>
 #include <QString>
+#include <QStringList>
+#include <QTimer>
+#include <QToolBar>
 
-#include <pqOptions.h>
 #include <pqApplicationCore.h>
 #include <pqActiveServer.h>
-#include <pqComparativeVisPanel.h>
-#include <pqMainWindowCore.h>
+#include <pqActiveView.h>
+#include <pqClientAboutDialog.h>
 #include <pqObjectBuilder.h>
-#include <pqPipelineBrowser.h>
-#include <pqPipelineMenu.h>
+#include <pqOptions.h>
+#include <pqRenderView.h>
+#include <pqRubberBandHelper.h>
 #include <pqServer.h>
 #include <pqServerManagerModel.h>
 #include <pqServerResource.h>
+#include <pqUndoStack.h>
+#include <pqVCRController.h>
 #include <pqViewManager.h>
 #include <vtkPVMain.h>
 #include <vtkProcessModule.h>
@@ -125,49 +135,6 @@ void ParaViewInitializeInterpreter(vtkProcessModule* pm)
   vtkXdmfCS_Initialize(pm->GetInterpreter());
 }
 
-//////////////////////////////////////////////////////////////////////////////
-// PVGUI_Module::pqImplementation
-
-class PVGUI_Module::pqImplementation
-{
-public:
-  pqImplementation(QWidget* parent) :
-    //AssistantClient(0),
-    Core(parent)//,
-    //RecentFilesMenu(0),
-    //ViewMenu(0),
-    //ToolbarsMenu(0)
-  {
-  }
-
-  ~pqImplementation()
-  {
-    //delete this->ViewMenu;
-    //delete this->ToolbarsMenu;
-    //if(this->AssistantClient)
-    //  {
-    //  this->AssistantClient->closeAssistant();
-    //  delete this->AssistantClient;
-    //  }
-  }
-
-  //QPointer<QAssistantClient> AssistantClient;
-  //Ui::MainWindow UI;
-  pqMainWindowCore Core;
-  //pqRecentFilesMenu* RecentFilesMenu;
-  //pqViewMenu* ViewMenu;
-  //pqViewMenu* ToolbarsMenu;
-  //QLineEdit* CurrentTimeWidget;
-  //QSpinBox* CurrentTimeIndexWidget;
-  QPointer<pqServer> ActiveServer;
-  QString DocumentationDir;
-
-  static vtkPVMain* myPVMain;
-  static pqOptions* myPVOptions;
-  static PVGUI_ProcessModuleHelper* myPVHelper;
-};
-
-
 vtkPVMain*                 PVGUI_Module::pqImplementation::myPVMain = 0;
 pqOptions*                 PVGUI_Module::pqImplementation::myPVOptions = 0;
 PVGUI_ProcessModuleHelper* PVGUI_Module::pqImplementation::myPVHelper = 0;
@@ -376,163 +343,323 @@ void PVGUI_Module::showView( bool toShow )
     PVGUI_ViewWindow* pvWnd = dynamic_cast<PVGUI_ViewWindow*>( wnd );
     pvWnd->setMultiViewManager( &Implementation->Core.multiViewManager() );
 
-    pvCreateActions();
     setupDockWidgets();
+    
+    pvCreateActions();
+    pvCreateMenus();
+    pvCreateToolBars();
+    
+    setupDockWidgetsContextMenu();
 
     // Now that we're ready, initialize everything ...
     Implementation->Core.initializeStates();
   }
 }
+
+/*!
+  \brief Manage the label of Undo operation.
+*/
+void PVGUI_Module::onUndoLabel( const QString& label )
+{
+  action(UndoId)->setText(
+    label.isEmpty() ? tr("Can't Undo") : QString(tr("&Undo %1")).arg(label));
+  action(UndoId)->setStatusTip(
+    label.isEmpty() ? tr("Can't Undo") : QString(tr("Undo %1")).arg(label));
+}
+
 /*!
-  \brief Create actions for ParaView GUI operations
-  duplicating menus and toolbars in MainWindow class of
-  the standard ParaView GUI client application.
+  \brief Manage the label of Redo operation.
+*/
+void PVGUI_Module::onRedoLabel( const QString& label )
+{
+  action(RedoId)->setText(
+    label.isEmpty() ? tr("Can't Redo") : QString(tr("&Redo %1")).arg(label));
+  action(RedoId)->setStatusTip(
+    label.isEmpty() ? tr("Can't Redo") : QString(tr("Redo %1")).arg(label));
+}
 
-  In particular, ParaView is responsible for updating "Sources" and "Filters" menus. 
-  For this, specific menu managers created by pqMainWindowCore class are used, and PVGUI_Module
-  is responsible for creation of corresponding QMenu objects only.
+/*!
+  \brief Manage the label of Undo Camera operation.
 */
-void PVGUI_Module::pvCreateActions()
+void PVGUI_Module::onCameraUndoLabel( const QString& label )
 {
-  // TODO...
-  SUIT_Desktop* desk = application()->desktop();
-
-  // Manage plug-ins
-  int actionManagePlugins = 999;
-  createAction( actionManagePlugins, tr( "TOP_MANAGE_PLUGINS" ), QIcon(), tr( "MEN_MANAGE_PLUGINS" ),
-                tr( "STB_MANAGE_PLUGINS" ), 0, desk, false, &Implementation->Core, SLOT( onManagePlugins() ) );
-  int aPVMnu = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
-  createMenu( actionManagePlugins, aPVMnu, 10 );
-
-  // Install ParaView managers for "Sources" and "Filters" menus
-  QMenu* res = 0;
-  aPVMnu = createMenu( tr( "Sources" ), -1, -1, 60 );
-  res = getMenu( aPVMnu );
-  if ( res ){
-    Implementation->Core.setSourceMenu( res );
-    connect(&this->Implementation->Core,
-            SIGNAL(enableSourceCreate(bool)),
-            res,
-            SLOT(setEnabled(bool)));
+  action(CameraUndoId)->setText(
+    label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("U&ndo %1")).arg(label));
+  action(CameraUndoId)->setStatusTip(
+    label.isEmpty() ? tr("Can't Undo Camera") : QString(tr("Undo %1")).arg(label));
+}
+
+/*!
+  \brief Manage the label of Redo Camera operation.
+*/
+void PVGUI_Module::onCameraRedoLabel( const QString& label )
+{
+  action(CameraRedoId)->setText(
+    label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("R&edo %1")).arg(label));
+  action(CameraRedoId)->setStatusTip(
+    label.isEmpty() ? tr("Can't Redo Camera") : QString(tr("Redo %1")).arg(label));
+}
+
+/*!
+  \brief Slot to delete all objects.
+*/
+void PVGUI_Module::onDeleteAll()
+{
+  pqObjectBuilder* builder = pqApplicationCore::instance()->getObjectBuilder();
+  Implementation->Core.getApplicationUndoStack()->beginUndoSet("Delete All");
+  builder->destroyPipelineProxies();
+  Implementation->Core.getApplicationUndoStack()->endUndoSet();
+}
+
+/*!
+  \brief Slot to check/uncheck the action for corresponding selection mode.
+*/
+void PVGUI_Module::onSelectionModeChanged( int mode )
+{
+  if( toolMgr()->toolBar( mySelectionControlsTb )->isEnabled() ) {
+    if(mode == pqRubberBandHelper::SELECT) //surface selection
+      action(SelectCellsOnId)->setChecked(true);
+    else if(mode == pqRubberBandHelper::SELECT_POINTS) //surface selection
+      action(SelectPointsOnId)->setChecked(true);
+    else if(mode == pqRubberBandHelper::FRUSTUM)
+      action(SelectCellsThroughId)->setChecked(true);
+    else if(mode == pqRubberBandHelper::FRUSTUM_POINTS)
+      action(SelectPointsThroughId)->setChecked(true);
+    else if (mode == pqRubberBandHelper::BLOCKS)
+      action(SelectBlockId)->setChecked(true);
+    else // INTERACT
+      action(InteractId)->setChecked(true);
   }
-  aPVMnu = createMenu( tr( "Filters" ), -1, -1, 70 );
-  res = getMenu( aPVMnu );
-  if ( res ){
-    Implementation->Core.setFilterMenu( res );
-    connect(&this->Implementation->Core,
-            SIGNAL(enableFilterCreate(bool)),
-            res,
-            SLOT(setEnabled(bool)));
+}
+
+/*!
+  \brief Slot to manage the change of axis center.
+*/
+void PVGUI_Module::onShowCenterAxisChanged( bool enabled )
+{
+  action(ShowCenterId)->setEnabled(enabled);
+  action(ShowCenterId)->blockSignals(true);
+  pqRenderView* renView = qobject_cast<pqRenderView*>(
+    pqActiveView::instance().current());
+  action(ShowCenterId)->setChecked( renView ? renView->getCenterAxesVisibility() : false);
+  action(ShowCenterId)->blockSignals(false);
+}
+
+/*!
+  \brief Slot to set tooltips for the first anf the last frames, i.e. a time range of animation.
+*/
+void PVGUI_Module::setTimeRanges( double start, double end )
+{
+  action(FirstFrameId)->setToolTip(QString("First Frame (%1)").arg(start, 0, 'g'));
+  action(LastFrameId)->setToolTip(QString("Last Frame (%1)").arg(end, 0, 'g'));
+}
+
+/*!
+  \brief Slot to manage the plaing process of animation.
+*/
+void PVGUI_Module::onPlaying( bool playing )
+{
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  if(playing) {
+    disconnect( action(PlayId),                        SIGNAL( triggered() ),
+               &Implementation->Core.VCRController(), SLOT( onPlay() ) );
+    connect( action(PlayId),                        SIGNAL( triggered() ),
+            &Implementation->Core.VCRController(), SLOT( onPause() ) );
+    action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PAUSE"),false)));
+    action(PlayId)->setText("Pa&use");
+  }
+  else {
+    connect( action(PlayId),                        SIGNAL( triggered() ),
+            &Implementation->Core.VCRController(), SLOT( onPlay() ) );
+    disconnect( action(PlayId),                        SIGNAL( triggered() ),
+               &Implementation->Core.VCRController(), SLOT( onPause() ) );
+    action(PlayId)->setIcon(QIcon(resMgr->loadPixmap("ParaView",tr("ICON_PLAY"),false)));
+    action(PlayId)->setText("&Play");
   }
+
+  Implementation->Core.setSelectiveEnabledState(!playing);
 }
 
+/*!
+  \brief Slot to add camera link.
+*/
+void PVGUI_Module::onAddCameraLink()
+{
+  pqView* vm = pqActiveView::instance().current();
+  pqRenderView* rm = qobject_cast<pqRenderView*>(vm);
+  if(rm) rm->linkToOtherView();
+  else SUIT_MessageBox::warning(getApp()->desktop(),
+                               tr("WARNING"), tr("WRN_ADD_CAMERA_LINK"));
+}
 
 /*!
-  \brief Create dock widgets for ParaView widgets such as object inspector, pipeline browser, etc.
-  ParaView pqMainWIndowCore class is fully responsible for these dock widgets' contents.
+  \brief Slot to show information about ParaView.
 */
-void PVGUI_Module::setupDockWidgets()
+void PVGUI_Module::onHelpAbout()
 {
-  SUIT_Desktop* desk = application()->desktop();
-
-  // See ParaView src/Applications/Client/MainWindow.cxx
-  QDockWidget* pipelineBrowserDock = new QDockWidget( tr( "Pipeline Browser" ), desk );
-  pipelineBrowserDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea );
-  desk->addDockWidget( Qt::LeftDockWidgetArea, pipelineBrowserDock );
-  Implementation->Core.setupPipelineBrowser( pipelineBrowserDock );
-  pqPipelineBrowser *browser = Implementation->Core.pipelineBrowser();
-  Implementation->Core.pipelineMenu().setModels(browser->getModel(), browser->getSelectionModel());
-  // TODO...
-  /*connect(this->Implementation->UI.actionChangeInput, SIGNAL(triggered()),
-    browser, SLOT(changeInput()));
-  connect(this->Implementation->UI.actionDelete, SIGNAL(triggered()),
-    browser, SLOT(deleteSelected()));
-  pqPipelineBrowserContextMenu *browserMenu =
-    new pqPipelineBrowserContextMenu(browser);
-  browserMenu->setMenuAction(this->Implementation->UI.actionFileOpen);
-  browserMenu->setMenuAction(this->Implementation->UI.actionChangeInput);
-  browserMenu->setMenuAction(this->Implementation->UI.actionDelete);
-  browserMenu->setMenuAction(this->Implementation->UI.actionToolsCreateCustomFilter);*/
-
-  QDockWidget* objectInspectorDock = new QDockWidget( tr( "Object Inspector" ), desk );
-  objectInspectorDock->setAllowedAreas( Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea );
-  desk->addDockWidget( Qt::LeftDockWidgetArea, objectInspectorDock );
-  pqProxyTabWidget* const proxyTab = Implementation->Core.setupProxyTabWidget( objectInspectorDock );
-  // TODO...
-  /*  QObject::connect(
-    proxyTab->getObjectInspector(),
-    SIGNAL(helpRequested(QString)),
-    this,
-    SLOT(showHelpForProxy(QString)));
-
-  QObject::connect(
-    proxyTab->getObjectInspector(),
-    SIGNAL(preaccept()),
-    this,
-    SLOT(onPreAccept()));
-
-  QObject::connect(
-    proxyTab->getObjectInspector(),
-    SIGNAL(postaccept()),
-    this,
-    SLOT(onPostAccept()));*/
-
-  QDockWidget* statisticsViewDock  = new QDockWidget( tr( "Statistics View" ), desk );
-  statisticsViewDock->setAllowedAreas( Qt::BottomDockWidgetArea|Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea );
-  desk->addDockWidget( Qt::BottomDockWidgetArea, statisticsViewDock );
-  Implementation->Core.setupStatisticsView( statisticsViewDock );
-
-  QDockWidget* animationPanelDock  = new QDockWidget( tr( "Animation Inspector" ), desk );
-  desk->addDockWidget( Qt::LeftDockWidgetArea, animationPanelDock );
-  pqAnimationPanel* animation_panel = Implementation->Core.setupAnimationPanel( animationPanelDock );
-  // TODO...
-  /*  animation_panel->setCurrentTimeToolbar(
-      this->Implementation->UI.currentTimeToolbar);*/
-
-  QDockWidget* lookmarkBrowserDock = new QDockWidget( tr( "Lookmark Browser" ), desk );
-  QSizePolicy sp( QSizePolicy::Preferred, QSizePolicy::Preferred );
-  sp.setHorizontalStretch( 0 );
-  sp.setVerticalStretch( 0 );
-  lookmarkBrowserDock->setSizePolicy( sp );
-  lookmarkBrowserDock->setFloating( false );
-  desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkBrowserDock );
-  Implementation->Core.setupLookmarkBrowser( lookmarkBrowserDock );
-
-  QDockWidget* lookmarkInspectorDock = new QDockWidget( tr( "Lookmark Inspector" ), desk );
-  lookmarkInspectorDock->setAllowedAreas( Qt::RightDockWidgetArea );
-  desk->addDockWidget( Qt::RightDockWidgetArea, lookmarkInspectorDock );
-  Implementation->Core.setupLookmarkInspector( lookmarkInspectorDock );
-
-  QDockWidget* comparativePanelDock  = new QDockWidget( tr( "Comparative View Inspector" ), desk );
-  desk->addDockWidget( Qt::LeftDockWidgetArea, comparativePanelDock );
-  pqComparativeVisPanel* cv_panel    = new pqComparativeVisPanel( comparativePanelDock );
-  comparativePanelDock->setWidget(cv_panel);
-
-  QDockWidget* animationViewDock     = new QDockWidget( tr( "Animation View" ), desk );
-  desk->addDockWidget( Qt::BottomDockWidgetArea, animationViewDock );
-  Implementation->Core.setupAnimationView( animationViewDock );
-
-  QDockWidget* selectionInspectorDock = new QDockWidget( tr( "Selection Inspector" ), desk );
-  selectionInspectorDock->setAllowedAreas( Qt::AllDockWidgetAreas );
-  desk->addDockWidget( Qt::LeftDockWidgetArea, selectionInspectorDock );
-  Implementation->Core.setupSelectionInspector( selectionInspectorDock );
-
-  // Setup the statusbar ...
-  Implementation->Core.setupProgressBar( desk->statusBar() );
-
-  // Set up the dock window corners to give the vertical docks more room.
-  desk->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
-  desk->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
-
-  // Setup the default dock configuration ...
-  lookmarkBrowserDock->hide();
-  lookmarkInspectorDock->hide();
-  statisticsViewDock->hide();
-  animationPanelDock->hide();
-  comparativePanelDock->hide();
-  animationViewDock->hide();
-  selectionInspectorDock->hide();
+  pqClientAboutDialog* const dialog = new pqClientAboutDialog(getApp()->desktop());
+  dialog->setAttribute(Qt::WA_DeleteOnClose);
+  dialog->show();
+}
+
+/*!
+  \brief Slot to show help for proxy.
+*/
+void PVGUI_Module::showHelpForProxy( const QString& proxy )
+{
+  // make sure assistant is ready
+  this->makeAssistant();
+
+  if(this->Implementation->AssistantClient) {
+    this->Implementation->AssistantClient->openAssistant();
+    QString page("%1/Documentation/%2.html");
+    page = page.arg(this->Implementation->DocumentationDir);
+    page = page.arg(proxy);
+    this->Implementation->AssistantClient->showPage(page);
+  }
+}
+
+QString Locate( const QString& appName )
+{
+  QString app_dir = QCoreApplication::applicationDirPath();
+  const char* inst_dirs[] = {
+    "/./",
+    "/../bin/",
+    "/../../bin/",
+    0
+  };
+  for (const char** dir = inst_dirs; *dir; ++dir) {
+    QString path = app_dir;
+    path += *dir;
+    path += appName;
+    //cout << "Checking : " << path.toAscii().data() << " ... ";
+    //cout.flush();
+    QFileInfo finfo (path);
+    if (finfo.exists()) {
+      //cout << " Success!" << endl;
+      return path;
+    }
+    //cout << " Failed" << endl;
+  }
+  return app_dir + QDir::separator() + appName;
+}
+
+/*!
+  \brief Initialized an assistant client.
+*/
+void PVGUI_Module::makeAssistant()
+{
+  if(this->Implementation->AssistantClient)
+    return;
+  
+  QString assistantExe;
+  QString profileFile;
+  
+  const char* assistantName = "assistant";
+#ifdef WNT
+  const char* extString = ".exe";
+  const char* binDir = "\\";
+  const char* binDir1 = "\\..\\";
+#else
+  const char* extString = "";
+  const char* binDir = "/";
+  const char* binDir1 = "/";
+#endif
+
+  QString assistantProgName;
+  assistantProgName = assistantProgName + assistantName + extString;
+
+  QString helper = QCoreApplication::applicationDirPath() + binDir + QString("pqClientDocFinder.txt");
+  if(!QFile::exists(helper))
+    helper = QCoreApplication::applicationDirPath() + binDir1 + QString("pqClientDocFinder.txt");
+  if(QFile::exists(helper)) {
+    QFile file(helper);
+    if(file.open(QIODevice::ReadOnly)) {
+      assistantExe = file.readLine().trimmed() + assistantProgName;
+      profileFile = file.readLine().trimmed();
+    }
+  }
+
+  if(assistantExe.isEmpty()) {
+    assistantExe = ::Locate(assistantProgName);
+    /*
+    QString assistant = QCoreApplication::applicationDirPath();
+    assistant += QDir::separator();
+    assistant += assistantName;
+    assistantExe = assistant;
+    */
+  }
+
+  this->Implementation->AssistantClient = new QAssistantClient(assistantExe, this);
+  QObject::connect(this->Implementation->AssistantClient, SIGNAL(error(const QString&)),
+                   this,                                  SLOT(assistantError(const QString&)));
+
+  QStringList args;
+  args.append(QString("-profile"));
+
+  if(profileFile.isEmpty()) {
+    // see if help is bundled up with the application
+    QString profile = ::Locate("pqClient.adp");
+    /*QCoreApplication::applicationDirPath() + QDir::separator()
+      + QString("pqClient.adp");*/
+    
+    if(QFile::exists(profile))
+      profileFile = profile;
+  }
+
+  if(profileFile.isEmpty() && getenv("PARAVIEW_HELP")) {
+    // not bundled, ask for help
+    args.append(getenv("PARAVIEW_HELP"));
+  }
+  else if(profileFile.isEmpty()) {
+    // no help, error out
+    SUIT_MessageBox::critical(getApp()->desktop(),"Help error", "Couldn't find"
+                             " pqClient.adp.\nTry setting the PARAVIEW_HELP environment variable which"
+                             " points to that file");
+    delete this->Implementation->AssistantClient;
+    return;
+  }
+
+  QFileInfo fi(profileFile);
+  this->Implementation->DocumentationDir = fi.absolutePath();
+
+  args.append(profileFile);
+
+  this->Implementation->AssistantClient->setArguments(args);
+}
+
+/*!
+  \brief Slot to call the message handler with the critical message.
+*/
+void PVGUI_Module::assistantError( const QString& error )
+{
+  qCritical(error.toAscii().data());
+}
+
+/*!
+  \brief Slot to show the waiting state.
+*/
+void PVGUI_Module::onPreAccept()
+{
+  getApp()->desktop()->statusBar()->showMessage(tr("Updating..."));
+  QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+}
+
+/*!
+  \brief Slot to show the ready state.
+*/
+void PVGUI_Module::onPostAccept()
+{
+  getApp()->desktop()->statusBar()->showMessage(tr("Ready"), 2000);
+  QTimer::singleShot(0, this, SLOT(endWaitCursor()));
+}
+
+/*!
+  \brief Slot to switch off wait cursor.
+*/
+void PVGUI_Module::endWaitCursor()
+{
+  QApplication::restoreOverrideCursor();
 }
 
 /*!
@@ -546,18 +673,6 @@ pqViewManager* PVGUI_Module::getMultiViewManager() const
   return aMVM;
 }
 
-QMenu* PVGUI_Module::getMenu( const int id )
-{
-  QMenu* res = 0;
-  LightApp_Application* anApp = getApp();
-  SUIT_Desktop* desk = anApp->desktop();
-  if ( desk ){
-    QtxActionMenuMgr* menuMgr = desk->menuMgr();
-    res = menuMgr->findMenu( id );
-  }
-  return res;
-}
-
 /*!
   \brief Activate module.
   \param study current study