00001 using System; 00002 using System.ComponentModel; 00003 using System.Web.UI; 00004 using System.Web.UI.HtmlControls; 00005 using ASP = System.Web.UI.WebControls; 00006 00007 namespace Anthem 00008 { 00012 public class Debugger : ASP.WebControl, INamingContainer, IUpdatableControl 00013 { 00015 protected override void CreateChildControls() 00016 { 00017 Controls.Add(new LiteralControl("<div><fieldset><legend>Anthem Debugger</legend>")); 00018 AddCheckBox("RequestText"); 00019 AddCheckBox("ResponseText"); 00020 AddCheckBox("Errors"); 00021 Controls.Add(new LiteralControl("</fieldset></div>")); 00022 } 00023 00024 void AddCheckBox(string option) 00025 { 00026 HtmlInputCheckBox cb = new HtmlInputCheckBox(); 00027 Controls.Add(cb); 00028 cb.ID = option; 00029 cb.Attributes["onchange"] = string.Format("AnthemDebugger_Debug{0} = this.checked", option); 00030 Controls.Add(new LiteralControl(string.Format(" {0} ", option))); 00031 } 00032 00038 protected override void OnLoad(EventArgs e) 00039 { 00040 base.OnLoad(e); 00041 00042 Anthem.Manager.Register(this); 00043 00044 if (Page.IsPostBack) 00045 { 00046 HtmlInputCheckBox requestText = FindControl("RequestText") as HtmlInputCheckBox; 00047 if (requestText != null) 00048 { 00049 DebugRequestText = requestText.Checked; 00050 } 00051 00052 HtmlInputCheckBox responseText = FindControl("ResponseText") as HtmlInputCheckBox; 00053 if (responseText != null) 00054 { 00055 DebugResponseText = responseText.Checked; 00056 } 00057 00058 HtmlInputCheckBox errors = FindControl("Errors") as HtmlInputCheckBox; 00059 if (errors != null) 00060 { 00061 DebugErrors = errors.Checked; 00062 } 00063 } 00064 } 00065 00067 protected override void OnPreRender(EventArgs e) 00068 { 00069 base.OnPreRender(e); 00070 00071 HtmlInputCheckBox requestText = FindControl("RequestText") as HtmlInputCheckBox; 00072 if (requestText != null) 00073 { 00074 requestText.Checked = DebugRequestText; 00075 } 00076 00077 HtmlInputCheckBox responseText = FindControl("ResponseText") as HtmlInputCheckBox; 00078 if (responseText != null) 00079 { 00080 responseText.Checked = DebugResponseText; 00081 } 00082 00083 HtmlInputCheckBox errors = FindControl("Errors") as HtmlInputCheckBox; 00084 if (errors != null) 00085 { 00086 errors.Checked = DebugErrors; 00087 } 00088 00089 string script = string.Format( 00090 @"<script language='javascript' type='text/javascript'> var AnthemDebugger_DebugRequestText = {0}; var AnthemDebugger_DebugResponseText = {1}; var AnthemDebugger_DebugErrors = {2}; function Anthem_DebugRequestText(text) {{ if (AnthemDebugger_DebugRequestText) {{ alert('Anthem Debugger (RequestText):\n\n' + text); }} }} function Anthem_DebugResponseText(text) {{ if (AnthemDebugger_DebugResponseText) {{ alert('Anthem Debugger (ResponseText):\n\n' + text); }} }} function Anthem_DebugError(text) {{ if (AnthemDebugger_DebugErrors) {{ alert('Anthem Debugger (Error):\n\n' + text); }} }} </script>", 00091 DebugRequestText ? "true" : "false", 00092 DebugResponseText ? "true" : "false", 00093 DebugErrors ? "true" : "false" 00094 ); 00095 00096 #if V2 00097 Page.ClientScript.RegisterClientScriptBlock(typeof(Debugger), "script", script); 00098 #else 00099 Page.RegisterClientScriptBlock(typeof(Debugger).FullName, script); 00100 #endif 00101 } 00102 00107 protected override void Render(HtmlTextWriter writer) 00108 { 00109 Anthem.Manager.WriteBeginControlMarker(writer, "div", this); 00110 if (Visible) 00111 { 00112 base.Render(writer); 00113 } 00114 Anthem.Manager.WriteEndControlMarker(writer, "div", this); 00115 } 00116 00118 public bool DebugRequestText 00119 { 00120 get 00121 { 00122 return ViewState["DebugRequestText"] != null 00123 ? (bool)ViewState["DebugRequestText"] 00124 : false; 00125 } 00126 00127 set 00128 { 00129 if (IsTrackingViewState && Anthem.Manager.IsCallBack && DebugRequestText != value) 00130 { 00131 Anthem.Manager.AddScriptForClientSideEval( 00132 string.Format( 00133 "AnthemDebugger_DebugRequestText = {0}", 00134 value ? "true" : "false")); 00135 } 00136 ViewState["DebugRequestText"] = value; 00137 } 00138 } 00139 00141 public bool DebugResponseText 00142 { 00143 get 00144 { 00145 return ViewState["DebugResponseText"] != null 00146 ? (bool)ViewState["DebugResponseText"] 00147 : false; 00148 } 00149 00150 set 00151 { 00152 if (IsTrackingViewState && Anthem.Manager.IsCallBack && DebugResponseText != value) 00153 { 00154 Anthem.Manager.AddScriptForClientSideEval( 00155 string.Format( 00156 "AnthemDebugger_DebugResponseText = {0}", 00157 value ? "true" : "false")); 00158 } 00159 ViewState["DebugResponseText"] = value; 00160 } 00161 } 00162 00164 public bool DebugErrors 00165 { 00166 get 00167 { 00168 return ViewState["DebugErrors"] != null 00169 ? (bool)ViewState["DebugErrors"] 00170 : false; 00171 } 00172 00173 set 00174 { 00175 if (IsTrackingViewState && Anthem.Manager.IsCallBack && DebugErrors != value) 00176 { 00177 Anthem.Manager.AddScriptForClientSideEval( 00178 string.Format( 00179 "AnthemDebugger_DebugErrors = {0}", 00180 value ? "true" : "false")); 00181 } 00182 ViewState["DebugErrors"] = value; 00183 } 00184 } 00185 00186 #region Common Anthem control members (copied into each control) 00187 00188 #if V2 00192 public override void RenderControl(HtmlTextWriter writer) 00193 { 00194 base.Visible = true; 00195 base.RenderControl(writer); 00196 } 00197 #endif 00198 00206 public override bool Visible 00207 { 00208 get 00209 { 00210 #if !V2 00211 bool DesignMode = this.Context == null; 00212 #endif 00213 return Anthem.Manager.GetControlVisible(this, ViewState, DesignMode); 00214 } 00215 set { Anthem.Manager.SetControlVisible(ViewState, value); } 00216 } 00217 00218 private bool _updateAfterCallBack = false; 00219 00233 [DefaultValue(false)] 00234 public virtual bool AutoUpdateAfterCallBack 00235 { 00236 get 00237 { 00238 if (ViewState["AutoUpdateAfterCallBack"] == null) 00239 return false; 00240 else 00241 return (bool)ViewState["AutoUpdateAfterCallBack"]; 00242 } 00243 set 00244 { 00245 if (value) UpdateAfterCallBack = true; 00246 ViewState["AutoUpdateAfterCallBack"] = value; 00247 } 00248 } 00249 00264 [Browsable(false), DefaultValue(false)] 00265 public virtual bool UpdateAfterCallBack 00266 { 00267 get { return _updateAfterCallBack; } 00268 set { _updateAfterCallBack = value; } 00269 } 00270 00278 [DefaultValue(true)] 00279 public virtual bool EnableCallBack 00280 { 00281 get 00282 { 00283 if (ViewState["EnableCallBack"] == null) 00284 return true; 00285 else 00286 return (bool)ViewState["EnableCallBack"]; 00287 } 00288 set 00289 { 00290 ViewState["EnableCallBack"] = value; 00291 } 00292 } 00293 00294 #endregion 00295 } 00296 } 00297