AnalyzerManager: Make menu extendible

Use Commands everywhere, so that other plugins can extend it.
This commit is contained in:
Kai Koehne
2011-04-04 13:03:45 +02:00
parent fe876b5580
commit e5679e8a95
2 changed files with 28 additions and 11 deletions

View File

@@ -58,9 +58,14 @@ const char * const C_ANALYZEMODE = "Analyzer.AnalyzeMode";
// menu // menu
const char * const M_DEBUG_ANALYZER = "Analyzer.Menu.StartAnalyzer"; const char * const M_DEBUG_ANALYZER = "Analyzer.Menu.StartAnalyzer";
const char * const G_ANALYZER_STARTSTOP = "Menu.Group.Analyzer.StartStop";
const char * const G_ANALYZER_TOOLS = "Menu.Group.Analyzer.Tools";
const char * const START = "Analyzer.Start"; const char * const START = "Analyzer.Start";
const char * const STARTREMOTE = "Analyzer.StartRemote"; const char * const STARTREMOTE = "Analyzer.StartRemote";
const char * const STOP = "Analyzer.Stop"; const char * const STOP = "Analyzer.Stop";
const char * const ANALYZER_TOOLS = "Menu.Action.Analyzer.Tools.";
const char * const ANALYZER_TOOLS_SEPARATOR = "Menu.Action.Analyzer.Tools.Separator";
// options dialog // options dialog
const char * const ANALYZER_SETTINGS_CATEGORY = "T.Analyzer"; const char * const ANALYZER_SETTINGS_CATEGORY = "T.Analyzer";

View File

@@ -214,7 +214,7 @@ public:
QAction *m_startAction; QAction *m_startAction;
QAction *m_startRemoteAction; QAction *m_startRemoteAction;
QAction *m_stopAction; QAction *m_stopAction;
QMenu *m_menu; ActionContainer *m_menu;
QComboBox *m_toolBox; QComboBox *m_toolBox;
QStackedWidget *m_controlsWidget; QStackedWidget *m_controlsWidget;
ActionContainer *m_viewsMenu; ActionContainer *m_viewsMenu;
@@ -280,7 +280,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
Core::ICore *core = Core::ICore::instance(); Core::ICore *core = Core::ICore::instance();
Core::ActionManager *am = core->actionManager(); Core::ActionManager *am = core->actionManager();
Core::ActionContainer *mtools = am->actionContainer(ProjectExplorer::Constants::M_DEBUG); Core::ActionContainer *mtools = am->actionContainer(ProjectExplorer::Constants::M_DEBUG);
Core::ActionContainer *mAnalyzermenu = am->createMenu(Constants::M_DEBUG_ANALYZER); m_menu = am->createMenu(Constants::M_DEBUG_ANALYZER);
const Core::Context globalcontext(Core::Constants::C_GLOBAL); const Core::Context globalcontext(Core::Constants::C_GLOBAL);
Core::Command *command = 0; Core::Command *command = 0;
@@ -292,10 +292,13 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
mtools->addAction(command); mtools->addAction(command);
// Menus // Menus
m_menu = mAnalyzermenu->menu(); m_menu->menu()->setTitle(tr("Start &Analyzer"));
m_menu->setTitle(tr("Start &Analyzer")); m_menu->menu()->setEnabled(true);
m_menu->setEnabled(true);
mtools->addMenu(mAnalyzermenu); m_menu->appendGroup(Constants::G_ANALYZER_STARTSTOP);
m_menu->appendGroup(Constants::G_ANALYZER_TOOLS);
mtools->addMenu(m_menu);
m_toolGroup = new QActionGroup(m_menu); m_toolGroup = new QActionGroup(m_menu);
connect(m_toolGroup, SIGNAL(triggered(QAction*)), connect(m_toolGroup, SIGNAL(triggered(QAction*)),
@@ -305,7 +308,7 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
m_startAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_START_ICON)); m_startAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_START_ICON));
command = am->registerAction(m_startAction, command = am->registerAction(m_startAction,
Constants::START, globalcontext); Constants::START, globalcontext);
mAnalyzermenu->addAction(command); m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP);
connect(m_startAction, SIGNAL(triggered()), q, SLOT(startTool())); connect(m_startAction, SIGNAL(triggered()), q, SLOT(startTool()));
m_startRemoteAction = new QAction(tr("Start Remote"), m_menu); m_startRemoteAction = new QAction(tr("Start Remote"), m_menu);
@@ -313,17 +316,21 @@ void AnalyzerManager::AnalyzerManagerPrivate::setupActions()
// m_startRemoteAction->setIcon(QIcon(QLatin1String(":/images/analyzer_start_remote_small.png"))); // m_startRemoteAction->setIcon(QIcon(QLatin1String(":/images/analyzer_start_remote_small.png")));
command = am->registerAction(m_startRemoteAction, command = am->registerAction(m_startRemoteAction,
Constants::STARTREMOTE, globalcontext); Constants::STARTREMOTE, globalcontext);
mAnalyzermenu->addAction(command); m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP);
connect(m_startRemoteAction, SIGNAL(triggered()), q, SLOT(startToolRemote())); connect(m_startRemoteAction, SIGNAL(triggered()), q, SLOT(startToolRemote()));
m_stopAction = new QAction(tr("Stop"), m_menu); m_stopAction = new QAction(tr("Stop"), m_menu);
m_stopAction->setEnabled(false); m_stopAction->setEnabled(false);
m_stopAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_STOP_ICON)); m_stopAction->setIcon(QIcon(Constants::ANALYZER_CONTROL_STOP_ICON));
command = am->registerAction(m_stopAction, Constants::STOP, globalcontext); command = am->registerAction(m_stopAction, Constants::STOP, globalcontext);
mAnalyzermenu->addAction(command); m_menu->addAction(command, Constants::G_ANALYZER_STARTSTOP);
connect(m_stopAction, SIGNAL(triggered()), q, SLOT(stopTool())); connect(m_stopAction, SIGNAL(triggered()), q, SLOT(stopTool()));
m_menu->addSeparator();
QAction *separatorAction = new QAction(m_menu);
separatorAction->setSeparator(true);
command = am->registerAction(separatorAction, Constants::ANALYZER_TOOLS_SEPARATOR, globalcontext);
m_menu->addAction(command, Constants::G_ANALYZER_TOOLS);
m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS)); m_viewsMenu = am->actionContainer(Core::Id(Core::Constants::M_WINDOW_VIEWS));
} }
@@ -688,7 +695,12 @@ void AnalyzerManager::addTool(IAnalyzerTool *tool)
action->setData(d->m_tools.count()); action->setData(d->m_tools.count());
action->setCheckable(true); action->setCheckable(true);
d->m_menu->addAction(action); ActionManager *am = Core::ICore::instance()->actionManager();
QString actionId = QString(Constants::ANALYZER_TOOLS) + QString::number(d->m_toolGroup->actions().count());
Core::Command *command = am->registerAction(action, actionId, Core::Context(Core::Constants::C_GLOBAL));
d->m_menu->addAction(command, Constants::G_ANALYZER_TOOLS);
d->m_toolGroup->setVisible(d->m_toolGroup->actions().count() > 1); d->m_toolGroup->setVisible(d->m_toolGroup->actions().count() > 1);
d->m_tools.append(tool); d->m_tools.append(tool);
d->m_toolBox->addItem(tool->displayName()); d->m_toolBox->addItem(tool->displayName());