public CopyContextMenuViewModel(GitRevision gitRevision) { if (gitRevision == null) { DetailItems = new DetailItem[0]; BranchNames = new string[0]; TagNames = new string[0]; return; } DetailItems = new[] { new DetailItem(Strings.GetCommitHashText(), gitRevision.Guid, 15), new DetailItem(Strings.GetMessageText(), gitRevision.Subject, 30), new DetailItem(Strings.GetAuthorText(), gitRevision.Author), new DetailItem(Strings.GetDateText(), gitRevision.CommitDate.ToString()), }; var gitRefListsForRevision = new GitRefListsForRevision(gitRevision); BranchNames = new ReadOnlyCollection <string>(gitRefListsForRevision.GetAllBranchNames()); TagNames = new ReadOnlyCollection <string>(gitRefListsForRevision.GetAllTagNames()); }
private void ContextMenuOpening(object sender, CancelEventArgs e) { if (Revisions.RowCount < LastRowIndex || LastRowIndex < 0 || Revisions.RowCount == 0) return; var inTheMiddleOfBisect = Module.InTheMiddleOfBisect(); markRevisionAsBadToolStripMenuItem.Visible = inTheMiddleOfBisect; markRevisionAsGoodToolStripMenuItem.Visible = inTheMiddleOfBisect; bisectSkipRevisionToolStripMenuItem.Visible = inTheMiddleOfBisect; stopBisectToolStripMenuItem.Visible = inTheMiddleOfBisect; bisectSeparator.Visible = inTheMiddleOfBisect; var revision = GetRevision(LastRowIndex); var deleteTagDropDown = new ContextMenuStrip(); var deleteBranchDropDown = new ContextMenuStrip(); var checkoutBranchDropDown = new ContextMenuStrip(); var mergeBranchDropDown = new ContextMenuStrip(); var rebaseDropDown = new ContextMenuStrip(); var renameDropDown = new ContextMenuStrip(); var gitRefListsForRevision = new GitRefListsForRevision(revision); foreach (var head in gitRefListsForRevision.AllTags) { ToolStripItem toolStripItem = new ToolStripMenuItem(head.Name); toolStripItem.Tag = head.Name; toolStripItem.Click += ToolStripItemClickDeleteTag; deleteTagDropDown.Items.Add(toolStripItem); } //For now there is no action that could be done on currentBranch bool bareRepository = Module.IsBareRepository(); string currentBranch = Module.GetSelectedBranch(); var allBranches = gitRefListsForRevision.AllBranches; var branchesWithNoIdenticalRemotes = gitRefListsForRevision.BranchesWithNoIdenticalRemotes; bool currentBranchPointsToRevision = false; foreach (var head in branchesWithNoIdenticalRemotes) { if (head.Name.Equals(currentBranch)) currentBranchPointsToRevision = true; else { ToolStripItem toolStripItem = new ToolStripMenuItem(head.Name); toolStripItem.Tag = head.CompleteName; toolStripItem.Click += ToolStripItemClickMergeBranch; mergeBranchDropDown.Items.Add(toolStripItem); toolStripItem = new ToolStripMenuItem(head.Name); toolStripItem.Tag = head.CompleteName; toolStripItem.Click += ToolStripItemClickRebaseBranch; rebaseDropDown.Items.Add(toolStripItem); } } //if there is no branch to rebase on, then allow user to rebase on selected commit if (rebaseDropDown.Items.Count == 0 && !currentBranchPointsToRevision) { ToolStripItem toolStripItem = new ToolStripMenuItem(revision.Guid); toolStripItem.Tag = revision.Guid; toolStripItem.Click += ToolStripItemClickRebaseBranch; rebaseDropDown.Items.Add(toolStripItem); } //if there is no branch to merge, then let user to merge selected commit into current branch if (mergeBranchDropDown.Items.Count == 0 && !currentBranchPointsToRevision) { ToolStripItem toolStripItem = new ToolStripMenuItem(revision.Guid); toolStripItem.Tag = revision.Guid; toolStripItem.Click += ToolStripItemClickMergeBranch; mergeBranchDropDown.Items.Add(toolStripItem); } // clipboard branch and tag menu handling { branchNameCopyToolStripMenuItem.Tag = "caption"; tagNameCopyToolStripMenuItem.Tag = "caption"; MenuUtil.SetAsCaptionMenuItem(branchNameCopyToolStripMenuItem, mainContextMenu); MenuUtil.SetAsCaptionMenuItem(tagNameCopyToolStripMenuItem, mainContextMenu); var branchNames = gitRefListsForRevision.GetAllBranchNames(); CopyToClipboardMenuHelper.SetCopyToClipboardMenuItems( copyToClipboardToolStripMenuItem, branchNameCopyToolStripMenuItem, branchNames, "branchNameItem"); var tagNames = gitRefListsForRevision.GetAllTagNames(); CopyToClipboardMenuHelper.SetCopyToClipboardMenuItems( copyToClipboardToolStripMenuItem, tagNameCopyToolStripMenuItem, tagNames, "tagNameItem"); toolStripSeparator6.Visible = branchNames.Any() || tagNames.Any(); } foreach (var head in allBranches) { ToolStripItem toolStripItem = new ToolStripMenuItem(head.Name); //skip remote branches - they can not be deleted this way if (!head.IsRemote) { if (!head.Name.Equals(currentBranch)) { toolStripItem = new ToolStripMenuItem(head.Name); toolStripItem.Tag = head.Name; toolStripItem.Click += ToolStripItemClickDeleteBranch; deleteBranchDropDown.Items.Add(toolStripItem); //Add to delete branch } toolStripItem = new ToolStripMenuItem(head.Name); toolStripItem.Tag = head.Name; toolStripItem.Click += ToolStripItemClickRenameBranch; renameDropDown.Items.Add(toolStripItem); //Add to rename branch } if (!head.Name.Equals(currentBranch)) { toolStripItem = new ToolStripMenuItem(head.Name); if (head.IsRemote) toolStripItem.Click += ToolStripItemClickCheckoutRemoteBranch; else toolStripItem.Click += ToolStripItemClickCheckoutBranch; checkoutBranchDropDown.Items.Add(toolStripItem); } } deleteTagToolStripMenuItem.DropDown = deleteTagDropDown; deleteTagToolStripMenuItem.Enabled = deleteTagDropDown.Items.Count > 0; deleteBranchToolStripMenuItem.DropDown = deleteBranchDropDown; deleteBranchToolStripMenuItem.Enabled = deleteBranchDropDown.Items.Count > 0; checkoutBranchToolStripMenuItem.DropDown = checkoutBranchDropDown; checkoutBranchToolStripMenuItem.Enabled = !bareRepository && checkoutBranchDropDown.Items.Count > 0; mergeBranchToolStripMenuItem.DropDown = mergeBranchDropDown; mergeBranchToolStripMenuItem.Enabled = !bareRepository && mergeBranchDropDown.Items.Count > 0; rebaseOnToolStripMenuItem.DropDown = rebaseDropDown; rebaseOnToolStripMenuItem.Enabled = !bareRepository && rebaseDropDown.Items.Count > 0; renameBranchToolStripMenuItem.DropDown = renameDropDown; renameBranchToolStripMenuItem.Enabled = renameDropDown.Items.Count > 0; checkoutRevisionToolStripMenuItem.Enabled = !bareRepository; revertCommitToolStripMenuItem.Enabled = !bareRepository; cherryPickCommitToolStripMenuItem.Enabled = !bareRepository; manipulateCommitToolStripMenuItem.Enabled = !bareRepository; toolStripSeparator6.Enabled = branchNameCopyToolStripMenuItem.Enabled || tagNameCopyToolStripMenuItem.Enabled; RefreshOwnScripts(); }