diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 6a0d7d4638dfabf120ba57c54462e15dc1b7d777..1f1198eb145925f21158edca528396e45777dedd 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -307,58 +307,69 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) toolsContainer->addMenu(gitContainer); m_menuAction = gitContainer->menu()->menuAction(); - ParameterActionCommandPair parameterActionCommand - = createFileAction(gitContainer, - tr("Blame Current File"), tr("Blame for \"%1\""), - Core::Id("Git.Blame"), - globalcontext, true, SLOT(blameFile())); - parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+B") : tr("Alt+G,Alt+B"))); + /* "Current File" menu */ + Core::ActionContainer *currentFileMenu = Core::ActionManager::createMenu(Core::Id("Git.CurrentFileMenu")); + currentFileMenu->menu()->setTitle(tr("Current &File")); + gitContainer->addMenu(currentFileMenu); - parameterActionCommand - = createFileAction(gitContainer, + ParameterActionCommandPair parameterActionCommand + = createFileAction(currentFileMenu, tr("Diff Current File"), tr("Diff of \"%1\""), Core::Id("Git.Diff"), globalcontext, true, SLOT(diffCurrentFile())); parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+D") : tr("Alt+G,Alt+D"))); parameterActionCommand - = createFileAction(gitContainer, + = createFileAction(currentFileMenu, tr("Log Current File"), tr("Log of \"%1\""), Core::Id("Git.Log"), globalcontext, true, SLOT(logFile())); parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+L") : tr("Alt+G,Alt+L"))); + parameterActionCommand + = createFileAction(currentFileMenu, + tr("Blame Current File"), tr("Blame for \"%1\""), + Core::Id("Git.Blame"), + globalcontext, true, SLOT(blameFile())); + parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+B") : tr("Alt+G,Alt+B"))); + // ------ - gitContainer->addSeparator(globalcontext); + currentFileMenu->addSeparator(globalcontext); parameterActionCommand - = createFileAction(gitContainer, + = createFileAction(currentFileMenu, tr("Stage File for Commit"), tr("Stage \"%1\" for Commit"), Core::Id("Git.Stage"), globalcontext, true, SLOT(stageFile())); parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+A") : tr("Alt+G,Alt+A"))); parameterActionCommand - = createFileAction(gitContainer, + = createFileAction(currentFileMenu, tr("Unstage File from Commit"), tr("Unstage \"%1\" from Commit"), Core::Id("Git.Unstage"), globalcontext, true, SLOT(unstageFile())); parameterActionCommand - = createFileAction(gitContainer, + = createFileAction(currentFileMenu, tr("Undo Unstaged Changes"), tr("Undo Unstaged Changes for \"%1\""), Core::Id("Git.UndoUnstaged"), globalcontext, true, SLOT(undoUnstagedFileChanges())); parameterActionCommand - = createFileAction(gitContainer, + = createFileAction(currentFileMenu, tr("Undo Uncommitted Changes"), tr("Undo Uncommitted Changes for \"%1\""), Core::Id("Git.Undo"), globalcontext, true, SLOT(undoFileChanges())); parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+U") : tr("Alt+G,Alt+U"))); + /* \"Current File" menu */ + // ------------ - gitContainer->addSeparator(globalcontext); + + /* "Current Project" menu */ + Core::ActionContainer *currentProjectMenu = Core::ActionManager::createMenu(Core::Id("Git.CurrentProjectMenu")); + currentProjectMenu->menu()->setTitle(tr("Current &Project")); + gitContainer->addMenu(currentProjectMenu); parameterActionCommand - = createProjectAction(gitContainer, + = createProjectAction(currentProjectMenu, tr("Diff Current Project"), tr("Diff Project \"%1\""), Core::Id("Git.DiffProject"), globalcontext, true, @@ -366,80 +377,73 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+Shift+D") : tr("Alt+G,Alt+Shift+D"))); parameterActionCommand - = createProjectAction(gitContainer, + = createProjectAction(currentProjectMenu, tr("Log Project"), tr("Log Project \"%1\""), Core::Id("Git.LogProject"), globalcontext, true, SLOT(logProject())); parameterActionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+K") : tr("Alt+G,Alt+K"))); parameterActionCommand - = createProjectAction(gitContainer, + = createProjectAction(currentProjectMenu, tr("Clean Project..."), tr("Clean Project \"%1\"..."), Core::Id("Git.CleanProject"), globalcontext, true, SLOT(cleanProject())); + /* \"Current Project" menu */ // -------------- - gitContainer->addSeparator(globalcontext); - createRepositoryAction(gitContainer, + /* "Local Repository" menu */ + Core::ActionContainer *localRepositoryMenu = Core::ActionManager::createMenu(Core::Id("Git.LocalRepositoryMenu")); + localRepositoryMenu->menu()->setTitle(tr("&Local Repository")); + gitContainer->addMenu(localRepositoryMenu); + + createRepositoryAction(localRepositoryMenu, tr("Diff"), Core::Id("Git.DiffRepository"), globalcontext, true, SLOT(diffRepository())); - createRepositoryAction(gitContainer, + createRepositoryAction(localRepositoryMenu, tr("Log"), Core::Id("Git.LogRepository"), globalcontext, true, &GitClient::graphLog); - createRepositoryAction(gitContainer, + createRepositoryAction(localRepositoryMenu, + tr("Clean..."), Core::Id("Git.CleanRepository"), + globalcontext, true, SLOT(cleanRepository())); + + createRepositoryAction(localRepositoryMenu, tr("Status"), Core::Id("Git.StatusRepository"), globalcontext, true, &GitClient::status); - createRepositoryAction(gitContainer, - tr("Reset..."), Core::Id("Git.Reset"), - globalcontext, false, SLOT(resetRepository())); + // -------------- + localRepositoryMenu->addSeparator(globalcontext); + ActionCommandPair actionCommand = createRepositoryAction(localRepositoryMenu, + tr("Commit..."), Core::Id("Git.Commit"), + globalcontext, true, SLOT(startCommit())); + actionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+C") : tr("Alt+G,Alt+C"))); - createRepositoryAction(gitContainer, - tr("Clean..."), Core::Id("Git.CleanRepository"), - globalcontext, true, SLOT(cleanRepository())); + createRepositoryAction(localRepositoryMenu, + tr("Amend Last Commit..."), Core::Id("Git.AmendCommit"), + globalcontext, true, SLOT(startAmendCommit())); - m_createRepositoryAction = new QAction(tr("Create Repository..."), this); - Core::Command *createRepositoryCommand = Core::ActionManager::registerAction(m_createRepositoryAction, "Git.CreateRepository", globalcontext); - connect(m_createRepositoryAction, SIGNAL(triggered()), this, SLOT(createRepository())); - gitContainer->addAction(createRepositoryCommand); + createRepositoryAction(localRepositoryMenu, + tr("Reset..."), Core::Id("Git.Reset"), + globalcontext, false, SLOT(resetRepository())); // -------------- - gitContainer->addSeparator(globalcontext); - - createRepositoryAction(gitContainer, - tr("Launch gitk"), Core::Id("Git.LaunchGitK"), - globalcontext, true, &GitClient::launchGitK); + localRepositoryMenu->addSeparator(globalcontext); - m_repositoryBrowserAction - = createRepositoryAction(gitContainer, - tr("Launch repository browser"), Core::Id("Git.LaunchRepositoryBrowser"), - globalcontext, true, &GitClient::launchRepositoryBrowser).first; - - createRepositoryAction(gitContainer, + createRepositoryAction(localRepositoryMenu, tr("Branches..."), Core::Id("Git.BranchList"), globalcontext, true, SLOT(branchList())); - createRepositoryAction(gitContainer, - tr("Remotes..."), Core::Id("Git.RemoteList"), - globalcontext, false, SLOT(remoteList())); - - m_showAction = new QAction(tr("Show..."), this); - Core::Command *showCommitCommand = Core::ActionManager::registerAction(m_showAction, "Git.ShowCommit", globalcontext); - connect(m_showAction, SIGNAL(triggered()), this, SLOT(showCommit())); - gitContainer->addAction(showCommitCommand); - - // -------------- - gitContainer->addSeparator(globalcontext); + localRepositoryMenu->addSeparator(globalcontext); + // "Patch" menu Core::ActionContainer *patchMenu = Core::ActionManager::createMenu(Core::Id("Git.PatchMenu")); - patchMenu->menu()->setTitle(tr("Patch")); - gitContainer->addMenu(patchMenu); + patchMenu->menu()->setTitle(tr("&Patch")); + localRepositoryMenu->addMenu(patchMenu); // Apply current file as patch is handled specially. parameterActionCommand = @@ -455,9 +459,10 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) tr("Apply from File..."), Core::Id("Git.ApplyPatch"), globalcontext, true, SLOT(promptApplyPatch())); + // "Stash" menu Core::ActionContainer *stashMenu = Core::ActionManager::createMenu(Core::Id("Git.StashMenu")); - stashMenu->menu()->setTitle(tr("Stash")); - gitContainer->addMenu(stashMenu); + stashMenu->menu()->setTitle(tr("&Stash")); + localRepositoryMenu->addMenu(stashMenu); createRepositoryAction(stashMenu, tr("Stashes..."), Core::Id("Git.StashList"), @@ -465,10 +470,9 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) stashMenu->addSeparator(globalcontext); - ActionCommandPair actionCommand = - createRepositoryAction(stashMenu, - tr("Stash"), Core::Id("Git.Stash"), - globalcontext, true, SLOT(stash())); + actionCommand = createRepositoryAction(stashMenu, + tr("Stash"), Core::Id("Git.Stash"), + globalcontext, true, SLOT(stash())); actionCommand.first->setToolTip(tr("Saves the current state of your work and resets the repository.")); actionCommand = createRepositoryAction(stashMenu, @@ -483,9 +487,35 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) globalcontext, true, &GitClient::stashPop); actionCommand.first->setToolTip(tr("Restores changes saved to the stash list using \"Stash\".")); + + /* \"Local Repository" menu */ + + // -------------- + + /* "Remote Repository" menu */ + Core::ActionContainer *remoteRepositoryMenu = Core::ActionManager::createMenu(Core::Id("Git.RemoteRepositoryMenu")); + remoteRepositoryMenu->menu()->setTitle(tr("&Remote Repository")); + gitContainer->addMenu(remoteRepositoryMenu); + + createRepositoryAction(remoteRepositoryMenu, + tr("Fetch"), Core::Id("Git.Fetch"), + globalcontext, true, SLOT(fetch())); + + createRepositoryAction(remoteRepositoryMenu, + tr("Pull"), Core::Id("Git.Pull"), + globalcontext, true, SLOT(pull())); + + actionCommand = createRepositoryAction(remoteRepositoryMenu, + tr("Push"), Core::Id("Git.Push"), + globalcontext, true, SLOT(push())); + + // -------------- + remoteRepositoryMenu->addSeparator(globalcontext); + + // "Subversion" menu Core::ActionContainer *subversionMenu = Core::ActionManager::createMenu(Core::Id("Git.Subversion")); - subversionMenu->menu()->setTitle(tr("Subversion")); - gitContainer->addMenu(subversionMenu); + subversionMenu->menu()->setTitle(tr("&Subversion")); + remoteRepositoryMenu->addMenu(subversionMenu); createRepositoryAction(subversionMenu, tr("Log"), Core::Id("Git.Subversion.Log"), @@ -495,38 +525,50 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) tr("Fetch"), Core::Id("Git.Subversion.Fetch"), globalcontext, false, &GitClient::synchronousSubversionFetch); - gitContainer->addSeparator(globalcontext); + // -------------- + remoteRepositoryMenu->addSeparator(globalcontext); - gitContainer->addSeparator(globalcontext); + createRepositoryAction(remoteRepositoryMenu, + tr("Manage Remotes..."), Core::Id("Git.RemoteList"), + globalcontext, false, SLOT(remoteList())); - createRepositoryAction(gitContainer, - tr("Fetch"), Core::Id("Git.Fetch"), - globalcontext, true, SLOT(fetch())); + /* \"Remote Repository" menu */ - createRepositoryAction(gitContainer, - tr("Pull"), Core::Id("Git.Pull"), - globalcontext, true, SLOT(pull())); + // -------------- - actionCommand = createRepositoryAction(gitContainer, - tr("Push"), Core::Id("Git.Push"), - globalcontext, true, SLOT(push())); + /* "Git Tools" menu */ + Core::ActionContainer *gitToolsMenu = Core::ActionManager::createMenu(Core::Id("Git.GitToolsMenu")); + gitToolsMenu->menu()->setTitle(tr("Git &Tools")); + gitContainer->addMenu(gitToolsMenu); - actionCommand = createRepositoryAction(gitContainer, - tr("Commit..."), Core::Id("Git.Commit"), - globalcontext, true, SLOT(startCommit())); - actionCommand.second->setDefaultKeySequence(QKeySequence(Core::UseMacShortcuts ? tr("Meta+G,Meta+C") : tr("Alt+G,Alt+C"))); + createRepositoryAction(gitToolsMenu, + tr("Gitk"), Core::Id("Git.LaunchGitK"), + globalcontext, true, &GitClient::launchGitK); - createRepositoryAction(gitContainer, - tr("Amend Last Commit..."), Core::Id("Git.AmendCommit"), - globalcontext, true, SLOT(startAmendCommit())); + m_repositoryBrowserAction + = createRepositoryAction(gitToolsMenu, + tr("Repository Browser"), Core::Id("Git.LaunchRepositoryBrowser"), + globalcontext, true, &GitClient::launchRepositoryBrowser).first; - createRepositoryAction(gitContainer, + createRepositoryAction(gitToolsMenu, tr("Merge Tool"), Core::Id("Git.MergeTool"), globalcontext, true, SLOT(startMergeTool())); - // Subversion in a submenu. + /* \"Git Tools" menu */ + + // -------------- gitContainer->addSeparator(globalcontext); + m_showAction = new QAction(tr("Show..."), this); + Core::Command *showCommitCommand = Core::ActionManager::registerAction(m_showAction, "Git.ShowCommit", globalcontext); + connect(m_showAction, SIGNAL(triggered()), this, SLOT(showCommit())); + gitContainer->addAction(showCommitCommand); + + m_createRepositoryAction = new QAction(tr("Create Repository..."), this); + Core::Command *createRepositoryCommand = Core::ActionManager::registerAction(m_createRepositoryAction, "Git.CreateRepository", globalcontext); + connect(m_createRepositoryAction, SIGNAL(triggered()), this, SLOT(createRepository())); + gitContainer->addAction(createRepositoryCommand); + if (0) { const QList<QAction*> snapShotActions = createSnapShotTestActions(); const int count = snapShotActions.size(); @@ -556,8 +598,9 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage) command = Core::ActionManager::registerAction(m_redoAction, Core::Constants::REDO, submitContext); + /* "Gerrit" */ Gerrit::Internal::GerritPlugin *gp = new Gerrit::Internal::GerritPlugin(this); - return gp->initialize(gitContainer); + return gp->initialize(remoteRepositoryMenu); } GitVersionControl *GitPlugin::gitVersionControl() const