Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / TextTreeRootNode.cs / 1 / TextTreeRootNode.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The root node of a TextContainer.
//
// History:
// 02/18/2004 : benwest - 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.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The root node of a TextContainer.
//
// History:
// 02/18/2004 : benwest - 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
- ColorConvertedBitmap.cs
- ServiceModelConfigurationSection.cs
- _Rfc2616CacheValidators.cs
- PrintPageEvent.cs
- Stackframe.cs
- HealthMonitoringSection.cs
- PagedDataSource.cs
- ReservationCollection.cs
- PartBasedPackageProperties.cs
- CompilationRelaxations.cs
- OpCopier.cs
- FormsAuthentication.cs
- VectorCollectionValueSerializer.cs
- EventlogProvider.cs
- TraceListeners.cs
- MethodAccessException.cs
- SemaphoreSecurity.cs
- WmlCalendarAdapter.cs
- XMLUtil.cs
- EntityCodeGenerator.cs
- RepeaterItemEventArgs.cs
- WindowsGraphicsCacheManager.cs
- PropertyItemInternal.cs
- CroppedBitmap.cs
- LogicalExpr.cs
- FormsAuthenticationModule.cs
- WindowsTreeView.cs
- MetadataPropertyCollection.cs
- ConnectionStringsExpressionBuilder.cs
- TableLayoutSettings.cs
- FunctionQuery.cs
- parserscommon.cs
- ObjectViewEntityCollectionData.cs
- SourceChangedEventArgs.cs
- UrlPropertyAttribute.cs
- IisTraceListener.cs
- ResourceReferenceExpressionConverter.cs
- SiblingIterators.cs
- ManipulationCompletedEventArgs.cs
- BaseValidator.cs
- ReverseInheritProperty.cs
- ProgressPage.cs
- ConfigurationStrings.cs
- WebResourceAttribute.cs
- _NestedMultipleAsyncResult.cs
- ParallelTimeline.cs
- MsmqTransportReceiveParameters.cs
- GridViewDeleteEventArgs.cs
- TransportContext.cs
- CodeCommentStatementCollection.cs
- WebConfigurationHostFileChange.cs
- SessionEndingEventArgs.cs
- WebPartTransformer.cs
- XmlNamespaceMappingCollection.cs
- GcSettings.cs
- CompilerResults.cs
- WeakHashtable.cs
- EditorBrowsableAttribute.cs
- ScriptManager.cs
- SecurityAccessDeniedException.cs
- HeaderUtility.cs
- DataViewListener.cs
- LZCodec.cs
- TabItemAutomationPeer.cs
- ImageField.cs
- SmiMetaData.cs
- RoleServiceManager.cs
- BitmapEffectGroup.cs
- PopOutPanel.cs
- RemotingConfigParser.cs
- AuditLevel.cs
- odbcmetadatacollectionnames.cs
- ObfuscateAssemblyAttribute.cs
- MouseGestureValueSerializer.cs
- WebConfigurationFileMap.cs
- StorageAssociationSetMapping.cs
- MenuAutomationPeer.cs
- CodeDirectionExpression.cs
- IriParsingElement.cs
- CultureInfoConverter.cs
- DropDownButton.cs
- HttpProfileGroupBase.cs
- QilList.cs
- EventTrigger.cs
- GacUtil.cs
- SessionState.cs
- Bidi.cs
- LinkConverter.cs
- ToolBarButtonDesigner.cs
- HostingEnvironmentWrapper.cs
- LocalizabilityAttribute.cs
- DatagridviewDisplayedBandsData.cs
- TextTreeUndo.cs
- ScriptReference.cs
- TimeStampChecker.cs
- SecurityRuntime.cs
- CanonicalFontFamilyReference.cs
- VirtualizingStackPanel.cs
- PauseStoryboard.cs
- X509ClientCertificateAuthenticationElement.cs