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); } } }