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 }