|
1
|
|
package abbot.editor.editors;
|
|
2
|
|
|
|
3
|
|
import java.awt.*;
|
|
4
|
|
import java.awt.event.*;
|
|
5
|
|
import javax.swing.JTextArea;
|
|
6
|
|
import javax.swing.JButton;
|
|
7
|
|
import javax.swing.KeyStroke;
|
|
8
|
|
import java.util.Collection;
|
|
9
|
|
|
|
10
|
|
import abbot.i18n.Strings;
|
|
11
|
|
import abbot.script.Expression;
|
|
12
|
|
import abbot.editor.widgets.TextFormat;
|
|
13
|
|
|
|
14
|
|
|
|
15
|
|
|
|
16
|
|
public class ExpressionEditor extends StepEditor {
|
|
17
|
|
|
|
18
|
|
private Expression step;
|
|
19
|
|
private JTextArea expr;
|
|
20
|
|
private JButton run;
|
|
21
|
|
private Color DEFAULT_FG;
|
|
22
|
|
private JTextArea status;
|
|
23
|
|
|
|
24
|
1
|
public ExpressionEditor(Expression step) {
|
|
25
|
1
|
super(step);
|
|
26
|
1
|
this.step = step;
|
|
27
|
1
|
remove(getComponentCount()-1);
|
|
28
|
1
|
expr = addTextArea(null, step.getExpression());
|
|
29
|
1
|
expr.setName("expression.text");
|
|
30
|
1
|
expr.setColumns(80);
|
|
31
|
1
|
expr.setToolTipText(Strings.get("expression.text.tip"));
|
|
32
|
1
|
expr.setLineWrap(false);
|
|
33
|
1
|
run = addButton(Strings.get("expression.eval"));
|
|
34
|
1
|
run.setToolTipText(Strings.get("expression.eval.tip"));
|
|
35
|
1
|
DEFAULT_FG = expr.getForeground();
|
|
36
|
1
|
expr.addKeyListener(new KeyAdapter() {
|
|
37
|
7
|
public void keyReleased(KeyEvent e) {
|
|
38
|
7
|
if (e.getKeyCode() == KeyEvent.VK_ENTER
|
|
39
|
|
&& (e.getModifiers() & InputEvent.SHIFT_MASK) != 0) {
|
|
40
|
0
|
run.doClick();
|
|
41
|
|
}
|
|
42
|
|
}
|
|
43
|
|
});
|
|
44
|
|
|
|
45
|
1
|
status = new JTextArea();
|
|
46
|
1
|
status.setBorder(null);
|
|
47
|
1
|
status.setForeground(Color.red);
|
|
48
|
1
|
status.setBackground(getBackground());
|
|
49
|
1
|
status.setLineWrap(true);
|
|
50
|
1
|
status.setEditable(false);
|
|
51
|
1
|
add(status);
|
|
52
|
|
}
|
|
53
|
|
|
|
54
|
1
|
public Dimension getPreferredSize() {
|
|
55
|
1
|
Insets insets = getInsets();
|
|
56
|
1
|
Dimension size = super.getPreferredSize();
|
|
57
|
1
|
size.width = expr.getPreferredSize().width;
|
|
58
|
1
|
if (insets != null) {
|
|
59
|
1
|
size.width += insets.left + insets.right;
|
|
60
|
|
}
|
|
61
|
1
|
return size;
|
|
62
|
|
}
|
|
63
|
|
|
|
64
|
6
|
public void actionPerformed(ActionEvent ev) {
|
|
65
|
6
|
if (ev.getSource() == expr) {
|
|
66
|
6
|
expr.setForeground(DEFAULT_FG);
|
|
67
|
6
|
expr.setToolTipText(Strings.get("expression.text.tip"));
|
|
68
|
6
|
step.setExpression(expr.getText());
|
|
69
|
6
|
status.setText("");
|
|
70
|
6
|
fireStepChanged();
|
|
71
|
|
}
|
|
72
|
0
|
else if (ev.getSource() == run) {
|
|
73
|
0
|
expr.setForeground(DEFAULT_FG);
|
|
74
|
0
|
expr.setToolTipText(Strings.get("expression.text.tip"));
|
|
75
|
0
|
status.setText("");
|
|
76
|
0
|
new Thread("expression runner") {
|
|
77
|
0
|
public void run() {
|
|
78
|
0
|
try {
|
|
79
|
0
|
step.run();
|
|
80
|
|
}
|
|
81
|
|
catch(Throwable e) {
|
|
82
|
0
|
if (e instanceof bsh.EvalError)
|
|
83
|
0
|
expr.setForeground(Color.red);
|
|
84
|
0
|
status.setText(e.getMessage());
|
|
85
|
|
}
|
|
86
|
0
|
fireStepChanged();
|
|
87
|
|
}
|
|
88
|
|
}.start();
|
|
89
|
|
}
|
|
90
|
|
else {
|
|
91
|
0
|
super.actionPerformed(ev);
|
|
92
|
|
}
|
|
93
|
|
}
|
|
94
|
|
}
|
|
95
|
|
|