public void DeleteRange(TextRange Range, bool StoreUndo)
{
TextRange r = Range;
Modified = true;
if (StoreUndo)
{
string deltext = GetRange(Range);
PushUndoBlock(UndoAction.DeleteRange, deltext, r.FirstColumn, r.FirstRow);
}
if (r.FirstRow == r.LastRow)
{
Row xtr = this[r.FirstRow];
int max = Math.Min(r.FirstColumn, xtr.Text.Length);
string left = xtr.Text.Substring(0, max);
string right = "";
if (xtr.Text.Length >= r.LastColumn)
right = xtr.Text.Substring(r.LastColumn);
xtr.Text = left + right;
}
else
{
if (r.LastRow > Count - 1)
r.LastRow = Count - 1;
Row xtr = this[r.FirstRow];
if (r.FirstColumn > xtr.Text.Length)
{
int diff = r.FirstColumn - xtr.Text.Length;
var ws = new string(' ', diff);
InsertText(ws, xtr.Text.Length, r.FirstRow, true);
//return;
}
string row1 = xtr.Text.Substring(0, r.FirstColumn);
Row xtr2 = this[r.LastRow];
int Max = Math.Min(xtr2.Text.Length, r.LastColumn);
string row2 = xtr2.Text.Substring(Max);
string tot = row1 + row2;
//bool fold=this[r.LastRow].IsCollapsed | this[r.FirstRow].IsCollapsed ;
int start = r.FirstRow;
int end = r.LastRow;
for (int i = end - 1; i >= start; i--)
{
Remove(i, false, false);
}
//todo: DeleteRange error
//this.Insert ( tot ,r.FirstRow,false);
Row row = this[start];
row.Expanded = true;
row.Text = tot;
row.startSpans.Clear();
row.endSpans.Clear();
row.startSpan = null;
row.endSpan = null;
row.Parse();
}
ResetVisibleRows();
OnChange();
}