2
// <copyright see="prj:///doc/copyright.txt"/>
3
// <license see="prj:///doc/license.txt"/>
4
// <owner name="Mike Krger" email="mike@icsharpcode.net"/>
5
// <version value="$version"/>
11
namespace MonoDevelop.TextEditor.Document
14
/// Default implementation of the <see cref="MonoDevelop.TextEditor.Document.ISelection"/> interface.
16
public class DefaultSelection : ISelection
18
IDocument document = null;
19
bool isRectangularSelection = false;
20
Point startPosition = new Point(-1, -1);
21
Point endPosition = new Point(-1, -1);
23
public Point StartPosition {
28
startPosition = value;
32
public Point EndPosition {
43
return document.PositionToOffset(startPosition);
47
public int EndOffset {
49
return document.PositionToOffset(endPosition);
55
return EndOffset - Offset;
60
/// Returns true, if the selection is empty
64
return startPosition == endPosition;
69
/// Returns true, if the selection is rectangular
71
// TODO : make this unused property used.
72
public bool IsRectangularSelection {
74
return isRectangularSelection;
77
isRectangularSelection = value;
82
/// The text which is selected by this selection.
84
public string SelectedText {
86
if (document != null) {
90
return document.GetText(Offset, Length);
97
/// Creates a new instance of <see cref="DefaultSelection"/>
99
public DefaultSelection(IDocument document, Point startPosition, Point endPosition)
101
this.document = document;
102
this.startPosition = startPosition;
103
this.endPosition = endPosition;
107
/// Converts a <see cref="DefaultSelection"/> instance to string (for debug purposes)
109
public override string ToString()
111
return String.Format("[DefaultSelection : StartPosition={0}, EndPosition={1}]", startPosition, endPosition);
113
public bool ContainsPosition(Point position)
115
return startPosition.Y < position.Y && position.Y < endPosition.Y ||
116
startPosition.Y == position.Y && startPosition.X <= position.X && (startPosition.Y != endPosition.Y || position.X <= endPosition.X) ||
117
endPosition.Y == position.Y && startPosition.Y != endPosition.Y && position.X <= endPosition.X;
120
public bool ContainsOffset(int offset)
122
return Offset <= offset && offset <= EndOffset;