public void OnDelete(
TestTextPoint startPoint,
object obj)
{
TestTextPoint endPoint;
if (obj is int)
{
endPoint = (TestTextPoint)startPoint.CreateEditPoint();
endPoint.CharRight((int)obj);
}
else if (obj is TestTextPoint)
{
endPoint = (TestTextPoint)obj;
}
else
{
throw new System.ArgumentException("Invalid argument");
}
if (!endPoint.GreaterThan(startPoint))
{
if (endPoint.EqualTo(startPoint))
{
return;
}
else
{
throw new System.ArgumentException("Invalid argument");
}
}
if (startPoint.mLineNum == endPoint.mLineNum)
{
SetLine(startPoint.mLineNum, GetLine(startPoint.mLineNum).Remove(startPoint.mCharPosition,
endPoint.mCharPosition - startPoint.mCharPosition));
}
else
{
SetLine(startPoint.mLineNum, GetLine(startPoint.mLineNum).Remove(startPoint.mCharPosition,
startPoint.LineLength - startPoint.mCharPosition) +
GetLine(endPoint.mLineNum).Remove(0, endPoint.mCharPosition));
mLines.RemoveRange((startPoint.mLineNum - 1) + 1, endPoint.mLineNum - startPoint.mLineNum);
}
int startLine = startPoint.mLineNum;
int startChar = startPoint.mCharPosition;
int endLine = endPoint.mLineNum;
int endChar = endPoint.mCharPosition;
for (int i = 0; i < mCurrentPoints.Count;)
{
WeakReference wr = (WeakReference)mCurrentPoints[i];
if (wr.IsAlive)
{
TestTextPoint curPoint = (TestTextPoint)wr.Target;
if (((curPoint.mLineNum > startLine) ||
((curPoint.mLineNum == startLine) && (curPoint.mCharPosition >= startChar))) &&
((curPoint.mLineNum < endLine) ||
((curPoint.mLineNum == endLine) && (curPoint.mCharPosition <= endChar))))
{
// point in range of deletion
curPoint.mLineNum = startLine;
curPoint.mCharPosition = startChar;
}
else if ((curPoint.mLineNum == endLine) &&
(curPoint.mCharPosition >= endChar))
{
// point on line after deletion
curPoint.mLineNum = startLine;
curPoint.mCharPosition = startChar + (curPoint.mCharPosition - endChar);
}
else if (curPoint.mLineNum > endLine)
{
// line after deletion
curPoint.mLineNum -= endLine - startLine;
}
i++;
}
else
{
mCurrentPoints.RemoveAt(i);
}
}
}