package com.limegroup.gnutella.gui.statistics;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.TreeSelectionModel;
import com.limegroup.gnutella.gui.trees.LimeTreeCellRenderer;
/**
* Manages the <code>JTree</code> instance of the the statistics window. This
* class constructs the <tt>TreeModel</tt> and forwards many method calls
* the the contained <tt>TreeModel</tt>.<p>
*
* In addition, this class controls the <tt>Component</tt> that contains
* the <tt>JTree</tt> instance and provides access to that
* <tt>Component</tt>.
*/
//2345678|012345678|012345678|012345678|012345678|012345678|012345678|012345678|
final class StatisticsTreeManager {
/**
* Handle to the main <tt>JScrollPane</tt> instance for the main window
* that contains the <tt>JTree</tt>.
*/
private JScrollPane _scrollPane;
/**
* Constant handle to the tree model.
*/
private final StatisticsTreeModel TREE_MODEL = new StatisticsTreeModel();
private final JTree TREE = new JTree();
/**
* The constructor constructs the <tt>JTree</tt>, the <tt>TreeModel</tt>,
* and the <tt>JScrollPane</tt>.
*/
StatisticsTreeManager() {
TREE.setCellRenderer(new LimeTreeCellRenderer());
TREE.setEditable(false);
TREE.setShowsRootHandles(true);
TREE.setRootVisible(false);
// The default lineStyle is None, but should be Angled
// when there are three or more hierarchical levels
TREE.putClientProperty("JTree.lineStyle", "Angled");
TREE.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
TREE.addTreeSelectionListener(
new StatisticsTreeSelectionListener(TREE));
TREE.setModel(TREE_MODEL.getTreeModel());
_scrollPane = new JScrollPane(TREE);
_scrollPane.getViewport().setBackground(Color.white);
_scrollPane.setPreferredSize(new Dimension(125, 2000));
_scrollPane.setMinimumSize(new Dimension(125, 300));
}
/**
* Sets the size the advanced width to make everything easier to see.
*/
void advancedSize() {
_scrollPane.setPreferredSize(new Dimension(200, 2000));
_scrollPane.setMinimumSize(new Dimension(200, 300));
}
/**
* Sets the size the default width to make everything easier to see.
*/
void defaultSize() {
_scrollPane.setPreferredSize(new Dimension(125, 2000));
_scrollPane.setMinimumSize(new Dimension(125, 300));
}
/**
* Adds a new child node to one of the top-level parent nodes.
* children. Niether key can denote the root.<p>
*
* This should only be called during tree construction.
*
* @param parentKey the unique identifying key of the node to add as
* well as the key for the locale-specific name for the node as it
* appears to the user
* @param pane the <tt>StatisticsPane</tt> containing display
* information for this tree node
*/
void addNode(final String parentKey, final StatisticsPane pane) {
TREE_MODEL.addNode(parentKey, pane);
}
/**
* Returns the main <code>Component</code> for this class.
*
* @return a <code>Component</code> instance that is the main component
* for this class
*/
Component getComponent() {
return _scrollPane;
}
/**
* Removes all children from the node with the specified key.
*
* @param parentKey the key of the parent node whose children should be
* removed
*/
void removeAllChildren(final String parentKey) {
TREE_MODEL.removeAllChildren(parentKey);
}
/**
* Accessor for the <tt>JTree</tt>.
*
* @return the <tt>JTree</tt> instance
*/
JTree getTree() {
return TREE;
}
}