using System.Collections;\r
using System.Web;\r
using System.Web.UI;\r
+using System.ComponentModel;\r
+using System.Reflection;\r
\r
namespace System.Web.UI.WebControls\r
-{\r
- public class ListItemCollection : IList, ICollection, IEnumerable, IStateManager\r
+{
+ [Editor ("System.Web.UI.Design.WebControls.ListItemsCollectionEditor, " + Consts.AssemblySystem_Design, typeof (System.Drawing.Design.UITypeEditor))]\r
+ public sealed class ListItemCollection : IList, ICollection, IEnumerable, IStateManager\r
{\r
private ArrayList items;\r
private bool saveAll;\r
private bool marked;\r
- \r
+\r
public ListItemCollection()\r
{\r
items = new ArrayList();\r
saveAll = false;\r
marked = false;\r
}\r
- \r
+\r
public int Capacity\r
{\r
get\r
items.Capacity = value;\r
}\r
}\r
- \r
+\r
public int Count\r
{\r
get\r
return items.Count;\r
}\r
}\r
- \r
+\r
public bool IsReadOnly\r
{\r
get\r
return items.IsReadOnly;\r
}\r
}\r
- \r
+\r
public bool IsSynchronized\r
{\r
get\r
return items.IsSynchronized;\r
}\r
}\r
- \r
+\r
public ListItem this[int index]\r
{\r
get\r
if(index < 0 || index >= Count)\r
return null;\r
return (ListItem)(items[index]);\r
- }\r
- set\r
- {\r
- if(index >= 0 && index < Count)\r
- items[index] = value;\r
- }\r
+ } \r
}\r
- \r
+\r
public object SyncRoot\r
{\r
get\r
return this;\r
}\r
}\r
- \r
+\r
public void Add(ListItem item)\r
{\r
items.Add(item);\r
if(marked)\r
item.Dirty = true;\r
}\r
- \r
+\r
public void Add(string item)\r
{\r
Add(new ListItem(item));\r
}\r
- \r
+\r
public void AddRange(ListItem[] items)\r
{\r
foreach(ListItem item in items)\r
Add(item);\r
}\r
}\r
- \r
+\r
public void Clear()\r
{\r
items.Clear();\r
if(marked)\r
saveAll = true;\r
}\r
- \r
+\r
public bool Contains(ListItem item)\r
{\r
return items.Contains(item);\r
}\r
- \r
+\r
public void CopyTo(Array array, int index)\r
{\r
items.CopyTo(array, index);\r
}\r
- \r
+\r
public ListItem FindByText(string text)\r
{\r
int i=-1;\r
}\r
return (i==-1 ? null : (ListItem)items[i]);\r
}\r
- \r
+\r
public ListItem FindByValue(string value)\r
{\r
foreach(ListItem current in items)\r
{\r
if(current.Value == value)\r
{\r
- if(current is Disposable)\r
- current.Dispose();\r
return current;\r
}\r
}\r
return null;\r
}\r
- \r
+\r
internal int FindByValueInternal(string value)\r
{\r
int i = -1;\r
i++;\r
if(current.Value == value)\r
{\r
- if(current is Disposable)\r
- current.Dispose();\r
return i;\r
}\r
}\r
return -1;\r
}\r
- \r
+\r
public IEnumerator GetEnumerator()\r
{\r
return items.GetEnumerator();\r
}\r
- \r
+\r
public int IndexOf(ListItem item)\r
{\r
return items.IndexOf(item);\r
}\r
- \r
+\r
public void Insert(int index, ListItem item)\r
{\r
items.Insert(index, item);\r
if(marked)\r
saveAll = true;\r
}\r
- \r
+\r
public void Insert(int index, string item)\r
{\r
Insert(index, new ListItem(item));\r
}\r
- \r
+\r
public void RemoveAt(int index)\r
{\r
if(index < 0 || index >= items.Count)\r
if(marked)\r
saveAll = true;\r
}\r
- \r
+\r
public void Remove(ListItem item)\r
{\r
RemoveAt(IndexOf(item));\r
}\r
- \r
+\r
public void Remove(string item)\r
{\r
RemoveAt(IndexOf(ListItem.FromString(item)));\r
}\r
- \r
- internal object SaveViewState()\r
- {\r
- if(saveAll)\r
- {\r
- string[] keys = new string[Count];\r
- string[] vals = new string[Count];\r
- for(int i=0; i < Count; i++)\r
- {\r
- keys[i] = this[i].Text;\r
- vals[i] = this[i].Value;\r
+\r
+ internal object SaveViewState ()\r
+ {\r
+ int count = Count;\r
+ if (saveAll) {\r
+ string [] keys = new string [count];\r
+ string [] vals = new string [count];\r
+ for(int i = 0; i < count; i++) {\r
+ keys[i] = this [i].Text;\r
+ vals[i] = this [i].Value;\r
}\r
- return new Triplet(Count, keys, vals);\r
+\r
+ return new Triplet (count, keys, vals);\r
}\r
- ArrayList indices = new ArrayList();\r
- ArrayList states = new ArrayList();\r
+\r
+ ArrayList indices = new ArrayList ();\r
+ ArrayList states = new ArrayList ();\r
object o;\r
- for(int i=0; i < Count; i++)\r
- {\r
- o = this[i].SaveViewState();\r
- if(o!=null)\r
- {\r
- indices.Add(i);\r
- states.Add(o);\r
- }\r
+ for(int i = 0; i < count; i++) {\r
+ o = this [i].SaveViewState ();\r
+ if (o == null)\r
+ continue;\r
+\r
+ indices.Add (i);\r
+ states.Add (o);\r
}\r
- if(indices.Count > 0)\r
- return new Pair(indices, states);\r
+\r
+ if (indices.Count > 0)\r
+ return new Pair (indices, states);\r
+\r
return null;\r
}\r
- \r
- internal void LoadViewState(object savedState)\r
+\r
+ internal void LoadViewState (object savedState)\r
{\r
- if(savedState!=null)\r
- {\r
- if(savedState is Pair)\r
- {\r
- ArrayList indices = (ArrayList)(((Pair)savedState).First);\r
- ArrayList states = (ArrayList)(((Pair)savedState).Second);\r
- for(int i=0; i < indices.Count; i++)\r
- {\r
- if( (int)indices[i] < Count )\r
- this[i].LoadViewState(states[i]);\r
- else\r
- {\r
- ListItem temp = new ListItem();\r
- temp.LoadViewState(states[i]);\r
- Add(temp);\r
- }\r
+ if (savedState == null)\r
+ return;\r
+\r
+ int i, end;\r
+ if (savedState is Pair) {\r
+ Pair pair = (Pair) savedState;\r
+ ArrayList indices = (ArrayList) pair.First;\r
+ ArrayList states = (ArrayList) pair.Second;\r
+\r
+ end = indices.Count;\r
+ for (i = 0; i < end; i++) {\r
+ if ((int) indices [i] < Count ) {\r
+ this [i].LoadViewState (states [i]);\r
+ } else {\r
+ ListItem temp = new ListItem ();\r
+ temp.LoadViewState (states [i]);\r
+ Add (temp);\r
}\r
}\r
- if(savedState is Triplet)\r
- {\r
- Triplet t = (Triplet)savedState;\r
- items = new ArrayList((int)t.First);\r
- saveAll = true;\r
- string[] text = (string[])t.Second;\r
- string[] vals = (string[])t.Third;\r
- for(int i=0; i < text.Length; i++)\r
- items.Add(new ListItem(text[i], vals[i]));\r
- }\r
+ } else if (savedState is Triplet) {\r
+ Triplet t = (Triplet) savedState;\r
+ items = new ArrayList ((int) t.First);\r
+ saveAll = true;\r
+ object [] text = (object []) t.Second;\r
+ object [] vals = (object []) t.Third;\r
+ end = text.Length;\r
+ for(i = 0; i < end; i++)\r
+ items.Add (new ListItem (text[i].ToString (), vals[i].ToString ()));\r
}\r
}\r
- \r
+\r
internal void TrackViewState()\r
{\r
marked = true;\r
- foreach(ListItem current in this)\r
+ foreach(ListItem current in items)\r
current.TrackViewState();\r
}\r
- \r
+\r
bool IList.IsFixedSize\r
{\r
get\r
{\r
return this[index];\r
}\r
+ \r
set\r
{\r
- if(value is ListItem)\r
- {\r
- this[index] = (ListItem)value;\r
- }\r
+ if(index >= 0 && index < Count)\r
+ if(value is ListItem)\r
+ items[index] = (ListItem) value;\r
}\r
}\r
\r
((ListItem)item).Dirty = true;\r
return index;\r
}\r
- \r
+\r
bool IList.Contains(object item)\r
{\r
if(item is ListItem)\r
return Contains((ListItem)item);\r
return false;\r
}\r
- \r
+\r
int IList.IndexOf(object item)\r
{\r
if(item is ListItem)\r
return IndexOf((ListItem)item);\r
return -1;\r
}\r
- \r
+\r
void IList.Insert(int index, object item)\r
{\r
if(item is ListItem)\r
Insert(index, (ListItem)item);\r
}\r
- \r
+\r
void IList.Remove(object item)\r
{\r
if(item is string)\r
if(item is ListItem)\r
Remove((ListItem)item);\r
}\r
- \r
+\r
bool IStateManager.IsTrackingViewState\r
{\r
get\r
return marked;\r
}\r
}\r
- \r
+\r
void IStateManager.LoadViewState(object state)\r
{\r
LoadViewState(state);\r
}\r
- \r
+\r
object IStateManager.SaveViewState()\r
{\r
return SaveViewState();\r
}\r
- \r
+\r
void IStateManager.TrackViewState()\r
{\r
TrackViewState();\r