From 71a6ee8bfc159e2cf8dde3a920bc01644f7f82b7 Mon Sep 17 00:00:00 2001
From: Patryk Mikos <patryk912@gmail.com>
Date: Sat, 28 Dec 2013 12:51:10 +0100
Subject: [PATCH] ClipboardRingPopup support for empty ClipboardRing

---
 data/resources/StringResources.resx                    |  3 +++
 .../Src/ContextActions/ClipboardRing.cs                | 10 ++++++++--
 .../Src/Gui/Components/SideBar/TextEditorSideBar.cs    |  4 ++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx
index 9dcde783ec..ccd573e577 100644
--- a/data/resources/StringResources.resx
+++ b/data/resources/StringResources.resx
@@ -6437,6 +6437,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
   <data name="SharpDevelop.Refactoring.ClipboardRing" xml:space="preserve">
     <value>Clipboard ring</value>
   </data>
+  <data name="SharpDevelop.Refactoring.ClipboardRingEmpty" xml:space="preserve">
+    <value>Clipboard ring is empty</value>
+  </data>
   <data name="SharpDevelop.Refactoring.ClipboardRingCommand" xml:space="preserve">
     <value>From clipboard ring</value>
   </data>
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs
index 763a123525..61aa89f178 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/ClipboardRing.cs
@@ -34,8 +34,14 @@ namespace ICSharpCode.AvalonEdit.AddIn.ContextActions
 		static ContextActionsPopup MakePopupWithClipboardOptions(EditorRefactoringContext context)
 		{
 			var popupViewModel = new ContextActionsPopupViewModel();
-			popupViewModel.Title = MenuService.ConvertLabel(StringParser.Parse("${res:SharpDevelop.Refactoring.ClipboardRing}"));
-			popupViewModel.Actions = BuildClipboardRingData(context);
+			var actions = BuildClipboardRingData(context);
+			
+			string labelSource = "${res:SharpDevelop.Refactoring.ClipboardRing}";
+			if (actions == null || actions.Count == 0) 
+				labelSource = "${res:SharpDevelop.Refactoring.ClipboardRingEmpty}";
+			
+			popupViewModel.Title = MenuService.ConvertLabel(StringParser.Parse(labelSource));
+			popupViewModel.Actions = actions;
 			return new ClipboardRingPopup { Actions = popupViewModel };
 		}
 		
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 a1b31ae7e8..2985cab7f9 100644
--- a/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs
+++ b/src/Main/Base/Project/Src/Gui/Components/SideBar/TextEditorSideBar.cs
@@ -83,11 +83,15 @@ namespace ICSharpCode.SharpDevelop.Gui
 		public List<string> GetClipboardRingItems()
 		{
 			var list = new List<string>();
+			if (clipboardRing == null || clipboardRing.Items == null)
+				return list;
+			
 			foreach (var item in clipboardRing.Items) {
 				string itemData = item.Tag as string;
 				if (itemData != null)
 					list.Add(itemData);
 			}
+			
 			return list;
 		}