示例#1
0
        /// <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);
            }
        }
示例#5
0
        /// <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);
        }