Merge pull request #2916 from ludovic-henry/fix-40306
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ImageMap.cs
index edbc4ac08e372ab54f94e80624bd96a9cbc75c5d..9c5cbd5996d2a7572c745ccf28e7ee119c23d06e 100644 (file)
@@ -4,7 +4,7 @@
 // Authors:
 //     Lluis Sanchez Gual (lluis@novell.com)
 //
-// (C) 2005 Novell, Inc (http://www.novell.com)
+// (C) 2005-2010 Novell, Inc (http://www.novell.com)
 //
 
 //
@@ -28,8 +28,6 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
-
 using System.ComponentModel;
 using System.Security.Permissions;
 
@@ -40,15 +38,15 @@ namespace System.Web.UI.WebControls
        [DefaultEvent ("Click")]
        [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [SupportsEventValidation]
        public class ImageMap: Image, IPostBackEventHandler
        {
                HotSpotCollection spots;
                
-               private static readonly object ClickEvent = new object();
+               static readonly object ClickEvent = new object();
                
                [Category ("Action")]
-               public event ImageMapEventHandler Click
-               {
+               public event ImageMapEventHandler Click {
                        add { Events.AddHandler (ClickEvent, value); }
                        remove { Events.RemoveHandler (ClickEvent, value); }
                }
@@ -57,35 +55,40 @@ namespace System.Web.UI.WebControls
                {
                        if (Events != null) {
                                ImageMapEventHandler eh = (ImageMapEventHandler) Events [ClickEvent];
-                               if (eh!= null) eh (this, e);
+                               if (eh!= null)
+                                       eh (this, e);
                        }
                }
 
-           [DefaultValueAttribute (HotSpotMode.NotSet)]
+               // Why override?
+               [Browsable (true)]
+               [EditorBrowsable (EditorBrowsableState.Always)]
+               public override bool Enabled {
+                       get { return base.Enabled; }
+                       set { base.Enabled = value; }
+               }
+               
+               [DefaultValueAttribute (HotSpotMode.NotSet)]
                public virtual HotSpotMode HotSpotMode {
                        get {
                                object o = ViewState ["HotSpotMode"];
                                return o != null ? (HotSpotMode) o : HotSpotMode.NotSet;
                        }
-                       set {
-                               ViewState ["HotSpotMode"] = value;
-                       }
+                       set { ViewState ["HotSpotMode"] = value; }
                }
                
-           [DefaultValueAttribute ("")]
+               [DefaultValueAttribute ("")]
                public virtual string Target {
                        get {
                                object o = ViewState ["Target"];
-                               return o != null ? (string) o : "";
-                       }
-                       set {
-                               ViewState ["Target"] = value;
+                               return o != null ? (string) o : String.Empty;
                        }
+                       set { ViewState ["Target"] = value; }
                }
 
-           [NotifyParentPropertyAttribute (true)]
-           [PersistenceModeAttribute (PersistenceMode.InnerDefaultProperty)]
-           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
+               [NotifyParentPropertyAttribute (true)]
+               [PersistenceModeAttribute (PersistenceMode.InnerDefaultProperty)]
+               [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Content)]
                public HotSpotCollection HotSpots {
                        get {
                                if (spots == null) {
@@ -100,7 +103,8 @@ namespace System.Web.UI.WebControls
                protected override void TrackViewState ()
                {
                        base.TrackViewState ();
-                       if (spots != null) ((IStateManager)spots).TrackViewState ();
+                       if (spots != null)
+                               ((IStateManager)spots).TrackViewState ();
                }
                
                protected override object SaveViewState ()
@@ -125,13 +129,19 @@ namespace System.Web.UI.WebControls
                        base.LoadViewState (pair.First);
                        ((IStateManager)HotSpots).LoadViewState (pair.Second);
                }
-               
-               public void RaisePostBackEvent (string eventArgument)
+
+               protected virtual void RaisePostBackEvent (string eventArgument)
                {
+                       ValidateEvent (UniqueID, eventArgument);
                        HotSpot spot = HotSpots [int.Parse (eventArgument)];
                        OnClick (new ImageMapEventArgs (spot.PostBackValue));
                }
 
+               void IPostBackEventHandler.RaisePostBackEvent (string eventArgument)
+               {
+                       RaisePostBackEvent (eventArgument);
+               }
+               
                protected override void AddAttributesToRender (HtmlTextWriter writer)
                {
                        base.AddAttributesToRender (writer);
@@ -144,6 +154,8 @@ namespace System.Web.UI.WebControls
                        base.Render (writer);
 
                        if (spots != null && spots.Count > 0) {
+                               bool enabled = Enabled;
+                               writer.AddAttribute (HtmlTextWriterAttribute.Id, "ImageMap" + ClientID);
                                writer.AddAttribute (HtmlTextWriterAttribute.Name, "ImageMap" + ClientID);
                                writer.RenderBeginTag (HtmlTextWriterTag.Map);
                                for (int n=0; n<spots.Count; n++) {
@@ -160,16 +172,19 @@ namespace System.Web.UI.WebControls
                                        HotSpotMode mode = spot.HotSpotMode != HotSpotMode.NotSet ? spot.HotSpotMode : HotSpotMode;
                                        switch (mode) {
                                                case HotSpotMode.Inactive:
-                                                       writer.AddAttribute ("nohref", "true");
+                                                       writer.AddAttribute ("nohref", "true", false);
                                                        break;
                                                case HotSpotMode.Navigate:
                                                        string target = spot.Target.Length > 0 ? spot.Target : Target;
                                                        if (!String.IsNullOrEmpty (target))
                                                                writer.AddAttribute (HtmlTextWriterAttribute.Target, target);
-                                                       writer.AddAttribute (HtmlTextWriterAttribute.Href, spot.NavigateUrl);
+                                                       if (enabled) {
+                                                               string navUrl = ResolveClientUrl (spot.NavigateUrl);
+                                                               writer.AddAttribute (HtmlTextWriterAttribute.Href, navUrl);
+                                                       }
                                                        break;
                                                case HotSpotMode.PostBack:
-                                                       writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.ClientScript.GetPostBackClientHyperlink (this, n.ToString()));
+                                                       writer.AddAttribute (HtmlTextWriterAttribute.Href, Page.ClientScript.GetPostBackClientHyperlink (this, n.ToString(), true));
                                                        break;
                                        }
                                                
@@ -182,4 +197,3 @@ namespace System.Web.UI.WebControls
        }
 }
 
-#endif