refactoring
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / MultiView.cs
index 7e3e51d5851af96f2661f0475b2d8ab60fe98be5..eb27c6699a9ae55c876648ee532bef3a16ccff61 100644 (file)
@@ -41,7 +41,11 @@ namespace System.Web.UI.WebControls
 //     [ControlBuilder (typeof(MultiViewControlBuilder)]
        [Designer ("System.Web.UI.Design.WebControls.MultiViewDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        [ToolboxData ("<{0}:MultiView runat=\"server\"></{0}:MultiView>")]
-       [ParseChildren (false, ChildControlType = typeof(View))]
+#if NET_2_0
+       [ParseChildren (typeof(View))]
+#else
+       [ParseChildren (false)]
+#endif
        [DefaultEvent ("ActiveViewChanged")]
        public class MultiView: Control
        {
@@ -54,7 +58,6 @@ namespace System.Web.UI.WebControls
                
                int viewIndex = -1;
                int initialIndex = -1;
-               bool initied;
                
                public event EventHandler ActiveViewChanged {
                        add { Events.AddHandler (ActiveViewChangedEvent, value); }
@@ -65,6 +68,10 @@ namespace System.Web.UI.WebControls
                {
                        if (ob is View)
                                Controls.Add (ob as View);
+                       // LAMESPEC: msdn talks that only View contorls are allowed, for others controls HttpException should be thrown
+                       // but actually, aspx praser adds LiteralControl controls.
+                       //else
+                       //      throw new HttpException ("MultiView cannot have children of type 'Control'.  It can only have children of type View.");
                }
                
                protected override ControlCollection CreateControlCollection ()
@@ -90,9 +97,16 @@ namespace System.Web.UI.WebControls
                
                [DefaultValue (-1)]
                public virtual int ActiveViewIndex {
-                       get { return viewIndex; }
-                       set {
-                               if (!initied) {
+                       get
+                       {
+                               if (Controls.Count == 0)
+                                       return initialIndex;
+
+                               return viewIndex;
+                       }
+                       set 
+                       {
+                               if (Controls.Count == 0) {
                                        initialIndex = value;
                                        return;
                                }
@@ -113,15 +127,10 @@ namespace System.Web.UI.WebControls
                }
 
                [Browsable (true)]
-               [MonoTODO]
                public virtual new bool EnableTheming
                {
-                       get {
-                               throw new NotImplementedException ();
-                       }
-                       set {
-                               throw new NotImplementedException ();
-                       }
+                       get { return base.EnableTheming; }
+                       set { base.EnableTheming = value; }
                }
                
                [PersistenceMode (PersistenceMode.InnerDefaultProperty)]
@@ -147,7 +156,7 @@ namespace System.Web.UI.WebControls
                                                
                                        case "SwitchViewByID":
                                                foreach (View v in Controls)
-                                                       if (v.ID == ca.CommandArgument) {
+                                                       if (v.ID == (string)ca.CommandArgument) {
                                                                SetActiveView (v);
                                                                break;
                                                        }
@@ -164,7 +173,6 @@ namespace System.Web.UI.WebControls
                
                protected internal override void OnInit (EventArgs e)
                {
-                       initied = true;
                        Page.RegisterRequiresControlState (this);
                        if (initialIndex != -1) {
                                ActiveViewIndex = initialIndex;
@@ -176,7 +184,7 @@ namespace System.Web.UI.WebControls
                void UpdateViewVisibility ()
                {
                        for (int n=0; n<Views.Count; n++)
-                               Views [n].Visible = (n == viewIndex);
+                               Views [n].VisibleInternal = (n == viewIndex);
                }
                
                protected internal override void RemovedControl (Control ctl)
@@ -214,7 +222,8 @@ namespace System.Web.UI.WebControls
                
                protected internal override void Render (HtmlTextWriter writer)
                {
-                       if (!initied) viewIndex = initialIndex;
+                       if ((Controls.Count == 0) && (initialIndex != -1)) 
+                               viewIndex = initialIndex;
                        if (viewIndex != -1)
                                GetActiveView ().Render (writer);
                }