void RemoveCore(Bookmark[] bookmarks) { uiDispatcher.VerifyAccess(); var removed = new List <Bookmark>(bookmarks.Length); lock (lockObj) { foreach (var bm in bookmarks) { var bmImpl = bm as BookmarkImpl; Debug.Assert(!(bmImpl is null)); if (bmImpl is null) { continue; } if (!this.bookmarks.Contains(bmImpl)) { continue; } removed.Add(bmImpl); this.bookmarks.Remove(bmImpl); bool b = locationToBookmark.Remove(bmImpl.Location); Debug.Assert(b); } } if (removed.Count > 0) { BookmarksChanged?.Invoke(this, new CollectionChangedEventArgs <Bookmark>(removed, added: false)); foreach (var bm in removed) { bm.Close(); } } }
/// <summary> /// Saves settings /// </summary> public void SaveSettings() { var jArray = JArray.FromObject(Bookmarks.Select(f => f.Serialize()).ToArray()); Properties.Settings.Default.Bookmarks = JsonConvert.SerializeObject(jArray); Properties.Settings.Default.Save(); BookmarksChanged?.Invoke(null, EventArgs.Empty); }
void ClearCore() { uiDispatcher.VerifyAccess(); Bookmark[] removed; lock (lockObj) { removed = bookmarks.ToArray(); bookmarks.Clear(); locationToBookmark.Clear(); } if (removed.Length > 0) { BookmarksChanged?.Invoke(this, new CollectionChangedEventArgs <Bookmark>(removed, added: false)); foreach (var bm in removed) { bm.Close(); } } }
void AddCore(List <BookmarkImpl> bookmarks, List <BMObject>?objsToClose) { uiDispatcher.VerifyAccess(); var added = new List <Bookmark>(bookmarks.Count); lock (lockObj) { foreach (var bm in bookmarks) { Debug.Assert(!this.bookmarks.Contains(bm)); if (this.bookmarks.Contains(bm)) { continue; } if (locationToBookmark.ContainsKey(bm.Location)) { if (objsToClose is null) { objsToClose = new List <BMObject>(); } objsToClose.Add(bm); } else { added.Add(bm); this.bookmarks.Add(bm); locationToBookmark.Add(bm.Location, bm); } } } if (!(objsToClose is null)) { foreach (var obj in objsToClose) { obj.Close(); } } if (added.Count > 0) { BookmarksChanged?.Invoke(this, new CollectionChangedEventArgs <Bookmark>(added, added: true)); } }