Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / MS / Internal / Annotations / Anchoring / AttachedAnnotation.cs / 2 / AttachedAnnotation.cs
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// AttachedAnnotation represents an annotation which has been loaded for a
// specific logical tree and has a runtime anchor in that tree. The same
// annotation may be loaded in a different logical tree and get a different
// anchor - thereby creating a different AttachedAnnotation.
//
// Spec: [....]/sites/ag/Specifications/Annotation%20Service%20Spec.doc
//
// History:
// 08/18/2003: [....]: Added enum and class as per spec.
// 11/18/2003: [....]: implements IAttachedAnnotations interface as per service spec.
//
//-----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Annotations;
using System.Windows.Annotations.Storage;
using System.Windows.Media;
using System.Xml;
using System.Collections.Generic;
using MS.Utility;
namespace MS.Internal.Annotations.Anchoring
{
///
/// AttachedAnnotation represents an annotation which has been loaded for a
/// specific logical tree and has an anchor in that tree. The same annotation
/// may be loaded in a different logical tree and get a different anchor -
/// thereby creating a different AttachedAnnotation.
///
internal class AttachedAnnotation : IAttachedAnnotation
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Create an instance of AttachedAnnotation.
///
/// the LocatorManager providing processors for this anchored annotation
/// the annotation itself
/// the annotation's anchor represented by the attached anchor
/// the attached anchor itself
/// the level of the attached anchor
internal AttachedAnnotation(LocatorManager manager, Annotation annotation, AnnotationResource anchor, Object attachedAnchor, AttachmentLevel attachmentLevel)
: this(manager, annotation, anchor, attachedAnchor, attachmentLevel, null)
{
}
///
/// Create an instance of AttachedAnnotation with a specified parent. Takes an optional
/// parent for the attached annotation. This is useful when the parent is known before
/// hand and not available through the normal means (such as in printing).
///
/// the LocatorManager providing processors for this anchored annotation
/// the annotation itself
/// the annotation's anchor represented by the attached anchor
/// the attached anchor itself
/// the level of the attached anchor
/// parent of the selection
internal AttachedAnnotation(LocatorManager manager, Annotation annotation, AnnotationResource anchor, Object attachedAnchor, AttachmentLevel attachmentLevel, DependencyObject parent)
{
Debug.Assert(manager != null, "LocatorManager can not be null");
Debug.Assert(annotation != null, "Annotation can not be null");
Debug.Assert(anchor != null, "Anchor can not be null");
Debug.Assert(attachedAnchor != null, "AttachedAnchor can not be null");
_annotation = annotation;
_anchor = anchor;
_locatorManager = manager;
Update(attachedAnchor, attachmentLevel, parent);
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// Returns true if the attachedanchor of this IAttachedAnnotation is
/// equal to the attached anchor passed to the function
///
///
/// true if the anchors are equal
public bool IsAnchorEqual(Object o)
{
//return _selectionProcessor.AnchorEquals(_attachedAnchor, o);
return false;
}
#endregion Public Methods
//------------------------------------------------------
//
// Public Operators
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Public Events
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Public Properties
//
//-----------------------------------------------------
#region Public Properties
///
/// The Annotation that is being attached to the element tree
///
///
public Annotation Annotation { get { return _annotation; } }
///
/// The specific anchor that has been resolved into the element tree
///
///
public AnnotationResource Anchor { get { return _anchor; } }
///
/// The part of the Avalon element tree that this attached annotation is anchored to
///
///
public Object AttachedAnchor { get { return _attachedAnchor; } }
///
/// This is simply a public accessor for FullyAttachedAnchor. We didn't want to use the
/// FullyAttachedAnchor name in the public API but couldn't get rid of this internal
/// property because there are a few known users of it (through reflection).
///
public Object ResolvedAnchor { get { return FullyAttachedAnchor; } }
///
/// For virtualized content, this property returns the full anchor for the annotation.
/// It may not be all visible or loaded into the tree, but the full anchor is useful
/// for some operations that operate on content that may be virtualized. This property
/// could be:
/// - equal to AttachedAnchor, if the attachment level is Full
/// - different from AttachedAnchor, if the attachment level was not full but the
/// anchor could be resolved using virtual data
/// - null, if the attachment level was not ful but the anchor could not be resolved
/// using virtual data
///
public Object FullyAttachedAnchor
{
get
{
if (_attachmentLevel == AttachmentLevel.Full)
return _attachedAnchor;
else
return _fullyAttachedAnchor;
}
}
///
/// The level of attachment of the annotation to its attached anchor
///
///
public AttachmentLevel AttachmentLevel { get { return _attachmentLevel; } }
///
/// The Avalon logical Parent node of the attached anchor
///
///
public DependencyObject Parent
{
get
{
return _parent;
}
}
///
/// The Avalon coordinate of the attached anchor measured relative
/// from its parent coordinate
///
///
public Point AnchorPoint
{
get
{
Point pt = _selectionProcessor.GetAnchorPoint(_attachedAnchor);
if (!Double.IsInfinity(pt.X) && !Double.IsInfinity(pt.Y))
{
_cachedPoint = pt;
}
return _cachedPoint;
}
}
///
/// The AnnotationStore
///
///
public AnnotationStore Store
{
get { return GetStore(); }
}
#endregion Public Properties
//-----------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
#region Internal Methods
///
/// Update the attached anchor and level for this attached annotation. Internal method called by
/// the annotation service when a change to an anchor is processed. Optional parent will be used
/// if present. Otherwise we get the parent from the selection processor.
///
/// the new attached anchor
/// the new attachment level
/// optional, the parent of the attached annotation
internal void Update(object attachedAnchor, AttachmentLevel attachmentLevel, DependencyObject parent)
{
Debug.Assert(attachedAnchor != null, "AttachedAnchor can not be null");
Debug.Assert(attachmentLevel > AttachmentLevel.Unresolved && attachmentLevel <= AttachmentLevel.Incomplete,
"Undefined attachment level");
_attachedAnchor = attachedAnchor;
_attachmentLevel = attachmentLevel;
_selectionProcessor = _locatorManager.GetSelectionProcessor(attachedAnchor.GetType());
// Use optional parent if available
if (parent != null)
{
_parent = parent;
}
else
{
_parent = _selectionProcessor.GetParent(_attachedAnchor);
}
Debug.Assert(_selectionProcessor != null, SR.Get(SRID.NoProcessorForSelectionType, attachedAnchor.GetType()));
}
///
/// Sets the fully attached anchor for this attached annotation. Should be used if
/// the attachment level is not Full and the anchor could be fully resolved using virual content.
///
internal void SetFullyAttachedAnchor(object fullyAttachedAnchor)
{
Debug.Assert(_attachmentLevel != AttachmentLevel.Full, "Should only set fully resolved anchor if attachment level is not full.");
_fullyAttachedAnchor = fullyAttachedAnchor;
}
#endregion Internal Methods
//-----------------------------------------------------
//
// Private Methods
//
//------------------------------------------------------
#region Private Functions
private AnnotationStore GetStore()
{
// indirect via the parent element & DP
if (this.Parent != null)
{
AnnotationService service = AnnotationService.GetService(this.Parent);
if (service != null)
return service.Store;
}
return null;
}
#endregion Private Methods
//------------------------------------------------------
//
// Private Fields
//
//-----------------------------------------------------
#region Private Fields
// The Annotation that is being attached to the element tree
private Annotation _annotation;
// The specific anchor that has been resolved into the element tree
private AnnotationResource _anchor;
// The part of the Avalon element tree that this attached annotation is anchored to
private Object _attachedAnchor;
// The fully resolved anchor, if different from _attachedAnchor
private Object _fullyAttachedAnchor;
// The level of attachment of the annotation to its attached anchor
private AttachmentLevel _attachmentLevel;
// Parent object of the attached anchor. This shouldn't change without
// the anchor actually changing.
private DependencyObject _parent;
// // The selectionprocessor capable of handling this _attachedanchor
private SelectionProcessor _selectionProcessor;
// the locatormanager that created this attached annotation
private LocatorManager _locatorManager;
// cached anchor point - used if the selection processor returns Infinity
private Point _cachedPoint;
#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
- ImageCodecInfo.cs
- SevenBitStream.cs
- TransformGroup.cs
- WindowsPrincipal.cs
- AddInStore.cs
- ActivityInterfaces.cs
- ProfileSection.cs
- StorageModelBuildProvider.cs
- DataBindingCollectionEditor.cs
- Size3DValueSerializer.cs
- ProtectedProviderSettings.cs
- WhitespaceRule.cs
- Ops.cs
- CanonicalFontFamilyReference.cs
- TogglePattern.cs
- InternalSafeNativeMethods.cs
- UnsupportedPolicyOptionsException.cs
- ErrorsHelper.cs
- DataGridViewColumnCollection.cs
- DataRow.cs
- Int16.cs
- TextServicesManager.cs
- cookiecollection.cs
- DataPager.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- ExchangeUtilities.cs
- ICspAsymmetricAlgorithm.cs
- UniqueIdentifierService.cs
- ConfigurationFileMap.cs
- ContentFilePart.cs
- MdiWindowListItemConverter.cs
- DBSchemaTable.cs
- CodeDomConfigurationHandler.cs
- DefaultPropertyAttribute.cs
- ParseHttpDate.cs
- dtdvalidator.cs
- TranslateTransform.cs
- TypeElement.cs
- CoTaskMemHandle.cs
- glyphs.cs
- NTAccount.cs
- SymbolMethod.cs
- FontFamily.cs
- WebPartMenuStyle.cs
- DecimalFormatter.cs
- TemplateEditingVerb.cs
- ValuePattern.cs
- SystemColors.cs
- AppDomainProtocolHandler.cs
- MessagingActivityHelper.cs
- NamespaceQuery.cs
- DecoratedNameAttribute.cs
- RichTextBox.cs
- TypeUtil.cs
- HebrewCalendar.cs
- GC.cs
- TypedElement.cs
- QuaternionKeyFrameCollection.cs
- DataServiceConfiguration.cs
- BrowserCapabilitiesFactory.cs
- ReadOnlyTernaryTree.cs
- BlurBitmapEffect.cs
- DataGridViewBindingCompleteEventArgs.cs
- ActivityTypeCodeDomSerializer.cs
- RTTypeWrapper.cs
- WebPartPersonalization.cs
- XmlEntity.cs
- Interop.cs
- oledbmetadatacollectionnames.cs
- EventEntry.cs
- DockPatternIdentifiers.cs
- WebPartVerbCollection.cs
- DocumentOrderComparer.cs
- RecordManager.cs
- EncryptedType.cs
- ProxyWebPart.cs
- EncodingTable.cs
- NetworkInterface.cs
- TreeWalker.cs
- columnmapkeybuilder.cs
- DesignTimeTemplateParser.cs
- PointCollectionConverter.cs
- CanonicalFontFamilyReference.cs
- ContentTextAutomationPeer.cs
- DataBindingCollection.cs
- FloaterBaseParagraph.cs
- OdbcEnvironment.cs
- BitmapEffect.cs
- HttpListenerContext.cs
- FixUpCollection.cs
- XmlSortKeyAccumulator.cs
- Label.cs
- ReflectionPermission.cs
- NumberFunctions.cs
- CaseInsensitiveHashCodeProvider.cs
- GlobalItem.cs
- ResourceDefaultValueAttribute.cs
- ResourceAttributes.cs
- CodeCastExpression.cs
- ScriptResourceInfo.cs