Add ActionContainer::addSeparator(...)

Gets rid of a lot of code duplication.

Change-Id: I2ce38fb38a0b61cb821e0bdc7bcc9a7ccdf9da72
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Eike Ziller
2012-06-05 14:22:20 +02:00
committed by hjk
parent d90264d6c2
commit cdd44befff
34 changed files with 132 additions and 394 deletions

View File

@@ -32,6 +32,7 @@
#include "actioncontainer_p.h"
#include "actionmanager_p.h"
#include "actionmanager.h"
#include "command_p.h"
@@ -293,6 +294,31 @@ void ActionContainerPrivate::addMenu(ActionContainer *before, ActionContainer *m
scheduleUpdate();
}
/*!
* \fn Command *ActionContainer::addSeparator(const Context &context, const Id &group, QAction **outSeparator)
*
* Adds a separator to the end of the given \a group to the action container, which is enabled
* for a given \a context. The created separator action is returned through \a outSeparator.
*
* Returns the created Command for the separator.
*/
/*! \a context \a group \a outSeparator
* \internal
*/
Command *ActionContainerPrivate::addSeparator(const Context &context, const Id &group, QAction **outSeparator)
{
static int separatorIdCount = 0;
QAction *separator = new QAction(this);
separator->setSeparator(true);
Command *cmd = ActionManager::registerAction(separator, Id(QString::fromLatin1("%1.Separator.%2")
.arg(id().toString()).arg(++separatorIdCount)),
context);
addAction(cmd, group);
if (outSeparator)
*outSeparator = separator;
return cmd;
}
void ActionContainerPrivate::clear()
{
QMutableListIterator<Group> it(m_groups);

View File

@@ -34,6 +34,7 @@
#define ACTIONCONTAINER_H
#include "coreplugin/id.h"
#include "coreplugin/icontext.h"
#include <QObject>
@@ -72,6 +73,7 @@ public:
virtual void addAction(Command *action, const Id &group = Id()) = 0;
virtual void addMenu(ActionContainer *menu, const Id &group = Id()) = 0;
virtual void addMenu(ActionContainer *before, ActionContainer *menu, const Id &group = Id()) = 0;
virtual Command *addSeparator(const Context &context, const Id &group = Id(), QAction **outSeparator = 0) = 0;
// This clears this menu and submenus from all actions and submenus.
// It does not destroy the submenus and commands, just removes them from their parents.

View File

@@ -65,6 +65,7 @@ public:
void addAction(Command *action, const Id &group = Id());
void addMenu(ActionContainer *menu, const Id &group = Id());
void addMenu(ActionContainer *before, ActionContainer *menu, const Id &group = Id());
Command *addSeparator(const Context &context, const Id &group = Id(), QAction **outSeparator = 0);
virtual void clear();
Id id() const;

View File

@@ -265,16 +265,6 @@ Id CommandPrivate::id() const
return m_id;
}
QAction *CommandPrivate::action() const
{
return 0;
}
QShortcut *CommandPrivate::shortcut() const
{
return 0;
}
Core::Context CommandPrivate::context() const
{
return m_context;

View File

@@ -66,8 +66,6 @@ public:
Id id() const;
QAction *action() const;
QShortcut *shortcut() const;
Context context() const;
@@ -100,6 +98,8 @@ public:
void setShortcut(QShortcut *shortcut);
QShortcut *shortcut() const;
QAction *action() const { return 0; }
void setContext(const Context &context);
Context context() const;
void setCurrentContext(const Context &context);
@@ -125,6 +125,7 @@ public:
QKeySequence keySequence() const;
QAction *action() const;
QShortcut *shortcut() const { return 0; }
void setCurrentContext(const Context &context);
bool isActive() const;

View File

@@ -274,15 +274,6 @@ static EditorManager *m_instance = 0;
EditorManager *EditorManager::instance() { return m_instance; }
static Command *createSeparator(QObject *parent,
const Id &id, const Context &context)
{
QAction *tmpaction = new QAction(parent);
tmpaction->setSeparator(true);
Command *cmd = ActionManager::registerAction(tmpaction, id, context);
return cmd;
}
EditorManager::EditorManager(QWidget *parent) :
QWidget(parent),
d(new EditorManagerPrivate(parent))
@@ -319,15 +310,8 @@ EditorManager::EditorManager(QWidget *parent) :
ActionContainer *mwindow = ActionManager::actionContainer(Constants::M_WINDOW);
// Window menu separators
QAction *tmpaction = new QAction(this);
tmpaction->setSeparator(true);
cmd = ActionManager::registerAction(tmpaction, "QtCreator.Window.Sep.Split", editManagerContext);
mwindow->addAction(cmd, Constants::G_WINDOW_SPLIT);
tmpaction = new QAction(this);
tmpaction->setSeparator(true);
cmd = ActionManager::registerAction(tmpaction, "QtCreator.Window.Sep.Navigate", editManagerContext);
mwindow->addAction(cmd, Constants::G_WINDOW_NAVIGATE);
mwindow->addSeparator(editManagerContext, Constants::G_WINDOW_SPLIT);
mwindow->addSeparator(editManagerContext, Constants::G_WINDOW_NAVIGATE);
// Close Action
cmd = ActionManager::registerAction(d->m_closeCurrentEditorAction, Constants::CLOSE, editManagerContext, true);
@@ -431,14 +415,10 @@ EditorManager::EditorManager(QWidget *parent) :
advancedMenu->appendGroup(Constants::G_EDIT_EDITOR);
// Advanced menu separators
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Collapsing"), editManagerContext);
advancedMenu->addAction(cmd, Constants::G_EDIT_COLLAPSING);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Blocks"), editManagerContext);
advancedMenu->addAction(cmd, Constants::G_EDIT_BLOCKS);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Font"), editManagerContext);
advancedMenu->addAction(cmd, Constants::G_EDIT_FONT);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Editor"), editManagerContext);
advancedMenu->addAction(cmd, Constants::G_EDIT_EDITOR);
advancedMenu->addSeparator(editManagerContext, Constants::G_EDIT_COLLAPSING);
advancedMenu->addSeparator(editManagerContext, Constants::G_EDIT_BLOCKS);
advancedMenu->addSeparator(editManagerContext, Constants::G_EDIT_FONT);
advancedMenu->addSeparator(editManagerContext, Constants::G_EDIT_EDITOR);
// other setup
d->m_splitter = new SplitterOrView(d->m_editorModel);

View File

@@ -548,15 +548,6 @@ void MainWindow::registerDefaultContainers()
ac->appendGroup(Constants::G_HELP_ABOUT);
}
static Command *createSeparator(QObject *parent,
const Id &id, const Context &context)
{
QAction *tmpaction = new QAction(parent);
tmpaction->setSeparator(true);
Command *cmd = ActionManager::registerAction(tmpaction, id, context);
return cmd;
}
void MainWindow::registerDefaultActions()
{
ActionContainer *mfile = ActionManager::actionContainer(Constants::M_FILE);
@@ -568,41 +559,25 @@ void MainWindow::registerDefaultActions()
Context globalContext(Constants::C_GLOBAL);
// File menu separators
Command *cmd = createSeparator(this, Id("QtCreator.File.Sep.Save"), globalContext);
mfile->addAction(cmd, Constants::G_FILE_SAVE);
cmd = createSeparator(this, Id("QtCreator.File.Sep.Print"), globalContext);
QIcon icon = QIcon::fromTheme(QLatin1String("edit-cut"), QIcon(QLatin1String(Constants::ICON_CUT)));
mfile->addAction(cmd, Constants::G_FILE_PRINT);
cmd = createSeparator(this, Id("QtCreator.File.Sep.Close"), globalContext);
mfile->addAction(cmd, Constants::G_FILE_CLOSE);
cmd = createSeparator(this, Id("QtCreator.File.Sep.Other"), globalContext);
mfile->addAction(cmd, Constants::G_FILE_OTHER);
mfile->addSeparator(globalContext, Constants::G_FILE_SAVE);
mfile->addSeparator(globalContext, Constants::G_FILE_PRINT);
mfile->addSeparator(globalContext, Constants::G_FILE_CLOSE);
mfile->addSeparator(globalContext, Constants::G_FILE_OTHER);
// Edit menu separators
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.CopyPaste"), globalContext);
medit->addAction(cmd, Constants::G_EDIT_COPYPASTE);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.SelectAll"), globalContext);
medit->addAction(cmd, Constants::G_EDIT_SELECTALL);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Find"), globalContext);
medit->addAction(cmd, Constants::G_EDIT_FIND);
cmd = createSeparator(this, Id("QtCreator.Edit.Sep.Advanced"), globalContext);
medit->addAction(cmd, Constants::G_EDIT_ADVANCED);
medit->addSeparator(globalContext, Constants::G_EDIT_COPYPASTE);
medit->addSeparator(globalContext, Constants::G_EDIT_SELECTALL);
medit->addSeparator(globalContext, Constants::G_EDIT_FIND);
medit->addSeparator(globalContext, Constants::G_EDIT_ADVANCED);
// Return to editor shortcut: Note this requires Qt to fix up
// handling of shortcut overrides in menus, item views, combos....
m_focusToEditor = new QShortcut(this);
cmd = ActionManager::registerShortcut(m_focusToEditor, Constants::S_RETURNTOEDITOR, globalContext);
Command *cmd = ActionManager::registerShortcut(m_focusToEditor, Constants::S_RETURNTOEDITOR, globalContext);
cmd->setDefaultKeySequence(QKeySequence(Qt::Key_Escape));
connect(m_focusToEditor, SIGNAL(activated()), this, SLOT(setFocusToEditor()));
// New File Action
icon = QIcon::fromTheme(QLatin1String("document-new"), QIcon(QLatin1String(Constants::ICON_NEWFILE)));
QIcon icon = QIcon::fromTheme(QLatin1String("document-new"), QIcon(QLatin1String(Constants::ICON_NEWFILE)));
m_newAction = new QAction(icon, tr("&New File or Project..."), this);
cmd = ActionManager::registerAction(m_newAction, Constants::NEW, globalContext);
cmd->setDefaultKeySequence(QKeySequence::New);
@@ -734,8 +709,7 @@ void MainWindow::registerDefaultActions()
// Options Action
mtools->appendGroup(Constants::G_TOOLS_OPTIONS);
cmd = createSeparator(this, Id("QtCreator.Tools.Sep.Options"), globalContext);
mtools->addAction(cmd, Constants::G_TOOLS_OPTIONS);
mtools->addSeparator(globalContext, Constants::G_TOOLS_OPTIONS);
m_optionsAction = new QAction(tr("&Options..."), this);
cmd = ActionManager::registerAction(m_optionsAction, Constants::OPTIONS, globalContext);
if (UseMacShortcuts) {
@@ -760,8 +734,7 @@ void MainWindow::registerDefaultActions()
connect(m_zoomAction, SIGNAL(triggered()), this, SLOT(showMaximized()));
// Window separator
cmd = createSeparator(this, Id("QtCreator.Window.Sep.Size"), globalContext);
mwindow->addAction(cmd, Constants::G_WINDOW_SIZE);
mwindow->addSeparator(globalContext, Constants::G_WINDOW_SIZE);
}
// Show Sidebar Action

View File

@@ -242,10 +242,7 @@ void OutputPaneManager::init()
connect(m_minMaxAction, SIGNAL(triggered()), this, SLOT(slotMinMax()));
m_minMaxButton->setDefaultAction(cmd->action());
QAction *sep = new QAction(this);
sep->setSeparator(true);
cmd = ActionManager::registerAction(sep, "Coreplugin.OutputPane.Sep", globalContext);
mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
mpanes->addSeparator(globalContext, "Coreplugin.OutputPane.ActionsGroup");
QFontMetrics titleFm = m_titleLabel->fontMetrics();
int minTitleWidth = 0;