/// <summary> /// Invoked whenever action items are discarded from the stack. /// </summary> /// <param name="e">The arguments that will be passed to the <see cref="ActionItemsDiscarded"/> event raised by this method.</param> protected virtual void OnActionItemsDiscarded(DiscardedActionItemsEventArgs <IActionItem> e) { var handler = ActionItemsDiscarded; if (handler != null) { handler(this, e); } }
private void ActionItemsDiscarded(object sender, DiscardedActionItemsEventArgs <IActionItem> e) { var dirtiables = new HashSet <IDirtiable>(); switch (e.Type) { case ActionItemDiscardType.Swallowed: foreach (var actionItem in e.ActionItems.SelectMany(GetDirtiableItems)) { foreach (var dirtiable in actionItem.Dirtiables) { List <DirtiableActionItem> dirtiableActionItems; if (!dirtiableActionMap.TryGetValue(dirtiable, out dirtiableActionItems)) { dirtiableActionItems = new List <DirtiableActionItem>(); dirtiableActionMap.Add(dirtiable, dirtiableActionItems); } dirtiableActionItems.Remove(actionItem); if (!swallowedActionsMap.TryGetValue(dirtiable, out dirtiableActionItems)) { dirtiableActionItems = new List <DirtiableActionItem>(); swallowedActionsMap.Add(dirtiable, dirtiableActionItems); } dirtiableActionItems.Add(actionItem); } } break; case ActionItemDiscardType.Disbranched: foreach (var actionItem in e.ActionItems.SelectMany(GetDirtiableItems)) { foreach (var dirtiable in actionItem.Dirtiables) { List <DirtiableActionItem> dirtiableActionItems; if (!dirtiableActionMap.TryGetValue(dirtiable, out dirtiableActionItems)) { dirtiableActionItems = new List <DirtiableActionItem>(); dirtiableActionMap.Add(dirtiable, dirtiableActionItems); } dirtiableActionItems.Remove(actionItem); dirtiables.Add(dirtiable); } } break; case ActionItemDiscardType.UndoRedoInProgress: break; default: throw new ArgumentOutOfRangeException(); } UpdateDirtiables(dirtiables); }
/// <summary> /// Invoked whenever action items are discarded from the stack. /// </summary> /// <param name="e">The arguments that will be passed to the <see cref="ActionItemsDiscarded"/> event raised by this method.</param> protected virtual void OnActionItemsDiscarded(DiscardedActionItemsEventArgs <IActionItem> e) { ActionItemsDiscarded?.Invoke(this, e); }