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
- WindowInteropHelper.cs
- FontNameConverter.cs
- DATA_BLOB.cs
- Highlights.cs
- ClientOperation.cs
- SecurityChannel.cs
- Content.cs
- WebPartEditorCancelVerb.cs
- ParseElement.cs
- ClickablePoint.cs
- SHA384Managed.cs
- GenericRootAutomationPeer.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- HttpRuntime.cs
- PasswordDeriveBytes.cs
- WebZoneDesigner.cs
- ModifierKeysValueSerializer.cs
- Pair.cs
- EventLogEntryCollection.cs
- PasswordTextNavigator.cs
- AsyncContentLoadedEventArgs.cs
- PopupControlService.cs
- NavigationHelper.cs
- SponsorHelper.cs
- HideDisabledControlAdapter.cs
- ScriptReferenceBase.cs
- UpdatePanelTriggerCollection.cs
- XsdDuration.cs
- ContentOperations.cs
- BypassElementCollection.cs
- Vector3DKeyFrameCollection.cs
- PoisonMessageException.cs
- RightsManagementInformation.cs
- BinaryNegotiation.cs
- NavigationPropertySingletonExpression.cs
- PageCodeDomTreeGenerator.cs
- WebPartConnectionsConnectVerb.cs
- ViewKeyConstraint.cs
- MetafileHeader.cs
- HttpResponse.cs
- FrameDimension.cs
- NetNamedPipeSecurity.cs
- WebRequestModuleElementCollection.cs
- HyperLinkField.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- Help.cs
- ValidatorUtils.cs
- ComponentCommands.cs
- TextInfo.cs
- ComboBox.cs
- IISMapPath.cs
- ListView.cs
- BlockUIContainer.cs
- DefaultAsyncDataDispatcher.cs
- ProcessRequestArgs.cs
- DataRow.cs
- TextTreeText.cs
- UnsafeNativeMethods.cs
- NumberFunctions.cs
- coordinatorfactory.cs
- PropertyGeneratedEventArgs.cs
- ServicePointManagerElement.cs
- SafeSecurityHandles.cs
- ApplicationServiceHelper.cs
- MouseGesture.cs
- PropertyGridEditorPart.cs
- DataGridViewComboBoxColumn.cs
- ToolStripComboBox.cs
- ConstraintEnumerator.cs
- RowUpdatedEventArgs.cs
- ZipIOModeEnforcingStream.cs
- Stackframe.cs
- Tag.cs
- HotCommands.cs
- XmlSchemaSubstitutionGroup.cs
- BrushValueSerializer.cs
- ContentElementAutomationPeer.cs
- ChangeNode.cs
- FontNameEditor.cs
- HwndSourceParameters.cs
- EventItfInfo.cs
- ToolBarOverflowPanel.cs
- FactoryGenerator.cs
- ProxyFragment.cs
- _SslState.cs
- RectAnimationUsingKeyFrames.cs
- MediaSystem.cs
- CacheChildrenQuery.cs
- ScriptingRoleServiceSection.cs
- EdmProperty.cs
- Transform3D.cs
- DebugTracing.cs
- Matrix.cs
- FontFamily.cs
- XmlSchemaAttributeGroupRef.cs
- SizeKeyFrameCollection.cs
- BitmapEffect.cs
- BitVector32.cs
- TabItem.cs
- EntityReference.cs