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.9 2005/09/02 19:36:22 tomcopeland Exp $
19 */
20 public class EvaluationResultsPanel
21 extends JPanel
22 implements ViewerModelListener {
23 private ViewerModel model;
24 private JList list;
25
26 /***
27 * constructs the panel
28 *
29 * @param model model to refer to
30 */
31 public EvaluationResultsPanel(ViewerModel model) {
32 super(new BorderLayout());
33
34 this.model = model;
35
36 init();
37 }
38
39 private void init() {
40 model.addViewerModelListener(this);
41
42 list = new JList();
43 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
44
45 list.addListSelectionListener(new ListSelectionListener() {
46 public void valueChanged(ListSelectionEvent e) {
47 if (list.getSelectedValue() != null) {
48 model.selectNode((SimpleNode) list.getSelectedValue(), EvaluationResultsPanel.this);
49 }
50 }
51 });
52
53 add(new JScrollPane(list), BorderLayout.CENTER);
54 }
55
56 /***
57 * @see ViewerModelListener#viewerModelChanged(ViewerModelEvent)
58 */
59 public void viewerModelChanged(ViewerModelEvent e) {
60 switch (e.getReason()) {
61 case ViewerModelEvent.PATH_EXPRESSION_EVALUATED:
62
63 if (e.getSource() != this) {
64 list.setListData(new Vector(model.getLastEvaluationResults()));
65 }
66
67 break;
68
69 case ViewerModelEvent.CODE_RECOMPILED:
70 list.setListData(new Vector(0));
71
72 break;
73 }
74 }
75 }