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