[Home] Restricted access for guests. The link to Java source code is disabled
Java source code of 'jhplot.root.RootHistogramBrowser'
package jhplot.root;
import hep.io.root.*;
import hep.io.root.daemon.RootAuthenticator;
import hep.io.root.daemon.RootURLStreamFactory;
import hep.io.root.interfaces.*;
import hep.io.root.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import jas.hist.*;
import java.net.Authenticator;
import java.net.URL;
import java.net.URLConnection;
/**
* A simple application for browsing histograms in Root Files
*
* @author: Tony Johnson and S.Chekanov
*/
public class RootHistogramBrowser extends JPanel implements
TreeSelectionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private final static String aboutMessage = "RootHistogramBrowser $Id: RootHistogramBrowser.java,v 1.2 2004/06/28 15:21:26 tonyj Exp $
Author: Tony Johnson (tonyj@slac.stanford.edu)";
private final static TreeModel emptyTree = null;
private JASHist plot;
private JTree tree;
// private JFrame frame;
/**
* Histogram browser
*
* @throws IOException
*/
public RootHistogramBrowser() {
super(new BorderLayout());
try {
tree = new JTree(emptyTree);
tree.setCellRenderer(new RootDirectoryTreeCellRenderer());
tree.addTreeSelectionListener(this);
tree.setRootVisible(false);
plot = new JASHist();
plot.setBackground(Color.white);
plot.setShowStatistics(true);
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
new JScrollPane(tree), plot);
add(split, BorderLayout.CENTER);
add(new RootMenuBar(), BorderLayout.NORTH);
setPreferredSize(new java.awt.Dimension(500, 300));
split.setDividerLocation(245);
} catch (Exception e) {
// TODO: handle exception
}
}
public void setRootFile(File file) throws IOException {
Cursor old = getCursor();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
RootFileReader reader = new RootFileReader(file);
TreeModel model = new RootHistogramTreeModel(reader) {
public void handleException(IOException x) {
error(x);
x.printStackTrace();
super.handleException(x);
}
};
tree.setModel(model);
tree.setRowHeight(20);
tree.setLargeModel(true);
} finally {
setCursor(old);
}
}
public void setRootFile(URL url) throws IOException {
Cursor old = getCursor();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
RootFileReader reader = new RootFileReader(url);
TreeModel model = new RootHistogramTreeModel(reader) {
public void handleException(IOException x) {
error(x);
x.printStackTrace();
super.handleException(x);
}
};
tree.setModel(model);
tree.setRowHeight(20);
tree.setLargeModel(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();
URL.setURLStreamHandlerFactory(new RootURLStreamFactory());
JFrame frame = new JFrame("Root Histogram Browser");
RootHistogramBrowser browser = new RootHistogramBrowser();
Authenticator.setDefault(new RootAuthenticator(browser));
URLConnection.setDefaultAllowUserInteraction(true);
if (argv.length == 1) {
if (argv[0].startsWith("root:"))
browser.setRootFile(new URL(argv[0]));
else
browser.setRootFile(new File(argv[0]));
}
frame.setContentPane(browser);
// Make this exit when the close button is clicked.
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.pack();
frame.setVisible(true);
}
private static void usage() {
System.out.println("java RootHistogramBrowser []");
System.exit(0);
}
public void valueChanged(TreeSelectionEvent event) {
Cursor old = getCursor();
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
try {
plot.removeAllData();
TreePath path = tree.getSelectionPath();
if (path != null) {
TKey key = (TKey) path.getLastPathComponent();
Object node = key.getObject();
if (node instanceof TH1) {
DataSource ds = RootHistogramAdapter.create((TH1) node);
if (ds != null) {
plot.setTitle(ds.getTitle());
plot.addData(ds).show(true);
}
}
}
} catch (IOException x) {
x.printStackTrace();
error(x);
} catch (RootClassNotFound x) {
x.printStackTrace();
error(x);
} finally {
setCursor(old);
}
}
private void error(Exception x) {
JOptionPane.showMessageDialog(this, x.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
private class RootMenuBar extends JMenuBar {
/**
*
*/
private static final long serialVersionUID = 1L;
RootMenuBar() {
add(new RootFileMenu());
add(new RootHelpMenu());
}
}
private class RootFileMenu extends JMenu {
/**
*
*/
private static final long serialVersionUID = 1L;
RootFileMenu() {
super("File");
add(new JMenuItem("Open File...") {
/**
*
*/
private static final long serialVersionUID = 1L;
public void fireActionPerformed(ActionEvent e) {
JFileChooser dlg = null;
// HACK to work around JavaWebStart bug.
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...");
}
} catch (SecurityException x) {
}
if (dlg == null)
dlg = new JFileChooser("Open Root File...");
dlg.setFileFilter(new RootFileFilter());
int rc = dlg.showOpenDialog(RootHistogramBrowser.this);
if (rc == JFileChooser.APPROVE_OPTION) {
try {
setRootFile(dlg.getSelectedFile());
} catch (IOException x) {
error(x);
}
}
}
});
add(new JMenuItem("Open URL...") {
/**
*
*/
private static final long serialVersionUID = 1L;
public void fireActionPerformed(ActionEvent e) {
String url = JOptionPane.showInputDialog(
RootHistogramBrowser.this, "URL", "root://");
if (url != null) {
try {
setRootFile(new URL(url));
} catch (IOException x) {
error(x);
}
}
}
});
add(new JMenuItem("Exit") {
/**
*
*/
private static final long serialVersionUID = 1L;
public void fireActionPerformed(ActionEvent e) {
// System.exit(0);
setVisible(false);
}
});
}
}
private class RootHelpMenu extends JMenu {
/**
*
*/
private static final long serialVersionUID = 1L;
RootHelpMenu() {
super("Help");
add(new JMenuItem("About...") {
/**
*
*/
private static final long serialVersionUID = 1L;
public void fireActionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(RootHistogramBrowser.this,
aboutMessage);
}
});
}
}
private static class RootFileFilter extends
javax.swing.filechooser.FileFilter {
public boolean accept(File file) {
return file.isDirectory() || file.getName().endsWith(".root");
}
public String getDescription() {
return "Root Files (*.root)";
}
}
}