2002-03-26 Gaurav Vaish <gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ImageButton.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     ImageButton\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:  100%\r
10  *\r
11  * (C) Gaurav Vaish (2001)\r
12  */\r
13 \r
14 using System;\r
15 using System.Collections;\r
16 using System.Collections.Specialized;\r
17 using System.Web;\r
18 using System.Web.UI;\r
19 \r
20 namespace System.Web.UI.WebControls\r
21 {\r
22         [DefaultEvent("Click")]\r
23         public class ImageButton: Image, IPostBackDataHandler, IPostBackEventHandler\r
24         {\r
25                 private static readonly object ClickEvent   = new object();\r
26                 private static readonly object CommandEvent = new object();\r
27 \r
28                 private int x, y;\r
29 \r
30                 public ImageButton(): base()\r
31                 {\r
32                 }\r
33 \r
34                 public bool CausesValidation\r
35                 {\r
36                         get\r
37                         {\r
38                                 object o = ViewState["CausesValidation"];\r
39                                 if(o!=null)\r
40                                         return (bool)o;\r
41                                 return true;\r
42                         }\r
43                         set\r
44                         {\r
45                                 ViewState["CausesValidation"] = value;\r
46                         }\r
47                 }\r
48 \r
49                 public string CommandArgument\r
50                 {\r
51                         get\r
52                         {\r
53                                 object o = ViewState["CommandArgument"];\r
54                                 if(o!=null)\r
55                                         return (string)o;\r
56                                 return String.Empty;\r
57                         }\r
58                         set\r
59                         {\r
60                                 ViewState["CommandArgument"] = value;\r
61                         }\r
62                 }\r
63 \r
64                 public string CommandName\r
65                 {\r
66                         get\r
67                         {\r
68                                 object o = ViewState["CommandName"];\r
69                                 if(o!=null)\r
70                                         return (string)o;\r
71                                 return String.Empty;\r
72                         }\r
73                         set\r
74                         {\r
75                                 ViewState["CommandName"] = value;\r
76                         }\r
77                 }\r
78 \r
79                 protected override HtmlTextWriterTag TagKey\r
80                 {\r
81                         get\r
82                         {\r
83                                 return HtmlTextWriterTag.Input;\r
84                         }\r
85                 }\r
86 \r
87                 public event ImageClickEventHandler Click\r
88                 {\r
89                         add\r
90                         {\r
91                                 Events.AddHandler(ClickEvent, value);\r
92                         }\r
93                         remove\r
94                         {\r
95                                 Events.RemoveHandler(ClickEvent, value);\r
96                         }\r
97                 }\r
98 \r
99                 public event CommandEventHandler Command\r
100                 {\r
101                         add\r
102                         {\r
103                                 Events.AddHandler(CommandEvent, value);\r
104                         }\r
105                         remove\r
106                         {\r
107                                 Events.RemoveHandler(CommandEvent, value);\r
108                         }\r
109                 }\r
110 \r
111                 protected override void AddAttributesToRender(HtmlTextWriter writer)\r
112                 {\r
113                         writer.AddAttribute(HtmlTextWriterAttribute.Type, "image");\r
114                         writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);\r
115                         if(Page != null && CausesValidation)\r
116                         {\r
117                                 if(Page.Validators.Count > 0)\r
118                                 {\r
119                                         writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Utils.GetClientValidatedEvent());\r
120                                         writer.AddAttribute("language", "javascript");\r
121                                 }\r
122                         }\r
123                         AddAttributesToRender(writer);\r
124                 }\r
125 \r
126                 protected virtual void OnClick(ImageClickEventArgs e)\r
127                 {\r
128                         if(Events != null)\r
129                         {\r
130                                 ImageClickEventHandler iceh = (ImageClickEventHandler)(Events[ClickEvent]);\r
131                                 if(iceh != null)\r
132                                         iceh(this, e);\r
133                         }\r
134                 }\r
135 \r
136                 protected virtual void OnCommand(CommandEventArgs e)\r
137                 {\r
138                         if(Events != null)\r
139                         {\r
140                                 CommandEventHandler ceh = (CommandEventHandler)(Events[CommandEvent]);\r
141                                 if(ceh != null)\r
142                                         ceh(this, e);\r
143                                 RaiseBubbleEvent(this, e);\r
144                         }\r
145                 }\r
146 \r
147                 protected override void OnPreRender(EventArgs e)\r
148                 {\r
149                         if(Page != null)\r
150                         {\r
151                                 Page.RegisterRequiresPostBack(this);\r
152                         }\r
153                 }\r
154 \r
155                 bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)\r
156                 {\r
157                         string xCoord = postCollection[UniqueID + ".x"];\r
158                         string yCoord = postCollection[UniqueID + ".y"];\r
159                         if(xCoord != null && yCoord != null && xCoord.Length > 0 && yCoord.Length > 0)\r
160                         {\r
161                                 x = Int32.Parse(xCoord);\r
162                                 y = Int32.Parse(yCoord);\r
163                                 Page.RegisterRequiresRaiseEvent(this);\r
164                         }\r
165                         return false;\r
166                 }\r
167 \r
168                 void IPostBackDataHandler.RaisePostDataChangedEvent()\r
169                 {\r
170                 }\r
171 \r
172                 void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)\r
173                 {\r
174                         if(CausesValidation)\r
175                                 Page.Validate();\r
176                         OnClick(new ImageClickEventArgs(x, y));\r
177                         OnCommand(new CommandEventArgs(CommandName, CommandArgument));\r
178                 }\r
179         }\r
180 }\r