private void OverflowIfNecessary(HistoryEventArgs <T> eventArgs) { if (!MaxSize.HasValue || CurrentIndex < MaxSize.Value) { return; } RemoveOldestItem(); HistoryOverflowed?.Invoke(this, eventArgs); }
public void RememberNew(T item) { var eventArgs = _history.IsEmpty() ? HistoryEventArgs <T> .OnlyCurrentItem( currentItem : item) : HistoryEventArgs <T> .BothItems( currentItem : item, previousItem : CurrentItem); AddNewItem(item); NewItemRemembered?.Invoke(this, eventArgs); OverflowIfNecessary(eventArgs); }
public void Repeat() { if (!CanRepeat) { return; } var eventArgs = HistoryEventArgs <T> .BothItems( currentItem : NextItem, previousItem : CurrentItem); CurrentIndex++; HistoryRepeated?.Invoke(this, eventArgs); }
public void Undo() { if (!CanUndo) { return; } var eventArgs = HistoryEventArgs <T> .BothItems( currentItem : PreviousItem, previousItem : CurrentItem); CurrentIndex--; HistoryUndid?.Invoke(this, eventArgs); }
public void ForgetCurrent() { if (_history.IsEmpty()) { return; } var eventArgs = CurrentIndex == 0 ? HistoryEventArgs <T> .OnlyPreviousItem( previousItem : CurrentItem) : HistoryEventArgs <T> .BothItems( currentItem : PreviousItem, previousItem : CurrentItem); RemoveCurrentItem(); CurrentItemForgotten?.Invoke(this, eventArgs); }