diff options
Diffstat (limited to 'Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/TextViewPosition.cs')
| -rw-r--r-- | Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/TextViewPosition.cs | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/TextViewPosition.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/TextViewPosition.cs new file mode 100644 index 000000000..ff7a78e31 --- /dev/null +++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/TextViewPosition.cs @@ -0,0 +1,158 @@ +// 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 System.Globalization; +using Tango.Scripting.Editors.Document; + +namespace Tango.Scripting.Editors +{ + /// <summary> + /// Represents a text location with a visual column. + /// </summary> + public struct TextViewPosition : IEquatable<TextViewPosition> + { + int line, column, visualColumn; + + /// <summary> + /// Gets/Sets Location. + /// </summary> + public TextLocation Location { + get { + return new TextLocation(line, column); + } + set { + line = value.Line; + column = value.Column; + } + } + + /// <summary> + /// Gets/Sets the line number. + /// </summary> + public int Line { + get { return line; } + set { line = value; } + } + + /// <summary> + /// Gets/Sets the (text) column number. + /// </summary> + public int Column { + get { return column; } + set { column = value; } + } + + /// <summary> + /// Gets/Sets the visual column number. + /// Can be -1 (meaning unknown visual column). + /// </summary> + public int VisualColumn { + get { return visualColumn; } + set { visualColumn = value; } + } + + /// <summary> + /// Creates a new TextViewPosition instance. + /// </summary> + public TextViewPosition(int line, int column, int visualColumn) + { + this.line = line; + this.column = column; + this.visualColumn = visualColumn; + } + + /// <summary> + /// Creates a new TextViewPosition instance. + /// </summary> + public TextViewPosition(int line, int column) + : this(line, column, -1) + { + } + + /// <summary> + /// Creates a new TextViewPosition instance. + /// </summary> + public TextViewPosition(TextLocation location, int visualColumn) + { + this.line = location.Line; + this.column = location.Column; + this.visualColumn = visualColumn; + } + + /// <summary> + /// Creates a new TextViewPosition instance. + /// </summary> + public TextViewPosition(TextLocation location) + : this(location, -1) + { + } + + /// <inheritdoc/> + public override string ToString() + { + return string.Format(CultureInfo.InvariantCulture, + "[TextViewPosition Line={0} Column={1} VisualColumn={2}]", + this.line, this.column, this.visualColumn); + } + + /// <summary> + /// Implicit conversion to <see cref="TextLocation"/>. + /// </summary> + [Obsolete("Use the Location property instead of the implicit conversion to TextLocation")] + public static implicit operator TextLocation(TextViewPosition position) + { + return new TextLocation(position.Line, position.Column); + } + + #region Equals and GetHashCode implementation + // The code in this region is useful if you want to use this structure in collections. + // If you don't need it, you can just remove the region and the ": IEquatable<Struct1>" declaration. + + /// <inheritdoc/> + public override bool Equals(object obj) + { + if (obj is TextViewPosition) + return Equals((TextViewPosition)obj); // use Equals method below + else + return false; + } + + /// <inheritdoc/> + public override int GetHashCode() + { + int hashCode = 0; + unchecked { + hashCode += 1000000007 * Line.GetHashCode(); + hashCode += 1000000009 * Column.GetHashCode(); + hashCode += 1000000021 * VisualColumn.GetHashCode(); + } + return hashCode; + } + + /// <summary> + /// Equality test. + /// </summary> + public bool Equals(TextViewPosition other) + { + return this.Line == other.Line && this.Column == other.Column && this.VisualColumn == other.VisualColumn; + } + + /// <summary> + /// Equality test. + /// </summary> + public static bool operator ==(TextViewPosition left, TextViewPosition right) + { + return left.Equals(right); + } + + /// <summary> + /// Inequality test. + /// </summary> + public static bool operator !=(TextViewPosition left, TextViewPosition right) + { + return !(left.Equals(right)); // use operator == and negate result + } + #endregion + } +} |
