//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ #if WMLSUPPORT namespace System.Web.UI.WebControls.Adapters { using System; using System.Collections; using System.Collections.Specialized; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Web.UI; using System.Web.UI.Adapters; public class WmlListControlAdapter : ListControlAdapter, IPostBackDataHandler { private const String ClientPrefix = "__slst_"; private string _ivalue = null; // Called during the PreRender page lifecycle phase. protected internal override void OnPreRender(EventArgs e) { int realCounter; int firstSelectedIndex; ListItemCollection items = Control.Items; int count = items.Count; for (firstSelectedIndex = realCounter = 0; realCounter < count; realCounter++) { if (items[firstSelectedIndex].Selected) { break; } if (items[realCounter].Enabled) { firstSelectedIndex++; } } if (firstSelectedIndex < count) { StringBuilder ivalue= new StringBuilder(); ivalue.Append((firstSelectedIndex + 1).ToString(CultureInfo.InvariantCulture)); if (IsMultiSelect) { int i = 0; for (i = realCounter = firstSelectedIndex + 1; realCounter < count; realCounter++) { if (items[i].Selected) { ivalue.Append(";"); ivalue.Append((i + 1).ToString(CultureInfo.InvariantCulture)); } if (items[realCounter].Enabled) { i++; } } } _ivalue = ivalue.ToString(); } else { String defaultValue = null; // For single select list, 1st element is initially selected // if no other selection. 1 is the first index if (!IsMultiSelect) { defaultValue = "1"; } if (defaultValue != null) { _ivalue = defaultValue; } } base.OnPreRender(e); } protected virtual string GetInputElementText(ListItem item) { return item.Selected ? CheckBoxAdapter.AltSelectedText : CheckBoxAdapter.AltUnselectedText; } protected virtual void RenderDisabledItem(HtmlTextWriter writer, ListItem item) { string selectionText = GetInputElementText(item); string text = item.Text; bool renderSpace = text != null && text.Length > 0; bool leftTextAlign = (Control is CheckBoxList && ((CheckBoxList)Control).TextAlign == TextAlign.Left); if (leftTextAlign) { writer.WriteEncodedText(item.Text); if (renderSpace) {writer.Write(" ");} writer.WriteEncodedText(selectionText); } else { writer.WriteEncodedText(selectionText); if (renderSpace) {writer.Write(" ");} writer.WriteEncodedText(item.Text); } writer.WriteBreak(); } protected internal override void Render(HtmlTextWriter markupWriter) { WmlTextWriter writer = (WmlTextWriter) markupWriter; ListItemCollection items = Control.Items; int count = items.Count; if (count == 0) { return; } writer.EnterStyle(Control.ControlStyle); bool selected = false; if (!Control.Enabled) { foreach (ListItem item in items) { // VSWhidbey 115824 if (item.Selected) { if (selected) { Control.VerifyMultiSelect(); } selected = true; } RenderDisabledItem(writer, item); } } else { // Only register post fields if the control is enabled. ((WmlPageAdapter)PageAdapter).RegisterPostField(writer, Control); if (_ivalue != null) { ((WmlPageAdapter)PageAdapter).AddFormVariable(writer, Control.ClientID, _ivalue, false); } // does not render _ivalue if null or form variables written. writer.WriteBeginSelect(null /*name*/, null /*value*/, Control.ClientID /*iname*/, _ivalue /*ivalue*/, Control.ToolTip /*title*/, IsMultiSelect); foreach (ListItem item in items) { // If the item is disabled, don't render it. // WML only allows selectable within