90 lines
2.2 KiB
C#
90 lines
2.2 KiB
C#
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
|
|
using System;
|
|
using ICSharpCode.AvalonEdit.Document;
|
|
|
|
namespace ICSharpCode.AvalonEdit.Editing
|
|
{
|
|
/// <summary>
|
|
/// Represents a selected segment.
|
|
/// </summary>
|
|
public class SelectionSegment : ISegment
|
|
{
|
|
readonly int startOffset, endOffset;
|
|
readonly int startVC, endVC;
|
|
|
|
/// <summary>
|
|
/// Creates a SelectionSegment from two offsets.
|
|
/// </summary>
|
|
public SelectionSegment(int startOffset, int endOffset)
|
|
{
|
|
this.startOffset = Math.Min(startOffset, endOffset);
|
|
this.endOffset = Math.Max(startOffset, endOffset);
|
|
this.startVC = this.endVC = -1;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a SelectionSegment from two offsets and visual columns.
|
|
/// </summary>
|
|
public SelectionSegment(int startOffset, int startVC, int endOffset, int endVC)
|
|
{
|
|
if (startOffset < endOffset || (startOffset == endOffset && startVC <= endVC)) {
|
|
this.startOffset = startOffset;
|
|
this.startVC = startVC;
|
|
this.endOffset = endOffset;
|
|
this.endVC = endVC;
|
|
} else {
|
|
this.startOffset = endOffset;
|
|
this.startVC = endVC;
|
|
this.endOffset = startOffset;
|
|
this.endVC = startVC;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the start offset.
|
|
/// </summary>
|
|
public int StartOffset {
|
|
get { return startOffset; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the end offset.
|
|
/// </summary>
|
|
public int EndOffset {
|
|
get { return endOffset; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the start visual column.
|
|
/// </summary>
|
|
public int StartVisualColumn {
|
|
get { return startVC; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the end visual column.
|
|
/// </summary>
|
|
public int EndVisualColumn {
|
|
get { return endVC; }
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
int ISegment.Offset {
|
|
get { return startOffset; }
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public int Length {
|
|
get { return endOffset - startOffset; }
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public override string ToString()
|
|
{
|
|
return string.Format("[SelectionSegment StartOffset={0}, EndOffset={1}, StartVC={2}, EndVC={3}]", startOffset, endOffset, startVC, endVC);
|
|
}
|
|
}
|
|
}
|