1 package net.sourceforge.pmd.util.viewer.gui;
2
3 import net.sourceforge.pmd.ast.SimpleNode;
4 import net.sourceforge.pmd.util.viewer.model.ViewerModel;
5 import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
6 import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
7
8 import javax.swing.*;
9 import javax.swing.event.ListSelectionEvent;
10 import javax.swing.event.ListSelectionListener;
11 import java.awt.BorderLayout;
12 import java.util.Vector;
13
14 /***
15 * A panel showing XPath expression evaluation results
16 *
17 * @author Boris Gruschko ( boris at gruschko.org )
18 * @version $Id: EvaluationResultsPanel.java,v 1.11 2006/02/10 14:15:31 tomcopeland Exp $
19 */
20 public class EvaluationResultsPanel extends JPanel implements ViewerModelListener {
21 private ViewerModel model;
22 private JList list;
23
24 /***
25 * constructs the panel
26 *
27 * @param model model to refer to
28 */
29 public EvaluationResultsPanel(ViewerModel model) {
30 super(new BorderLayout());
31
32 this.model = model;
33
34 init();
35 }
36
37 private void init() {
38 model.addViewerModelListener(this);
39
40 list = new JList();
41 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
42
43 list.addListSelectionListener(new ListSelectionListener() {
44 public void valueChanged(ListSelectionEvent e) {
45 if (list.getSelectedValue() != null) {
46 model.selectNode((SimpleNode) list.getSelectedValue(), EvaluationResultsPanel.this);
47 }
48 }
49 });
50
51 add(new JScrollPane(list), BorderLayout.CENTER);
52 }
53
54 /***
55 * @see ViewerModelListener#viewerModelChanged(ViewerModelEvent)
56 */
57 public void viewerModelChanged(ViewerModelEvent e) {
58 switch (e.getReason()) {
59 case ViewerModelEvent.PATH_EXPRESSION_EVALUATED:
60
61 if (e.getSource() != this) {
62 list.setListData(new Vector(model.getLastEvaluationResults()));
63 }
64
65 break;
66
67 case ViewerModelEvent.CODE_RECOMPILED:
68 list.setListData(new Vector(0));
69
70 break;
71 }
72 }
73 }