2002-03-05 Gaurav Vaish <gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / RadioButtonList.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     RadioButtonList\r
4  *\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
9  * Status:  95%\r
10  *\r
11  * (C) Gaurav Vaish (2002)\r
12  */\r
13 \r
14 using System;\r
15 using System.Collections.Specialized;\r
16 using System.Web;\r
17 using System.Web.UI;\r
18 \r
19 namespace System.Web.UI.WebControls\r
20 {\r
21         public class RadioButtonList : ListControl, IRepeatInfoUser, INamingContainer, IPostBackDataHandler\r
22         {\r
23                 private bool selectionIndexChanged;\r
24                 private int  tabIndex;\r
25 \r
26                 public RadioButtonList(): base()\r
27                 {\r
28                         selectionIndexChanged = false;\r
29                 }\r
30 \r
31                 public virtual int CellPadding\r
32                 {\r
33                         get\r
34                         {\r
35                                 if(ControlStyleCreated)\r
36                                         return (int)(((TableStyle)ControlStyle).CellPadding);\r
37                         }\r
38                         set\r
39                         {\r
40                                 ((TableStyle)ControlStyle).CellPadding = value;\r
41                         }\r
42                 }\r
43 \r
44                 public virtual int CellSpacing\r
45                 {\r
46                         get\r
47                         {\r
48                                 if(ControlStyleCreated)\r
49                                         return (int)(((TableStyle)ControlStyle).CellSpacing);\r
50                         }\r
51                         set\r
52                         {\r
53                                 ((TableStyle)ControlStyle).CellSpacing = value;\r
54                         }\r
55                 }\r
56 \r
57                 public virtual int RepeatColumns\r
58                 {\r
59                         get\r
60                         {\r
61                                 object o = ViewState["RepeatColumns"];\r
62                                 if(o != null)\r
63                                         return (int)o;\r
64                                 return 0;\r
65                         }\r
66                         set\r
67                         {\r
68                                 if(value < 0)\r
69                                         throw new ArgumentOutOfRangeException("value");\r
70                                 ViewState["RepeatColumns"] = value;\r
71                         }\r
72                 }\r
73 \r
74                 public virtual RepeatDirection RepeatDirection\r
75                 {\r
76                         get\r
77                         {\r
78                                 object o = ViewState["RepeatDirection"];\r
79                                 if(o != null)\r
80                                         return (RepeatDirection)o;\r
81                                 return RepeatDirection.Vertical;\r
82                         }\r
83                         set\r
84                         {\r
85                                 if(!Enum.IsDefined(typeof(RepeatDirection), value))\r
86                                         throw new ArgumentException();\r
87                                 ViewState["RepeatDirection"] = value;\r
88                         }\r
89                 }\r
90 \r
91                 public virtual RepeatLayout RepeatLayout\r
92                 {\r
93                         get\r
94                         {\r
95                                 object o = ViewState["RepeatLayout"];\r
96                                 if(o != null)\r
97                                         return (RepeatLayout)o;\r
98                                 return RepeatLayout.Table;\r
99                         }\r
100                         set\r
101                         {\r
102                                 if(!Enum.IsDefined(typeof(RepeatLayout), value))\r
103                                         throw new ArgumentException();\r
104                                 ViewState["RepeatLayout"] = value;\r
105                         }\r
106                 }\r
107 \r
108                 public virtual TextAlign TextAlign\r
109                 {\r
110                         get\r
111                         {\r
112                                 object o = ViewState["TextAlign"];\r
113                                 if(o != null)\r
114                                         return (TextAlign)o;\r
115                                 return TextAlign.Right;\r
116                         }\r
117                         set\r
118                         {\r
119                                 if(!Enum.IsDefined(typeof(TextAlign), value))\r
120                                         throw new ArgumentException();\r
121                                 ViewState["TextAlign"] = value;\r
122                         }\r
123                 }\r
124 \r
125                 protected override Style CreateControlStyle()\r
126                 {\r
127                         return new TableStyle(ViewState);\r
128                 }\r
129 \r
130                 protected override void Render(HtmlTextWriter writer)\r
131                 {\r
132                         RepeatInfo info = new RepeatInfo();\r
133                         Style cStyle = (ControlStyleCreated ? ControlStyle : null);\r
134                         bool dirty = false;\r
135                         tabIndex = TabIndex;\r
136                         if(tabIndex != 0)\r
137                         {\r
138                                 dirty = !ViewState.IsItemDirty("TabIndex");\r
139                                 TabIndex = 0;\r
140                         }\r
141                         info.RepeatColumns = RepeatColumns;\r
142                         info.RepeatDirection = RepeatDirection;\r
143                         info.RenderRepeater(writer, this, cStyle, this);\r
144                         if(tabIndex != 0)\r
145                         {\r
146                                 TabIndex = tabIndex;\r
147                         }\r
148                         if(dirty)\r
149                         {\r
150                                 ViewState.SetItemDirty("TabIndex", false);\r
151                         }\r
152                 }\r
153 \r
154                 bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
155                 {\r
156                         string value = postCollection[postDataKey];\r
157                         for(int i=0; i < Items.Count; i++)\r
158                         {\r
159                                 if(Items[i].Value == value)\r
160                                 {\r
161                                         if(i != SelectedIndex)\r
162                                         {\r
163                                                 SelectedIndex = i;\r
164                                         }\r
165                                         return true;\r
166                                 }\r
167                         }\r
168                         return false;\r
169                 }\r
170 \r
171                 void IPostBackDataHandler.RaisePostDataChangedEvent()\r
172                 {\r
173                         if(selectionIndexChanged)\r
174                                 OnSelectedIndexChanged(EventArgs.Empty);\r
175                 }\r
176 \r
177                 Style IRepeatInfoUser.GetItemStyle(System.Web.UI.WebControls.ListItemType itemType, int repeatIndex)\r
178                 {\r
179                         return null;\r
180                 }\r
181 \r
182                 [MonoTODO("RadioButtonList_RenderItem")]\r
183                 void IRepeatInfoUser.RenderItem(System.Web.UI.WebControls.ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)\r
184                 {\r
185                         throw new NotImplementedException();\r
186                 }\r
187 \r
188                 bool IRepeatInfoUser.HasFooter\r
189                 {\r
190                         get\r
191                         {\r
192                                 return false;\r
193                         }\r
194                 }\r
195 \r
196                 bool IRepeatInfoUser.HasHeader\r
197                 {\r
198                         get\r
199                         {\r
200                                 return false;\r
201                         }\r
202                 }\r
203 \r
204                 bool IRepeatInfoUser.HasSeparators\r
205                 {\r
206                         get\r
207                         {\r
208                                 return false;\r
209                         }\r
210                 }\r
211 \r
212                 int IRepeatInfoUser.RepeatedItemCount\r
213                 {\r
214                         get\r
215                         {\r
216                                 return Items.Count;\r
217                         }\r
218                 }\r
219         }\r
220 }\r