- Fix VisibleCount to use the ViewportRectangle so that
authorJackson Harper <jackson@novell.com>
Thu, 25 May 2006 19:08:53 +0000 (19:08 -0000)
committerJackson Harper <jackson@novell.com>
Thu, 25 May 2006 19:08:53 +0000 (19:08 -0000)
          scrollbars
        are factored into the visible count
        - Use VisibleCount for clarity in the code
        - When the font is changed we need to recurse through all the
        nodes and invalidate their sizes

svn path=/trunk/mcs/; revision=61135

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs

index 370fa5dd7637798f99659bfc188356427bc5a4d2..65266955ad0e6d420e198811a8a34391d5da1f81 100644 (file)
        - Update the selected node if its ImageIndex is changed
        - Handle null nodes in UpdateNode (mainly so we don't have to
        check if selected is null when updating it
+       - Fix VisibleCount to use the ViewportRectangle so that scrollbars
+       are factored into the visible count
+       - Use VisibleCount for clarity in the code
+       - When the font is changed we need to recurse through all the
+       nodes and invalidate their sizes
        
 2006-05-25 Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
index 6943bff14aa8a0c595225d7dd54ce3ace7428797..d972d4350b93a249a76141791ffedd766a3b1a69 100644 (file)
@@ -438,7 +438,7 @@ namespace System.Windows.Forms {
                [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
                public int VisibleCount {
                        get {
-                               return ClientRectangle.Height / ItemHeight;
+                               return ViewportRectangle.Height / ItemHeight;
                        }
                }
 
@@ -627,7 +627,7 @@ namespace System.Windows.Forms {
                        case Keys.PageDown:
                                if (selected_node != null) {
                                        ne = new OpenTreeNodeEnumerator (selected_node);
-                                       int move = ViewportRectangle.Height / ItemHeight;
+                                       int move = VisibleCount;
                                        for (int i = 0; i < move && ne.MoveNext (); i++) {
                                                
                                        }
@@ -637,7 +637,7 @@ namespace System.Windows.Forms {
                        case Keys.PageUp:
                                if (selected_node != null) {
                                        ne = new OpenTreeNodeEnumerator (selected_node);
-                                       int move = ViewportRectangle.Height / ItemHeight;
+                                       int move = VisibleCount;
                                        for (int i = 0; i < move && ne.MovePrevious (); i++)
                                        { }
                                        SelectedNode = ne.CurrentNode;
@@ -1293,7 +1293,7 @@ namespace System.Windows.Forms {
                        }
 
                        if (vert) {
-                               vbar.SetValues (max_visible_order - 2, ViewportRectangle.Height / ItemHeight);
+                               vbar.SetValues (max_visible_order - 2, VisibleCount);
                                /*
                                vbar.Maximum = max_visible_order;
                                vbar.LargeChange = ClientRectangle.Height / ItemHeight;
@@ -1444,8 +1444,15 @@ namespace System.Windows.Forms {
 
                private void FontChangedHandler (object sender, EventArgs e)
                {
-                       // TODO: I guess we should enumerate every node and invalidate the sizes here :-(
-                       //      update_node_bounds = true;
+                       InvalidateNodeWidthRecursive (root_node);
+               }
+
+               private void InvalidateNodeWidthRecursive (TreeNode node)
+               {
+                       node.InvalidateWidth ();
+                       foreach (TreeNode child in node.Nodes) {
+                               InvalidateNodeWidthRecursive (child);
+                       }
                }
 
                private void FocusChangedHandler (object sender, EventArgs e)