X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.UI%2FControl.cs;h=1820dc33dad5cf267e63fd878f8ee95b95a3ff99;hb=d2e41bdda362e9c152fd7ab26405372a46df1e2d;hp=60878903c4b121e3da1d955f3bbb02f8a94e99db;hpb=0b02144e55d384f8e65eb6f28ace5a171353ff06;p=mono.git diff --git a/mcs/class/System.Web/System.Web.UI/Control.cs b/mcs/class/System.Web/System.Web.UI/Control.cs index 60878903c4b..1820dc33dad 100644 --- a/mcs/class/System.Web/System.Web.UI/Control.cs +++ b/mcs/class/System.Web/System.Web.UI/Control.cs @@ -1,10 +1,12 @@ // // System.Web.UI.Control.cs // -// Author: -// Bob Smith +// Authors: +// Bob Smith +// Gonzalo Paniagua Javier (gonzalo@ximian.com) // // (C) Bob Smith +// (c) 2002 Ximian, Inc. (http://www.ximian.com) // /* @@ -236,10 +238,16 @@ namespace System.Web.UI } } public virtual bool Visible - { //TODO: Are children visible when parents are not? + { get { - return _visible; + if (_visible == false) + return false; + + if (_parent != null) + return _parent.Visible; + + return true; } set { @@ -305,19 +313,18 @@ namespace System.Web.UI get { if(_viewState == null) - { - _viewState = new StateBag(ViewStateIgnoresCase); - if(IsTrackingViewState) - _viewState.TrackViewState(); - } + _viewState = new StateBag (ViewStateIgnoresCase); + + if (IsTrackingViewState) + _viewState.TrackViewState (); + return _viewState; } } - protected virtual bool ViewStateIgnoresCase //DIT + protected virtual bool ViewStateIgnoresCase { - get - { - return true; + get { + return false; } } @@ -329,7 +336,7 @@ namespace System.Web.UI control._parent.Controls.Remove (control); control._parent = this; - control._page = _page; + control._page = Page; // Without this, DataBoundLiteralControl crashes in OnDataBound event. Control namingContainer = NamingContainer; @@ -375,14 +382,27 @@ namespace System.Web.UI { //TODO: I think there is Naming Container stuff here. Redo. int i; - for (i = pathOffset; i < _controls.Count; i++) - if (_controls[i].ID == id) return _controls[i]; + Control ctrl; + for (i = pathOffset; i < _controls.Count; i++){ + ctrl = _controls [i]; + + if (ctrl.ID == id) + return ctrl; + + if (ctrl.Controls.Count > 0){ + Control other = ctrl.FindControl (id); + if (other != null) + return other; + } + + } return null; } protected virtual void LoadViewState(object savedState) { - ViewState.LoadViewState (savedState); + if (savedState != null) + ViewState.LoadViewState (savedState); } [MonoTODO] @@ -455,12 +475,19 @@ namespace System.Web.UI foreach (Control c in _controls) c.RenderControl(writer); } - protected virtual object SaveViewState() + + protected virtual object SaveViewState () { - return ViewState; + if (_viewState == null) + return null; + + return _viewState.SaveViewState (); } + protected virtual void TrackViewState() { + if (_viewState != null) + _viewState.TrackViewState (); _trackViewState = true; } @@ -569,8 +596,6 @@ namespace System.Web.UI { if (_visible) { - // By now, PreRender is fired here. - OnPreRender (EventArgs.Empty); //FIXME //TODO: Something about tracing here. Render(writer); } @@ -581,47 +606,80 @@ namespace System.Web.UI { return relativeUrl; } + public void SetRenderMethodDelegate(RenderMethod renderMethod) //DIT { _renderMethodDelegate = renderMethod; } + protected void LoadRecursive() { OnLoad(EventArgs.Empty); if (_controls != null) foreach (Control c in _controls) c.LoadRecursive(); } + protected void UnloadRecursive(Boolean dispose) { OnUnload(EventArgs.Empty); if (_controls != null) foreach (Control c in _controls) c.UnloadRecursive(dispose); if (dispose) Dispose(); } + protected void PreRenderRecursiveInternal() { OnPreRender(EventArgs.Empty); if (_controls != null) foreach (Control c in _controls) c.PreRenderRecursiveInternal(); } + protected void InitRecursive(Control namingContainer) { if (_controls != null) foreach (Control c in _controls) c.InitRecursive(namingContainer); OnInit(EventArgs.Empty); + TrackViewState (); } - [MonoTODO] protected object SaveViewStateRecursive() { - throw new NotImplementedException(); + if (!EnableViewState || !Visible) + return null; + + ArrayList controlList = null; + ArrayList controlStates = null; + + foreach (Control ctrl in Controls){ + if (controlList == null) { + controlList = new ArrayList (); + controlStates = new ArrayList (); + } + controlList.Add (ctrl); + controlStates.Add (ctrl.SaveViewStateRecursive ()); + } + + return new Triplet (SaveViewState (), controlList, controlStates); } - [MonoTODO] - protected void LoadViewStateRecursive(Object savedState) + protected void LoadViewStateRecursive (object savedState) { - throw new NotImplementedException(); + if (!EnableViewState || !Visible || savedState == null) + return; + + Triplet savedInfo = (Triplet) savedState; + LoadViewState (savedInfo.First); + + ArrayList controlList = savedInfo.Second as ArrayList; + if (controlList == null) + return; + ArrayList controlStates = savedInfo.Third as ArrayList; + int nControls = controlList.Count; + for (int i = 0; i < nControls; i++) { + if (controlStates != null) + Controls [i].LoadViewStateRecursive (controlStates [i]); + } } void IParserAccessor.AddParsedSubObject(object obj) { - this.AddParsedSubObject(obj); + AddParsedSubObject(obj); } DataBindingCollection IDataBindingsAccessor.DataBindings @@ -653,6 +711,14 @@ namespace System.Web.UI AutoID = false; } + protected internal virtual void RemovedControl (Control control) + { + control.UnloadRecursive (false); + control._parent = null; + control._page = null; + control._namingContainer = null; + } + //TODO: I think there are some needed Interface implementations to do here. //TODO: Find api for INamingContainer. }