Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / FixedElement.cs / 1305600 / FixedElement.cs
//---------------------------------------------------------------------------- //// Copyright (C) 2004 by Microsoft Corporation. All rights reserved. // // // Description: // FixedElement represents a flow element/object in the Fixed Document. // // History: // 02/05/2004 - Zhenbin Xu (ZhenbinX) - Created. // //--------------------------------------------------------------------------- namespace System.Windows.Documents { using MS.Internal.Documents; using System.Windows; using System.Windows.Automation; using System.Windows.Controls; using System.Windows.Shapes; using System.Windows.Markup; // for XmlLanguage using System.Windows.Media; using System.Windows.Navigation; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Text; using System.Security; ////// FixedElement represents a flow element/object in the Fixed Document. /// Its children collection is used for DependencyProperty evaluation. /// No Z-order is implied! /// // suggestion: derive from TextElement to get text properties like FontSize // will we also need TableCell.ColumnSpan? Would we want to make this derive from TableCell? Probably not. internal sealed class FixedElement : DependencyObject { internal enum ElementType { Paragraph, Inline, Run, Span, Bold, Italic, Underline, Object, Container, Section, Figure, Table, TableRowGroup, TableRow, TableCell, List, ListItem, Header, Footer, Hyperlink, InlineUIContainer, } // apply to everything public static readonly DependencyProperty LanguageProperty = FrameworkElement.LanguageProperty.AddOwner( typeof(FixedElement)); // only apply to ElementType.Run public static readonly DependencyProperty FontFamilyProperty = TextElement.FontFamilyProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty FontStyleProperty = TextElement.FontStyleProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty FontWeightProperty = TextElement.FontWeightProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty FontStretchProperty = TextElement.FontStretchProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty FontSizeProperty = TextElement.FontSizeProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty ForegroundProperty = TextElement.ForegroundProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty FlowDirectionProperty = FrameworkElement.FlowDirectionProperty.AddOwner( typeof(FixedElement)); //Applies only to Table public static readonly DependencyProperty CellSpacingProperty = Table.CellSpacingProperty.AddOwner( typeof(FixedElement)); //Applies only to TableCell public static readonly DependencyProperty BorderThicknessProperty = Block.BorderThicknessProperty.AddOwner(typeof(FixedElement)); public static readonly DependencyProperty BorderBrushProperty = Block.BorderBrushProperty.AddOwner(typeof(FixedElement)); public static readonly DependencyProperty ColumnSpanProperty = TableCell.ColumnSpanProperty.AddOwner(typeof(FixedElement)); //Applies only to Hyperlink public static readonly DependencyProperty NavigateUriProperty = Hyperlink.NavigateUriProperty.AddOwner( typeof(FixedElement)); //Applies only to images public static readonly DependencyProperty NameProperty = AutomationProperties.NameProperty.AddOwner( typeof(FixedElement)); public static readonly DependencyProperty HelpTextProperty = AutomationProperties.HelpTextProperty.AddOwner( typeof(FixedElement)); //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors // Ctor always set mutable flag to false internal FixedElement(ElementType type, FixedTextPointer start, FixedTextPointer end, int pageIndex) { _type = type; #if DEBUG if (_type == ElementType.Object) // is EmbeddedObject { Debug.Assert((object)_start == (object)_end); } _children = new List(); #endif _start = start; _end = end; _pageIndex = pageIndex; } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- #if DEBUG /// /// Create a string representation of this object /// ///string - A string representation of this object public override string ToString() { return String.Format(CultureInfo.InvariantCulture, "{{S@{0}---E@{1}}} {2}", _start, _end, System.Enum.GetName(typeof(ElementType), _type)); } #endif //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Internal Methods // //----------------------------------------------------- #region Internal Methods // Method to allow append of element // Note element order doesn't imply Z-order in this implementation! internal void Append(FixedElement e) { #if DEBUG _children.Add(e); #endif if (_type == ElementType.InlineUIContainer) { Debug.Assert(_object == null && e._type == ElementType.Object); _object = e._object; // To generate InlineUIContainer with child with object; } } internal object GetObject() { if (_type == ElementType.Hyperlink || _type == ElementType.Paragraph || (_type >= ElementType.Table && _type <= ElementType.TableCell)) { if (_object == null) { _object = BuildObjectTree(); } return _object; } if (!(_type == ElementType.Object || _type == ElementType.InlineUIContainer)) { // This is currently not implemented for any other type return null; } Image im = GetImage(); object o = im; if (_type == ElementType.InlineUIContainer) { InlineUIContainer c = new InlineUIContainer(); c.Child = im; o = c; } return o; } internal object BuildObjectTree() { IAddChild root; switch (_type) { case ElementType.Table: root = new Table(); break; case ElementType.TableRowGroup: root = new TableRowGroup(); break; case ElementType.TableRow: root = new TableRow(); break; case ElementType.TableCell: root = new TableCell(); break; case ElementType.Paragraph: root = new Paragraph(); break; case ElementType.Hyperlink: Hyperlink link = new Hyperlink(); link.NavigateUri = GetValue(NavigateUriProperty) as Uri; link.RequestNavigate += new RequestNavigateEventHandler(ClickHyperlink); AutomationProperties.SetHelpText(link, (String)this.GetValue(HelpTextProperty)); AutomationProperties.SetName(link, (String)this.GetValue(NameProperty)); root = link; break; default: Debug.Assert(false); root = null; break; } ITextPointer pos = ((ITextPointer)_start).CreatePointer(); while (pos.CompareTo((ITextPointer)_end) < 0) { TextPointerContext tpc = pos.GetPointerContext(LogicalDirection.Forward); if (tpc == TextPointerContext.Text) { root.AddText(pos.GetTextInRun(LogicalDirection.Forward)); } else if (tpc == TextPointerContext.EmbeddedElement) { root.AddChild(pos.GetAdjacentElement(LogicalDirection.Forward)); } else if (tpc == TextPointerContext.ElementStart) { object obj = pos.GetAdjacentElement(LogicalDirection.Forward); if (obj != null) { root.AddChild(obj); pos.MoveToNextContextPosition(LogicalDirection.Forward); pos.MoveToElementEdge(ElementEdge.BeforeEnd); } } pos.MoveToNextContextPosition(LogicalDirection.Forward); } return root; } private Image GetImage() { Image image = null; // return value Uri source = _object as Uri; if (source != null) { image = new Image(); image.Source = new System.Windows.Media.Imaging.BitmapImage(source); image.Width = image.Source.Width; image.Height = image.Source.Height; AutomationProperties.SetName(image, (String)this.GetValue(NameProperty)); AutomationProperties.SetHelpText(image, (String)this.GetValue(HelpTextProperty)); } return image; } private void ClickHyperlink(Object sender, RequestNavigateEventArgs args) { FixedDocument doc = _start.FixedTextContainer.FixedDocument; int pageno = doc.GetPageNumber(_start); FixedPage page = doc.SyncGetPage(pageno, false); //have page raise click event Hyperlink.RaiseNavigate(page, args.Uri, null); } #endregion Internal Methods #if DEBUG internal void Dump() { DumpTree(0); } internal void DumpTree(int indent) { if (DocumentsTrace.FixedTextOM.Map.IsEnabled) { StringBuilder dp = new StringBuilder(); dp.Append("\r\n"); for (int kk = 0; kk < indent; kk++) { dp.Append(" "); } dp.Append(this.ToString()); for(int i = 0, n = _children.Count; i < n; i++) { ((FixedElement)_children[i]).DumpTree(indent+1); } DocumentsTrace.FixedTextOM.Map.Trace(dp.ToString()); } } #endif //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties internal bool IsTextElement { get { return ! (_type == ElementType.Object || _type == ElementType.Container); } } internal Type Type { get { switch (_type) { case ElementType.Paragraph: return typeof(Paragraph); case ElementType.Inline: return typeof(Inline); case ElementType.Run: return typeof(Run); case ElementType.Span: return typeof(Span); case ElementType.Bold: return typeof(Bold); case ElementType.Italic: return typeof(Italic); case ElementType.Underline: return typeof(Underline); case ElementType.Object: return typeof(Object); case ElementType.Table: return typeof(Table); case ElementType.TableRowGroup: return typeof(TableRowGroup); case ElementType.TableRow: return typeof(TableRow); case ElementType.TableCell: return typeof(TableCell); case ElementType.List: return typeof(List); case ElementType.ListItem: return typeof(ListItem); case ElementType.Section: return typeof(Section); case ElementType.Figure: return typeof(Figure); case ElementType.Hyperlink: return typeof(Hyperlink); case ElementType.InlineUIContainer: return typeof(InlineUIContainer); default: return typeof(Object); } } } internal FixedTextPointer Start { get { return _start; } } internal FixedTextPointer End { get { return _end; } } internal int PageIndex { get { return _pageIndex; } } internal object Object { set { _object = value; } } #endregion Internal Properties //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields #if DEBUG private List_children; #endif private ElementType _type; // logical type that this element represents private FixedTextPointer _start; // start position for this element private FixedTextPointer _end; // end position for this element private object _object; // embedded object private int _pageIndex; #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
- WSHttpBindingBaseElement.cs
- BackStopAuthenticationModule.cs
- RegistryKey.cs
- WorkflowRuntime.cs
- TextServicesCompartment.cs
- SafeReversePInvokeHandle.cs
- HwndTarget.cs
- PortCache.cs
- HttpResponseInternalWrapper.cs
- XPathParser.cs
- DataConnectionHelper.cs
- TransportChannelListener.cs
- OperationCanceledException.cs
- PerformanceCounterPermissionAttribute.cs
- TableCellCollection.cs
- ErrorRuntimeConfig.cs
- SchemaNotation.cs
- InputLanguageSource.cs
- CellConstant.cs
- AssociationEndMember.cs
- Relationship.cs
- Rect3D.cs
- ResetableIterator.cs
- BreakSafeBase.cs
- PinnedBufferMemoryStream.cs
- ExpressionBuilder.cs
- MatrixStack.cs
- ConfigXmlWhitespace.cs
- UpdateCompiler.cs
- StrokeRenderer.cs
- HttpListenerContext.cs
- DetailsViewModeEventArgs.cs
- LayeredChannelFactory.cs
- FreezableOperations.cs
- WebControlAdapter.cs
- Cursor.cs
- XmlBaseReader.cs
- Binding.cs
- SqlProcedureAttribute.cs
- TextEffectCollection.cs
- WebBrowserNavigatingEventHandler.cs
- X509AudioLogo.cs
- Line.cs
- sqlser.cs
- XamlSerializerUtil.cs
- DirtyTextRange.cs
- Parameter.cs
- ConnectivityStatus.cs
- XmlSchemaSimpleTypeUnion.cs
- TypeDescriptorContext.cs
- NGCSerializationManagerAsync.cs
- DrawingImage.cs
- RotateTransform.cs
- TypeConverterHelper.cs
- ToolStripSettings.cs
- ProxyWebPart.cs
- XmlLinkedNode.cs
- DataControlField.cs
- FuncCompletionCallbackWrapper.cs
- sqlnorm.cs
- TextEmbeddedObject.cs
- DataStreams.cs
- Collection.cs
- DocumentGridContextMenu.cs
- VScrollBar.cs
- SqlDataAdapter.cs
- SecurityTokenSerializer.cs
- NativeMethodsOther.cs
- ContractComponent.cs
- BaseTemplateParser.cs
- QueryOutputWriter.cs
- SpellCheck.cs
- PairComparer.cs
- AppManager.cs
- InvalidAsynchronousStateException.cs
- ImageSourceTypeConverter.cs
- HyperLink.cs
- SslStream.cs
- XmlSchemaAttributeGroupRef.cs
- RenderDataDrawingContext.cs
- IdleTimeoutMonitor.cs
- XmlSchemaValidationException.cs
- SqlRecordBuffer.cs
- HandleCollector.cs
- BinarySecretSecurityToken.cs
- EventProviderClassic.cs
- WriteableBitmap.cs
- WebPartManager.cs
- WebPartEventArgs.cs
- SecuritySessionFilter.cs
- HttpCacheVary.cs
- Selector.cs
- ResourceSetExpression.cs
- FreezableCollection.cs
- AsyncStreamReader.cs
- ReadOnlyDataSource.cs
- ProfileManager.cs
- GridViewRowEventArgs.cs
- XslException.cs
- SearchForVirtualItemEventArgs.cs