Click here to Skip to main content
15,881,882 members
Articles / Programming Languages / C++

x.doc - a code documentation comment manager add-in for VS2005

Rate me:
Please Sign up or sign in to vote.
4.69/5 (17 votes)
17 May 200720 min read 133.1K   641   77  
x.doc is a Visual Studio 2005 add-in that provides a means to manage and visualize source-code comment documentation interactively in the IDE
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.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
South Africa South Africa
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions