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.GridBagConstraints;
26  import java.awt.GridBagLayout;
27  import java.awt.Insets;
28  import java.awt.event.ActionEvent;
29  import java.awt.event.ActionListener;
30  import java.beans.Customizer;
31  import java.beans.PropertyChangeEvent;
32  import java.beans.PropertyChangeListener;
33  
34  import javax.swing.JCheckBox;
35  import javax.swing.JPanel;
36  
37  import de.desy.acop.displayers.AcopChartReorg;
38  import de.desy.acop.displayers.AcopTrendChart;
39  import de.desy.acop.displayers.tools.RecentTimespanSelector;
40  
41  /**
42   * <code>RecentTimespanCustomizer</code> is a customizer which allows
43   * selecting a timespan from now until some time in the past using the
44   * {@link RecentTimespanSelector}.
45   * 
46   * @author Tilen Kusterle, Cosylab
47   *
48   */
49  public class RecentTimespanCustomizer extends JPanel implements Customizer {
50  
51  	private static final long serialVersionUID = 1L;
52  	
53  	private AcopTrendChart acopTrendChart;
54  	private JCheckBox allDataBox;
55  	private RecentTimespanSelector selector;
56  	
57  	/**
58  	 * Constructs a new RecentTimespanCustomizer.
59  	 *
60  	 */
61  	public RecentTimespanCustomizer() {
62  		setLayout(new GridBagLayout());
63  		add(getAllDataBox(), new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.NONE,new Insets(1,1,1,1),0,0));
64  		selector = new RecentTimespanSelector();
65  		add(selector, new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(1,1,1,1),0,0));
66  		
67  	}
68  
69  	/* (non-Javadoc)
70  	 * @see java.beans.Customizer#setObject(java.lang.Object)
71  	 */
72  	public void setObject(Object bean) {
73  		acopTrendChart = (AcopTrendChart) bean;
74  		acopTrendChart.addPropertyChangeListener(new PropertyChangeListener() {
75  			public void propertyChange(PropertyChangeEvent evt) {
76  				String propertyName = evt.getPropertyName();
77  				if (propertyName.equals(AcopChartReorg.X_RANGE_MIN) || propertyName.equals(AcopChartReorg.X_RANGE_MAX)) {
78  					selector.setTimeSpan(acopTrendChart.getXRangeMax()-acopTrendChart.getXRangeMin());
79  				}
80  			}});
81  		selector.addPropertyChangeListener(RecentTimespanSelector.TIME_SPAN, new PropertyChangeListener() {
82  			public void propertyChange(PropertyChangeEvent evt) {
83  				acopTrendChart.setTimeSpan((Double) evt.getNewValue());
84  			}});
85  		getAllDataBox().setSelected(acopTrendChart.isAutoScaleToLiveData());
86  		selector.setEnabled(false);
87  
88  	}
89  	
90  	private JCheckBox getAllDataBox() {
91  		if (allDataBox == null) {
92  			allDataBox = new JCheckBox("Autoscale to Live Data");
93  			allDataBox.setToolTipText("Adjusts displayed time span to include new live data");
94  			allDataBox.addActionListener(new ActionListener() {
95  				public void actionPerformed(ActionEvent e) {
96  					if (acopTrendChart != null) acopTrendChart.setAutoScaleToLiveData(allDataBox.isSelected());
97  					selector.setEnabled(!allDataBox.isSelected());
98  				}});
99  		}
100 
101 		return allDataBox;
102 	}
103 
104 }