1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package de.desy.acop.displayers.chart;
24
25 import java.awt.Dimension;
26 import java.awt.GridBagConstraints;
27 import java.awt.GridBagLayout;
28 import java.awt.Insets;
29 import java.awt.event.ActionEvent;
30 import java.awt.event.ActionListener;
31 import java.awt.event.KeyAdapter;
32 import java.awt.event.KeyEvent;
33
34 import javax.swing.JButton;
35 import javax.swing.JLabel;
36 import javax.swing.JPanel;
37 import javax.swing.JTextField;
38
39 import com.cosylab.gui.components.numberfield.DoubleDocument;
40
41 import de.desy.acop.displayers.tools.AcopUtilities;
42
43
44
45
46
47
48
49
50
51
52
53 public class MinMaxPanel extends JPanel {
54
55 private static final long serialVersionUID = 1L;
56
57 private JButton rescaleButton;
58
59 private JTextField maxField;
60 private JTextField minField;
61 private DoubleDocument maxDocument;
62 private DoubleDocument minDocument;
63 private JLabel maxLabel;
64 private JLabel minLabel;
65 private double min = 0;
66 private double max = 0;
67 private Dimension fieldDim = new Dimension(70,21);
68 private boolean rescaleEnabled = false;
69 private boolean extraDigits = false;
70 private boolean useScientific = true;
71
72
73
74
75
76
77 public MinMaxPanel() {
78 super();
79 initialize();
80 }
81
82 private void initialize() {
83 setLayout(new GridBagLayout());
84
85 maxField = new JTextField();
86 maxDocument = new DoubleDocument();
87 maxField.setDocument(maxDocument);
88 maxField.setText(String.valueOf(max));
89 maxField.addKeyListener(new KeyAdapter() {
90 public void keyPressed(KeyEvent evt) {
91 rescaleEnabled = true;
92 rescaleButton.setEnabled(isEnabled());
93 }
94 });
95
96 maxField.setMinimumSize(fieldDim);
97 maxField.setPreferredSize(fieldDim);
98 maxField.setToolTipText("Maximum Value");
99
100 maxLabel = new JLabel("Max");
101 this.add(maxField, new GridBagConstraints(1,0,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,2,2,0),0,0));
102 this.add(maxLabel, new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,2,2),0,0));
103
104 minField = new JTextField();
105 minDocument = new DoubleDocument();
106 minField.setDocument(minDocument);
107 minField.setText(String.valueOf(min));
108 minField.addKeyListener(new KeyAdapter() {
109 public void keyPressed(KeyEvent evt) {
110 rescaleEnabled = true;
111 rescaleButton.setEnabled(isEnabled());
112 }
113 });
114 minField.setMinimumSize(fieldDim);
115 minField.setPreferredSize(fieldDim);
116 minField.setToolTipText("Minimum Value");
117
118 minLabel = new JLabel("Min");
119 this.add(minField, new GridBagConstraints(1,1,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2,2,2,0),0,0));
120 this.add(minLabel, new GridBagConstraints(0,1,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,2,2,2),0,0));
121
122 rescaleButton = new JButton("Apply Scale");
123 rescaleButton.addActionListener(new ActionListener(){
124 public void actionPerformed(ActionEvent e) {
125 rescaleEnabled = false;
126 setMin(minDocument.getValue().doubleValue());
127 setMax(maxDocument.getValue().doubleValue());
128 rescaleButton.setEnabled(false);
129 }
130 });
131 rescaleButton.setEnabled(false);
132 rescaleButton.setToolTipText("Apply New Scale Settings");
133 rescaleButton.setEnabled(false);
134
135 this.add(rescaleButton, new GridBagConstraints(0,2,2,1,1,0,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2,0,0,0),0,0));
136 }
137
138
139
140
141
142 public double getMax() {
143 return max;
144 }
145
146
147
148
149
150
151 public void setMax(double max) {
152 setMax(max, true);
153 }
154
155
156
157
158
159
160
161 public void setMax(double max, boolean notify) {
162 if (this.max == max) return;
163 double oldValue = this.max;
164 this.max = max;
165 applyMax(max);
166 if (notify) {
167 firePropertyChange("max", oldValue, this.max);
168 }
169 }
170
171 private void applyMax(double max) {
172 boolean enabled = maxField.isEnabled();
173 maxField.setEnabled(true);
174 maxField.setText(AcopUtilities.formatValue(max, extraDigits));
175 maxField.setEnabled(enabled);
176 maxField.setCaretPosition(0);
177 }
178
179
180
181
182
183 public double getMin() {
184 return min;
185 }
186
187
188
189
190
191
192 public void setMin(double min) {
193 setMin(min, true);
194 }
195
196
197
198
199
200
201
202 public void setMin(double min, boolean notify) {
203 if (this.min == min) return;
204 double oldValue = this.min;
205 this.min = min;
206 applyMin(min);
207 if (notify) {
208 firePropertyChange("min", oldValue, this.min);
209 }
210 }
211
212 private void applyMin(double min) {
213 boolean enabled = minField.isEnabled();
214 minField.setEnabled(true);
215 minField.setText(AcopUtilities.formatValue(min, extraDigits));
216 minField.setEnabled(enabled);
217 minField.setCaretPosition(0);
218 }
219
220
221
222
223
224
225 public void setRescaleEnabled(boolean enabled) {
226 if (enabled == rescaleEnabled) return;
227 this.rescaleEnabled = enabled;
228 rescaleButton.setEnabled(enabled & isEnabled());
229 firePropertyChange("rescaleEnabled", !enabled, enabled);
230 }
231
232
233
234
235
236
237 public boolean isRescaleEnabled() {
238 return rescaleEnabled;
239 }
240
241
242
243
244
245 @Override
246 public void setEnabled(boolean enabled) {
247 super.setEnabled(enabled);
248 minField.setEnabled(enabled);
249 maxField.setEnabled(enabled);
250 minLabel.setEnabled(enabled);
251 maxLabel.setEnabled(enabled);
252 rescaleButton.setEnabled(enabled & rescaleEnabled);
253 }
254
255
256
257
258
259
260
261 public void setExtraDigits(boolean extraDigits) {
262 if (this.extraDigits == extraDigits) return;
263 this.extraDigits = extraDigits;
264 firePropertyChange("extraDigits", !extraDigits, extraDigits);
265 applyMax(max);
266 applyMin(min);
267 }
268
269
270
271
272
273
274 public boolean isExtraDigits() {
275 return extraDigits;
276 }
277
278
279
280
281
282
283
284 public void setUseScientific(boolean scientific) {
285 if (this.useScientific == scientific) return;
286 this.useScientific = scientific;
287 firePropertyChange("useScientific", !scientific, scientific);
288 applyMax(max);
289 applyMin(min);
290 }
291
292
293
294
295
296 public boolean isUseScientific() {
297 return useScientific;
298 }
299 }