예제 #1
0
파일: TreeView.cs 프로젝트: oqewok/gitter
        private void OnContextMenuRequested(object sender, ItemContextMenuRequestEventArgs e)
        {
            var vm  = ViewModel as TreeViewModel;
            var rts = vm != null ? vm.TreeSource : null;

            if (rts != null)
            {
                var item = ((ITreeItemListItem)e.Item);
                var file = item.TreeItem as TreeFile;
                if (file != null)
                {
                    var menu = new ContextMenuStrip();
                    menu.Items.AddRange(
                        new ToolStripItem[]
                    {
                        GuiItemFactory.GetExtractAndOpenFileItem <ToolStripMenuItem>(DataSource.Data, file.RelativePath),
                        GuiItemFactory.GetExtractAndOpenFileWithItem <ToolStripMenuItem>(DataSource.Data, file.RelativePath),
                        GuiItemFactory.GetSaveAsItem <ToolStripMenuItem>(DataSource.Data, file.RelativePath),
                        new ToolStripSeparator(),
                        new ToolStripMenuItem(Resources.StrCopyToClipboard, null,
                                              new ToolStripItem[]
                        {
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrFileName, file.Name),
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrRelativePath, file.RelativePath),
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrFullPath, file.FullPath),
                        }),
                        new ToolStripSeparator(),
                        GuiItemFactory.GetBlameItem <ToolStripMenuItem>(rts.Revision, file),
                        GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(rts.Revision, file),
                        new ToolStripSeparator(),
                        GuiItemFactory.GetCheckoutPathItem <ToolStripMenuItem>(rts.Revision, file),
                    });
                    Utility.MarkDropDownForAutoDispose(menu);
                    e.ContextMenu         = menu;
                    e.OverrideDefaultMenu = true;
                    return;
                }
                var directory = item.TreeItem as TreeDirectory;
                if (directory != null)
                {
                    var menu = new ContextMenuStrip();
                    menu.Items.AddRange(
                        new ToolStripItem[]
                    {
                        new ToolStripMenuItem(Resources.StrOpen, null, (s, args) => e.Item.Activate()),
                        GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(rts.Revision, directory),
                        new ToolStripSeparator(),
                        GuiItemFactory.GetCheckoutPathItem <ToolStripMenuItem>(rts.Revision, directory),
                    });
                    Utility.MarkDropDownForAutoDispose(menu);
                    e.ContextMenu         = menu;
                    e.OverrideDefaultMenu = true;
                    return;
                }
                var commit = ((ITreeItemListItem)e.Item).TreeItem as TreeCommit;
                if (commit != null)
                {
                    var menu = new ContextMenuStrip();
                    menu.Items.AddRange(
                        new ToolStripItem[]
                    {
                        GuiItemFactory.GetPathHistoryItem <ToolStripMenuItem>(rts.Revision, commit),
                        new ToolStripSeparator(),
                        new ToolStripMenuItem(Resources.StrCopyToClipboard, null,
                                              new ToolStripItem[]
                        {
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrName, commit.Name),
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrRelativePath, commit.RelativePath),
                            GuiItemFactory.GetCopyToClipboardItem <ToolStripMenuItem>(Resources.StrFullPath, commit.FullPath),
                        }),
                        new ToolStripSeparator(),
                        GuiItemFactory.GetCheckoutPathItem <ToolStripMenuItem>(rts.Revision, commit),
                    });
                    Utility.MarkDropDownForAutoDispose(menu);
                    e.ContextMenu         = menu;
                    e.OverrideDefaultMenu = true;
                    return;
                }
            }
        }