UpWmlMobileTextWriter.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / MIT / System / Web / UI / MobileControls / Adapters / UpWmlMobileTextWriter.cs / 1305376 / UpWmlMobileTextWriter.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

using System; 
using System.Collections; 
using System.Diagnostics;
using System.Globalization; 
using System.IO;
using System.Text;
using System.Web.Mobile;
using System.Web.UI.MobileControls; 
using System.Security.Permissions;
 
using SR=System.Web.UI.MobileControls.Adapters.SR; 

#if COMPILING_FOR_SHIPPED_SOURCE 
using Adapters=System.Web.UI.MobileControls.ShippedAdapterSource;
namespace System.Web.UI.MobileControls.ShippedAdapterSource
#else
using Adapters=System.Web.UI.MobileControls.Adapters; 
namespace System.Web.UI.MobileControls.Adapters
#endif 
 
{
    /* 
     * UpWmlMobileTextWriter class.
     *
     * Copyright (c) 2000 Microsoft Corporation
     */ 

    ///  
    [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 UpWmlMobileTextWriter : WmlMobileTextWriter
    {
        private int       _screenWidth;
        private int       _screenHeight; 
        private bool      _inHyperlink = false;
        private bool      _inPostBack = false; 
        private bool      _inSoftkey = false; 
        private Alignment _lastAlignment = Alignment.Left;
        private Wrapping  _lastWrapping = Wrapping.Wrap; 
        private int       _currentCardIndex = -1;
        private ArrayList _cards = new ArrayList();
        private int       _currentCardAnchorCount = 0;
        private int       _currentCardPostBacks = 0; 
        private int       _currentCardSubmits = 0;
        private bool      _canRenderMixedSelects = false; 
        private bool      _requiresOptionSubmitCard = false; 
        private int       _optionSubmitCardIndex = 0;
        private String    _optionMenuName = null; 

        private String    _linkText = null;
        private String    _targetUrl = null;
        private String    _softkeyLabel = null; 
        private bool      _encodeUrl = false;
        private bool      _useMenuOptionTitle = false; 
 
        /// 
        public UpWmlMobileTextWriter(TextWriter writer, MobileCapabilities device, MobilePage page) 
            : base(writer, device, page)
        {
            _screenWidth = device.ScreenCharactersWidth;
            _screenHeight = device.ScreenCharactersHeight; 
            _canRenderMixedSelects = device.CanRenderMixedSelects;
        } 
 
        private UpCard CurrentCard
        { 
            get
            {
                return (UpCard)_cards[_currentCardIndex];
            } 
        }
 
        ///  
        public override void BeginForm(Form form)
        { 
            ResetState();
            if (AnalyzeMode)
            {
                AllocateNewCard(); 
                base.BeginForm(form);
            } 
            else 
            {
                if (form == form.MobilePage.ActiveForm) 
                {
                    PreRenderActiveForm();
                }
 
                base.BeginForm(form);
                RenderCardOpening(0); 
            } 
        }
 
        private static readonly int _filePathSuffixLength =
            Constants.UniqueFilePathSuffixVariableWithoutEqual.Length + 1;
        private int _sessionCount = -1;
        private int SessionCount 
        {
            get 
            { 
                if (_sessionCount == -1)
                { 
                    _sessionCount = 0;
                    String filePathSuffix =
                        Page.Request.QueryString[Constants.UniqueFilePathSuffixVariableWithoutEqual];
 
                    if (filePathSuffix != null && filePathSuffix.Length == _filePathSuffixLength)
                    { 
                        Char c = filePathSuffix[_filePathSuffixLength - 1]; 
                        if (Char.IsDigit(c))
                        { 
                            _sessionCount = (int)Char.GetNumericValue(c);
                        }
                    }
                } 

                return _sessionCount; 
            } 
        }
 
        private bool RequiresLoopDetectionCard
        {
            get
            { 
                IDictionary dictionary = Page.Adapter.CookielessDataDictionary;
                if((dictionary != null) && (dictionary.Count > 0)) 
                { 
                    return true;
                } 
                return SessionCount == 9;
            }
        }
 
        private void PreRenderActiveForm()
        { 
            if (Device.RequiresUniqueFilePathSuffix && RequiresLoopDetectionCard) 
            {
                Debug.Assert(!AnalyzeMode); 
                Write(String.Format(CultureInfo.InvariantCulture, _loopDetectionCard, Page.ActiveForm.ClientID));
            }
        }
 
        private String _cachedFormQueryString;
        ///  
        protected override String CalculateFormQueryString() 
        {
            if(_cachedFormQueryString != null) 
            {
                return _cachedFormQueryString;
            }
            String queryString = null; 
            if (CurrentForm.Method != FormMethod.Get)
            { 
                queryString = Page.QueryStringText; 
            }
 
            if (Device.RequiresUniqueFilePathSuffix)
            {
                String ufps = Page.UniqueFilePathSuffix;
                if(this.HasFormVariables) 
                {
                    if (SessionCount == 9) 
                    { 
                        ufps += '0';
                    } 
                    else
                    {
                        ufps += (SessionCount + 1).ToString(CultureInfo.InvariantCulture);
                    } 
                }
                if (queryString != null && queryString.Length > 0) 
                { 
                    queryString = String.Concat(ufps, "&", queryString);
                } 
                else
                {
                    queryString = ufps;
                } 
            }
            _cachedFormQueryString = queryString; 
            return queryString; 
        }
 
        private const String _loopDetectionCard =
            "";

        internal override bool ShouldWriteFormID(Form form) 
        {
            if (RequiresLoopDetectionCard) 
            { 
                return true;
            } 
            return base.ShouldWriteFormID(form);
        }

        ///  
        public override void EndForm()
        { 
            if (AnalyzeMode) 
            {
                CheckRawOutput(); 
                CurrentCard.AnchorCount = _currentCardAnchorCount;
                base.EndForm();
            }
            else 
            {
                RenderCardClosing(_currentCardIndex); 
                base.EndForm(); 
            }
        } 

        /// 
        protected override void RenderEndForm()
        { 
            base.RenderEndForm();
            if (_requiresOptionSubmitCard) 
            { 
                Write("");
 
                Write("");
                RenderGoAction(null, _postBackEventArgumentVarName, WmlPostFieldType.Variable, true); 
                WriteLine(""); 

                WriteLine(""); 
                WriteLine("");
            }
        }
 
        /// 
        public override void RenderText(String text, bool breakAfter, bool encodeText) 
        { 
            if (AnalyzeMode)
            { 
                if (CurrentCard.HasInputElements && !Device.CanRenderAfterInputOrSelectElement)
                {
                    BeginNextCard();
                } 

                CheckRawOutput(); 
                if (_inHyperlink || _inPostBack) 
                {
                    // When analyzing, accumulate link text for use in figuring 
                    // out softkey.
                    if (_inSoftkey)
                    {
                        _linkText += text; 
                    }
                } 
                else 
                {
                    // Text cannot come after a menu. 
                    if (CurrentCard.RenderAsMenu)
                    {
                        CurrentCard.RenderAsMenu = false;
                        CurrentCard.MenuCandidate = false; 
                    }
                    else if (CurrentCard.MenuCandidate) 
                    { 
                        // Calculate weight of static items before a menu.
                        // This is used to check for screens that scroll past their 
                        // initial content.

                        int weight = text != null ? text.Length : 0;
                        if (breakAfter) 
                        {
                            weight = ((weight - 1) / _screenWidth + 1) * _screenWidth; 
                        } 
                        CurrentCard.StaticItemsWeight += weight;
                    } 
                }
            }
            else
            { 
                bool willRenderText = false;
                if (_inHyperlink || _inPostBack) 
                { 
                    // If rendering in menu, simply accumulate text.
                    if (CurrentCard.RenderAsMenu) 
                    {
                        _linkText += text;
                    }
                    else if (!CurrentCard.UsesDefaultSubmit) 
                    {
                        willRenderText = true; 
                    } 
                }
                else 
                {
                    willRenderText = true;
                }
 
                if (willRenderText)
                { 
                    // Some browsers that 
                    // RendersBreakBeforeWmlSelectAndInput have the odd behavior
                    // of *not* rendering a break if there is nothing on the 
                    // card before it, and entering an explicit 
creates two // breaks. Therefore, we just render a   in this // situation. if (!CurrentCard.RenderedTextElementYet && Device.RendersBreakBeforeWmlSelectAndInput && !((WmlPageAdapter)Page.Adapter).IsKDDIPhone()) { CurrentCard.RenderedTextElementYet = true; if (breakAfter && (text != null && text.Length == 0)) { base.RenderText(" ", false, false); } } base.RenderText(text, breakAfter, encodeText); } } } /// public override void RenderBeginHyperlink(String targetUrl, bool encodeUrl, String softkeyLabel, bool implicitSoftkeyLabel, bool mapToSoftkey) { if (_inHyperlink || _inPostBack) { throw new Exception(); } // AUI 4137 if (targetUrl != null && targetUrl.Length > 0 && targetUrl[0] != '#') { targetUrl = Page.MakePathAbsolute(targetUrl); } if (AnalyzeMode) { if (CurrentCard.HasInputElements && !Device.CanRenderAfterInputOrSelectElement) { BeginNextCard(); } CheckRawOutput(); // Try to map to softkey if possible. if (mapToSoftkey && CurrentCard.SoftkeysUsed < NumberOfSoftkeys) { _inSoftkey = true; _targetUrl = targetUrl; _softkeyLabel = softkeyLabel; _encodeUrl = encodeUrl; _linkText = String.Empty; } } else { if (CurrentCard.RenderAsMenu) { if (!CurrentCard.MenuOpened) { OpenMenu(); } // In menu mode, actual rendering is done on RenderEndHyperlink, // when we have all available info. _targetUrl = targetUrl; _softkeyLabel = softkeyLabel; _useMenuOptionTitle = mapToSoftkey && !implicitSoftkeyLabel; _encodeUrl = encodeUrl; _linkText = String.Empty; } else if (!CurrentCard.UsesDefaultSubmit) { base.RenderBeginHyperlink(targetUrl, encodeUrl, softkeyLabel, implicitSoftkeyLabel, mapToSoftkey); } } _inHyperlink = true; } /// public override void RenderEndHyperlink(bool breakAfter) { if (!_inHyperlink) { throw new Exception(); } _inHyperlink = false; if (AnalyzeMode) { CheckRawOutput(); if (CurrentCard.MenuCandidate) { CurrentCard.RenderAsMenu = true; } CurrentCard.HasNonStaticElements = true; if (_inSoftkey) { // Add a softkey if possible. _inSoftkey = false; UpHyperlinkSoftkey softkey = new UpHyperlinkSoftkey(); softkey.TargetUrl = _targetUrl; softkey.EncodeUrl = _encodeUrl; if (_softkeyLabel == null || _softkeyLabel.Length == 0) { _softkeyLabel = _linkText; } softkey.Label = _softkeyLabel; CurrentCard.Softkeys[CurrentCard.SoftkeysUsed++] = softkey; } } else { if (CurrentCard.RenderAsMenu) { Write("

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK