001    package org.shiftone.jrat.provider.tree.ui.trace;
002    
003    
004    import org.shiftone.jrat.provider.tree.ui.TraceTreeNode;
005    import org.shiftone.jrat.util.log.Logger;
006    
007    import javax.swing.*;
008    import javax.swing.event.TreeSelectionEvent;
009    import javax.swing.event.TreeSelectionListener;
010    import javax.swing.tree.TreePath;
011    import java.awt.*;
012    
013    
014    /**
015     * Class RateViewerPanel
016     *
017     * @author jeff@shiftone.org (Jeff Drost)
018     */
019    public class TracePanel extends JPanel implements TreeSelectionListener {
020    
021        private static final Logger LOG = Logger.getLogger(TracePanel.class);
022        private static final long serialVersionUID = 1;
023        private JSplitPane splitPane = null;
024        private JTree tree = null;
025        private TraceTreeNode rootNode = null;
026        // private JMenuItem spawnRoot = new JMenuItem(MENU_TREE_SPAWN_ROOT);
027        //private JMenuItem statView = new JMenuItem(MENU_TREE_STAT_VIEW);
028        // private JMenuItem touchGraph = new JMenuItem(MENU_TREE_TOUCHGRAPH);
029        private NodeDetailPanel detailPanel;
030    
031        public TracePanel(TraceTreeNode rootNode) {
032    
033    
034            this.rootNode = rootNode;
035            tree = new JTree(rootNode);
036            tree.setRootVisible(false);
037    
038            detailPanel = new NodeDetailPanel();
039            splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
040    
041            splitPane.setDividerLocation(0.75);
042            splitPane.setResizeWeight(0.75);
043            splitPane.setOneTouchExpandable(true);
044            splitPane.add(new JScrollPane(tree), JSplitPane.TOP);
045            splitPane.add(detailPanel, JSplitPane.BOTTOM);
046            setLayout(new BorderLayout());
047            add(splitPane, BorderLayout.CENTER);
048    
049            //
050            tree.addTreeSelectionListener(this);
051            tree.setCellRenderer(new StackTreeCellRenderer());
052            tree.setScrollsOnExpand(true);
053            tree.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
054    
055            //
056    //        JPopupMenu popupMenu = new JPopupMenu();
057    //
058    //        popupMenu.add(statView);
059    //        popupMenu.add(spawnRoot);
060    //        popupMenu.add(touchGraph);
061    //
062    //        TreePopupMouseAdaptor treePopupMouseAdaptor = new TreePopupMouseAdaptor(popupMenu, tree);
063    //
064    //        tree.addMouseListener(treePopupMouseAdaptor);
065            //  statView.addActionListener(new StatsViewAction(treePopupMouseAdaptor));
066            // spawnRoot.addActionListener(new SpawnRootAction(treePopupMouseAdaptor));
067            // touchGraph.addActionListener(new TouchGraphAction(treePopupMouseAdaptor));
068        }
069    
070    
071        public void paint(Graphics g) {
072            LOG.debug("paint");
073            super.paint(g);
074        }
075    
076    
077        public void valueChanged(TreeSelectionEvent e) {
078    
079            TreePath treePath = e.getNewLeadSelectionPath();
080            TraceTreeNode thisNode = null;
081    
082            if (treePath != null) {
083                thisNode = (TraceTreeNode) treePath.getLastPathComponent();
084            }
085    
086            final TraceTreeNode finalThisNode = thisNode;
087    
088            SwingUtilities.invokeLater(new Runnable() {
089    
090                public void run() {
091                    detailPanel.setStackTreeNode(rootNode, finalThisNode);
092                }
093            });
094        }
095    }