2 * Namespace: System.Web.UI.WebControls
\r
5 * Author: Gaurav Vaish
\r
6 * Maintainer: gvaish@iitk.ac.in
\r
7 * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>
\r
8 * Implementation: yes
\r
11 * (C) Gaurav Vaish (2001)
\r
15 using System.Collections;
\r
17 using System.Web.UI;
\r
19 namespace System.Web.UI.WebControls
\r
21 public sealed class ListItem : IStateManager, IParserAccessor, IAttributeAccessor
\r
23 private static int MARKED = (0x01 << 0);
\r
24 private static int SELECTED = (0x01 << 1);
\r
25 private static int DIRTY_T = (0x01 << 2);
\r
26 private static int DIRTY_V = (0x01 << 3);
\r
28 private static int selBits;
\r
30 private AttributeCollection attributes;
\r
31 private string text;
\r
34 public ListItem(string text, string value)
\r
42 public ListItem(string text): this(text, null)
\r
46 public ListItem(): this(null, null)
\r
50 public static ListItem FromString(string text)
\r
52 return new ListItem(text);
\r
55 public AttributeCollection Attributes
\r
59 if(attributes == null)
\r
60 attributes = new AttributeCollection(new StateBag(true));
\r
65 public bool Selected
\r
69 return IsSet(SELECTED);
\r
81 return (IsSet(DIRTY_T) && IsSet(DIRTY_V));
\r
90 private bool IsSet(int bit)
\r
92 return ( (selBits & bit) != 0x00 );
\r
95 private void Set(int bit)
\r
112 return String.Empty;
\r
117 if(IsTrackingViewState)
\r
124 public string Value
\r
136 return String.Empty;
\r
141 if(IsTrackingViewState)
\r
148 string IAttributeAccessor.GetAttribute(string key)
\r
150 return attributes[key];
\r
153 void IAttributeAccessor.SetAttribute(string key, string value)
\r
155 attributes[key] = value;
\r
159 /// The data is parsed - object must be of type LiteralControl or DataBoundLiteralControl.
\r
160 /// In latter case, throw an exception telling that the data cannot be bind-ed.
\r
162 void IParserAccessor.AddParsedSubObject(object obj)
\r
164 if(obj is LiteralControl)
\r
166 Text = ((LiteralControl)obj).Text;
\r
169 if(obj is DataBoundLiteralControl)
\r
171 throw new HttpException(HttpRuntime.FormatResourceString("Control_Cannot_DataBind","ListItem"));
\r
173 throw new HttpException(HttpRuntime.FormatResourceString("Cannot_Have_Children_Of_Type", "ListItem", obj.GetType().ToString()));
\r
176 internal bool IsTrackingViewState
\r
180 return IsSet(MARKED);
\r
184 internal void TrackViewState()
\r
189 internal void LoadViewState(object state)
\r
193 Pair tv = (Pair)state;
\r
196 Text = (string)tv.First;
\r
198 if(tv.Second!=null)
\r
200 Value = (string)tv.Second;
\r
203 if(state is string)
\r
205 Text = (string)state;
\r
209 internal object SaveViewState()
\r
211 if(IsSet(DIRTY_T) && IsSet(DIRTY_V))
\r
213 return new Pair(Text, Value);
\r
221 return new Pair(null, Value);
\r
226 bool IStateManager.IsTrackingViewState
\r
230 return IsTrackingViewState;
\r
234 void IStateManager.TrackViewState()
\r
239 object IStateManager.SaveViewState()
\r
241 return SaveViewState();
\r
244 void IStateManager.LoadViewState(object state)
\r
246 LoadViewState(state);
\r