Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
239 changes: 124 additions & 115 deletions src/LogExpert.Core/Classes/Bookmark/BookmarkDataProvider.cs
Original file line number Diff line number Diff line change
@@ -1,176 +1,185 @@
using LogExpert.Core.Entities;
using LogExpert.Core.Entities;
using LogExpert.Core.Interface;

using NLog;

namespace LogExpert.Core.Classes.Bookmark
namespace LogExpert.Core.Classes.Bookmark;

public class BookmarkDataProvider : IBookmarkData
{
public class BookmarkDataProvider : IBookmarkData
{
#region Fields
#region Fields

private static readonly ILogger _logger = LogManager.GetCurrentClassLogger();
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();

#endregion
#endregion

#region cTor
#region cTor

public BookmarkDataProvider()
{
BookmarkList = [];
}
public BookmarkDataProvider ()
{
BookmarkList = [];
}

public BookmarkDataProvider(SortedList<int, Entities.Bookmark> bookmarkList)
{
BookmarkList = bookmarkList;
}
public BookmarkDataProvider (SortedList<int, Entities.Bookmark> bookmarkList)
{
BookmarkList = bookmarkList;
}

#endregion
#endregion

#region Delegates
#region Delegates

public delegate void AllBookmarksRemovedEventHandler(object sender, System.EventArgs e);
public delegate void AllBookmarksRemovedEventHandler (object sender, EventArgs e);

public delegate void BookmarkAddedEventHandler(object sender, System.EventArgs e);
public delegate void BookmarkAddedEventHandler (object sender, EventArgs e);

public delegate void BookmarkRemovedEventHandler(object sender, System.EventArgs e);
public delegate void BookmarkRemovedEventHandler (object sender, EventArgs e);

#endregion
#endregion

#region Events
#region Events

public event BookmarkAddedEventHandler BookmarkAdded;
public event BookmarkRemovedEventHandler BookmarkRemoved;
public event AllBookmarksRemovedEventHandler AllBookmarksRemoved;
public event BookmarkAddedEventHandler BookmarkAdded;
public event BookmarkRemovedEventHandler BookmarkRemoved;
public event AllBookmarksRemovedEventHandler AllBookmarksRemoved;

#endregion
#endregion

#region Properties
#region Properties

public BookmarkCollection Bookmarks => new(BookmarkList);
public BookmarkCollection Bookmarks => new(BookmarkList);

public SortedList<int, Entities.Bookmark> BookmarkList { get; set; }
public SortedList<int, Entities.Bookmark> BookmarkList { get; private set; }

#endregion
#endregion

#region Public methods
#region Public methods

public void ToggleBookmark(int lineNum)
{
if (IsBookmarkAtLine(lineNum))
{
RemoveBookmarkForLine(lineNum);
}
else
{
AddBookmark(new Entities.Bookmark(lineNum));
}
}
public void SetBookmarks (SortedList<int, Entities.Bookmark> bookmarkList)
{
BookmarkList = bookmarkList;
}

public bool IsBookmarkAtLine(int lineNum)
public void ToggleBookmark (int lineNum)
{
if (IsBookmarkAtLine(lineNum))
{
return BookmarkList.ContainsKey(lineNum);
RemoveBookmarkForLine(lineNum);
}

public int GetBookmarkIndexForLine(int lineNum)
else
{
return BookmarkList.IndexOfKey(lineNum);
AddBookmark(new Entities.Bookmark(lineNum));
}
}

public Entities.Bookmark GetBookmarkForLine(int lineNum)
{
return BookmarkList[lineNum];
}
public bool IsBookmarkAtLine (int lineNum)
{
return BookmarkList.ContainsKey(lineNum);
}

#endregion
public int GetBookmarkIndexForLine (int lineNum)
{
return BookmarkList.IndexOfKey(lineNum);
}

#region Internals
public Entities.Bookmark GetBookmarkForLine (int lineNum)
{
return BookmarkList[lineNum];
}

public void ShiftBookmarks(int offset)
{
SortedList<int, Entities.Bookmark> newBookmarkList = [];
foreach (Entities.Bookmark bookmark in BookmarkList.Values)
{
int line = bookmark.LineNum - offset;
if (line >= 0)
{
bookmark.LineNum = line;
newBookmarkList.Add(line, bookmark);
}
}
BookmarkList = newBookmarkList;
}
#endregion

public int FindPrevBookmarkIndex(int lineNum)
#region Internals

public void ShiftBookmarks (int offset)
{
SortedList<int, Entities.Bookmark> newBookmarkList = [];

foreach (Entities.Bookmark bookmark in BookmarkList.Values)
{
IList<Entities.Bookmark> values = BookmarkList.Values;
for (int i = BookmarkList.Count - 1; i >= 0; --i)
var line = bookmark.LineNum - offset;
if (line >= 0)
{
if (values[i].LineNum <= lineNum)
{
return i;
}
bookmark.LineNum = line;
newBookmarkList.Add(line, bookmark);
}
return BookmarkList.Count - 1;
}

public int FindNextBookmarkIndex(int lineNum)
BookmarkList = newBookmarkList;
}

public int FindPrevBookmarkIndex (int lineNum)
{
IList<Entities.Bookmark> values = BookmarkList.Values;
for (var i = BookmarkList.Count - 1; i >= 0; --i)
{
IList<Entities.Bookmark> values = BookmarkList.Values;
for (int i = 0; i < BookmarkList.Count; ++i)
if (values[i].LineNum <= lineNum)
{
if (values[i].LineNum >= lineNum)
{
return i;
}
return i;
}
return 0;
}

public void RemoveBookmarkForLine(int lineNum)
{
BookmarkList.Remove(lineNum);
OnBookmarkRemoved();
}
return BookmarkList.Count - 1;
}

public void RemoveBookmarksForLines(List<int> lineNumList)
public int FindNextBookmarkIndex (int lineNum)
{
IList<Entities.Bookmark> values = BookmarkList.Values;
for (var i = 0; i < BookmarkList.Count; ++i)
{
foreach (int lineNum in lineNumList)
if (values[i].LineNum >= lineNum)
{
BookmarkList.Remove(lineNum);
return i;
}
OnBookmarkRemoved();
}
return 0;
}

public void RemoveBookmarkForLine (int lineNum)
{
_ = BookmarkList.Remove(lineNum);
OnBookmarkRemoved();
}

public void AddBookmark(Entities.Bookmark bookmark)
public void RemoveBookmarksForLines (List<int> lineNumList)
{
foreach (var lineNum in lineNumList)
{
BookmarkList.Add(bookmark.LineNum, bookmark);
OnBookmarkAdded();
}
_ = BookmarkList.Remove(lineNum);

public void ClearAllBookmarks()
{
_logger.Debug("Removing all bookmarks");
BookmarkList.Clear();
OnAllBookmarksRemoved();
}

#endregion
OnBookmarkRemoved();
}

protected void OnBookmarkAdded()
{
BookmarkAdded?.Invoke(this, System.EventArgs.Empty);
}

protected void OnBookmarkRemoved()
{
BookmarkRemoved?.Invoke(this, System.EventArgs.Empty);
}
public void AddBookmark (Entities.Bookmark bookmark)
{
BookmarkList.Add(bookmark.LineNum, bookmark);
OnBookmarkAdded();
}

protected void OnAllBookmarksRemoved()
{
AllBookmarksRemoved?.Invoke(this, System.EventArgs.Empty);
}
public void ClearAllBookmarks ()
{
_logger.Debug("Removing all bookmarks");
BookmarkList.Clear();
OnAllBookmarksRemoved();
}

#endregion

protected void OnBookmarkAdded ()
{
BookmarkAdded?.Invoke(this, EventArgs.Empty);
}

protected void OnBookmarkRemoved ()
{
BookmarkRemoved?.Invoke(this, EventArgs.Empty);
}

protected void OnAllBookmarksRemoved ()
{
AllBookmarksRemoved?.Invoke(this, EventArgs.Empty);
}
}
Loading
Loading