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 }