Replace EveryValueChanged with ReactiveProperty
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using SharpIDE.Application.Features.Analysis;
|
||||
using R3;
|
||||
using SharpIDE.Application.Features.Analysis;
|
||||
using SharpIDE.Application.Features.SolutionDiscovery;
|
||||
|
||||
namespace SharpIDE.Application.Features.NavigationHistory;
|
||||
@@ -9,12 +10,12 @@ public class IdeNavigationHistoryService
|
||||
|
||||
// Using LinkedList for back stack to efficiently remove oldest entries
|
||||
private readonly LinkedList<IdeNavigationLocation> _backStack = new();
|
||||
private IdeNavigationLocation? _current;
|
||||
private readonly Stack<IdeNavigationLocation> _forwardStack = new();
|
||||
|
||||
public bool CanGoBack => _backStack.Count > 0;
|
||||
public bool CanGoForward => _forwardStack.Count > 0;
|
||||
public IdeNavigationLocation? Current => _current;
|
||||
public ReactiveProperty<IdeNavigationLocation?> Current { get; private set; } = new(null);
|
||||
|
||||
public bool EnableRecording { get; set; } = false;
|
||||
|
||||
public void StartRecording() => EnableRecording = true;
|
||||
@@ -23,40 +24,40 @@ public class IdeNavigationHistoryService
|
||||
{
|
||||
if (EnableRecording is false) return;
|
||||
var location = new IdeNavigationLocation(file, linePosition);
|
||||
if (location == _current)
|
||||
if (location == Current.Value)
|
||||
{
|
||||
// perhaps we filter out our forward and back navigations like this?
|
||||
return;
|
||||
}
|
||||
if (_current is not null)
|
||||
if (Current.Value is not null)
|
||||
{
|
||||
_backStack.AddLast(_current);
|
||||
_backStack.AddLast(Current.Value);
|
||||
if (_backStack.Count > MaxHistorySize) _backStack.RemoveFirst();
|
||||
}
|
||||
_current = location;
|
||||
Current.Value = location;
|
||||
_forwardStack.Clear();
|
||||
}
|
||||
|
||||
public void GoBack()
|
||||
{
|
||||
if (!CanGoBack) throw new InvalidOperationException("Cannot go back, no history available.");
|
||||
if (_current is not null)
|
||||
if (Current.Value is not null)
|
||||
{
|
||||
_forwardStack.Push(_current);
|
||||
_forwardStack.Push(Current.Value);
|
||||
}
|
||||
_current = _backStack.Last();
|
||||
Current.Value = _backStack.Last();
|
||||
_backStack.RemoveLast();
|
||||
}
|
||||
|
||||
public void GoForward()
|
||||
{
|
||||
if (!CanGoForward) throw new InvalidOperationException("Cannot go forward, no history available.");
|
||||
if (_current is not null)
|
||||
if (Current.Value is not null)
|
||||
{
|
||||
_backStack.AddLast(_current);
|
||||
_backStack.AddLast(Current.Value);
|
||||
}
|
||||
|
||||
_current = _forwardStack.Pop();
|
||||
Current.Value = _forwardStack.Pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user