2 // System.Web.UI.WebControls.ImageButton.cs
5 // Jordi Mas i Hernandez (jordi@ximian.com)
7 // (C) 2005 Novell, Inc (http://www.novell.com)
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:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
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.
31 using System.Collections.Specialized;
32 using System.ComponentModel;
33 using System.Security.Permissions;
35 namespace System.Web.UI.WebControls {
38 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
39 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
41 [DefaultEvent("Click")]
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 {
47 public class ImageButton : Image, IPostBackDataHandler, IPostBackEventHandler {
49 private static readonly object ClickEvent = new object ();
50 private static readonly object CommandEvent = new object ();
51 private int pos_x, pos_y;
62 [WebSysDescription ("")]
63 [WebCategory ("Behavior")]
70 bool CausesValidation {
72 return ViewState.GetBool ("CausesValidation", true);
76 ViewState ["CausesValidation"] = value;
82 [WebSysDescription ("")]
83 [WebCategory ("Behavior")]
87 public string CommandArgument {
89 return ViewState.GetString ("CommandArgument", "");
92 ViewState ["CommandArgument"] = value;
97 [WebSysDescription ("")]
98 [WebCategory ("Behavior")]
102 public string CommandName {
104 return ViewState.GetString ("CommandName", "");
107 ViewState ["CommandName"] = value;
112 [EditorBrowsable (EditorBrowsableState.Always)]
114 [DefaultValue (true)]
117 public virtual new bool Enabled
120 throw new NotImplementedException ();
123 throw new NotImplementedException ();
128 [EditorBrowsable (EditorBrowsableState.Never)]
130 [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
132 public virtual new bool GenerateEmptyAlternateText
135 throw new NotImplementedException ();
138 throw new NotImplementedException ();
145 public virtual string OnClientClick
148 throw new NotImplementedException ();
151 throw new NotImplementedException ();
157 [UrlProperty ("*.aspx")]
162 [Editor ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
163 public virtual string PostBackUrl {
165 return ViewState.GetString ("PostBackUrl", String.Empty);
168 ViewState["PostBackUrl"] = value;
174 [WebSysDescription ("")]
175 [WebCategory ("Behavior")]
176 public virtual string ValidationGroup
179 return ViewState.GetString ("ValidationGroup", "");
182 ViewState ["ValidationGroup"] = value;
188 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
189 #if NET_2_0 && HAVE_CONTROL_ADAPTERS
190 protected virtual new
194 HtmlTextWriterTag TagKey {
195 get { return HtmlTextWriterTag.Input; }
200 protected virtual string Text
203 throw new NotImplementedException ();
206 throw new NotImplementedException ();
211 protected override void AddAttributesToRender (HtmlTextWriter writer)
214 Page.VerifyRenderingInServerForm (this);
216 writer.AddAttribute (HtmlTextWriterAttribute.Type, "image");
217 writer.AddAttribute (HtmlTextWriterAttribute.Name, UniqueID);
218 if (CausesValidation && Page != null && Page.AreValidatorsUplevel ()) {
219 ClientScriptManager csm = new ClientScriptManager (Page);
220 writer.AddAttribute (HtmlTextWriterAttribute.Onclick, csm.GetClientValidationEvent ());
221 writer.AddAttribute ("language", "javascript");
223 base.AddAttributesToRender (writer);
227 protected virtual PostBackOptions GetPostBackOptions ()
229 return new PostBackOptions(this, PostBackUrl, null, false, true,
230 false, true, CausesValidation,
239 bool LoadPostData (string postDataKey, NameValueCollection postCollection)
242 string unique = UniqueID;
243 x = postCollection [unique + ".x"];
244 y = postCollection [unique + ".y"];
245 if (x != null && x != "" && y != null && y != "") {
246 pos_x = Int32.Parse(x);
247 pos_y = Int32.Parse(y);
248 Page.RegisterRequiresRaiseEvent (this);
251 x = postCollection [unique];
252 if (x != null && x != "") {
253 pos_x = Int32.Parse (x);
255 Page.RegisterRequiresRaiseEvent (this);
265 void RaisePostDataChangedEvent ()
267 if (CausesValidation)
269 Page.Validate (ValidationGroup);
274 OnClick (new ImageClickEventArgs (pos_x, pos_y));
275 OnCommand (new CommandEventArgs (CommandName, CommandArgument));
282 void RaisePostBackEvent (string eventArgument)
286 bool IPostBackDataHandler.LoadPostData (string postDataKey, NameValueCollection postCollection)
288 return LoadPostData (postDataKey, postCollection);
292 void IPostBackDataHandler.RaisePostDataChangedEvent ()
294 RaisePostDataChangedEvent ();
297 void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
299 RaisePostBackEvent (eventArgument);
302 protected virtual void OnClick (ImageClickEventArgs e)
304 if (Events != null) {
305 ImageClickEventHandler eh = (ImageClickEventHandler) (Events [ClickEvent]);
311 protected virtual void OnCommand (CommandEventArgs e)
313 if (Events != null) {
314 CommandEventHandler eh = (CommandEventHandler) (Events [CommandEvent]);
319 RaiseBubbleEvent (this, e);
327 override void OnPreRender (EventArgs e)
330 Page.RegisterRequiresPostBack (this);
333 [WebSysDescription ("")]
334 [WebCategory ("Action")]
335 public event ImageClickEventHandler Click
338 Events.AddHandler (ClickEvent, value);
341 Events.RemoveHandler (ClickEvent, value);
345 [WebSysDescription ("")]
346 [WebCategory ("Action")]
347 public event CommandEventHandler Command
350 Events.AddHandler (CommandEvent, value);
353 Events.RemoveHandler (CommandEvent, value);
359 string IButtonControl.Text
362 throw new NotImplementedException ();
365 throw new NotImplementedException ();
370 event EventHandler IButtonControl.Click
373 throw new NotImplementedException ();
376 throw new NotImplementedException ();