X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.UI.WebControls%2FDataControlButton.cs;h=2d116719202435ecec46dc803be46206edd0af0c;hb=468225a247b8897b2a4fa1e6bd7ffa32aa8c243b;hp=bfa3048256a07caa476ae6ac77c10aa13cc42f95;hpb=2007998771b1c4d9e762943676d7959daaf74385;p=mono.git diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlButton.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataControlButton.cs index bfa3048256a..2d116719202 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlButton.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/DataControlButton.cs @@ -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) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -25,155 +25,195 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // - -#if NET_2_0 - using System; using System.Web; using System.Web.UI; using System.ComponentModel; using System.ComponentModel.Design; +using System.Drawing; namespace System.Web.UI.WebControls { - internal class DataControlButton: Button + internal interface IDataControlButton : IButtonControl + { + Control Container { get; set;} + string ImageUrl { get;set;} + bool AllowCallback { get; set;} + ButtonType ButtonType { get;} + } + + [SupportsEventValidation] + internal class DataControlButton : Button, IDataControlButton { - Control container; - - public DataControlButton (Control container) + public static IDataControlButton CreateButton (ButtonType type, Control container, string text, string image, string command, string commandArg, bool allowCallback) { - this.container = container; + IDataControlButton btn; + + switch (type) { + case ButtonType.Link: + btn = new DataControlLinkButton (); + break; + case ButtonType.Image: + btn = new DataControlImageButton (); + btn.ImageUrl = image; + break; + default: + btn = new DataControlButton (); + break; + } + + btn.Container = container; + btn.CommandName = command; + btn.CommandArgument = commandArg; + btn.Text = text; + btn.CausesValidation = false; + btn.AllowCallback = allowCallback; + + return btn; } - - public DataControlButton (Control container, string text, string image, string command, string commandArg, bool allowCallback) - { - this.container = container; - Text = text; - ImageUrl = image; - CommandName = command; - CommandArgument = commandArg; - AllowCallback = allowCallback; - } - + + Control _container; + + public Control Container { + get { return _container; } + set { _container = value; } + } + public string ImageUrl { - get { - object o = ViewState["iu"]; - if (o != null) return (string) o; - return String.Empty; - } - set { - ViewState["iu"] = value; - } + get { return String.Empty; } + set { } } - + public bool AllowCallback { - get { - object o = ViewState["ac"]; - if (o != null) return (bool) o; - return true; - } - set { - ViewState["ac"] = value; - } + get { return ViewState.GetBool ("AllowCallback", true); } + set { ViewState ["AllowCallback"] = value; } } - - public virtual ButtonType ButtonType { - get { - object ob = ViewState ["ButtonType"]; - if (ob != null) return (ButtonType) ob; - return ButtonType.Link; - } - set { - ViewState ["ButtonType"] = value; + + public ButtonType ButtonType { + get { return ButtonType.Button; } + } + + public override bool UseSubmitBehavior { + get { return false; } + set { throw new NotSupportedException (); } + } + + internal override string GetClientScriptEventReference () + { + if (AllowCallback) { + ICallbackContainer ccner = Container as ICallbackContainer; + if (ccner != null) + return ccner.GetCallbackScript (this, CommandName + "$" + CommandArgument); } + return base.GetClientScriptEventReference (); + } + + protected override PostBackOptions GetPostBackOptions () + { + IPostBackContainer pcner = Container as IPostBackContainer; + if (pcner != null) + return pcner.GetPostBackOptions (this); + return base.GetPostBackOptions (); + } + } + + internal class DataControlLinkButton : LinkButton, IDataControlButton + { + Control _container; + + public Control Container { + get { return _container; } + set { _container = value; } + } + + public string ImageUrl { + get { return String.Empty; } + set { } + } + + public bool AllowCallback { + get { return ViewState.GetBool ("AllowCallback", true); } + set { ViewState ["AllowCallback"] = value; } + } + + public ButtonType ButtonType { + get { return ButtonType.Link; } } protected internal override void Render (HtmlTextWriter writer) { - if (CommandName.Length > 0 || ButtonType == ButtonType.Button) - { - string postScript = null; - string callScript = null; - - IPostBackContainer pcner = container as IPostBackContainer; - if (pcner != null) { - PostBackOptions ops = pcner.GetPostBackOptions (this); - postScript = container.Page.ClientScript.GetPostBackEventReference (ops); - } else - postScript = Page.ClientScript.GetPostBackEventReference (this, ""); - - if (CausesValidation && Page.Validators.Count > 0) { - // TOSHOK: review if this is the correct usage of the "fresh" client side stuff - ClientScriptManager csm = new ClientScriptManager (Page); - postScript = csm.GetClientValidationEvent () + postScript; - } - - if (AllowCallback) { - ICallbackContainer ccner = container as ICallbackContainer; - if (ccner != null) - callScript = ccner.GetCallbackScript (this, CommandName + "$" + CommandArgument); - } - - ControlStyle.AddAttributesToRender (writer); - - if (ButtonType == ButtonType.Image) { - writer.AddAttribute (HtmlTextWriterAttribute.Type, "image"); - writer.AddAttribute (HtmlTextWriterAttribute.Src, ResolveClientUrl (ImageUrl)); - if (callScript != null) - writer.AddAttribute (HtmlTextWriterAttribute.Onclick, callScript); - else - writer.AddAttribute (HtmlTextWriterAttribute.Onclick, postScript); - if (Text.Length > 0) - writer.AddAttribute (HtmlTextWriterAttribute.Alt, Text); - writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px"); - writer.RenderBeginTag (HtmlTextWriterTag.Input); - writer.RenderEndTag (); - } - if (ButtonType == ButtonType.Link) { - if (callScript != null) { - writer.AddAttribute (HtmlTextWriterAttribute.Onclick, callScript); - writer.AddAttribute (HtmlTextWriterAttribute.Href, "javascript:"); - } - else - writer.AddAttribute (HtmlTextWriterAttribute.Href, "javascript:" + postScript); - writer.RenderBeginTag (HtmlTextWriterTag.A); - writer.Write (Text); - writer.RenderEndTag (); - } - if (ButtonType == ButtonType.Button) { - if (callScript != null) - writer.AddAttribute (HtmlTextWriterAttribute.Onclick, callScript); - else - writer.AddAttribute (HtmlTextWriterAttribute.Onclick, postScript); - - writer.AddAttribute (HtmlTextWriterAttribute.Type, "submit"); - writer.AddAttribute (HtmlTextWriterAttribute.Name, ClientID); - writer.AddAttribute (HtmlTextWriterAttribute.Value, Text); - writer.RenderBeginTag (HtmlTextWriterTag.Input); - writer.RenderEndTag (); - } + EnsureForeColor (); + if (AllowCallback) { + ICallbackContainer ccner = Container as ICallbackContainer; + if (ccner != null) + OnClientClick = ClientScriptManager.EnsureEndsWithSemicolon (OnClientClick) + ccner.GetCallbackScript (this, CommandName + "$" + CommandArgument); } - else { - if (ImageUrl.Length > 0) { - ControlStyle.AddAttributesToRender (writer); - writer.AddAttribute (HtmlTextWriterAttribute.Src, ResolveClientUrl (ImageUrl)); - if (Text.Length > 0) - writer.AddAttribute (HtmlTextWriterAttribute.Alt, Text); - writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px"); - writer.RenderBeginTag (HtmlTextWriterTag.Img); - writer.RenderEndTag (); - } - else { - if (!ControlStyle.IsEmpty) { - ControlStyle.AddAttributesToRender (writer); - } - writer.RenderBeginTag (HtmlTextWriterTag.Span); - writer.Write (Text); - writer.RenderEndTag (); + + base.Render (writer); + } + + void EnsureForeColor () + { + if (ForeColor != Color.Empty) + return; + + for (Control parent = Parent; parent != null; parent = parent.Parent) { + WebControl wc = parent as WebControl; + if (wc != null && wc.ForeColor != Color.Empty) { + ForeColor = wc.ForeColor; + break; } + if (parent == Container) + break; } } + + protected override PostBackOptions GetPostBackOptions () + { + IPostBackContainer pcner = Container as IPostBackContainer; + if (pcner != null) + return pcner.GetPostBackOptions (this); + return base.GetPostBackOptions (); + } + + } + + internal class DataControlImageButton : ImageButton, IDataControlButton + { + Control _container; + + public Control Container { + get { return _container; } + set { _container = value; } + } + + public bool AllowCallback { + get { return ViewState.GetBool ("AllowCallback", true); } + set { ViewState ["AllowCallback"] = value; } + } + + public ButtonType ButtonType { + get { return ButtonType.Image; } + } + + internal override string GetClientScriptEventReference () + { + if (AllowCallback) { + ICallbackContainer ccner = Container as ICallbackContainer; + if (ccner != null) + return ccner.GetCallbackScript (this, CommandName + "$" + CommandArgument); + } + return base.GetClientScriptEventReference (); + } + + protected override PostBackOptions GetPostBackOptions () + { + IPostBackContainer pcner = Container as IPostBackContainer; + if (pcner != null) + return pcner.GetPostBackOptions (this); + return base.GetPostBackOptions (); + } + } } -#endif