/// <summary> /// Clipboard has changed - event /// </summary> /// <param name="format">Data format</param> /// <param name="data">Data object</param> private void ClipboardMonitor_OnClipboardChange(ClipboardFormat format, object data) { var clipboardObject = new ClipboardObject(format, data); if (LastClipboardObject != null && LastClipboardObject.Equals(clipboardObject)) { return; // Same clipboard as the last one, ignoring! } CurrentIndex = 0; var item = Find(clipboardObject); if (item != null) { ClipboardObjects.Remove(clipboardObject); ClipboardObjects.Enqueue(clipboardObject); } else { ClipboardObjects.Enqueue(clipboardObject); } OnPropertyChanged(nameof(ClipboardObjects)); LastClipboardObject = clipboardObject; SessionClips++; }
private void OnClipboardUpdate(object sender, EventArgs args) //TODO: Either remove entries with the same data or don't add on paste { object data = null; ClipboardObjectType type = ClipboardObjectType.NoData; if (ClipboardHelper.ContainsText(OPEN_CLIPBOARD_TRIES)) { data = ClipboardHelper.GetText(OPEN_CLIPBOARD_TRIES); type = ClipboardObjectType.String; } else if (ClipboardHelper.ContainsImage(OPEN_CLIPBOARD_TRIES)) { data = ClipboardHelper.GetImage(OPEN_CLIPBOARD_TRIES); type = ClipboardObjectType.Image; } if (data == null) { return; } if (SavedClipboardObjects.Any(i => i.Data.Equals(data))) { return; } var sameObjects = ClipboardObjects.Where(i => i.Data.Equals(data)).ToList(); foreach (var sameObject in sameObjects) { ClipboardObjects.Remove(sameObject); } ClipboardObjectViewModel noDataItem = ClipboardObjects.FirstOrDefault(i => i.ClipboardObjectType == ClipboardObjectType.NoData); if (noDataItem != null) { ClipboardObjects.Remove(noDataItem); } ClipboardObjects.Insert(0, new ClipboardObjectViewModel(data, type)); if (ClipboardObjects.Count <= ((ClipboardManagerSettings)Settings).MaxEntries) { return; } ClipboardObjectViewModel lastObject = ClipboardObjects.LastOrDefault(); if (lastObject == null) { return; } ClipboardObjects.Remove(lastObject); }
private void OnClipboardObjectDeleted(object sender, EventArgs args) { if (!(sender is ClipboardObjectViewModel clipboardObject)) { return; } if (!ClipboardObjects.Remove(clipboardObject)) { SavedClipboardObjects.Remove(clipboardObject); } }
private void OnClipboardObjectPinStateChanged(object sender, bool isPinned) { if (isPinned) { ClipboardObjectViewModel clipboardObject = ClipboardObjects.FirstOrDefault(i => i.Equals(sender)); ClipboardObjects.Remove(clipboardObject); SavedClipboardObjects.Add(clipboardObject); SavePinnedItem(clipboardObject); } else { ClipboardObjectViewModel savedClipboardObject = SavedClipboardObjects.FirstOrDefault(i => i.Equals(sender)); int index = SavedClipboardObjects.IndexOf(savedClipboardObject); SavedClipboardObjects.Remove(savedClipboardObject); ClipboardObjects.Add(savedClipboardObject); DeletePinnedItem(index); } }
/// <summary> /// Find an clip matching a checksum /// </summary> /// <param name="clipitem">Checksum to find</param> /// <returns><see cref="ClipboardObject"/> or null</returns> public ClipboardObject Find(ClipboardObject clipitem) { var result = ClipboardObjects.AsParallel().FirstOrDefault(clip => clip.Checksum.SequenceEqual(clipitem.Checksum)); return(result); }