package hep.io.root.util; import hep.io.root.RootObject; import hep.io.root.interfaces.TKey; import hep.io.root.interfaces.TNamed; import java.awt.BorderLayout; import java.awt.Cursor; import java.util.List; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTree; import javax.swing.ToolTipManager; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * A panel for browsing Streamer Info from a Root file. * @author tonyj * @version $Id: StreamerInfoBrowser.java 13617 2009-04-09 22:48:46Z tonyj $ */ class StreamerInfoBrowser extends JPanel implements TreeSelectionListener { private final static TreeModel emptyTree = null; private JTree objTree; private JTree tree; /** Creates new StreamerInfoBrowser */ public StreamerInfoBrowser(List streamerInfo) { super(new BorderLayout()); tree = new JTree(new StreamerInfoTreeModel(streamerInfo)); tree.setCellRenderer(new StreamerInfoTreeCellRenderer()); tree.addTreeSelectionListener(this); tree.setRootVisible(false); tree.setShowsRootHandles(true); objTree = new JTree(emptyTree); objTree.setCellRenderer(new RootObjectTreeCellRenderer()); ToolTipManager.sharedInstance().registerComponent(objTree); JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(tree), new JScrollPane(objTree)); add(split, BorderLayout.CENTER); setPreferredSize(new java.awt.Dimension(500, 300)); split.setDividerLocation(245); ToolTipManager.sharedInstance().setEnabled(true); } public void valueChanged(TreeSelectionEvent event) { Cursor old = getCursor(); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { TreePath path = tree.getSelectionPath(); if (path == null) objTree.setModel(emptyTree); else { Object node = path.getLastPathComponent(); //if (node instanceof BranchEntry) node = ((BranchEntry) node).getValue(); if (node instanceof TKey) { TKey key = (TKey) node; objTree.setModel(new RootObjectTreeModel(key.getObject(), key.getName())); } else if (node instanceof TNamed) objTree.setModel(new RootObjectTreeModel(node, ((TNamed) node).getName())); else if (node instanceof RootObject) objTree.setModel(new RootObjectTreeModel(node, "")); else if (node.getClass().isArray()) objTree.setModel(new RootObjectTreeModel(node, "")); else if (node instanceof java.util.List) objTree.setModel(new RootObjectTreeModel(node, "")); else objTree.setModel(emptyTree); } } catch (Throwable x) { objTree.setModel(emptyTree); x.printStackTrace(); error(x); } finally { setCursor(old); } } private void error(Throwable x) { JOptionPane.showMessageDialog(this, x.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); } }