Example #1
0
 override public void Undo()
 {
     for (int i = 0; i < ranges.Length; i++)
     {
         Range        range    = ranges[i];
         LineIterator iterator = isUp ?
                                 lines.GetLineRange(range.iLine1, range.iLine0 - range.iLine1 - 1) :
                                 lines.GetLineRange(range.iLine0, range.iLine1 - range.iLine0 + 1);
         while (iterator.MoveNext())
         {
             iterator.SwapCurrent(isUp);
         }
     }
     SetSelectionMementos(mementos);
 }
Example #2
0
        override public void Redo()
        {
            SetSelectionMementos(mementos);
            int          move   = isUp ? -1 : 1;
            List <Place> places = new List <Place>();

            for (int i = 0; i < selections.Count; i++)
            {
                Selection selection = selections[i];
                Place     anchor    = lines.PlaceOf(selection.anchor);
                Place     caret     = lines.PlaceOf(selection.caret);
                places.Add(anchor);
                places.Add(caret);
                anchor.iLine    += move;
                caret.iLine     += move;
                selection.anchor = lines.IndexOf(anchor);
                selection.caret  = lines.IndexOf(caret);
            }
            for (int i = 0; i < ranges.Length; i++)
            {
                Range        range    = ranges[i];
                LineIterator iterator = isUp ?
                                        lines.GetLineRange(range.iLine0, range.iLine1 - range.iLine0 + 1) :
                                        lines.GetLineRange(range.iLine1, range.iLine0 - range.iLine1 - 1);
                while (iterator.MoveNext())
                {
                    iterator.SwapCurrent(isUp);
                }
            }
            for (int i = 0; i < selections.Count; i++)
            {
                Selection selection = selections[i];
                Place     anchor    = places[i * 2];
                Place     caret     = places[i * 2 + 1];
                anchor.iLine    += move;
                caret.iLine     += move;
                selection.anchor = lines.IndexOf(anchor);
                selection.caret  = lines.IndexOf(caret);
            }
        }