View Javadoc

1   /*
2    * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3    * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4    *
5    * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6    * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7    * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8    * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9    * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11   * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12   * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13   * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14   * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15   * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16   * OR MODIFICATIONS.
17   * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18   * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19   * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20   * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
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 javax.swing.JCheckBox;
32  import javax.swing.JComboBox;
33  import javax.swing.JLabel;
34  import javax.swing.JPanel;
35  import javax.swing.JTextField;
36  import javax.swing.SwingUtilities;
37  
38  import com.cosylab.gui.components.util.RunnerHelper;
39  
40  import de.desy.acop.displayers.selector.AcopComboBoxModel;
41  
42  
43  /**
44   * <code>TrendSelector</code> is a visual component which enables selecting
45   * <code>HistoryParameters</code>. The component shows input fields
46   * which allow one to enter a desired connection point which will be used
47   * for history connections. 
48   * 
49   * @author Tilen Kusterle, Cosylab
50   */
51  public class TrendSelector extends JPanel {
52  
53  	public static void main(String[] args) {
54  		RunnerHelper.runComponent(new TrendSelector(), 440,400);
55  	}
56  	private static final long serialVersionUID = 1L;
57  	private static final String SUBSYSTEM = "HIST";
58  	
59  	private JLabel subsystemLabel;
60  	private JLabel contextLabel;
61  	private JLabel serverLabel;
62  	private JLabel propertyLabel;
63  	private JLabel deviceLabel;
64  	private JLabel indexLabel;
65  	
66  	private JLabel subsystemValueLabel;
67  	private JTextField contextField;
68  	private JTextField serverField;
69  	private JTextField propertyField;
70  	private JTextField deviceField;
71  	private JComboBox indexCombo;
72  	
73  	private JCheckBox enableHistoryBox;
74  	private boolean historyEnabled = false;
75  	
76  	private IndexModel indexModel;
77  	
78  	private class IndexModel extends AcopComboBoxModel<Integer> {
79  
80  		private static final long serialVersionUID = 1L;
81  		public IndexModel() {
82  			super(Integer.class);
83  		}
84  		
85  		public void setMaxIndex(int maxIndex) {
86  			removeAllElements();
87  			Integer[] values = new Integer[maxIndex+1];
88  			for (int i = 0; i <= maxIndex; i++) {
89  				values[i] = i;
90  			}
91  			setElements(values);
92  			if (values.length > 0) {
93  				setSelectedItem(values[0]);
94  			}
95  		}
96  	}
97  	
98  	/**
99  	 * Constructs new TrendSelector.
100 	 *
101 	 */
102 	public TrendSelector() {
103 		initialize();
104 	}
105 	
106 	private void initialize() {
107 		setLayout(new GridBagLayout());
108 		
109 		add(getEnableHistoryBox(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
110 		add(getSubsystemLabel(), new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
111 		add(getSubsystemValueLabel(), new GridBagConstraints(1,1,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
112 		add(getContextLabel(), new GridBagConstraints(0,2,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
113 		add(getContextField(), new GridBagConstraints(1,2,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
114 		add(getServerLabel(), new GridBagConstraints(0,3,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
115 		add(getServerField(), new GridBagConstraints(1,3,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
116 		add(getDeviceLabel(), new GridBagConstraints(0,4,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
117 		add(getDeviceField(), new GridBagConstraints(1,4,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
118 		add(getPropertyLabel(), new GridBagConstraints(0,5,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
119 		add(getPropertyField(), new GridBagConstraints(1,5,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
120 		add(getIndexLabel(), new GridBagConstraints(0,6,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.NONE,new Insets(1,10,1,1),0,0));
121 		add(getIndexCombo(), new GridBagConstraints(1,6,1,1,1,1,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(1,1,1,10),0,0));
122 		
123 //		enableHistoryChoosing(false);
124 //		getEnableHistoryBox().setSelected(false);
125 		
126 	}
127 	
128 	private JCheckBox getEnableHistoryBox() {
129 		if (enableHistoryBox == null) {
130 			enableHistoryBox = new JCheckBox("History Enabled");
131 			enableHistoryBox.addActionListener(new ActionListener() {
132 				public void actionPerformed(ActionEvent e) {
133 					setHistoryEnabled(enableHistoryBox.isSelected());
134 				}});
135 			enableHistoryBox.setSelected(true);
136 		}
137 
138 		return enableHistoryBox;
139 	}
140 	
141 	private JLabel getSubsystemLabel() {
142 		if (subsystemLabel == null) {
143 			subsystemLabel = new JLabel("Subsystem");
144 			subsystemLabel.setPreferredSize(new Dimension(120,21));
145 			subsystemLabel.setMinimumSize(new Dimension(120,21));
146 			subsystemLabel.setMaximumSize(new Dimension(120,21));
147 		}
148 
149 		return subsystemLabel;
150 	}
151 	
152 	private JLabel getSubsystemValueLabel() {
153 		if (subsystemValueLabel == null) {
154 			subsystemValueLabel = new JLabel(SUBSYSTEM);
155 			subsystemValueLabel.setPreferredSize(new Dimension(120,21));
156 			subsystemValueLabel.setMinimumSize(new Dimension(120,21));
157 			subsystemValueLabel.setMaximumSize(new Dimension(120,21));
158 		}
159 
160 		return subsystemValueLabel;
161 	}
162 	
163 	private JLabel getContextLabel() {
164 		if (contextLabel == null) {
165 			contextLabel = new JLabel("Context");
166 			contextLabel.setPreferredSize(new Dimension(120,21));
167 			contextLabel.setMinimumSize(new Dimension(120,21));
168 			contextLabel.setMaximumSize(new Dimension(120,21));
169 		}
170 
171 		return contextLabel;
172 	}
173 	
174 	private JTextField getContextField() {
175 		if (contextField == null) {
176 			contextField = new JTextField();
177 			contextField.setPreferredSize(new Dimension(120,21));
178 			contextField.setMinimumSize(new Dimension(120,21));
179 			contextField.setMaximumSize(new Dimension(120,21));
180 		}
181 
182 		return contextField;
183 	}
184 	
185 	private JLabel getServerLabel() {
186 		if (serverLabel == null) {
187 			serverLabel = new JLabel("Server");
188 			serverLabel.setPreferredSize(new Dimension(120,21));
189 			serverLabel.setMinimumSize(new Dimension(120,21));
190 			serverLabel.setMaximumSize(new Dimension(120,21));
191 		}
192 
193 		return serverLabel;
194 	}
195 	
196 	private JTextField getServerField() {
197 		if (serverField == null) {
198 			serverField = new JTextField();
199 			serverField.setPreferredSize(new Dimension(120,21));
200 			serverField.setMinimumSize(new Dimension(120,21));
201 			serverField.setMaximumSize(new Dimension(120,21));
202 		}
203 
204 		return serverField;
205 	}
206 	
207 	private JLabel getPropertyLabel() {
208 		if (propertyLabel == null) {
209 			propertyLabel = new JLabel("Property");
210 			propertyLabel.setPreferredSize(new Dimension(120,21));
211 			propertyLabel.setMinimumSize(new Dimension(120,21));
212 			propertyLabel.setMaximumSize(new Dimension(120,21));
213 		}
214 
215 		return propertyLabel;
216 	}
217 	
218 	private JTextField getPropertyField() {
219 		if (propertyField == null) {
220 			propertyField = new JTextField();
221 			propertyField.setPreferredSize(new Dimension(120,21));
222 			propertyField.setMinimumSize(new Dimension(120,21));
223 			propertyField.setMaximumSize(new Dimension(120,21));
224 		}
225 
226 		return propertyField;
227 	}
228 	
229 	private JLabel getDeviceLabel() {
230 		if (deviceLabel == null) {
231 			deviceLabel = new JLabel("Device");
232 			deviceLabel.setPreferredSize(new Dimension(120,21));
233 			deviceLabel.setMinimumSize(new Dimension(120,21));
234 			deviceLabel.setMaximumSize(new Dimension(120,21));
235 		}
236 
237 		return deviceLabel;
238 	}
239 	
240 	private JTextField getDeviceField() {
241 		if (deviceField == null) {
242 			deviceField = new JTextField();
243 			deviceField.setPreferredSize(new Dimension(120,21));
244 			deviceField.setMinimumSize(new Dimension(120,21));
245 			deviceField.setMaximumSize(new Dimension(120,21));
246 		}
247 
248 		return deviceField;
249 	}
250 	
251 	private JLabel getIndexLabel() {
252 		if (indexLabel == null) {
253 			indexLabel = new JLabel("Index");
254 			indexLabel.setPreferredSize(new Dimension(120,21));
255 			indexLabel.setMinimumSize(new Dimension(120,21));
256 			indexLabel.setMaximumSize(new Dimension(120,21));
257 		}
258 
259 		return indexLabel;
260 	}
261 	
262 	private JComboBox getIndexCombo() {
263 		if (indexCombo == null) {
264 			indexCombo = new JComboBox();
265 			indexCombo.setModel(getIndexModel());
266 			indexCombo.setPreferredSize(new Dimension(120,21));
267 			indexCombo.setMinimumSize(new Dimension(120,21));
268 			indexCombo.setMaximumSize(new Dimension(120,21));
269 		}
270 
271 		return indexCombo;
272 	}
273 	
274 	private IndexModel getIndexModel() {
275 		if (indexModel == null) {
276 			indexModel = new IndexModel();
277 			indexModel.setElements(new Integer[]{new Integer(0)});
278 		}
279 
280 		return indexModel;
281 	}
282 	
283 	private void enableHistoryChoosing(boolean enable) {
284 		getContextField().setEnabled(enable);
285 		getServerField().setEnabled(enable);
286 		getDeviceField().setEnabled(enable);
287 		getPropertyField().setEnabled(enable);
288 	}
289 	
290 	/**
291 	 * Returns the selected HistoryParameters.
292 	 * 
293 	 * @return the parameters
294 	 */
295 	public HistoryParameters getHistoryParameters() {
296 		if (!enableHistoryBox.isSelected()) return null;
297 		return new HistoryParameters(
298 				getContextField().getText(),
299 				getServerField().getText(),
300 				getDeviceField().getText(),
301 				getPropertyField().getText(),
302 				(Integer) getIndexCombo().getSelectedItem());
303 	}
304 	
305 	/**
306 	 * Sets the HistoryParameters.
307 	 * 
308 	 * @param parameters 
309 	 */
310 	public void setHistoryParameters(HistoryParameters parameters) {
311 		if (parameters == null) {
312 			setValues(null, null, null, null);
313 		}
314 		else setValues(
315 				parameters.getHistoryContext(),
316 				parameters.getHistoryServer(),
317 				parameters.getHistoryDevice(),
318 				parameters.getHistoryProperty());
319 	}
320 	
321 	/**
322 	 * Sets the given values to the entry fields.
323 	 * 
324 	 * @param context
325 	 * @param server
326 	 * @param device
327 	 * @param property
328 	 */
329 	public void setHistoryParameters(String context, String server, String device, String property) {
330 		setValues(context, server, device, property);
331 		getIndexModel().setMaxIndex(0);
332 		
333 	}
334 	
335 	private void setValues(String context, String server, String device, String property) {
336 		getContextField().setText(context == null ? "" : context);
337 		getServerField().setText(server == null ? "" : server);
338 		getDeviceField().setText(device == null ? "" : device);
339 		getPropertyField().setText(property == null ? "" : property);
340 	}
341 	
342 	/**
343 	 * Sets the selected index.
344 	 * 
345 	 * @param index
346 	 */
347 	public void setSelectedIndex(int index) {
348 		getIndexCombo().setSelectedItem(new Integer(index));
349 	}
350 	
351 	/**
352 	 * Sets the maximum value for the index selector.
353 	 * 
354 	 * @param max new maximum value
355 	 */
356 	public void setIndexMax(final int max) {
357 		SwingUtilities.invokeLater(new Runnable() {
358 			public void run() {
359 				getIndexModel().setMaxIndex(max);
360 			}
361 		});	
362 	}
363 	
364 	/**
365 	 * Returns the selected index.
366 	 * 
367 	 * @return the index
368 	 */
369 	public int getSelectedIndex() {
370 		return getIndexCombo().getSelectedIndex();
371 	}
372 
373 	/**
374 	 * Returns true if history selection is enabled.
375 	 * 
376 	 * @return the historyEnabled
377 	 */
378 	public boolean isHistoryEnabled() {
379 		return historyEnabled;
380 	}
381 
382 	/**
383 	 * Enables/disables history selection.
384 	 * 
385 	 * @param historyEnabled the historyEnabled to set
386 	 */
387 	public void setHistoryEnabled(boolean historyEnabled) {
388 		this.historyEnabled = historyEnabled;
389 		getEnableHistoryBox().setSelected(historyEnabled);
390 		enableHistoryChoosing(historyEnabled);
391 	}
392 	
393 	
394 }