From: Argiris K. <be...@us...> - 2005-11-20 08:47:44
|
Update of /cvsroot/magicajax/magicajax/Core/UI/Controls In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3039/Core/UI/Controls Modified Files: AjaxPanel.cs Log Message: Fixed the visibility issues and other bugs. Added AjaxCallEnd event for 'Session/Cache' page storing modes. Fixed some comments. Index: AjaxPanel.cs =================================================================== RCS file: /cvsroot/magicajax/magicajax/Core/UI/Controls/AjaxPanel.cs,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** AjaxPanel.cs 19 Nov 2005 09:48:19 -0000 1.16 --- AjaxPanel.cs 20 Nov 2005 08:47:30 -0000 1.17 *************** *** 208,211 **** --- 208,230 ---- #endregion + #region override IsRenderedOnPage + /// <summary> + /// If it's in 'NoStore' page mode, returns true if the AjaxPanel's fingerprint + /// is not empty, false if it is empty. + /// </summary> + public override bool IsRenderedOnPage + { + get + { + if ( IsPageNoStoreMode ) + { + return (HttpContext.Current.Request.Form[ControlCollectionState.GetControlFingerprintsField(this.ClientID)] != String.Empty); + } + else + return base.IsRenderedOnPage; + } + } + #endregion + #endregion *************** *** 227,230 **** --- 246,264 ---- #endregion + #region override OnUnload + protected override void OnUnload(EventArgs e) + { + if ( IsAjaxCall && IsPageNoStoreMode && IsRenderedOnPage) + { + // Verify that it is indeed rendered on page. If it's not, set its + // fingerprint to empty string. + if ( ! ( GetTopInvisibleControl(this) is RenderedByScriptControl ) ) + AjaxCallHelper.WriteSetFieldScript (ControlCollectionState.GetControlFingerprintsField(this.ClientID), String.Empty); + } + + base.OnUnload (e); + } + #endregion + #region override AddedControl /// <summary> *************** *** 268,309 **** protected override void RenderChildren(HtmlTextWriter writer) { ! if ( IsAjaxCall && IsPageNoStoreMode ) ! { ! LoadControlState(); ! DoScriptRendering (writer); ! } ! else ! { ! System.Text.StringBuilder sbFull = new System.Text.StringBuilder(); ! System.Text.StringBuilder sb = new System.Text.StringBuilder(); ! HtmlTextWriter fullwriter = new HtmlTextWriter(new System.IO.StringWriter(sbFull)); ! HtmlTextWriter litewriter = new HtmlTextWriter(new System.IO.StringWriter(sb)); ! ! for (int i=0; i < Controls.Count; i++) ! { ! Control con = Controls[i]; ! writer.WriteBeginTag ("span"); ! writer.WriteAttribute ("id", GetAjaxElemID(con)); ! writer.Write (HtmlTextWriter.TagRightChar); ! ! ExtendedRenderControl (con, fullwriter, litewriter); ! writer.Write (sbFull.ToString()); ! if (IsPageNoStoreMode) ! _controlHtmlHashes[con] = Util.GetBase64MD5Sum(sb.ToString()); ! else ! _controlHtmls[con] = sb.ToString(); ! sbFull.Length = 0; ! sb.Length = 0; ! writer.WriteEndTag ("span"); ! } ! _addedControls.Clear(); ! _removedControls.Clear(); } if ( IsPageNoStoreMode ) SaveControlState(); --- 302,335 ---- protected override void RenderChildren(HtmlTextWriter writer) { ! System.Text.StringBuilder sbFull = new System.Text.StringBuilder(); ! System.Text.StringBuilder sb = new System.Text.StringBuilder(); ! HtmlTextWriter fullwriter = new HtmlTextWriter(new System.IO.StringWriter(sbFull)); ! HtmlTextWriter litewriter = new HtmlTextWriter(new System.IO.StringWriter(sb)); ! for (int i=0; i < Controls.Count; i++) ! { ! Control con = Controls[i]; ! writer.WriteBeginTag ("span"); ! writer.WriteAttribute ("id", GetAjaxElemID(con)); ! writer.Write (HtmlTextWriter.TagRightChar); ! ! ExtendedRenderControl (con, fullwriter, litewriter); ! writer.Write (sbFull.ToString()); ! if (IsPageNoStoreMode) ! _controlHtmlHashes[con] = Util.GetBase64MD5Sum(sb.ToString()); ! else ! _controlHtmls[con] = sb.ToString(); ! sbFull.Length = 0; ! sb.Length = 0; ! writer.WriteEndTag ("span"); } + _addedControls.Clear(); + _removedControls.Clear(); + if ( IsPageNoStoreMode ) SaveControlState(); *************** *** 368,387 **** } ! #region override RenderByScript ! protected override void RenderByScript() ! { ! DoScriptRendering (new HtmlTextWriter(System.IO.TextWriter.Null)); ! } ! #endregion ! ! #region DoScriptRendering /// <summary> /// It scans child controls for added, removed or altered controls and sends /// the appropriate javascript to the client. /// </summary> ! protected virtual void DoScriptRendering (HtmlTextWriter output) { ! if ( IsAjaxCall && !IsPageNoStoreMode ) InitValidators(); System.Text.StringBuilder sb = new System.Text.StringBuilder(); --- 394,412 ---- } ! #region RenderByScript /// <summary> /// It scans child controls for added, removed or altered controls and sends /// the appropriate javascript to the client. /// </summary> ! protected override void RenderByScript() { ! if ( IsPageNoStoreMode ) ! { ! LoadControlState(); ! } ! else ! { InitValidators(); + } System.Text.StringBuilder sb = new System.Text.StringBuilder(); *************** *** 391,394 **** --- 416,422 ---- HtmlTextWriter fullwriter = new HtmlTextWriter(new System.IO.StringWriter(sbFull)); + // To be used in 'NoStore' mode to continue the rendering of control tree. + HtmlTextWriter nullWriter = new HtmlTextWriter(System.IO.TextWriter.Null); + bool allControlsAreNew = (Controls.Count == _addedControls.Count); *************** *** 405,409 **** fullwriter.Write (HtmlTextWriter.TagRightChar); ! ExtendedRenderControl (con, fullwriter, litewriter); fullwriter.WriteEndTag ("span"); --- 433,437 ---- fullwriter.Write (HtmlTextWriter.TagRightChar); ! ExtendedRenderControl (con, fullwriter, litewriter, true); fullwriter.WriteEndTag ("span"); *************** *** 421,425 **** string html = sbFull.ToString(); AjaxCallHelper.WriteSetHtmlOfElementScript (html, ClientID); - output.Write (html); } } --- 449,452 ---- *************** *** 446,454 **** { // It's a new control, create it on the client at the appropriate place. ! ExtendedRenderControl (con, fullwriter, litewriter); html = sbFull.ToString(); AjaxCallHelper.WriteAddElementScript (ClientID, "span", GetAjaxElemID(con), html, GetNextExistingElement(i)); - output.Write (html); if (IsPageNoStoreMode) --- 473,480 ---- { // It's a new control, create it on the client at the appropriate place. ! ExtendedRenderControl (con, fullwriter, litewriter, true); html = sbFull.ToString(); AjaxCallHelper.WriteAddElementScript (ClientID, "span", GetAjaxElemID(con), html, GetNextExistingElement(i)); if (IsPageNoStoreMode) *************** *** 460,464 **** { if ( IsPageNoStoreMode ) ! ExtendedRenderControl (con, output, litewriter); else ExtendedRenderControl (con, litewriter); --- 486,496 ---- { if ( IsPageNoStoreMode ) ! { ! // Any scripts of child controls should be after the scripts ! // of parent controls, so increase the script writing level. ! AjaxCallHelper.IncreaseWritingLevel(); ! ExtendedRenderControl (con, nullWriter, litewriter); ! AjaxCallHelper.DecreaseWritingLevel(); ! } else ExtendedRenderControl (con, litewriter); *************** *** 486,489 **** --- 518,526 ---- } } + + if ( IsPageNoStoreMode ) + { + AjaxCallHelper.MergeUpperWritingLevelsWithCurrent(); + } } } *************** *** 492,495 **** --- 529,535 ---- _addedControls.Clear(); _removedControls.Clear(); + + if ( IsPageNoStoreMode ) + SaveControlState(); } #endregion *************** *** 540,544 **** for (int i=0; i < list.Count; i++) { ! RenderedByScriptControl con = (RenderedByScriptControl) list[i]; con.RenderStart += renderStart; visibleProps[i] = con.Visible; --- 580,584 ---- for (int i=0; i < list.Count; i++) { ! RenderedByScriptControl con = list[i] as RenderedByScriptControl; con.RenderStart += renderStart; visibleProps[i] = con.Visible; *************** *** 552,556 **** for (int i=0; i < list.Count; i++) { ! RenderedByScriptControl con = (RenderedByScriptControl) list[i]; con.RenderStart -= renderStart; con.Visible = visibleProps[i]; --- 592,596 ---- for (int i=0; i < list.Count; i++) { ! RenderedByScriptControl con = list[i] as RenderedByScriptControl; con.RenderStart -= renderStart; con.Visible = visibleProps[i]; *************** *** 578,581 **** --- 618,628 ---- #region ExtendedRenderControl + private void ExtendedRenderControl(Control control, HtmlTextWriter fullwriter, HtmlTextWriter litewriter) + { + ExtendedRenderControl (control, fullwriter, litewriter, false); + } + #endregion + + #region ExtendedRenderControl /// <summary> /// It produces the full rendering of the control and the rendering without *************** *** 588,603 **** /// <param name="fullwriter">The writer to use for the full rendering</param> /// <param name="litewriter">The writer to use for the rendering without any RenderedByScriptControl controls</param> ! private void ExtendedRenderControl(Control control, HtmlTextWriter fullwriter, HtmlTextWriter litewriter) { ! ExtendedTextWriter extTextWriter = new ExtendedTextWriter(fullwriter, litewriter); RenderStartEventHandler renderStart = new RenderStartEventHandler(extTextWriter.IScriptWriter_RenderStart); EventHandler renderEnd = new EventHandler(extTextWriter.IScriptWriter_RenderEnd); ArrayList list = FindRenderedByScriptControls(control); ! foreach (RenderedByScriptControl con in list) { con.RenderStart += renderStart; con.RenderEnd += renderEnd; } --- 635,659 ---- /// <param name="fullwriter">The writer to use for the full rendering</param> /// <param name="litewriter">The writer to use for the rendering without any RenderedByScriptControl controls</param> ! private void ExtendedRenderControl(Control control, HtmlTextWriter fullwriter, HtmlTextWriter litewriter, bool disableScriptRendering) { ! ExtendedTextWriter extTextWriter = new ExtendedTextWriter(fullwriter, litewriter, disableScriptRendering); RenderStartEventHandler renderStart = new RenderStartEventHandler(extTextWriter.IScriptWriter_RenderStart); EventHandler renderEnd = new EventHandler(extTextWriter.IScriptWriter_RenderEnd); ArrayList list = FindRenderedByScriptControls(control); + bool[] visibleProps = new bool[list.Count]; + bool[] monitorProps = new bool[list.Count]; ! for (int i=0; i < list.Count; i++) { + RenderedByScriptControl con = list[i] as RenderedByScriptControl; con.RenderStart += renderStart; con.RenderEnd += renderEnd; + if ( ! con.Visible ) + con.SkipRendering = true; + visibleProps[i] = con.Visible; + monitorProps[i] = con.MonitorVisibilityState; + con.MonitorVisibilityState = false; + con.Visible = true; } *************** *** 605,612 **** control.RenderControl (extwriter); ! foreach (RenderedByScriptControl con in list) { con.RenderStart -= renderStart; con.RenderEnd -= renderEnd; } --- 661,672 ---- control.RenderControl (extwriter); ! for (int i=0; i < list.Count; i++) { + RenderedByScriptControl con = list[i] as RenderedByScriptControl; con.RenderStart -= renderStart; con.RenderEnd -= renderEnd; + con.Visible = visibleProps[i]; + con.MonitorVisibilityState = monitorProps[i]; + con.SkipRendering = false; } *************** *** 854,861 **** /// It's used by ExtendedRenderControl(Control, HtmlTextWriter, HtmlTextWriter). /// </remarks> ! private class ExtendedTextWriter : System.IO.TextWriter { private HtmlTextWriter fullwriter, litewriter; private bool onlyFullRender = false; public override System.Text.Encoding Encoding --- 914,922 ---- /// It's used by ExtendedRenderControl(Control, HtmlTextWriter, HtmlTextWriter). /// </remarks> ! private class ExtendedTextWriter : System.IO.TextWriter, IScriptRenderingDisabler { private HtmlTextWriter fullwriter, litewriter; private bool onlyFullRender = false; + private bool _disableScriptRendering = false; public override System.Text.Encoding Encoding *************** *** 880,887 **** } ! public ExtendedTextWriter(HtmlTextWriter fullwriter, HtmlTextWriter litewriter) : base(null) { this.fullwriter = fullwriter; this.litewriter = litewriter; } --- 941,949 ---- } ! public ExtendedTextWriter(HtmlTextWriter fullwriter, HtmlTextWriter litewriter, bool disableScriptRendering) : base(null) { this.fullwriter = fullwriter; this.litewriter = litewriter; + _disableScriptRendering = disableScriptRendering; } *************** *** 990,993 **** --- 1052,1067 ---- } #endregion + + #region IScriptRenderingDisabler Members + + public bool DisableScriptRendering + { + get + { + return _disableScriptRendering; + } + } + + #endregion } #endregion |