예제 #1
0
		public static ClipboardData GetSystem()
		{
			var dataObj = Clipboard.GetDataObject();
			if (dataObj.GetData(typeof(NELocalClipboard)) as int? == PID)
				return null;

			var data = new ClipboardData();
			data.Text = dataObj.GetData(DataFormats.UnicodeText) as string ?? dataObj.GetData(DataFormats.OemText) as string ?? dataObj.GetData(DataFormats.Text) as string ?? dataObj.GetData(typeof(string)) as string;
			data.Strings = new List<string>();
			if (data.Text == null)
				data.Text = "";
			else
				data.Strings.Add(data.Text);

			data.Image = dataObj.GetData(DataFormats.Bitmap, true) as BitmapSource;

			var dropList = (dataObj.GetData(DataFormats.FileDrop) as string[])?.OrderBy(Helpers.SmartComparer(false)).ToList();
			if ((dropList != null) && (dropList.Count != 0))
			{
				data.Strings = dropList;
				var dropEffectStream = dataObj.GetData("Preferred DropEffect");
				if (dropEffectStream is MemoryStream)
				{
					try
					{
						var dropEffect = (DragDropEffects)BitConverter.ToInt32(((MemoryStream)dropEffectStream).ToArray(), 0);
						data.IsCut = dropEffect.HasFlag(DragDropEffects.Move);
					}
					catch { }
				}
			}

			return data;
		}
예제 #2
0
		public static ClipboardData CreateObjects(IEnumerable<object> objects, string text = null)
		{
			var data = new ClipboardData();
			data.Objects = objects.ToList();
			data.Strings = data.Objects.Select(obj => (obj ?? "<NULL>").ToString()).ToList();
			data.Text = text ?? string.Join(" ", data.Strings);
			return data;
		}
예제 #3
0
		public static ClipboardData CreateStrings(IEnumerable<string> strings)
		{
			var data = new ClipboardData();
			data.Strings = strings.ToList();
			data.Text = string.Join("\r\n", data.Strings.Select(str => str ?? "<NULL>"));
			data.Objects = data.Strings.Cast<object>().ToList();
			return data;
		}
예제 #4
0
		public static ClipboardData CreateText(string text)
		{
			var data = new ClipboardData();
			data.Text = text ?? "<NULL>";
			data.Strings = new List<string> { data.Text };
			data.Objects = data.Strings.Cast<object>().ToList();
			return data;
		}
예제 #5
0
		public static ClipboardData CreateFiles(IEnumerable<string> fileNames, bool isCut)
		{
			var data = new ClipboardData();
			data.Strings = fileNames.ToList();
			data.Text = string.Join(" ", data.Strings.Select(file => string.Format(@"""{0}""", file)));
			data.Objects = data.Strings.Cast<object>().ToList();
			data.IsCut = isCut;
			return data;
		}
예제 #6
0
		static void Save(NELocalClipboard control, ClipboardData data, bool global = true, bool setClipboard = true)
		{
			systemClipboard = data;

			var controls = global ? clipboards.AsEnumerable() : new List<NELocalClipboard> { control };
			controls.NonNull().ForEach(clipboard => { clipboard.localClipboard = data; clipboard.clipboardChanged?.Invoke(); });

			if (setClipboard)
				data.SetSystem();
		}
예제 #7
0
		public static ClipboardData CreateImage(BitmapSource image)
		{
			var data = new ClipboardData();
			data.Image = image;
			return data;
		}
예제 #8
0
		public NELocalClipboard()
		{
			localClipboard = systemClipboard ?? new ClipboardData();
			clipboards.Add(this);
		}