From 7bb144d1607a73e58d168f79e2de48bc69a9f839 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Thu, 05 Feb 2009 13:05:53 +0000
Subject: [PATCH] Update the code so that the scroll positions are maintained after the contents of the panels are updated.  This way, even if configuration or monitoring information are changed, there are no sudden changes of the scroll position which was quite annoying.

---
 opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
index b542cbe..3bc4754 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2008-2009 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -33,6 +33,7 @@
 import java.awt.Dimension;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
@@ -79,6 +80,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.VLVIndexTreeNode;
 import org.opends.guitools.controlpanel.ui.renderer.TreeCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
+import org.opends.guitools.controlpanel.util.ViewPositions;
 import org.opends.messages.Message;
 
 /**
@@ -96,6 +98,8 @@
   private IndexBrowserRightPanel entryPane;
   private TreePanel treePane;
 
+  private JScrollPane treeScroll;
+
   private JButton newIndex;
   private JButton newVLVIndex;
 
@@ -309,7 +313,7 @@
     Utilities.setBorder(treePane, new EmptyBorder(10, 0, 10, 0));
 
     entryPane = new IndexBrowserRightPanel();
-    JScrollPane treeScroll = Utilities.createScrollPane(treePane);
+    treeScroll = Utilities.createScrollPane(treePane);
 
     entryPane.addIndexSelectionListener(new IndexSelectionListener()
     {
@@ -580,6 +584,8 @@
   private void repopulateTree(JTree tree)
   {
     ignoreSelectionEvents = true;
+
+    final Point currentPosition = treeScroll.getViewport().getViewPosition();
     DefaultMutableTreeNode root = getRoot(tree);
 
     TreePath path = tree.getSelectionPath();
@@ -710,6 +716,20 @@
 
     updateEntryPane();
 
+    SwingUtilities.invokeLater(new Runnable()
+    {
+      public void run()
+      {
+        if (firstTreeRepopulate)
+        {
+          treeScroll.getViewport().setViewPosition(new Point(0, 0));
+        }
+        else
+        {
+          treeScroll.getViewport().setViewPosition(currentPosition);
+        }
+      }
+    });
     firstTreeRepopulate = false;
     ignoreSelectionEvents = false;
   }
@@ -720,6 +740,7 @@
    */
   private void updateEntryPane()
   {
+    ViewPositions pos = Utilities.getViewPositions(entryPane);
     TreePath[] paths = treePane.getTree().getSelectionPaths();
     TreePath path = null;
     if ((paths != null) && (paths.length == 1))
@@ -765,6 +786,7 @@
         entryPane.displayVoid();
       }
     }
+    Utilities.updateViewPositions(pos);
   }
 
   private DefaultMutableTreeNode getRoot(JTree tree)

--
Gitblit v1.10.0