/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.jlab.groot.ui;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.border.BevelBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import org.jlab.groot.data.H1F;
import org.jlab.groot.data.IDataSet;
import org.jlab.groot.data.TDirectory;
import org.jlab.groot.graphics.EmbeddedCanvas;
import org.jlab.groot.math.FunctionFactory;

/**
 *
 * @author gavalian
 */
public class TBrowser extends JFrame {
    
    JPanel  mainPanel = new JPanel();
    private JTree           canvasTree;
    private JSplitPane      splitPane;
    private int             lastCanvasNumber = 0;
    private Map  canvasMap = new LinkedHashMap();
    private TDirectory      browserDir = null;
    
    JTabbedPane tabbedPane;
    
    List  canvasList = new ArrayList();
    
    public TBrowser(){
        super();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.initUI();
        this.addCanvas();
        this.addCanvas();
        this.initTree();
        this.setSize(600,400);
        this.setVisible(true);
    }
    
     public TBrowser(TDirectory dir){
        super();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.initUI();
        this.addCanvas();
        this.addCanvas();
        this.initTree();
        this.setDirectory(dir);
        this.setSize(600,400);
        this.setVisible(true);
    }
    
    public final void setDirectory(TDirectory dir){
        this.browserDir = dir;
        DefaultMutableTreeNode root = dir.getTreeNode();
        this.updateTreeModel(root);
    }
    
    private void initUI(){
        splitPane = new JSplitPane();
        splitPane.setDividerLocation(200);
        canvasTree = new JTree();
        
        JScrollPane scroll = new JScrollPane(canvasTree);
        splitPane.setLeftComponent(scroll);
        
        tabbedPane = new JTabbedPane();
        
        splitPane.setRightComponent(tabbedPane);
        
        mainPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
        mainPanel.setLayout(new BorderLayout());
        mainPanel.add(splitPane,BorderLayout.CENTER);
        this.add(mainPanel);
    }
    
    
    private void initTree(){
        canvasTree.addMouseListener(new MouseAdapter() 
        {
             @Override
             public void mouseClicked(MouseEvent me) {
                 doMouseClicked(me);
             }
             
        });
    }
    
    public  void updateTreeModel(DefaultMutableTreeNode node){
        this.canvasTree.setModel(new DefaultTreeModel(node));
    }
    
    private void initMenu(){
        
    }
    
    public void doMouseClicked(MouseEvent me){
        if(me.getClickCount()==2){
            TreePath tp = canvasTree.getPathForLocation(me.getX(), me.getY());
            if (tp != null){
                System.out.println(" path -> : " + tp.toString());
                int nelements = tp.getPathCount();
                StringBuilder str = new StringBuilder();
                for(int i = 1; i < nelements; i++){
                    str.append("/");
                    str.append( tp.getPathComponent(i).toString());
                }
                String objectPath = str.toString();
                if(browserDir!=null){
                    if(browserDir.getObject(objectPath)!=null){
                        System.out.println("--> " + objectPath);
                        IDataSet data = browserDir.getObject(objectPath);
                        canvasList.get(0).drawNext(data);
                        canvasList.get(0).update();
                    }
                }
            }
        }
    }
    
    public final void addCanvas(){
        String name = "Canvas " + lastCanvasNumber;
        lastCanvasNumber++;
        EmbeddedCanvas  c1 = new EmbeddedCanvas();
        c1.setName(name);
        c1.divide(2, 2);
        canvasList.add(c1);
        tabbedPane.addTab(name, c1);        
    }
    
    public static void main(String[] args){
       
        if(args.length>0){
            String filename = args[0];
            
            TDirectory dir = new TDirectory();
            
            dir.readFile(filename);
            
            TBrowser browser = new TBrowser(dir);
        } else {
        
        
        TBrowser br = new TBrowser();
        TDirectory dir = new TDirectory();
        dir.mkdir("/calibration/FTOF");
        dir.mkdir("/calibration/ECAL");
        dir.mkdir("/calibration/PCAL");
        
        H1F  h1    = FunctionFactory.randomGausian( 80, 0.1, 5.0,  8000, 2.2, 0.5);
        H1F  h2    = FunctionFactory.randomGausian(120, 0.1, 5.0, 20000, 3.5, 0.4);
        H1F  h3    = FunctionFactory.randomGausian(160, 0.1, 5.0, 14000, 2.6, 0.3);
        H1F  h4    = FunctionFactory.randomGausian( 80, 0.1, 5.0,  8000, 2.2, 0.5);
        H1F  h5    = FunctionFactory.randomGausian(160, 0.1, 5.0, 14000, 2.6, 0.3);
        H1F  h6    = FunctionFactory.randomGausian(160, 0.1, 5.0, 14000, 2.6, 0.3);
        
        h1.setName("h1");
        h2.setName("h2");
        h3.setName("h3");
        h4.setName("h4");
        h5.setName("h5");
        h6.setName("h6");
        
        h1.setFillColor(33);
        h2.setFillColor(34);
        h3.setFillColor(36);
        h4.setFillColor(35);
        h5.setFillColor(38);
        
        dir.cd("/calibration/FTOF");
        dir.addDataSet(h1,h2);
        dir.cd("/calibration/ECAL");
        dir.addDataSet(h3,h4);
        dir.cd("/calibration/PCAL");
        dir.addDataSet(h5,h6);
        
        br.setDirectory(dir);
        }
        /*
        DefaultMutableTreeNode node = dir.getTreeNode();
        br.updateTreeModel(node);
                */
    }
}

 

Ads help maintain this website.