示例#1
0
        /// <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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
 /// <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);
 }