You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			355 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			355 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="WmlControlAdapter.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>                                                                
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| using System;
 | |
| using System.Collections;
 | |
| using System.Diagnostics;
 | |
| using System.Web.UI.MobileControls;
 | |
| using System.Web.UI.MobileControls.Adapters;
 | |
| using System.Web.Security;
 | |
| using System.Text;
 | |
| using System.Security.Permissions;
 | |
| 
 | |
| #if COMPILING_FOR_SHIPPED_SOURCE
 | |
| namespace System.Web.UI.MobileControls.ShippedAdapterSource
 | |
| #else
 | |
| namespace System.Web.UI.MobileControls.Adapters
 | |
| #endif    
 | |
| 
 | |
| {
 | |
| 
 | |
|     /*
 | |
|      * WmlControlAdapter base class contains wml specific methods.
 | |
|      *
 | |
|      * Copyright (c) 2000 Microsoft Corporation
 | |
|      */
 | |
|     /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter"]/*' />
 | |
|     [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 WmlControlAdapter : System.Web.UI.MobileControls.Adapters.ControlAdapter
 | |
|     {
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.PageAdapter"]/*' />
 | |
|         protected WmlPageAdapter PageAdapter
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return ((WmlPageAdapter)Page.Adapter);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.FormAdapter"]/*' />
 | |
|         protected WmlFormAdapter FormAdapter
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return (WmlFormAdapter)Control.Form.Adapter;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.Render"]/*' />
 | |
|         public override void Render(HtmlTextWriter writer)
 | |
|         {
 | |
|             Render((WmlMobileTextWriter)writer);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.Render1"]/*' />
 | |
|         public virtual void Render(WmlMobileTextWriter writer)
 | |
|         {
 | |
|             RenderChildren(writer);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderLink"]/*' />
 | |
|         protected void RenderLink(WmlMobileTextWriter writer, 
 | |
|                                   String targetUrl, 
 | |
|                                   String softkeyLabel, 
 | |
|                                   bool implicitSoftkeyLabel,
 | |
|                                   bool mapToSoftkey, 
 | |
|                                   String text, 
 | |
|                                   bool breakAfter)
 | |
|         {
 | |
|             RenderBeginLink(writer, targetUrl, softkeyLabel, implicitSoftkeyLabel, mapToSoftkey);
 | |
|             writer.RenderText(text);
 | |
|             RenderEndLink(writer, targetUrl, breakAfter);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderBeginLink"]/*' />
 | |
|         protected void RenderBeginLink(WmlMobileTextWriter writer, 
 | |
|                                        String targetUrl, 
 | |
|                                        String softkeyLabel, 
 | |
|                                        bool implicitSoftkeyLabel,
 | |
|                                        bool mapToSoftkey)
 | |
|         {
 | |
|             if (mapToSoftkey && !writer.IsValidSoftkeyLabel(softkeyLabel))
 | |
|             {
 | |
|                 // If softkey label was specified explicitly, then truncate.
 | |
|                 if (!implicitSoftkeyLabel && softkeyLabel.Length > 0)
 | |
|                 {
 | |
|                     softkeyLabel = softkeyLabel.Substring(0, Device.MaximumSoftkeyLabelLength);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     softkeyLabel = GetDefaultLabel(LinkLabel);
 | |
|                     implicitSoftkeyLabel = true;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             String postback = DeterminePostBack(targetUrl);
 | |
|             
 | |
|             if (postback != null)
 | |
|             {
 | |
|                 writer.RenderBeginPostBack(softkeyLabel, implicitSoftkeyLabel, mapToSoftkey);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 String prefix = Constants.FormIDPrefix;
 | |
|                 if (targetUrl.StartsWith(prefix, StringComparison.Ordinal))
 | |
|                 {
 | |
|                     String formID = targetUrl.Substring(prefix.Length);
 | |
|                     Form form = Control.ResolveFormReference(formID);
 | |
|                     targetUrl = prefix + form.ClientID;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     bool absoluteUrl = ( (targetUrl.StartsWith("http:", StringComparison.Ordinal)) || (targetUrl.StartsWith("https:", StringComparison.Ordinal)) );
 | |
|                     // AUI 3652
 | |
|                     targetUrl = Control.ResolveUrl(targetUrl);
 | |
|                     bool queryStringWritten = targetUrl.IndexOf('?') != -1; 
 | |
|                     IDictionary dictionary = PageAdapter.CookielessDataDictionary;
 | |
|                     String formsAuthCookieName = FormsAuthentication.FormsCookieName;
 | |
|                     if((dictionary != null) && (!absoluteUrl) && (Control.MobilePage.Adapter.PersistCookielessData))
 | |
|                     {
 | |
|                         StringBuilder sb = new StringBuilder(targetUrl);
 | |
| 
 | |
|                         foreach(String name in dictionary.Keys)
 | |
|                         {
 | |
|                             if(queryStringWritten)
 | |
|                             {
 | |
|                                 sb.Append("&");
 | |
|                             }
 | |
|                             else
 | |
|                             {
 | |
|                                 sb.Append("?");
 | |
|                                 queryStringWritten = true;
 | |
|                             }
 | |
| 
 | |
|                             if(name.Equals(formsAuthCookieName) && Device.CanRenderOneventAndPrevElementsTogether )
 | |
|                             {
 | |
|                                 sb.Append(name);
 | |
|                                 sb.Append("=$(");
 | |
|                                 sb.Append(writer.MapClientIDToShortName("__facn",false));
 | |
|                                 sb.Append(")");
 | |
|                             }
 | |
|                             else
 | |
|                             {
 | |
|                                 sb.Append(name);
 | |
|                                 sb.Append("=");
 | |
|                                 sb.Append(dictionary[name]);
 | |
|                             }
 | |
|                         }
 | |
|                         targetUrl = sb.ToString();
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 writer.RenderBeginHyperlink(targetUrl, 
 | |
|                                             false, 
 | |
|                                             softkeyLabel, 
 | |
|                                             implicitSoftkeyLabel, 
 | |
|                                             mapToSoftkey);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderEndLink"]/*' />
 | |
|         protected void RenderEndLink(WmlMobileTextWriter writer, String targetUrl, bool breakAfter)
 | |
|         {
 | |
|             String postback = DeterminePostBack(targetUrl);
 | |
|             
 | |
|             if (postback != null)
 | |
|             {
 | |
|                 writer.RenderEndPostBack(Control.UniqueID, postback, WmlPostFieldType.Normal, false, breakAfter);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 writer.RenderEndHyperlink(breakAfter);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.DeterminePostBack"]/*' />
 | |
|         protected String DeterminePostBack(String target)
 | |
|         {
 | |
|             String postback = null;
 | |
|             String prefix = Constants.FormIDPrefix;
 | |
|             if (target.StartsWith(prefix, StringComparison.Ordinal))     //  link to another form
 | |
|             {
 | |
|                 String formID = target.Substring(prefix.Length);
 | |
|                 Form form = Control.ResolveFormReference(formID);
 | |
|                 Form thisForm = Control.Form;
 | |
|                 
 | |
|                 //  must postback to forms not rendered in deck (not visible) or links to same form,
 | |
|                 // as long as it's safe to do so.
 | |
|                 if (form == thisForm ||
 | |
|                     !PageAdapter.IsFormRendered(form) || 
 | |
|                     thisForm.HasDeactivateHandler() ||
 | |
|                     form.HasActivateHandler())
 | |
|                 {
 | |
|                     postback = form.UniqueID;
 | |
|                 }
 | |
|             }
 | |
|             return postback;
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderSubmitEvent"]/*' />
 | |
|         protected void RenderSubmitEvent(
 | |
|             WmlMobileTextWriter writer,
 | |
|             String softkeyLabel,
 | |
|             String text,
 | |
|             bool breakAfter)
 | |
|         {
 | |
|             RenderPostBackEvent(writer, null, softkeyLabel, true,
 | |
|                                 text, breakAfter, WmlPostFieldType.Submit);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderPostBackEvent"]/*' />
 | |
|         protected void RenderPostBackEvent(
 | |
|             WmlMobileTextWriter writer,
 | |
|             String argument,
 | |
|             String softkeyLabel,
 | |
|             bool mapToSoftkey,
 | |
|             String text,
 | |
|             bool breakAfter)
 | |
|         {
 | |
|             RenderPostBackEvent(writer, argument, softkeyLabel, mapToSoftkey,
 | |
|                                 text, breakAfter, WmlPostFieldType.Normal);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderPostBackEvent1"]/*' />
 | |
|         protected void RenderPostBackEvent(
 | |
|             WmlMobileTextWriter writer,
 | |
|             String argument,
 | |
|             String softkeyLabel,
 | |
|             bool mapToSoftkey,
 | |
|             String text,
 | |
|             bool breakAfter,
 | |
|             WmlPostFieldType postBackType)
 | |
|         {
 | |
|             bool implicitSoftkeyLabel = false;
 | |
|             if (mapToSoftkey)
 | |
|             {
 | |
|                 if (softkeyLabel == null || softkeyLabel.Length == 0)
 | |
|                 {
 | |
|                     softkeyLabel = text;
 | |
|                     implicitSoftkeyLabel = true;
 | |
|                 }
 | |
| 
 | |
|                 if (!writer.IsValidSoftkeyLabel(softkeyLabel))
 | |
|                 {
 | |
|                     // If softkey label was specified explicitly, then truncate.
 | |
|                     if (!implicitSoftkeyLabel && softkeyLabel.Length > 0)
 | |
|                     {
 | |
|                         softkeyLabel = softkeyLabel.Substring(0, Device.MaximumSoftkeyLabelLength);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         softkeyLabel = GetDefaultLabel(GoLabel);
 | |
|                         implicitSoftkeyLabel = true;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             writer.RenderBeginPostBack(softkeyLabel, implicitSoftkeyLabel, mapToSoftkey);
 | |
|             writer.RenderText(text);
 | |
|             writer.RenderEndPostBack(Control.UniqueID, argument, postBackType, true, breakAfter);
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.GetPostBackValue"]/*' />
 | |
|         protected virtual String GetPostBackValue()
 | |
|         {
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         internal String GetControlPostBackValue(MobileControl ctl)
 | |
|         {
 | |
|             WmlControlAdapter adapter = ctl.Adapter as WmlControlAdapter;
 | |
|             return adapter != null ? adapter.GetPostBackValue() : null;
 | |
|         }
 | |
| 
 | |
|         /////////////////////////////////////////////////////////////////////////
 | |
|         //  SECONDARY UI SUPPORT
 | |
|         /////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
|         internal const int NotSecondaryUIInit = -1;  // For initialization of private consts in derived classes.
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.NotSecondaryUI"]/*' />
 | |
|         protected static readonly int NotSecondaryUI = NotSecondaryUIInit;
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.SecondaryUIMode"]/*' />
 | |
|         protected int SecondaryUIMode
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (Control == null || Control.Form == null) 
 | |
|                 {
 | |
|                     return NotSecondaryUI;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     return ((WmlFormAdapter)Control.Form.Adapter).GetSecondaryUIMode(Control);
 | |
|                 }
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ((WmlFormAdapter)Control.Form.Adapter).SetSecondaryUIMode(Control, value);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.ExitSecondaryUIMode"]/*' />
 | |
|         protected void ExitSecondaryUIMode()
 | |
|         {
 | |
|             SecondaryUIMode = NotSecondaryUI;
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.LoadAdapterState"]/*' />
 | |
|         public override void LoadAdapterState(Object state)
 | |
|         {
 | |
|             if (state != null)
 | |
|             {
 | |
|                 SecondaryUIMode = (int)state;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.SaveAdapterState"]/*' />
 | |
|         public override Object SaveAdapterState()
 | |
|         {
 | |
|             int mode = SecondaryUIMode;
 | |
|             if (mode != NotSecondaryUI) 
 | |
|             {
 | |
|                 return mode;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 return null;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |