1 package net.sourceforge.pmd.util.viewer.gui;
2
3
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 import net.sourceforge.pmd.util.viewer.util.NLS;
8
9 import javax.swing.*;
10 import java.awt.Dimension;
11
12
13 /***
14 * Panel for the XPath entry and editing
15 *
16 * @author Boris Gruschko ( boris at gruschko.org )
17 * @version $Id: XPathPanel.java,v 1.9 2005/09/02 19:36:22 tomcopeland Exp $
18 */
19
20 public class XPathPanel
21
22 extends JTabbedPane
23
24 implements ViewerModelListener {
25
26 private ViewerModel model;
27
28 private JTextArea xPathArea;
29
30
31 /***
32 * Constructs the panel
33 *
34 * @param model model to refer to
35 */
36
37 public XPathPanel(ViewerModel model) {
38
39 super(JTabbedPane.BOTTOM);
40
41
42 this.model = model;
43
44
45 init();
46
47 }
48
49
50 private void init() {
51
52 model.addViewerModelListener(this);
53
54
55 xPathArea = new JTextArea();
56
57
58 setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), NLS.nls("XPATH.PANEL.TITLE")));
59
60
61 add(new JScrollPane(xPathArea), NLS.nls("XPATH.PANEL.EXPRESSION"));
62
63 add(new EvaluationResultsPanel(model), NLS.nls("XPATH.PANEL.RESULTS"));
64
65
66 setPreferredSize(new Dimension(-1, 200));
67
68 }
69
70
71 /***
72 * retrieves the XPath expression typed into the text area
73 *
74 * @return XPath expression
75 */
76
77 public String getXPathExpression() {
78
79 return xPathArea.getText();
80
81 }
82
83
84 /***
85 * @see ViewerModelListener#viewerModelChanged(ViewerModelEvent)
86 */
87
88 public void viewerModelChanged(ViewerModelEvent e) {
89
90 switch (e.getReason()) {
91
92 case ViewerModelEvent.PATH_EXPRESSION_APPENDED:
93
94
95 if (e.getSource() != this) {
96
97 xPathArea.append((String) e.getParameter());
98
99 }
100
101
102 setSelectedIndex(0);
103
104
105 break;
106
107
108 case ViewerModelEvent.CODE_RECOMPILED:
109
110 setSelectedIndex(0);
111
112
113 break;
114
115 }
116
117 }
118
119 }