Пример #1
0
        public void Add(IAction action)
        {
            if (action is Node)
            {
                Group grp = (Group)action;

                if (grp.Actions.Count == 1)
                {
                    action = grp.Actions[0];
                }
                else if (grp.Actions.Count == 0)
                {
                    return;
                }
            }

            if (d_actions.Count - d_unmodifiedMark < d_actionPtr)
            {
                d_unmodifiedMark = -1;
            }

            IAction last = LastAction;

            if (last != null && last.CanMerge(action))
            {
                last.Merge(action);
            }
            else
            {
                d_actions.RemoveRange(0, d_actionPtr);
                d_actions.Insert(0, action);
                d_actionPtr = 0;

                OnChanged(this);

                if (d_actions.Count == 1)
                {
                    OnModified(this);
                }
            }
        }