From 581a9cf281b0f1d757ad43e8b6a3a7a7a7c0be6a Mon Sep 17 00:00:00 2001 From: Patryk Mikos Date: Mon, 23 Dec 2013 13:36:26 +0100 Subject: [PATCH] Clipboard Ring popup context menu added --- .../AvalonEdit.AddIn/AvalonEdit.AddIn.csproj | 1 + .../Src/ContextActions/ClipboardRing.cs | 94 ++++++++++++++++--- .../Components/SideBar/TextEditorSideBar.cs | 13 +++ 3 files changed, 95 insertions(+), 13 deletions(-) diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj index 768084692a..0ca5cdeebf 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj @@ -87,6 +87,7 @@ + ContextActionOptions.xaml diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs index 0015a26541..a47657b084 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs @@ -1,22 +1,90 @@ -/* - * Created by SharpDevelop. - * User: hp - * Date: 2013-12-22 - * Time: 16:09 - * - * To change this template use Tools | Options | Coding | Edit Standard Headers. - */ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Windows; + +using ICSharpCode.Core; +using ICSharpCode.Core.Presentation; +using ICSharpCode.NRefactory.Semantics; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Editor.Commands; +using ICSharpCode.SharpDevelop.Editor.ContextActions; +using ICSharpCode.SharpDevelop.Refactoring; namespace ICSharpCode.AvalonEdit.AddIn.ContextActions { - /// - /// Description of ClipboardRing. - /// - public class ClipboardRing + public class ClipboardRing : ResolveResultMenuCommand + { + public override void Run(ResolveResult symbol) + { + ITextEditor editor = SD.GetActiveViewContentService(); + EditorRefactoringContext context = new EditorRefactoringContext(editor); + MakePopupWithClipboardOptions(context).OpenAtCaretAndFocus(); + } + + static ContextActionsPopup MakePopupWithClipboardOptions(EditorRefactoringContext context) + { + var popupViewModel = new ContextActionsPopupViewModel(); + popupViewModel.Title = MenuService.ConvertLabel(StringParser.Parse("${res:SharpDevelop.Refactoring.ClipboardRing}")); + popupViewModel.Actions = BuildClipboardRingData(context); + return new ContextActionsPopup { Actions = popupViewModel }; + } + + static ObservableCollection BuildClipboardRingData(EditorRefactoringContext context) + { + var clipboardRing = ICSharpCode.SharpDevelop.Gui.TextEditorSideBar.Instance; + var clipboardRingItems = clipboardRing.GetClipboardRingItems(); + + var list = new ObservableCollection(); + foreach (var item in clipboardRingItems) { + list.Add(new ContextActionViewModel(new ClipboardRingAction(item), context)); + } + + return list; + } + } + + public class ClipboardRingAction : IContextAction { - public ClipboardRing() + string Text; + + public string DisplayName { get; private set; } + + public IEntity Entity { get; private set; } + + public ClipboardRingAction(string text) + { + string entry = text.Trim(); + if(entry.Length > 50) + entry = entry.Substring(0,47) + "..."; + + this.DisplayName = entry; + this.Text = text; + } + + public IContextActionProvider Provider + { + get { return null; } + } + + public string GetDisplayName(EditorRefactoringContext context) + { + return DisplayName; + } + + public void Execute(EditorRefactoringContext context) { + /* + if(context == null) + MessageBox.Show("null context :" + Text); + else + MessageBox.Show(context.CaretLocation + " : " + Text);*/ } } } diff --git a/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs b/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs index 4b8374bda6..e5090d3596 100644 --- a/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs +++ b/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs @@ -2,6 +2,8 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Collections; +using System.Collections.Generic; using System.IO; using System.Xml; @@ -78,6 +80,17 @@ namespace ICSharpCode.SharpDevelop.Gui this.ActiveTab = clipboardRing; } + public List GetClipboardRingItems() + { + var list = new List(); + foreach (var item in clipboardRing.Items) { + string itemData = item.Tag as string; + if (itemData != null) + list.Add(itemData); + } + return list; + } + public void PutInClipboardRing(string text) { if (clipboardRing != null) {