//------------------------------------------------------------------------------
//
// 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