public void Undo()
        {
            //Console.WriteLine("CommandMoveSnippetToGroup::Undo() " + this.GetHashCode() + "  _snippets.Count=" + _movedSegments.Count + "   command=" + this.GetHashCode());

            for (int i = 0; i < _affectedGroups.Count; i++)
            {
                Group affectedGroup = _affectedGroups[i];

                #if DEBUG
                Console.WriteLine("clearing affectedGroup " + affectedGroup);
                #endif
                //Console.WriteLine("replacing group " + oldGroup + " with the following snippets:");

                while (affectedGroup.Segments.Count > 0)
                {
                    affectedGroup.RemoveSegment(affectedGroup.Segments[0]);
                }
            }

            foreach (Group group in _oldGroupContents.Keys)
            {
                List <Segment> oldSegments = _oldGroupContents[group];

                for (int i = 0; i < oldSegments.Count; i++)
                {
                    group.AddSegment(oldSegments[i]);
                }
            }

            //Console.WriteLine("_affectedGroups after Undo()");
            //Debug_PrintAffectedGroups();

            EventArgs_SegmentMovedToGroup e = new EventArgs_SegmentMovedToGroup(_affectedGroups, _movedSegments);
            EditorModel.Instance.RaiseEvent_SegmentMovedToGroup(e);
        }
        public void Execute()
        {
            #if DEBUG
            Console.WriteLine("CommandMovePsaiEntity::Execute()  _movedSegments.Count=" + _movedSegments.Length);
            #endif

            _oldGroupContents.Clear();

            foreach (Group group in _affectedGroups)
            {
                //Console.WriteLine("creating a copy of the Snippets for group " + group);
                List <Segment> oldSnippets = new List <Segment>();
                for (int i = 0; i < group.Segments.Count; i++)
                {
                    oldSnippets.Add(group.Segments[i]);

                    #if DEBUG
                    Console.WriteLine("  - added " + group.Segments[i]);
                    #endif
                }

                _oldGroupContents[group] = oldSnippets;
            }

            foreach (Segment segment in _movedSegments)
            {
                segment.Group.RemoveSegment(segment);

                #if DEBUG
                Console.WriteLine("  -removed Segment " + segment + " from group " + segment.Group);
                #endif
            }

            for (int i = _movedSegments.Length - 1; i >= 0; i--)
            {
                Segment snippet = _movedSegments[i];
                _targetGroup.AddSegment(snippet, _targetIndex);

                #if DEBUG
                Console.WriteLine("  -added Segment " + snippet + " to group " + snippet.Group + " at index " + _targetIndex);
                #endif
            }

            //Console.WriteLine("_affectedGroups after Execute()");
            //Debug_PrintAffectedGroups();

            EventArgs_SegmentMovedToGroup e = new EventArgs_SegmentMovedToGroup(_affectedGroups, _movedSegments);
            EditorModel.Instance.RaiseEvent_SegmentMovedToGroup(e);
        }
        public void Execute()
        {
            #if DEBUG
                Console.WriteLine("CommandMovePsaiEntity::Execute()  _movedSegments.Count=" + _movedSegments.Length);
            #endif

            _oldGroupContents.Clear();

            foreach (Group group in _affectedGroups)
            {
                //Console.WriteLine("creating a copy of the Snippets for group " + group);
                List<Segment> oldSnippets = new List<Segment>();
                for (int i = 0; i < group.Segments.Count; i++)
                {
                    oldSnippets.Add(group.Segments[i]);

                    #if DEBUG
                        Console.WriteLine("  - added " + group.Segments[i]);
                    #endif
                }

                _oldGroupContents[group] = oldSnippets;
            }

            foreach (Segment segment in _movedSegments)
            {
                segment.Group.RemoveSegment(segment);

                #if DEBUG
                    Console.WriteLine("  -removed Segment " + segment + " from group " + segment.Group);
                #endif
            }

            for (int i = _movedSegments.Length-1; i >= 0; i--)
            {
                Segment snippet = _movedSegments[i];
                _targetGroup.AddSegment(snippet, _targetIndex);

                #if DEBUG
                    Console.WriteLine("  -added Segment " + snippet + " to group " + snippet.Group + " at index " + _targetIndex);
                #endif
            }

            //Console.WriteLine("_affectedGroups after Execute()");
            //Debug_PrintAffectedGroups();

            EventArgs_SegmentMovedToGroup e = new EventArgs_SegmentMovedToGroup(_affectedGroups, _movedSegments);
            EditorModel.Instance.RaiseEvent_SegmentMovedToGroup(e);
        }
        public void Undo()
        {
            //Console.WriteLine("CommandMoveSnippetToGroup::Undo() " + this.GetHashCode() + "  _snippets.Count=" + _movedSegments.Count + "   command=" + this.GetHashCode());

            for (int i = 0; i < _affectedGroups.Count; i++)
            {
                Group affectedGroup = _affectedGroups[i];

                #if DEBUG
                    Console.WriteLine("clearing affectedGroup " + affectedGroup);
                #endif
                //Console.WriteLine("replacing group " + oldGroup + " with the following snippets:");

                while (affectedGroup.Segments.Count > 0)
                {
                    affectedGroup.RemoveSegment(affectedGroup.Segments[0]);
                }

            }

            foreach (Group group in _oldGroupContents.Keys)
            {
                List<Segment> oldSegments = _oldGroupContents[group];

                for (int i = 0; i < oldSegments.Count; i++)
                    group.AddSegment(oldSegments[i]);
            }

            //Console.WriteLine("_affectedGroups after Undo()");
            //Debug_PrintAffectedGroups();

            EventArgs_SegmentMovedToGroup e = new EventArgs_SegmentMovedToGroup(_affectedGroups, _movedSegments);
            EditorModel.Instance.RaiseEvent_SegmentMovedToGroup(e);
        }