In .:
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ImageButton.cs
1 //
2 // System.Web.UI.WebControls.ImageButton.cs
3 //
4 // Authors:
5 //      Jordi Mas i Hernandez (jordi@ximian.com)
6 //
7 // (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9 //
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 //
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 //
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using System.Collections.Specialized;
32 using System.ComponentModel;
33 using System.Security.Permissions;
34
35 namespace System.Web.UI.WebControls {
36
37         // CAS
38         [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
39         [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
40         // attributes
41         [DefaultEvent("Click")]
42 #if NET_2_0
43         [Designer ("System.Web.UI.Design.WebControls.PreviewControlDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
44         [SupportsEventValidation]
45         public class ImageButton : Image, IPostBackDataHandler, IPostBackEventHandler, IButtonControl {
46 #else
47         public class ImageButton : Image, IPostBackDataHandler, IPostBackEventHandler {
48 #endif
49                 private static readonly object ClickEvent = new object ();
50                 private static readonly object CommandEvent = new object ();
51                 private int pos_x, pos_y;
52
53                 public ImageButton ()
54                 {
55
56                 }
57
58 #if ONLY_1_1
59                 [Bindable(false)]
60 #endif          
61                 [DefaultValue(true)]
62                 [WebSysDescription ("")]
63                 [WebCategory ("Behavior")]
64 #if NET_2_0
65                 [Themeable (false)]
66                 public virtual
67 #else           
68                 public
69 #endif          
70                 bool CausesValidation {
71                         get {
72                                 return ViewState.GetBool ("CausesValidation", true);
73                         }
74
75                         set {
76                                 ViewState ["CausesValidation"] = value;
77                         }
78                 }
79
80                 [Bindable(true)]
81                 [DefaultValue("")]
82                 [WebSysDescription ("")]
83                 [WebCategory ("Behavior")]
84 #if NET_2_0
85                 [Themeable (false)]
86 #endif          
87                 public string CommandArgument {
88                         get {
89                                 return ViewState.GetString ("CommandArgument", "");
90                         }
91                         set {
92                                 ViewState ["CommandArgument"] = value;
93                         }
94                 }
95
96                 [DefaultValue("")]
97                 [WebSysDescription ("")]
98                 [WebCategory ("Behavior")]
99 #if NET_2_0
100                 [Themeable (false)]
101 #endif          
102                 public string CommandName {
103                         get {
104                                 return ViewState.GetString ("CommandName", "");
105                         }
106                         set {
107                                 ViewState ["CommandName"] = value;
108                         }
109                 }
110
111 #if NET_2_0
112                 [EditorBrowsable (EditorBrowsableState.Always)]
113                 [Browsable (true)]
114                 [DefaultValue (true)]
115                 [Bindable (true)]
116                 [MonoTODO]
117                 public virtual new bool Enabled
118                 {
119                         get {
120                                 throw new NotImplementedException ();
121                         }
122                         set {
123                                 throw new NotImplementedException ();
124                         }
125                 }
126
127                 [Browsable (false)]
128                 [EditorBrowsable (EditorBrowsableState.Never)]
129                 [Themeable (false)]
130                 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
131                 [MonoTODO]
132                 public virtual new bool GenerateEmptyAlternateText
133                 {
134                         get {
135                                 throw new NotImplementedException ();
136                         }
137                         set {
138                                 throw new NotImplementedException ();
139                         }
140                 }
141
142                 [DefaultValue ("")]
143                 [Themeable (false)]
144                 [MonoTODO]
145                 public virtual string OnClientClick 
146                 {
147                         get {
148                                 throw new NotImplementedException ();
149                         }
150                         set {
151                                 throw new NotImplementedException ();
152                         }
153                 }
154
155                 [Themeable (false)]
156 #if NET_2_0
157                 [UrlProperty ("*.aspx")]
158 #else
159                 [UrlProperty]
160 #endif
161                 [DefaultValue ("")]
162                 [Editor ("System.Web.UI.Design.UrlEditor, "  + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
163                 [MonoTODO]
164                 public virtual string PostBackUrl
165                 {
166                         get {
167                                 throw new NotImplementedException ();
168                         }
169                         set {
170                                 throw new NotImplementedException ();
171                         }
172                 }
173
174                 [Themeable (false)]
175                 [DefaultValue ("")]
176                 [WebSysDescription ("")]
177                 [WebCategory ("Behavior")]
178                 public virtual string ValidationGroup
179                 {
180                         get {
181                                 return ViewState.GetString ("ValidationGroup", "");
182                         }
183                         set {
184                                 ViewState ["ValidationGroup"] = value;
185                         }
186                 }
187 #endif          
188
189                 [Browsable(false)]
190                 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
191 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
192                 protected virtual new
193 #else           
194                 protected override
195 #endif
196                 HtmlTextWriterTag TagKey {
197                         get { return HtmlTextWriterTag.Input; }
198                 }
199
200 #if NET_2_0
201                 [MonoTODO]
202                 protected virtual string Text 
203                 {
204                         get {
205                                 throw new NotImplementedException ();
206                         }
207                         set {
208                                 throw new NotImplementedException ();
209                         }
210                 }
211 #endif          
212
213                 protected override void AddAttributesToRender (HtmlTextWriter writer)
214                 {
215                         if (Page != null)
216                                 Page.VerifyRenderingInServerForm (this);
217
218                         writer.AddAttribute (HtmlTextWriterAttribute.Type, "image");
219                         writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
220                         if (CausesValidation && Page != null && Page.AreValidatorsUplevel ()) {
221                                 ClientScriptManager csm = new ClientScriptManager (Page);
222                                 writer.AddAttribute (HtmlTextWriterAttribute.Onclick, csm.GetClientValidationEvent ());
223                                 writer.AddAttribute ("language", "javascript");
224                         }
225                         base.AddAttributesToRender (writer);
226                 }
227
228 #if NET_2_0
229                 [MonoTODO]
230                 protected virtual PostBackOptions GetPostBackOptions ()
231                 {
232                         throw new NotImplementedException ();
233                 }
234 #endif          
235
236
237 #if NET_2_0
238                 protected virtual
239 #endif
240                 bool LoadPostData (string postDataKey, NameValueCollection postCollection) 
241                 {
242                         string x, y;
243                         string unique = UniqueID;
244                         x = postCollection [unique + ".x"];
245                         y = postCollection [unique + ".y"];
246                         if (x != null && x != "" && y != null && y != "") {
247                                 pos_x = Int32.Parse(x);
248                                 pos_y = Int32.Parse(y);
249                                 Page.RegisterRequiresRaiseEvent (this);
250                                 return true;
251                         } else {
252                                 x = postCollection [unique];
253                                 if (x != null && x != "") {
254                                         pos_x = Int32.Parse (x);
255                                         pos_y = 0;
256                                         Page.RegisterRequiresRaiseEvent (this);
257                                         return true;
258                                 }
259                         }
260
261                         return false;
262                 }
263 #if NET_2_0
264                 protected virtual
265 #endif
266                 void RaisePostDataChangedEvent ()
267                 {
268                         if (CausesValidation)
269 #if NET_2_0
270                                 Page.Validate (ValidationGroup);
271 #else
272                                 Page.Validate ();
273 #endif
274
275                         OnClick (new ImageClickEventArgs (pos_x, pos_y));
276                         OnCommand (new CommandEventArgs (CommandName, CommandArgument));
277                 }
278                 
279                 [MonoTODO]
280 #if NET_2_0
281                 protected virtual
282 #endif
283                 void RaisePostBackEvent (string eventArgument)
284                 {
285                 }
286
287                 bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
288                 {
289                         return LoadPostData (postDataKey, postCollection);
290                 }
291
292
293                 void IPostBackDataHandler.RaisePostDataChangedEvent ()
294                 {
295                         RaisePostDataChangedEvent ();
296                 }
297
298                 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
299                 {
300                         RaisePostBackEvent (eventArgument);
301                 }
302
303                 protected virtual void OnClick (ImageClickEventArgs e)
304                 {
305                         if (Events != null) {
306                                 ImageClickEventHandler eh = (ImageClickEventHandler) (Events [ClickEvent]);
307                                 if (eh != null)
308                                         eh (this, e);
309                         }
310                 }
311
312                 protected virtual void OnCommand (CommandEventArgs e)
313                 {
314                         if (Events != null) {
315                                 CommandEventHandler eh = (CommandEventHandler) (Events [CommandEvent]);
316                                 if (eh != null)
317                                         eh (this, e);
318                         }
319
320                         RaiseBubbleEvent (this, e);
321                 }
322
323 #if NET_2_0
324                 protected internal
325 #else           
326                 protected
327 #endif          
328                 override void OnPreRender (EventArgs e)
329                 {
330                         if (Page != null)
331                                 Page.RegisterRequiresPostBack (this);
332                 }
333
334                 [WebSysDescription ("")]
335                 [WebCategory ("Action")]
336                 public event ImageClickEventHandler Click
337                 {
338                         add {
339                                 Events.AddHandler (ClickEvent, value);
340                         }
341                         remove {
342                                 Events.RemoveHandler (ClickEvent, value);
343                         }
344                 }
345
346                 [WebSysDescription ("")]
347                 [WebCategory ("Action")]
348                 public event CommandEventHandler Command
349                 {
350                         add {
351                                 Events.AddHandler (CommandEvent, value);
352                         }
353                         remove {
354                                 Events.RemoveHandler (CommandEvent, value);
355                         }
356                 }
357
358 #if NET_2_0
359                 [MonoTODO]
360                 string IButtonControl.Text 
361                 {
362                         get {
363                                 throw new NotImplementedException ();
364                         }
365                         set {
366                                 throw new NotImplementedException ();
367                         }
368                 }
369
370                 [MonoTODO]
371                 event EventHandler IButtonControl.Click
372                 {
373                         add {
374                                 throw new NotImplementedException ();
375                         }
376                         remove {
377                                 throw new NotImplementedException ();
378                         }
379                 }
380                 
381 #endif
382         }
383 }
384