Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / TextTreeRootNode.cs / 1305600 / TextTreeRootNode.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: The root node of a TextContainer. // // History: // 02/18/2004 : [....] - Created // //--------------------------------------------------------------------------- using System; using MS.Internal; using System.Collections; using System.Windows.Threading; namespace System.Windows.Documents { // All TextContainers contain a single TextTreeRootNode, which contains all other // nodes. The root node is special because it contains tree-global data, // and TextPositions may never reference its BeforeStart/AfterEnd edges. // Because of the restrictions on TextPointer, the root node may never // be removed from the tree. internal class TextTreeRootNode : TextTreeNode { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors // Creates a TextTreeRootNode instance. internal TextTreeRootNode(TextContainer tree) { _tree = tree; #if REFCOUNT_DEAD_TEXTPOINTERS _deadPositionList = new ArrayList(0); #endif // REFCOUNT_DEAD_TEXTPOINTERS // Root node has two imaginary element edges to match TextElementNode semantics. _symbolCount = 2; // CaretUnitBoundaryCache always starts unset. _caretUnitBoundaryCacheOffset = -1; } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- #region Public Methods #if DEBUG // Debug-only ToString override. public override string ToString() { return ("RootNode Id=" + this.DebugId + " SymbolCount=" + _symbolCount); } #endif // DEBUG #endregion Public Methods //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ #region Internal Methods // Returns a shallow copy of this node. // This should never be called for the root node, since it is never // involved in delete operations. internal override TextTreeNode Clone() { Invariant.Assert(false, "Unexpected call to TextTreeRootNode.Clone!"); return null; } // Returns the TextPointerContext of the node. // If node is TextTreeTextElementNode, this method returns ElementStart // if direction == Forward, otherwise ElementEnd if direction == Backward. internal override TextPointerContext GetPointerContext(LogicalDirection direction) { // End-of-tree is "None". return TextPointerContext.None; } #endregion Internal methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties // The root node never has a parent node. internal override SplayTreeNode ParentNode { get { return null; } set { Invariant.Assert(false, "Can't set ParentNode on TextContainer root!"); } } // Root node of a contained tree, if any. internal override SplayTreeNode ContainedNode { get { return _containedNode; } set { _containedNode = (TextTreeNode)value; } } // The root node never has sibling nodes, so the LeftSymbolCount is a // constant zero. internal override int LeftSymbolCount { get { return 0; } set { Invariant.Assert(false, "TextContainer root is never a sibling!"); } } // The root node never has sibling nodes, so the LeftCharCount is a // constant zero. internal override int LeftCharCount { get { return 0; } set { Invariant.Assert(false, "TextContainer root is never a sibling!"); } } // The root node never has siblings, so it never has child nodes. internal override SplayTreeNode LeftChildNode { get { return null; } set { Invariant.Assert(false, "TextContainer root never has sibling nodes!"); } } // The root node never has siblings, so it never has child nodes. internal override SplayTreeNode RightChildNode { get { return null; } set { Invariant.Assert(false, "TextContainer root never has sibling nodes!"); } } // The tree generation. Incremented whenever the tree content changes. internal override uint Generation { get { return _generation; } set { _generation = value; } } // Like the Generation property, but this counter is only updated when // an edit that might affect TextPositions occurs. In practice, inserts // do not bother TextPositions, but deletions do. internal uint PositionGeneration { get { return _positionGeneration; } set { _positionGeneration = value; } } // Incremeneted whenever a layout property value changes on a TextElement. internal uint LayoutGeneration { get { return _layoutGeneration; } set { _layoutGeneration = value; // Invalidate the caret unit boundary cache on layout update. _caretUnitBoundaryCacheOffset = -1; } } // Cached symbol offset. The root node is always at offset zero. internal override int SymbolOffsetCache { get { return 0; } set { Invariant.Assert(value == 0, "Bad SymbolOffsetCache on TextContainer root!"); } } // The count of all symbols in the tree, including two edge symbols for // the root node itself. internal override int SymbolCount { get { return _symbolCount; } set { Invariant.Assert(value >= 2, "Bad _symbolCount on TextContainer root!"); _symbolCount = value; } } // The count of all chars in the tree. internal override int IMECharCount { get { return _imeCharCount; } set { Invariant.Assert(value >= 0, "IMECharCount may never be negative!"); _imeCharCount = value; } } // Count of TextPositions referencing the node's BeforeStart // edge. We don't bother to actually track this for the root node // since it is only useful in delete operations and the root node // is never deleted. internal override bool BeforeStartReferenceCount { get { return false; } set { Invariant.Assert(!value, "Root node BeforeStart edge can never be referenced!"); } } // Count of TextPositions referencing the node's AfterStart // edge. We don't bother to actually track this for the root node // since it is only useful in delete operations and the root node // is never deleted. internal override bool AfterStartReferenceCount { get { return false; } set { // We can ignore the value because the TextContainer root is never removed. } } // Count of TextPositions referencing the node's BeforeEnd // edge. We don't bother to actually track this for the root node // since it is only useful in delete operations and the root node // is never deleted. internal override bool BeforeEndReferenceCount { get { return false; } set { // We can ignore the value because the TextContainer root is never removed. } } // Count of TextPositions referencing the node's AfterEnd // edge. We don't bother to actually track this for the root node // since it is only useful in delete operations and the root node // is never deleted. internal override bool AfterEndReferenceCount { get { return false; } set { Invariant.Assert(!value, "Root node AfterEnd edge can never be referenced!"); } } // The owning TextContainer. internal TextContainer TextContainer { get { return _tree; } } // A tree of TextTreeTextBlocks, used to store raw text for the entire // tree. internal TextTreeRootTextBlock RootTextBlock { get { return _rootTextBlock; } set { _rootTextBlock = value; } } #if REFCOUNT_DEAD_TEXTPOINTERS // A list of positions ready to be garbage collected. The TextPointer // finalizer adds positions to this list. internal ArrayList DeadPositionList { get { return _deadPositionList; } set { _deadPositionList = value; } } #endif // REFCOUNT_DEAD_TEXTPOINTERS // Structure that allows for dispatcher processing to be // enabled after a call to Dispatcher.DisableProcessing. internal DispatcherProcessingDisabled DispatcherProcessingDisabled { get { return _processingDisabled; } set { _processingDisabled = value; } } // Cached TextView.IsAtCaretUnitBoundary calculation for CaretUnitBoundaryCacheOffset. internal bool CaretUnitBoundaryCache { get { return _caretUnitBoundaryCache; } set { _caretUnitBoundaryCache = value; } } // Symbol offset of CaretUnitBoundaryCache, or -1 if the cache is empty. internal int CaretUnitBoundaryCacheOffset { get { return _caretUnitBoundaryCacheOffset; } set { _caretUnitBoundaryCacheOffset = value; } } #endregion Internal Properties //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields // The owning TextContainer. private readonly TextContainer _tree; // Root node of a contained tree, if any. private TextTreeNode _containedNode; // The count of all symbols in the tree, including two edge symbols for // the root node itself. private int _symbolCount; // The count of all chars in the tree. private int _imeCharCount; // The tree generation. Incremented whenever the tree content changes. private uint _generation; // Like _generation, but only updated when a change could affect positions. private uint _positionGeneration; // Like _generation, but only updated when on a TextElement layout property change. private uint _layoutGeneration; // A tree of TextTreeTextBlocks, used to store raw text for the entire TextContainer. private TextTreeRootTextBlock _rootTextBlock; #if REFCOUNT_DEAD_TEXTPOINTERS // A list of positions ready to be garbage collected. The TextPointer // finalizer adds positions to this list. private ArrayList _deadPositionList; #endif // REFCOUNT_DEAD_TEXTPOINTERS // Cached TextView.IsAtCaretUnitBoundary calculation for _caretUnitBoundaryCacheOffset. private bool _caretUnitBoundaryCache; // Symbol offset of _caretUnitBoundaryCache, or -1 if the cache is empty. private int _caretUnitBoundaryCacheOffset; // Structure that allows for dispatcher processing to be // enabled after a call to Dispatcher.DisableProcessing. private DispatcherProcessingDisabled _processingDisabled; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinqDataSourceValidationException.cs
- XmlSchemaComplexContent.cs
- NumberAction.cs
- ColorBlend.cs
- WriteableBitmap.cs
- TextBlock.cs
- HostProtectionException.cs
- ToolStripManager.cs
- LineUtil.cs
- ConvertEvent.cs
- DispatchChannelSink.cs
- SplitContainer.cs
- TextWriterTraceListener.cs
- PopOutPanel.cs
- CompositeFontInfo.cs
- WaitForChangedResult.cs
- RepeaterItem.cs
- MatrixIndependentAnimationStorage.cs
- ObjectIDGenerator.cs
- HandleRef.cs
- StartUpEventArgs.cs
- BitmapData.cs
- DbMetaDataFactory.cs
- WebBrowserBase.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- DataGridViewRow.cs
- ConnectionPool.cs
- DynamicDocumentPaginator.cs
- LicenseContext.cs
- SecurityHeader.cs
- TransformProviderWrapper.cs
- XPathException.cs
- SByteStorage.cs
- CreateParams.cs
- SQLBytes.cs
- PointHitTestParameters.cs
- GeneralTransformGroup.cs
- SystemIPInterfaceStatistics.cs
- DataListItemCollection.cs
- ControlAdapter.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- PropertyEmitterBase.cs
- EventsTab.cs
- WebPartManagerDesigner.cs
- XamlRtfConverter.cs
- WebPartDisplayModeCollection.cs
- RC2.cs
- RenamedEventArgs.cs
- XmlWrappingReader.cs
- RowCache.cs
- DispatchChannelSink.cs
- DrawingAttributesDefaultValueFactory.cs
- DataConnectionHelper.cs
- EncryptedKey.cs
- GenericRootAutomationPeer.cs
- CFGGrammar.cs
- PointCollectionValueSerializer.cs
- OperandQuery.cs
- DbSource.cs
- AppDomainFactory.cs
- CroppedBitmap.cs
- HitTestDrawingContextWalker.cs
- FunctionQuery.cs
- WebBrowsableAttribute.cs
- AddInBase.cs
- OutputCacheModule.cs
- StringAnimationUsingKeyFrames.cs
- ToolStripManager.cs
- SymbolEqualComparer.cs
- NativeMethodsCLR.cs
- GenericWebPart.cs
- MultiPartWriter.cs
- DropDownList.cs
- HwndSubclass.cs
- InkSerializer.cs
- SetterBase.cs
- RequiredAttributeAttribute.cs
- DataSourceControl.cs
- DataListItemEventArgs.cs
- HttpCookie.cs
- MemoryRecordBuffer.cs
- formatstringdialog.cs
- ComboBoxHelper.cs
- ModelToObjectValueConverter.cs
- DbModificationCommandTree.cs
- DataGridViewTextBoxEditingControl.cs
- HttpPostClientProtocol.cs
- VirtualPathExtension.cs
- FtpWebRequest.cs
- Merger.cs
- updatecommandorderer.cs
- SafeLibraryHandle.cs
- Int16.cs
- ArcSegment.cs
- BezierSegment.cs
- arclist.cs
- BaseParser.cs
- SecurityCriticalDataForSet.cs
- FocusManager.cs
- DirectoryInfo.cs