|
using System;
using System.Collections.Generic;
using System.Text;
using EnvDTE;
using EnvDTE80;
namespace x.doc
{
class TextCaretTracker
{
#region Members
private DTE2 _applicationObject;
private CaretInformation currentCaretInfo = new CaretInformation();
#endregion Members
#region CaretInformation Class
public class CaretInformation
{
#region Position Class
public class Position
{
#region Properties
private int row = 0;
public int Row
{
get { return row; }
set { row = value; }
}
private int column = 0;
public int Column
{
get { return column; }
set { column = value; }
}
private int charOffset = 0;
public int CharOffset
{
get { return charOffset; }
set { charOffset = value; }
}
#endregion Properties
#region Constructors
public Position() { }
public Position(int row, int column, int charOffset)
{
this.Row = row;
this.Column = column;
this.CharOffset = charOffset;
}
#endregion Constructors
#region Operations
public void SetPosition(int row, int column, int charOffset)
{
this.Row = row;
this.Column = column;
this.CharOffset = charOffset;
}
#endregion Operations
}
#endregion Position Class
#region Properties
private Document activeDocument;
public Document ActiveDocument
{
get { return activeDocument; }
set
{
activeDocument = value;
}
}
public int GetDocumentHashCode()
{
int hashCode = (this.ActiveDocument == null) ? 0 : this.ActiveDocument.GetHashCode();
return hashCode;
}
private Position caretPosition = new Position();
public Position CaretPosition
{
get { return caretPosition; }
set
{
caretPosition.Row = value.Row;
caretPosition.Column = value.Column;
caretPosition.CharOffset = value.CharOffset;
}
}
#endregion Properties
#region Operations
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
return this == (TextCaretTracker.CaretInformation)obj;
}
public static bool operator ==(TextCaretTracker.CaretInformation ci1, TextCaretTracker.CaretInformation ci2)
{
if ((((object)ci1) == null) && (((object)ci2) == null)) return true;
if ((((object)ci1) == null) && (((object)ci2) != null)) return false;
if ((((object)ci1) != null) && (((object)ci2) == null)) return false;
return
(ci1.GetDocumentHashCode() == ci2.GetDocumentHashCode()) &&
(ci1.CaretPosition.Row == ci2.CaretPosition.Row) &&
(ci1.CaretPosition.Column == ci2.CaretPosition.Column) &&
(ci1.CaretPosition.CharOffset == ci2.CaretPosition.CharOffset) ? true : false;
}
public static bool operator !=(TextCaretTracker.CaretInformation ci1, TextCaretTracker.CaretInformation ci2)
{
if ((((object)ci1) == null) && (((object)ci2) == null)) return false;
if ((((object)ci1) == null) && (((object)ci2) != null)) return true;
if ((((object)ci1) != null) && (((object)ci2) == null)) return true;
return
(ci1.GetDocumentHashCode() != ci2.GetDocumentHashCode()) ||
(ci1.CaretPosition.Row != ci2.CaretPosition.Row) ||
(ci1.CaretPosition.Column != ci2.CaretPosition.Column) ||
(ci1.CaretPosition.CharOffset != ci2.CaretPosition.CharOffset) ? true : false;
}
public void CopyFrom(TextCaretTracker.CaretInformation ci)
{
if(ci != null)
{
this.ActiveDocument = ci.ActiveDocument;
this.CaretPosition = ci.CaretPosition;
}
}
public override int GetHashCode()
{
return this.CaretPosition.Row ^ this.caretPosition.Column ^ GetDocumentHashCode();
}
#endregion Operations
}
#endregion CaretInformation Class
#region Constructors
public TextCaretTracker(DTE2 applicationObject)
{
_applicationObject = applicationObject;
}
#endregion Constructors
#region Operations
public CaretInformation TrackCaret()
{
Document activeDocument = null;
try
{
activeDocument = _applicationObject.ActiveDocument;
}
catch { }
if (activeDocument != null)
{
TextSelection selection = activeDocument.Selection as TextSelection;
if (selection != null)
{
this.currentCaretInfo.CaretPosition =
new CaretInformation.Position(
selection.ActivePoint.Line,
selection.ActivePoint.DisplayColumn,
selection.ActivePoint.LineCharOffset);
}
}
else
{
this.currentCaretInfo.CaretPosition =
new CaretInformation.Position(0, 0, 0);
}
this.currentCaretInfo.ActiveDocument = activeDocument;
return this.currentCaretInfo;
}
#endregion Operations
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.