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.selector;
24  
25  import java.awt.Component;
26  
27  import javax.swing.DefaultListCellRenderer;
28  import javax.swing.JLabel;
29  import javax.swing.JList;
30  import javax.swing.ListCellRenderer;
31  
32  import com.cosylab.gui.adapters.Converter;
33  
34  import de.desy.acop.chart.AcopDisplayMode;
35  import de.desy.acop.displayers.tools.AcopGraphParameters;
36  import de.desy.acop.displayers.tools.MultipleAcopDisplayer;
37  
38  /**
39   * <code>ChartConnectionCustomizer</code> is a connection customizer 
40   * for multiple displayers that handle <code>AcopGraphParameters</code> (eg. AcopChart).
41   * 
42   * @author Jaka Bobnar, Cosylab
43   * @see AcopGraphParameters
44   * @see MultipleAcopDisplayer
45   *
46   */
47  public class ChartConnectionCustomizer extends MultipleConnectionCustomizer<AcopGraphParameters>{
48  	
49  	private static final long serialVersionUID = 8873830017332674294L;
50  	private GraphCustomizerPanel graphCustomizerPanel;
51  	private SelectorGUI selector;
52  	
53  	protected class AcopGraphCellRenderer extends DefaultListCellRenderer {
54  		
55  		private static final long serialVersionUID = 7937185460891053942L;
56  
57  		public AcopGraphCellRenderer() {
58  			super();
59  			setOpaque(true);
60  		}
61  		
62  		/*
63  		 * (non-Javadoc)
64  		 * @see javax.swing.DefaultListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
65  		 */
66  		@Override
67  		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
68  			Component c = super.getListCellRendererComponent(list, value, index, isSelected,
69  					cellHasFocus);
70  			
71  			if (value instanceof AcopGraphParameters) {
72  				c.setForeground(((AcopGraphParameters)value).getColor());
73  				((JLabel)c).setText(String.valueOf(((AcopGraphParameters)value).getConnectionParameters()) + (((AcopGraphParameters)value).getConverter() == null ? "" : "; Converter"));
74  			}
75  			return c;
76  		}
77  	}
78  	
79  	/*
80  	 * (non-Javadoc)
81  	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getListRenderer()
82  	 */
83  	@Override
84  	protected ListCellRenderer getListRenderer() {
85  		return new AcopGraphCellRenderer();
86  	}
87  	
88  	/*
89  	 * (non-Javadoc)
90  	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getSelectorGUI()
91  	 */
92  	@Override
93  	protected SelectorGUI getSelectorGUI() {
94  		if (selector == null) {
95  			selector = super.getSelectorGUI();
96  			selector.addSelectorGUIListener(new SelectorGUIListener() {
97  				public void selectionChanged(SelectorGUIEvent e) {
98  					if (e.isSelectionComplete() && SelectorUtilities.isChannel(selector.getConnectionParameters())) {
99  						getGraphCustomizerPanel().setGraphMode(AcopDisplayMode.SimpleHistogram.ordinal());
100 					} else {
101 						getGraphCustomizerPanel().setGraphMode(AcopDisplayMode.PolyLine.ordinal());
102 					}
103 				}
104 			});
105 		}
106 		
107 	    return super.getSelectorGUI();
108     }
109 	
110 	/*
111 	 * (non-Javadoc)
112 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#generateParameters()
113 	 */
114 	@Override
115 	protected AcopGraphParameters generateParameters() {
116 		Converter c=null;
117 		try {
118 			c= getConverterPanel().getConverter();
119 			if (c!=null) {
120 				c= (Converter)c.clone();
121 			}
122 		} catch (CloneNotSupportedException e) {
123 			e.printStackTrace();
124 		}
125 		return new AcopGraphParameters(
126 				getSelectorGUI().getConnectionParameters(), 
127 				getGraphCustomizerPanel().getColor(),
128 				getGraphCustomizerPanel().getGraphFFT(),
129 				getGraphCustomizerPanel().getGraphStyle(),
130 				getGraphCustomizerPanel().getGraphMode(),
131 				getGraphCustomizerPanel().getGraphWidth(),
132 				getGraphCustomizerPanel().isTrend(),
133 				getGraphCustomizerPanel().getTrendLength(),
134 				c);
135 		
136 	}
137 
138 	/*
139 	 * (non-Javadoc)
140 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getSettingsPanel()
141 	 */
142 	@Override
143 	protected MultipleDisplayerAbstractSettingsPanel<AcopGraphParameters> getSettingsPanel() {
144 		return getGraphCustomizerPanel();
145 	}
146 	
147 	private GraphCustomizerPanel getGraphCustomizerPanel() {
148 		if (graphCustomizerPanel == null) {
149 			graphCustomizerPanel = new GraphCustomizerPanel();
150 		}
151 		return graphCustomizerPanel;
152 	}
153 
154 	/*
155 	 * (non-Javadoc)
156 	 * @see de.desy.acop.displayers.selector.MultipleConnectionCustomizer#getDisplayerParameters()
157 	 */
158 	@Override
159 	public AcopGraphParameters[] getDisplayerParameters() {
160 		AcopGraphParameters[] p = new AcopGraphParameters[displayerParameters.size()];
161     	return displayerParameters.toArray(p);
162 	}
163 	
164 	/**
165 	 * Constructs new ChartConnectionCustomizer.
166 	 *
167 	 */
168 	public ChartConnectionCustomizer() {
169 		super();
170 		setConverterTabEnabled(true);
171 	}
172 }