changeset 64:41210ed840cf

Keep root of the host/vm tree expanded whenever possible
author Omair Majid <omajid@redhat.com>
date Wed, 01 Feb 2012 15:17:25 -0500
parents ce467a831e45
children ad21cb32aad1
files src/com/redhat/thermostat/client/ui/MainWindow.java
diffstat 1 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/com/redhat/thermostat/client/ui/MainWindow.java	Tue Jan 31 17:19:30 2012 -0500
+++ b/src/com/redhat/thermostat/client/ui/MainWindow.java	Wed Feb 01 15:17:25 2012 -0500
@@ -66,12 +66,15 @@
 import javax.swing.ToolTipManager;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.Document;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeModel;
 import javax.swing.tree.TreePath;
 import javax.swing.tree.TreeSelectionModel;
@@ -108,6 +111,7 @@
         searchField = new JTextField();
         TreeModel model = facade.getHostVmTree();
         agentVmTree = new JTree(model);
+        model.addTreeModelListener(new KeepRootExpandedListener(agentVmTree));
         agentVmTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
         agentVmTree.setCellRenderer(new AgentVmTreeCellRenderer());
         ToolTipManager.sharedInstance().registerComponent(agentVmTree);
@@ -115,7 +119,7 @@
 
         setupMenus();
         setupPanels();
-        
+
         this.setPreferredSize(new Dimension(800, 600));
 
         agentVmTree.setSelectionPath(new TreePath(((DefaultMutableTreeNode) model.getRoot()).getPath()));
@@ -291,6 +295,40 @@
         }
     }
 
+    private static class KeepRootExpandedListener implements TreeModelListener {
+
+        private JTree toModify;
+
+        public KeepRootExpandedListener(JTree treeToModify) {
+            toModify = treeToModify;
+        }
+
+        @Override
+        public void treeStructureChanged(TreeModelEvent e) {
+            ensureRootIsExpanded((DefaultTreeModel) e.getSource());
+        }
+
+        @Override
+        public void treeNodesRemoved(TreeModelEvent e) {
+            ensureRootIsExpanded((DefaultTreeModel) e.getSource());
+        }
+
+        @Override
+        public void treeNodesInserted(TreeModelEvent e) {
+            ensureRootIsExpanded((DefaultTreeModel) e.getSource());
+        }
+
+        @Override
+        public void treeNodesChanged(TreeModelEvent e) {
+            ensureRootIsExpanded((DefaultTreeModel) e.getSource());
+        }
+
+        private void ensureRootIsExpanded(DefaultTreeModel model) {
+            DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
+            toModify.expandPath(new TreePath(root.getPath()));
+        }
+    }
+
     private static class AgentVmTreeCellRenderer extends DefaultTreeCellRenderer {
         private static final long serialVersionUID = 4444642511815252481L;