private void ExecuteInsertTextCommand(ref int iChar, string text) { string[] lines = text.Split('\n'); int iLine = 0; foreach (Range r in range.GetSubRanges(true)) { Line line = ts.CurrentTB[r.Start.iLine]; bool lineIsEmpty = r.End < r.Start && line.StartSpacesCount == line.Count; if (!lineIsEmpty) { string insertedText = lines[iLine % lines.Length]; if (r.End < r.Start && insertedText != "") { //add forwarding spaces insertedText = new string(' ', r.Start.iChar - r.End.iChar) + insertedText; r.Start = r.End; } ts.CurrentTB.Selection = r; var c = new InsertTextCommand(ts, insertedText); c.Execute(); if (ts.CurrentTB.Selection.End.iChar > iChar) { iChar = ts.CurrentTB.Selection.End.iChar; } commandsByRanges.Add(c); } iLine++; } }
/// <summary> /// Execute operation /// </summary> public override void Execute() { FastColoredTextBox tb = ts.CurrentTB; prevText.Clear(); ts.OnTextChanging(ref insertedText); tb.Selection.BeginUpdate(); tb.BeginUpdate(); for (int i = ranges.Count - 1; i >= 0; i--) { tb.Selection.Start = ranges[i].Start; tb.Selection.End = ranges[i].End; prevText.Add(tb.Selection.Text); ClearSelected(ts); if (insertedText != "") { InsertTextCommand.InsertText(insertedText, ts); } } if (ranges.Count > 0) { ts.OnTextChanged(ranges[0].Start.iLine, ranges[ranges.Count - 1].End.iLine); } tb.EndUpdate(); tb.Selection.EndUpdate(); ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1)); lastSel = new RangeInfo(tb.Selection); }
/// <summary> /// Undo operation /// </summary> public override void Undo() { FastColoredTextBox tb = ts.CurrentTB; ts.OnTextChanging(); tb.BeginUpdate(); tb.Selection.BeginUpdate(); for (int i = 0; i < ranges.Count; i++) { tb.Selection.Start = ranges[i].Start; for (int j = 0; j < insertedText.Length; j++) { tb.Selection.GoRight(true); } ClearSelected(ts); InsertTextCommand.InsertText(prevText[prevText.Count - i - 1], ts); } tb.Selection.EndUpdate(); tb.EndUpdate(); if (ranges.Count > 0) { ts.OnTextChanged(ranges[0].Start.iLine, ranges[ranges.Count - 1].End.iLine); } ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1)); }
/// <summary> /// Undo operation /// </summary> public override void Undo() { ts.CurrentTB.Selection.Start = new Place(sel.FromX, Math.Min(sel.Start.iLine, sel.End.iLine)); ts.OnTextChanging(); InsertTextCommand.InsertText(deletedText, ts); ts.OnTextChanged(sel.Start.iLine, sel.End.iLine); ts.CurrentTB.Selection.Start = sel.Start; ts.CurrentTB.Selection.End = sel.End; }
/// <summary> /// Undo operation /// </summary> public override void Undo() { FastColoredTextBox tb = ts.CurrentTB; ts.OnTextChanging(); tb.Selection.BeginUpdate(); //tb.BeginUpdate(); for (int i = 0; i < iLines.Count; i++) { int iLine = iLines[i]; if (iLine < ts.Count) { tb.Selection.Start = new Place(0, iLine); } else { tb.Selection.Start = new Place(ts[ts.Count - 1].Count, ts.Count - 1); } InsertCharCommand.InsertLine(ts); tb.Selection.Start = new Place(0, iLine); string text = prevText[prevText.Count - i - 1]; InsertTextCommand.InsertText(text, ts); ts[iLine].IsChanged = true; if (iLine < ts.Count - 1) { ts[iLine + 1].IsChanged = true; } else { ts[iLine - 1].IsChanged = true; } if (text.Trim() != string.Empty) { ts.OnTextChanged(iLine, iLine); } } //tb.EndUpdate(); tb.Selection.EndUpdate(); ts.NeedRecalc(new TextSource.TextChangedEventArgs(0, 1)); }