2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Web / System.Web.UI.HtmlControls / HtmlInputButton.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.ComponentModel;\r
8 using System.Globalization;\r
9 using System.Web;\r
10 using System.Web.UI;\r
11 \r
12 namespace System.Web.UI.HtmlControls{\r
13         \r
14         [DefaultEvent("ServerClick")]\r
15         public class HtmlInputButton : HtmlInputControl, IPostBackEventHandler{\r
16                 \r
17                 private static readonly object EventServerClick = new object ();\r
18                 \r
19                 public HtmlInputButton(): base ("button")\r
20                 {\r
21                 }\r
22                 \r
23                 public HtmlInputButton(string type): base(type){}\r
24                 \r
25                 protected override void OnPreRender (EventArgs e)\r
26                 {\r
27                         base.OnPreRender(e);\r
28                         if (Page != null && Events [EventServerClick] != null)\r
29                                 Page.RequiresPostBackScript ();\r
30                 }\r
31 \r
32                 protected override void RenderAttributes (HtmlTextWriter writer)\r
33                 {\r
34                         if (Page != null && CausesValidation) {\r
35                                 string type = Type;\r
36                                 if (String.Compare (type, "button", true) == 0 || String.Compare (type, "submit", true) == 0) {\r
37                                         string script = Page.GetPostBackClientEvent (this, String.Empty);\r
38                                         if (script != null && \r
39                                                 ((String.Compare (type, "button", true) == 0  && Events[EventServerClick] != null )|| \r
40                                                  (String.Compare (type, "submit", true) == 0 && Page.Validators.Count > 0))){\r
41                                                 AttributeCollection coll = Attributes;\r
42                                                 if (coll ["language"] != null)\r
43                                                         coll.Remove ("language");\r
44                                                 writer.WriteAttribute ("language", "javascript");\r
45 \r
46                                                 string onclick;\r
47                                                 if ((onclick = coll ["onclick"]) != null) {\r
48                                                         script = onclick + " " + script;\r
49                                                         coll.Remove ("onclick");\r
50                                                 }\r
51                                                 \r
52                                                 writer.WriteAttribute ("onclick", script);\r
53                                         }\r
54                                 }\r
55                         }\r
56                         \r
57                         base.RenderAttributes (writer);\r
58                 }\r
59 \r
60                 protected virtual void OnServerClick(EventArgs e){\r
61                         EventHandler handler = (EventHandler) Events[EventServerClick];\r
62                         if (handler != null){\r
63                                 handler (this, e);\r
64                         }\r
65                 }\r
66                 \r
67                 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)\r
68                 {\r
69                         if(CausesValidation == true){\r
70                                 Page.Validate();\r
71                         }\r
72                         OnServerClick(EventArgs.Empty);\r
73                 }\r
74                 \r
75                 [WebCategory("Action")]\r
76                 [WebSysDescription("Fires when the control is clicked.")]\r
77                 public event EventHandler ServerClick{\r
78                         add{\r
79                                 Events.AddHandler(EventServerClick, value);\r
80                         }\r
81                         remove{\r
82                                 Events.RemoveHandler(EventServerClick, value);\r
83                         }\r
84                 }\r
85                 \r
86                 [DefaultValue(true)]\r
87                 [WebCategory("Behavior")]\r
88                 public bool CausesValidation{\r
89                         get{\r
90                                 object causesVal = ViewState["CausesValidation"];\r
91                                 if (causesVal != null){\r
92                                         return (Boolean) causesVal;\r
93                                 }\r
94                                 return true;\r
95                         }\r
96                         set{\r
97                                 ViewState["CausesValidation"] = (Boolean) value;\r
98                         }\r
99                 }\r
100                 \r
101         } // end of System.Web.UI.HtmlControls.HtmlInputButton\r
102 } // namespace System.Web.UI.HtmlControls\r
103 \r