Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / TextView.cs / 1305376 / TextView.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Text; using System.Diagnostics; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.UI.Design.WebControls; using System.Web.UI.HtmlControls; using System.Security.Permissions; namespace System.Web.UI.MobileControls { /* * Mobile TextView class. * The TextView control is for displaying large fields of text data. * It supports internal pagination. * * Copyright (c) 2000 Microsoft Corporation */ ///[ DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, " + AssemblyRef.SystemDesign), DefaultProperty("Text"), Designer(typeof(System.Web.UI.Design.MobileControls.TextViewDesigner)), DesignerAdapter("System.Web.UI.Design.MobileControls.Adapters.DesignerTextViewAdapter"), ToolboxData("<{0}:TextView runat=\"server\">TextView{0}:TextView>"), ToolboxItem("System.Web.UI.Design.WebControlToolboxItem, " + AssemblyRef.SystemDesign) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class TextView : PagedControl { private bool _haveContent = false; private ArrayList _elements = new ArrayList(); /// [ Bindable(true), DefaultValue(""), MobileCategory(SR.Category_Appearance), MobileSysDescription(SR.TextView_Text), PersistenceMode(PersistenceMode.InnerDefaultProperty) ] public String Text { get { return InnerText; } set { InnerText = value; if (_haveContent) { _elements = null; _haveContent = false; } } } /// [ Bindable(false), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public new int ItemCount { get { return base.ItemCount; } set { base.ItemCount = value; } } /// [ Bindable(false), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public new int ItemsPerPage { get { return base.ItemsPerPage; } set { base.ItemsPerPage = value; } } /// [ Browsable(false) ] public new event LoadItemsEventHandler LoadItems { add { base.LoadItems += value; } remove { base.LoadItems -= value; } } // Note that this value doesn't relate to device specific info // because this is simply a unit size to define how many characters // to be counted as an item for pagination. Depending on each // device's page weight, different numbers of items will be returned // for display. private static readonly int PagingUnitSize = ControlPager.DefaultWeight; // chars private int _length = 0; private int _pageBeginElement; private int _pageBeginOffset; private int _pageEndElement; private int _pageEndOffset; private bool _paginated = false; private ArrayList Elements { get { if (_elements == null) { _elements = new ArrayList(); } return _elements; } } private void InternalPaginate() { if (_paginated) { return; } _paginated = true; _pageBeginElement = 0; _pageEndOffset = 0; _pageEndElement = 0; _pageBeginOffset = 0; if (_elements == null || _elements.Count == 0) { return; } int firstBlockIndex = FirstVisibleItemIndex; int visibleBlockCount = VisibleItemCount; int blockLimit = firstBlockIndex + visibleBlockCount; bool isLastPage = blockLimit >= InternalItemCount; int block = 0; int blockElement = 0; int blockOffset = 0; int currentPosition = 0; int elementIndex = 0; TextViewElement element = GetElement(0); int elementLength = element.Text.Length; int blockSize = 0; //fill the number of blocks for this page while (block < blockLimit) { if (block == firstBlockIndex) { _pageBeginElement = blockElement; _pageBeginOffset = blockOffset; if (isLastPage) { _pageEndElement = _elements.Count - 1; _pageEndOffset = GetElement(_pageEndElement).Text.Length; return; } } while (elementLength - currentPosition <= PagingUnitSize - blockSize || (blockElement == elementIndex && element.Url != null)) { elementIndex++; if (elementIndex == _elements.Count) { break; } blockSize += elementLength - currentPosition; element = GetElement(elementIndex); elementLength = element.Text.Length; currentPosition = 0; } if (elementIndex == _elements.Count) { _pageEndElement = _elements.Count - 1; _pageEndOffset = GetElement(_pageEndElement).Text.Length; return; } int nextBlockStart; if (element.Url != null) { nextBlockStart = 0; } else { int i; for (i = currentPosition + (PagingUnitSize - blockSize) - 1; i >= currentPosition; i--) { char c = element.Text[i]; if (Char.IsWhiteSpace(c) || Char.IsPunctuation(c)) { break; } } if (i < currentPosition) { nextBlockStart = currentPosition; } else { nextBlockStart = i + 1; } } block++; blockElement = elementIndex; blockOffset = nextBlockStart; currentPosition = nextBlockStart; blockSize = 0; } _pageEndElement = blockElement; _pageEndOffset = blockOffset; } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleElementIndex { get { return _pageBeginElement; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleElementOffset { get { return _pageBeginOffset; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int LastVisibleElementIndex { get { return _pageEndElement; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int LastVisibleElementOffset { get { return _pageEndOffset; } } /// protected override void OnRender(HtmlTextWriter writer) { BuildContents(); InternalPaginate(); base.OnRender(writer); } /// public TextViewElement GetElement(int index) { return (TextViewElement)_elements[index]; } private StringBuilder _translateBuilder; private StringWriter _translateWriter; internal void AddElement(String text, String href, bool isBold, bool isUnderline, bool breakAfter) { // Convert text if it has special characters. if (text.IndexOf('&') >= 0) { if (_translateWriter != null) { _translateBuilder.Length = 0; } else { _translateBuilder = new StringBuilder(); _translateWriter = new StringWriter(_translateBuilder, CultureInfo.InvariantCulture); } TranslateAndAppendText(text, _translateWriter); _translateWriter.Flush(); text = _translateBuilder.ToString(); } _length += text.Length; Elements.Add(new TextViewElement(text, href, isBold, isUnderline, breakAfter)); } /// protected override int InternalItemCount { get { return (_length + PagingUnitSize - 1) / PagingUnitSize; } } /// protected override int ItemWeight { get { return PagingUnitSize; } } /// public override void PaginateRecursive(ControlPager pager) { BuildContents(); base.PaginateRecursive(pager); } private void BuildContents() { if (!_haveContent) { _haveContent = true; String text = Text; if (text.Length > 0) { TextViewLiteralTextParser parser = new TextViewLiteralTextParser(this); parser.Parse(text); } } } internal override bool AllowMultiLines { get { return true; } } internal override bool AllowInnerMarkup { get { return true; } } internal override bool TrimInnerText { get { return false; } } private class TextViewLiteralTextParser : LiteralTextParser { TextView _parent; bool _hasElements = false; public TextViewLiteralTextParser(TextView parent) { _parent = parent; } protected override void ProcessElement(LiteralElement element) { String text = element.Text != null ? element.Text : String.Empty; String href = null; if(element.Type == LiteralElementType.Anchor) { href = element.GetAttribute("href"); } _parent.AddElement(text, href, ((element.Format & LiteralFormat.Bold) == LiteralFormat.Bold), ((element.Format & LiteralFormat.Italic) == LiteralFormat.Italic), element.BreakAfter); _hasElements = true; } protected override void ProcessTagInnerText(String text) { Debug.Assert(false); } protected override bool IgnoreWhiteSpaceElement(LiteralElement element) { return !_hasElements; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System; using System.Text; using System.Diagnostics; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Drawing.Design; using System.Globalization; using System.IO; using System.Web; using System.Web.UI; using System.Web.UI.Design.WebControls; using System.Web.UI.HtmlControls; using System.Security.Permissions; namespace System.Web.UI.MobileControls { /* * Mobile TextView class. * The TextView control is for displaying large fields of text data. * It supports internal pagination. * * Copyright (c) 2000 Microsoft Corporation */ ///[ DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, " + AssemblyRef.SystemDesign), DefaultProperty("Text"), Designer(typeof(System.Web.UI.Design.MobileControls.TextViewDesigner)), DesignerAdapter("System.Web.UI.Design.MobileControls.Adapters.DesignerTextViewAdapter"), ToolboxData("<{0}:TextView runat=\"server\">TextView{0}:TextView>"), ToolboxItem("System.Web.UI.Design.WebControlToolboxItem, " + AssemblyRef.SystemDesign) ] [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] public class TextView : PagedControl { private bool _haveContent = false; private ArrayList _elements = new ArrayList(); /// [ Bindable(true), DefaultValue(""), MobileCategory(SR.Category_Appearance), MobileSysDescription(SR.TextView_Text), PersistenceMode(PersistenceMode.InnerDefaultProperty) ] public String Text { get { return InnerText; } set { InnerText = value; if (_haveContent) { _elements = null; _haveContent = false; } } } /// [ Bindable(false), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public new int ItemCount { get { return base.ItemCount; } set { base.ItemCount = value; } } /// [ Bindable(false), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public new int ItemsPerPage { get { return base.ItemsPerPage; } set { base.ItemsPerPage = value; } } /// [ Browsable(false) ] public new event LoadItemsEventHandler LoadItems { add { base.LoadItems += value; } remove { base.LoadItems -= value; } } // Note that this value doesn't relate to device specific info // because this is simply a unit size to define how many characters // to be counted as an item for pagination. Depending on each // device's page weight, different numbers of items will be returned // for display. private static readonly int PagingUnitSize = ControlPager.DefaultWeight; // chars private int _length = 0; private int _pageBeginElement; private int _pageBeginOffset; private int _pageEndElement; private int _pageEndOffset; private bool _paginated = false; private ArrayList Elements { get { if (_elements == null) { _elements = new ArrayList(); } return _elements; } } private void InternalPaginate() { if (_paginated) { return; } _paginated = true; _pageBeginElement = 0; _pageEndOffset = 0; _pageEndElement = 0; _pageBeginOffset = 0; if (_elements == null || _elements.Count == 0) { return; } int firstBlockIndex = FirstVisibleItemIndex; int visibleBlockCount = VisibleItemCount; int blockLimit = firstBlockIndex + visibleBlockCount; bool isLastPage = blockLimit >= InternalItemCount; int block = 0; int blockElement = 0; int blockOffset = 0; int currentPosition = 0; int elementIndex = 0; TextViewElement element = GetElement(0); int elementLength = element.Text.Length; int blockSize = 0; //fill the number of blocks for this page while (block < blockLimit) { if (block == firstBlockIndex) { _pageBeginElement = blockElement; _pageBeginOffset = blockOffset; if (isLastPage) { _pageEndElement = _elements.Count - 1; _pageEndOffset = GetElement(_pageEndElement).Text.Length; return; } } while (elementLength - currentPosition <= PagingUnitSize - blockSize || (blockElement == elementIndex && element.Url != null)) { elementIndex++; if (elementIndex == _elements.Count) { break; } blockSize += elementLength - currentPosition; element = GetElement(elementIndex); elementLength = element.Text.Length; currentPosition = 0; } if (elementIndex == _elements.Count) { _pageEndElement = _elements.Count - 1; _pageEndOffset = GetElement(_pageEndElement).Text.Length; return; } int nextBlockStart; if (element.Url != null) { nextBlockStart = 0; } else { int i; for (i = currentPosition + (PagingUnitSize - blockSize) - 1; i >= currentPosition; i--) { char c = element.Text[i]; if (Char.IsWhiteSpace(c) || Char.IsPunctuation(c)) { break; } } if (i < currentPosition) { nextBlockStart = currentPosition; } else { nextBlockStart = i + 1; } } block++; blockElement = elementIndex; blockOffset = nextBlockStart; currentPosition = nextBlockStart; blockSize = 0; } _pageEndElement = blockElement; _pageEndOffset = blockOffset; } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleElementIndex { get { return _pageBeginElement; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int FirstVisibleElementOffset { get { return _pageBeginOffset; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int LastVisibleElementIndex { get { return _pageEndElement; } } /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public int LastVisibleElementOffset { get { return _pageEndOffset; } } /// protected override void OnRender(HtmlTextWriter writer) { BuildContents(); InternalPaginate(); base.OnRender(writer); } /// public TextViewElement GetElement(int index) { return (TextViewElement)_elements[index]; } private StringBuilder _translateBuilder; private StringWriter _translateWriter; internal void AddElement(String text, String href, bool isBold, bool isUnderline, bool breakAfter) { // Convert text if it has special characters. if (text.IndexOf('&') >= 0) { if (_translateWriter != null) { _translateBuilder.Length = 0; } else { _translateBuilder = new StringBuilder(); _translateWriter = new StringWriter(_translateBuilder, CultureInfo.InvariantCulture); } TranslateAndAppendText(text, _translateWriter); _translateWriter.Flush(); text = _translateBuilder.ToString(); } _length += text.Length; Elements.Add(new TextViewElement(text, href, isBold, isUnderline, breakAfter)); } /// protected override int InternalItemCount { get { return (_length + PagingUnitSize - 1) / PagingUnitSize; } } /// protected override int ItemWeight { get { return PagingUnitSize; } } /// public override void PaginateRecursive(ControlPager pager) { BuildContents(); base.PaginateRecursive(pager); } private void BuildContents() { if (!_haveContent) { _haveContent = true; String text = Text; if (text.Length > 0) { TextViewLiteralTextParser parser = new TextViewLiteralTextParser(this); parser.Parse(text); } } } internal override bool AllowMultiLines { get { return true; } } internal override bool AllowInnerMarkup { get { return true; } } internal override bool TrimInnerText { get { return false; } } private class TextViewLiteralTextParser : LiteralTextParser { TextView _parent; bool _hasElements = false; public TextViewLiteralTextParser(TextView parent) { _parent = parent; } protected override void ProcessElement(LiteralElement element) { String text = element.Text != null ? element.Text : String.Empty; String href = null; if(element.Type == LiteralElementType.Anchor) { href = element.GetAttribute("href"); } _parent.AddElement(text, href, ((element.Format & LiteralFormat.Bold) == LiteralFormat.Bold), ((element.Format & LiteralFormat.Italic) == LiteralFormat.Italic), element.BreakAfter); _hasElements = true; } protected override void ProcessTagInnerText(String text) { Debug.Assert(false); } protected override bool IgnoreWhiteSpaceElement(LiteralElement element) { return !_hasElements; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebControlsSection.cs
- CodeParameterDeclarationExpressionCollection.cs
- InstallHelper.cs
- Panel.cs
- NotifyParentPropertyAttribute.cs
- Activator.cs
- Registry.cs
- FlowLayout.cs
- XmlAttributeAttribute.cs
- BlurBitmapEffect.cs
- XmlArrayItemAttributes.cs
- WindowsScrollBar.cs
- PropertyValueUIItem.cs
- EventProperty.cs
- SpotLight.cs
- BufferedResponseStream.cs
- NamespaceMapping.cs
- InterleavedZipPartStream.cs
- TextTreeFixupNode.cs
- PermissionSet.cs
- RadioButtonRenderer.cs
- PriorityRange.cs
- InkPresenter.cs
- FixedPosition.cs
- Vector3DAnimationBase.cs
- FixedSOMSemanticBox.cs
- XmlILIndex.cs
- sqlinternaltransaction.cs
- ViewPort3D.cs
- CachedPathData.cs
- StrokeNode.cs
- AutomationTextAttribute.cs
- GridView.cs
- RawStylusSystemGestureInputReport.cs
- KeyedQueue.cs
- updatecommandorderer.cs
- ModifyActivitiesPropertyDescriptor.cs
- RemoteWebConfigurationHostStream.cs
- _Rfc2616CacheValidators.cs
- MDIControlStrip.cs
- SqlDataSourceCommandEventArgs.cs
- AsyncOperationManager.cs
- Exceptions.cs
- __Filters.cs
- AssociationType.cs
- DrawingAttributes.cs
- NamespaceCollection.cs
- EventMappingSettingsCollection.cs
- DelegatingConfigHost.cs
- UInt16Storage.cs
- HyperLinkColumn.cs
- RegexCapture.cs
- DbSourceCommand.cs
- FindSimilarActivitiesVerb.cs
- BaseDataList.cs
- ApplicationServicesHostFactory.cs
- HtmlAnchor.cs
- TextDocumentView.cs
- StylusCollection.cs
- ComponentResourceManager.cs
- XmlDataProvider.cs
- InvalidDataException.cs
- HostedImpersonationContext.cs
- BinaryEditor.cs
- ResourcePermissionBase.cs
- HttpHandlerActionCollection.cs
- DataColumnMapping.cs
- PrtCap_Reader.cs
- webbrowsersite.cs
- XmlWriterSettings.cs
- C14NUtil.cs
- TypedReference.cs
- MultipartContentParser.cs
- ClientConfigurationSystem.cs
- XmlSerializerAssemblyAttribute.cs
- diagnosticsswitches.cs
- ServerIdentity.cs
- ReadWriteObjectLock.cs
- BuildProvider.cs
- MarginsConverter.cs
- EnterpriseServicesHelper.cs
- MetafileHeaderWmf.cs
- ApplicationInfo.cs
- MultiPartWriter.cs
- AssemblyNameEqualityComparer.cs
- BinHexEncoding.cs
- CAGDesigner.cs
- DataBoundControlActionList.cs
- ParameterCollection.cs
- TrustManagerPromptUI.cs
- DocumentPageViewAutomationPeer.cs
- ModelPerspective.cs
- BatchWriter.cs
- HtmlProps.cs
- SmtpReplyReader.cs
- ObjectItemAssemblyLoader.cs
- DataGridViewHitTestInfo.cs
- HttpSessionStateBase.cs
- DivideByZeroException.cs
- XPathArrayIterator.cs