Author: igorz
Date: 2007-02-28 10:45:53 -0500 (Wed, 28 Feb 2007)
New Revision: 73562

Modified:
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
   trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
   trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
   trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
Log:
2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>

        * MenuItemCollection.cs:
        fixed Save/Load viewstate. 



Modified: trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog      
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog      
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1,5 +1,10 @@
 2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
 
+       * MenuItemCollection.cs:
+       fixed Save/Load viewstate. 
+
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
        * CreateUserWizard.cs:
        * Wizard.cs:
        fixed CausesValidaion and ValidationGroup for navigation buttons. 

Modified: 
trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs
===================================================================
--- trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs  
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/System.Web.UI.WebControls/MenuItemCollection.cs  
2007-02-28 15:45:53 UTC (rev 73562)
@@ -77,8 +77,7 @@
                        child.SetParent (parent);
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
 
@@ -98,8 +97,7 @@
                                ((MenuItem)items[n]).Index = n;
                        if (marked) {
                                ((IStateManager)child).TrackViewState ();
-                               child.SetDirty ();
-                               dirty = true;
+                               SetDirty ();
                        }
                }
                
@@ -112,7 +110,9 @@
                                }
                        }
                        items.Clear ();
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public bool Contains (MenuItem child)
@@ -147,7 +147,9 @@
                        items.RemoveAt (i);
                        if (menu != null)
                                item.Menu = null;
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public void RemoveAt (int index)
@@ -156,7 +158,9 @@
                        items.RemoveAt (index);
                        if (menu != null)
                                item.Menu = null;
-                       dirty = true;
+                       if (marked) {
+                               SetDirty ();
+                       }
                }
                
                public int Count {
@@ -194,6 +198,14 @@
                                                ((IStateManager) 
item).LoadViewState (ns);
                                }
                        }
+                       else {
+                               for (int n = 1; n < its.Length; n++) {
+                                       Pair pair = (Pair) its [n];
+                                       int oi = (int) pair.First;
+                                       MenuItem node = (MenuItem) items [oi];
+                                       ((IStateManager) node).LoadViewState 
(pair.Second);
+                               }
+                       }
                }
                
                object IStateManager.SaveViewState ()
@@ -202,13 +214,13 @@
                        bool hasData = false;
                        
                        if (dirty) {
-                               state = new object [items.Count + 1];
-                               state [0] = true;
-                               for (int n=0; n<items.Count; n++) {
-                                       MenuItem item = items[n] as MenuItem;
-                                       object ns = 
((IStateManager)item).SaveViewState ();
-                                       if (ns != null) {
-                                               hasData = true;
+                               if (items.Count > 0) {
+                                       hasData = true;
+                                       state = new object [items.Count + 1];
+                                       state [0] = true;
+                                       for (int n = 0; n < items.Count; n++) {
+                                               MenuItem item = items [n] as 
MenuItem;
+                                               object ns = ((IStateManager) 
item).SaveViewState ();
                                                state [n + 1] = ns;
                                        }
                                }

Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog 
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog 
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1,3 +1,7 @@
+2007-02-28 Igor Zelmanovich <[EMAIL PROTECTED]>
+
+       * MenuTest.cs: new tests
+
 2007-02-20  Gert Driesen  <[EMAIL PROTECTED]>
 
        * CalendarTest.cs: Enabled tests for bug #80881. Fixed NotWorking

Modified: trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs
===================================================================
--- trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs       
2007-02-28 15:32:48 UTC (rev 73561)
+++ trunk/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs       
2007-02-28 15:45:53 UTC (rev 73562)
@@ -1405,6 +1405,145 @@
                {
                        WebTest.CurrentTest.UserData = "MenuItemDataBound"; 
                }
+
+               [Test]
+               public void MenuItemCollection1 ()
+               {
+                       Menu m = new Menu ();
+                       fillMenu (m);
+
+                       ((IStateManager) m.Items).TrackViewState ();
+                       m.Items [0].Text = "root";
+                       m.Items [0].ChildItems [0].Text = "node";
+                       m.Items [0].ChildItems [0].ChildItems [0].Text = 
"subnode";
+                       object state = ((IStateManager) m.Items).SaveViewState 
();
+
+                       Menu copy = new Menu ();
+                       fillMenu (copy);
+                       ((IStateManager) copy.Items).TrackViewState ();
+                       ((IStateManager) copy.Items).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Items.Count);
+                       Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems 
[0].ChildItems.Count);
+
+                       Assert.AreEqual ("root", copy.Items [0].Text);
+                       Assert.AreEqual ("node", copy.Items [0].ChildItems 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Items [0].ChildItems 
[0].ChildItems [0].Text);
+               }
+               
+               [Test]
+               public void MenuItemCollection2 ()
+               {
+                       Menu m = new Menu ();
+                       fillMenu (m);
+
+                       ((IStateManager) m.Items).TrackViewState ();
+                       m.Items [0].Text = "root";
+                       m.Items [0].ChildItems [0].Text = "node";
+                       m.Items [0].ChildItems [0].ChildItems [0].Text = 
"subnode";
+                       m.Items.Add (new MenuItem ("root 2"));
+                       object state = ((IStateManager) m.Items).SaveViewState 
();
+
+                       Menu copy = new Menu ();
+                       fillMenu (copy);
+                       ((IStateManager) copy.Items).TrackViewState ();
+                       ((IStateManager) copy.Items).LoadViewState (state);
+
+                       Assert.AreEqual (2, copy.Items.Count);
+                       Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems 
[0].ChildItems.Count);
+
+                       Assert.AreEqual ("root", copy.Items [0].Text);
+                       Assert.AreEqual ("node", copy.Items [0].ChildItems 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Items [0].ChildItems 
[0].ChildItems [0].Text);
+                       Assert.AreEqual ("root 2", copy.Items [1].Text);
+               }
+
+               [Test]
+               public void MenuItemCollection3 ()
+               {
+                       Menu m = new Menu ();
+                       fillMenu (m);
+                       m.Items.Add (new MenuItem ("root 2"));
+
+                       ((IStateManager) m.Items).TrackViewState ();
+                       m.Items [0].Text = "root";
+                       m.Items [0].ChildItems [0].Text = "node";
+                       m.Items [0].ChildItems [0].ChildItems [0].Text = 
"subnode";
+                       m.Items.RemoveAt (1);
+                       object state = ((IStateManager) m.Items).SaveViewState 
();
+
+                       Menu copy = new Menu ();
+                       fillMenu (copy);
+                       copy.Items.Add (new MenuItem ("root 2"));
+                       ((IStateManager) copy.Items).TrackViewState ();
+                       ((IStateManager) copy.Items).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Items.Count);
+                       Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems 
[0].ChildItems.Count);
+
+                       Assert.AreEqual ("root", copy.Items [0].Text);
+                       Assert.AreEqual ("node", copy.Items [0].ChildItems 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Items [0].ChildItems 
[0].ChildItems [0].Text);
+               }
+               
+               [Test]
+               public void MenuItemCollection4 ()
+               {
+                       Menu m = new Menu ();
+                       fillMenu (m);
+                       m.Items.Add (new MenuItem ("root 2"));
+                       m.Items [0].ChildItems.RemoveAt (1);
+
+                       ((IStateManager) m.Items).TrackViewState ();
+                       m.Items [0].Text = "root";
+                       m.Items [0].ChildItems [0].Text = "node";
+                       m.Items [0].ChildItems [0].ChildItems [0].Text = 
"subnode";
+                       object state = ((IStateManager) m.Items).SaveViewState 
();
+
+                       Menu copy = new Menu ();
+                       fillMenu (copy);
+                       copy.Items.Add (new MenuItem ("root 2"));
+                       copy.Items [0].ChildItems.RemoveAt (1);
+                       ((IStateManager) copy.Items).TrackViewState ();
+                       ((IStateManager) copy.Items).LoadViewState (state);
+
+                       Assert.AreEqual (2, copy.Items.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems 
[0].ChildItems.Count);
+
+                       Assert.AreEqual ("root", copy.Items [0].Text);
+                       Assert.AreEqual ("node", copy.Items [0].ChildItems 
[0].Text);
+                       Assert.AreEqual ("subnode", copy.Items [0].ChildItems 
[0].ChildItems [0].Text);
+               }
+
+               [Test]
+               public void MenuItemCollection5 ()
+               {
+                       Menu m = new Menu ();
+                       ((IStateManager) m.Items).TrackViewState ();
+                       fillMenu (m);
+
+                       object state = ((IStateManager) m.Items).SaveViewState 
();
+
+                       Menu copy = new Menu ();
+                       ((IStateManager) copy.Items).TrackViewState ();
+                       ((IStateManager) copy.Items).LoadViewState (state);
+
+                       Assert.AreEqual (1, copy.Items.Count);
+                       Assert.AreEqual (2, copy.Items [0].ChildItems.Count);
+                       Assert.AreEqual (1, copy.Items [0].ChildItems 
[0].ChildItems.Count);
+               }
+
+               private static void fillMenu (Menu m) {
+                       m.Items.Clear ();
+                       m.Items.Add (new MenuItem ());
+                       m.Items [0].ChildItems.Add (new MenuItem ());
+                       m.Items [0].ChildItems.Add (new MenuItem ());
+                       m.Items [0].ChildItems [0].ChildItems.Add (new MenuItem 
());
+               }
        }
 }
 #endif

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to