2002-09-23 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlTextArea.cs
1 /*      System.Web.UI.HtmlControls\r
2 *       Authors\r
3 *               Leen Toelen (toelen@hotmail.com)\r
4 */\r
5 \r
6 using System;\r
7 using System.Web;\r
8 using System.Web.UI;\r
9 using System.ComponentModel;\r
10 using System.Globalization;\r
11 using System.Collections.Specialized;\r
12 \r
13 namespace System.Web.UI.HtmlControls{\r
14         \r
15         [DefaultEvent("ServerChange")]\r
16         [ValidationProperty("Value")]\r
17         public class HtmlTextArea : HtmlContainerControl, IPostBackDataHandler{\r
18                 \r
19                 private static readonly object EventServerChange = new object ();\r
20                 \r
21                 public HtmlTextArea(): base("textarea"){}\r
22                 \r
23                 [DefaultValue("")]\r
24                 [WebCategory("Appearance")]\r
25                 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
26                 public int Cols{\r
27                         get{\r
28                                 string attr = Attributes["cols"];\r
29                                 if (attr != null){\r
30                                         return Int32.Parse(attr, CultureInfo.InvariantCulture);\r
31                                 }\r
32                                 return -1;\r
33                         }\r
34                         set{\r
35                                 Attributes["cols"] = AttributeToString(value);\r
36                         }\r
37                 }\r
38                 \r
39                 [DefaultValue("")]\r
40                 [WebCategory("Appearance")]\r
41                 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
42                 public int Rows{\r
43                         get{\r
44                                 string attr = Attributes["rows"];\r
45                                 if (attr != null){\r
46                                         return Int32.Parse(attr, CultureInfo.InvariantCulture);;\r
47                                 }\r
48                                 return -1;\r
49                         }\r
50                         set{\r
51                                 Attributes["rows"] = AttributeToString(value);\r
52                         }\r
53                 }\r
54                 \r
55                 [DefaultValue("")]\r
56                 [WebCategory("Appearance")]\r
57                 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
58                 public string Value{\r
59                         get{\r
60                                 return InnerHtml;\r
61                         }\r
62                         set{\r
63                                 InnerHtml = value;\r
64                         }\r
65                 }\r
66                         \r
67                 [DefaultValue("")]\r
68                 [WebCategory("Behavior")]\r
69                 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\r
70                 public virtual string Name{\r
71                         get{\r
72                                 if (UniqueID != null){\r
73                                         return UniqueID;\r
74                                 }\r
75                                 return String.Empty;\r
76                         }\r
77                         set{}\r
78                 }\r
79                 \r
80                 [WebCategory("Action")]\r
81                 [WebSysDescription("Fires when the text within the control changes.")]\r
82                 public event EventHandler ServerChange{\r
83                         add{\r
84                                 Events.AddHandler(EventServerChange, value);\r
85                         }\r
86                         remove{\r
87                                 Events.RemoveHandler(EventServerChange, value);\r
88                         }\r
89                 }\r
90                 \r
91                 protected virtual void OnServerChange(EventArgs e){\r
92                         EventHandler handler;\r
93                         handler = (EventHandler) Events[EventServerChange];\r
94                         if(handler != null){\r
95                                 handler.Invoke(this, e);\r
96                         }\r
97                 }\r
98                 \r
99                 bool IPostBackDataHandler.LoadPostData (string postDataKey,\r
100                                                         NameValueCollection postCollection)\r
101                 {\r
102                         string currentValue = Value;\r
103                         string postedValue = postCollection[postDataKey];\r
104                         if (!currentValue.Equals(postedValue) && currentValue != null){\r
105                                 Value = HttpUtility.HtmlEncode(postedValue);\r
106                                 return true;\r
107                         }\r
108                         return false;\r
109                 }\r
110                 \r
111                 protected override void RenderAttributes(HtmlTextWriter writer){\r
112                         writer.WriteAttribute("name", Name);\r
113                         Attributes.Remove("name");\r
114                         base.RenderAttributes(writer);\r
115                 }\r
116                 \r
117                 void IPostBackDataHandler.RaisePostDataChangedEvent ()\r
118                 {\r
119                         OnServerChange (EventArgs.Empty);\r
120                 }\r
121                 \r
122                 protected override void OnPreRender(EventArgs e){\r
123                         if(Events[EventServerChange]==null || Disabled){\r
124                                 ViewState.SetItemDirty("value",false);\r
125                         }\r
126                 }\r
127                 \r
128                 protected override void AddParsedSubObject(object obj){\r
129                         if (obj is LiteralControl || obj is DataBoundLiteralControl)\r
130                                 AddParsedSubObject(obj);\r
131                         else\r
132                                 throw new NotSupportedException("HtmlTextArea cannot have children of Type " + obj.GetType().Name);\r
133                 }\r
134                 \r
135         } // class HtmlTextArea\r
136 } // namespace System.Web.UI.HtmlControls\r
137 \r