// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
// Source File Name: RootObjectBrowser.java
package hep.rootio.util;
import hep.rootio.RootFileReader;
import hep.rootio.interfaces.RootObject;
import hep.rootio.interfaces.TDirectory;
import hep.rootio.interfaces.TKey;
import hep.rootio.interfaces.TNamed;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
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.filechooser.FileFilter;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
// Referenced classes of package hep.rootio.util:
// RootDirectoryTreeCellRenderer, RootObjectTreeCellRenderer, BranchEntry, RootObjectTreeModel,
// StreamerInfoBrowser, RootDirectoryTreeModel, HackedFileSystemView
public class RootObjectBrowser extends JPanel
implements TreeSelectionListener
{
private static class RootFileFilter extends FileFilter
{
public boolean accept(File file)
{
return file.isDirectory() || file.getName().endsWith(".root");
}
public String getDescription()
{
return "Root Files (*.root)";
}
private RootFileFilter()
{
}
}
private class RootHelpMenu extends JMenu
{
RootHelpMenu()
{
super("Help");
add(new JMenuItem("About...") {
public void fireActionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(RootObjectBrowser.this, "RootObjectBrowser $Id: RootObjectBrowser.java,v 1.10 2001/06/04 16:17:53 tonyj Exp $
Author: Tony Johnson (tonyj@slac.stanford.edu)");
}
});
}
}
private class RootToolsMenu extends JMenu
{
void setFileOpen(boolean state)
{
view.setEnabled(state);
}
private JMenuItem view;
RootToolsMenu()
{
super("Tools");
add(view = new JMenuItem("View Streamer Info...") {
public void fireActionPerformed(ActionEvent e)
{
showStreamerInfo();
}
});
}
}
private class RootFileMenu extends JMenu
{
RootFileMenu()
{
super("File");
add(new JMenuItem("Open...") {
public void fireActionPerformed(ActionEvent e)
{
JFileChooser dlg = null;
try
{
if(System.getSecurityManager() != null && System.getProperty("os.name").indexOf("indows") > 0 && System.getProperty("java.version").startsWith("1.3"))
dlg = new JFileChooser("Open Root File...", new HackedFileSystemView());
}
catch(SecurityException securityexception) { }
if(dlg == null)
dlg = new JFileChooser("Open Root File...");
dlg.setFileFilter(new RootFileFilter());
int rc = dlg.showOpenDialog(RootObjectBrowser.this);
if(rc == 0)
try
{
setRootFile(dlg.getSelectedFile());
}
catch(IOException x)
{
error(x);
}
}
});
add(new JMenuItem("Exit") {
public void fireActionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
}
private class RootMenuBar extends JMenuBar
{
void setFileOpen(boolean state)
{
tools.setFileOpen(state);
}
private RootToolsMenu tools;
RootMenuBar()
{
add(new RootFileMenu());
add(tools = new RootToolsMenu());
add(new RootHelpMenu());
}
}
public RootObjectBrowser()
{
super(new BorderLayout());
tree = new JTree(emptyTree);
tree.setCellRenderer(new RootDirectoryTreeCellRenderer());
tree.addTreeSelectionListener(this);
objTree = new JTree(emptyTree);
objTree.setCellRenderer(new RootObjectTreeCellRenderer());
ToolTipManager.sharedInstance().registerComponent(objTree);
JSplitPane split = new JSplitPane(1, new JScrollPane(tree), new JScrollPane(objTree));
add(split, "Center");
add(menuBar = new RootMenuBar(), "North");
menuBar.setFileOpen(false);
setPreferredSize(new Dimension(500, 300));
split.setDividerLocation(245);
ToolTipManager.sharedInstance().setEnabled(true);
}
public void setRootFile(File file)
throws IOException
{
Cursor old = getCursor();
setCursor(Cursor.getPredefinedCursor(3));
try
{
reader = new RootFileReader(file);
TreeModel model = new RootDirectoryTreeModel(reader) {
public void handleException(IOException x)
{
error(x);
x.printStackTrace();
super.handleException(x);
}
};
tree.setModel(model);
tree.setRowHeight(20);
tree.setLargeModel(true);
menuBar.setFileOpen(true);
}
finally
{
setCursor(old);
}
}
public static void main(String argv[])
throws IOException
{
if(argv.length > 1)
usage();
if(argv.length == 1 && argv[0].startsWith("-"))
usage();
JFrame frame = new JFrame("Root Object Browser");
RootObjectBrowser browser = new RootObjectBrowser();
if(argv.length == 1)
browser.setRootFile(new File(argv[0]));
frame.setContentPane(browser);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
frame.pack();
frame.show();
}
private static void usage()
{
System.out.println("java RootObjectBrowser []");
System.exit(0);
}
public void valueChanged(TreeSelectionEvent event)
{
Cursor old = getCursor();
setCursor(Cursor.getPredefinedCursor(3));
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(IOException x)
{
objTree.setModel(emptyTree);
x.printStackTrace();
error(x);
}
finally
{
setCursor(old);
}
}
private void error(IOException x)
{
JOptionPane.showMessageDialog(this, x.getMessage(), "Error", 0);
}
private void showStreamerInfo()
{
try
{
Comparator sortByName = new Comparator() {
public int compare(Object a, Object b)
{
return ((TNamed)a).getName().compareTo(((TNamed)b).getName());
}
public boolean equals(Object o)
{
return o.getClass() == getClass();
}
};
java.util.List streamerInfo = new ArrayList(reader.streamerInfo());
Collections.sort(streamerInfo, sortByName);
StreamerInfoBrowser browser = new StreamerInfoBrowser(streamerInfo);
JFrame f = new JFrame("Root Streamer Info Browser");
f.setContentPane(browser);
f.setDefaultCloseOperation(2);
f.pack();
f.show();
}
catch(IOException x)
{
error(x);
}
}
private static final String aboutMessage = "RootObjectBrowser $Id: RootObjectBrowser.java,v 1.10 2001/06/04 16:17:53 tonyj Exp $
Author: Tony Johnson (tonyj@slac.stanford.edu)";
private static final TreeModel emptyTree = null;
private JTree tree;
private JTree objTree;
private RootFileReader reader;
private RootMenuBar menuBar;
}
Ads help maintain this website.