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;
24
25 import java.beans.PropertyVetoException;
26 import java.util.Map;
27
28 import javax.swing.Action;
29
30 import com.cosylab.gui.InfoDialog;
31 import com.cosylab.gui.SliderDisplayer;
32 import com.cosylab.gui.components.SliderSetMode;
33 import com.cosylab.gui.components.util.IconHelper;
34 import com.cosylab.gui.displayers.DataConsumer;
35 import com.cosylab.gui.displayers.DataState;
36 import com.cosylab.gui.displayers.DisplayerUtilities;
37 import com.cosylab.gui.displayers.DoubleConsumer;
38 import com.cosylab.gui.displayers.DoubleConsumerMulticaster;
39 import com.cosylab.gui.displayers.DoubleSeqConsumer;
40 import com.cosylab.gui.util.UserSettingsProtection;
41 import com.cosylab.util.CommonException;
42
43 import de.desy.acop.displayers.tools.AcopDisplayerTransferHandler;
44 import de.desy.acop.displayers.tools.AcopInfoDialog;
45 import de.desy.acop.displayers.tools.AcopDisplayer;
46 import de.desy.acop.launcher.Launcher;
47 import de.desy.acop.transport.ConnectionParameters;
48 import de.desy.acop.transport.adapters.AcopTransportDataSource;
49 import de.desy.acop.transport.adapters.AdapterFactory;
50 import de.desy.acop.transport.adapters.AdapterFactoryService;
51 import de.desy.tine.definitions.TArrayType;
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 public class AcopSlider extends SliderDisplayer implements DoubleSeqConsumer,
90 AcopDisplayer {
91
92 public static void main(String[] args) {
93
94 Launcher.launch(AcopSlider.class, args, true);
95
96 }
97
98 private static final long serialVersionUID = -2503329416853153653L;
99 private ConnectionParameters connectionParameters;
100 private int arrayIndex=0;
101 private AcopInfoDialog dialog;
102
103
104
105
106
107 public AcopSlider() {
108 super();
109 setRestoreButtonTitle("Old");
110 setStorageButtonsVisible(true);
111 setAcopIcons();
112 setContinuousControlVisible(true);
113 new AcopDisplayerTransferHandler(this);
114 UserSettingsProtection.setProtection(this,DisplayerUtilities.COMMON_NUMERIC_DISPLAYER_PROPERTIES,false);
115 }
116
117
118
119
120
121
122
123
124
125
126
127
128
129 public void setAcopIcons() {
130 setButtonIcon(Button.BIT_DECREMENT, IconHelper.createIcon("icons/navigation/ArrowLeft16.gif"));
131 setButtonIcon(Button.BIT_INCREMENT, IconHelper.createIcon("icons/navigation/ArrowRight16.gif"));
132
133 setButtonIcon(Button.SLOW_DECREMENT, IconHelper.createIcon("icons/navigation/ArrowLeftLeft16.gif"));
134 setButtonIcon(Button.SLOW_INCREMENT, IconHelper.createIcon("icons/navigation/ArrowRightRight16.gif"));
135
136 setButtonIcon(Button.FAST_DECREMENT, IconHelper.createIcon("icons/navigation/ArrowLeftLeftLeft16.gif"));
137 setButtonIcon(Button.FAST_INCREMENT, IconHelper.createIcon("icons/navigation/ArrowRightRightRight16.gif"));
138 }
139
140
141
142
143
144 public void updateValue(long timestamp, double[] value) throws CommonException {
145 updateValue(timestamp, DisplayerUtilities.extract(arrayIndex,value));
146 }
147
148
149
150
151 @Override
152 public DataConsumer getDataConsumer(Class type)
153 {
154 if (type == DoubleConsumer.class || type == DoubleSeqConsumer.class) {
155 return this;
156 }
157
158 return DoubleConsumerMulticaster.createDataConsumer(type, this);
159 }
160
161
162
163
164
165 @Override
166 public void setCharacteristics(Map characteristics) {
167 super.setCharacteristics(characteristics);
168
169 Object o = characteristics.get("arrayType");
170 if (o != null) {
171 if (((TArrayType)o).isChannel()) {
172 try {
173 UserSettingsProtection.setUnprotected(this,"arrayIndex",0);
174 } catch (Exception e) {
175 e.printStackTrace();
176 }
177 }
178 }
179 }
180
181
182
183
184
185 public ConnectionParameters getConnectionParameters() {
186 return connectionParameters;
187 }
188
189
190
191
192
193 public void setConnectionParameters(ConnectionParameters param) throws CommonException, PropertyVetoException {
194
195 if (param!=null && connectionParameters != null) {
196 if(param.equals(connectionParameters)) return;
197 }
198 updateDataState(new DataState(DataState.UNDEFINED));
199
200 ConnectionParameters old = connectionParameters;
201 this.connectionParameters = param;
202 AdapterFactory factory = AdapterFactoryService.getInstance().getAdapterFactory();
203 if (getDataSource() != null)
204 factory.releaseDataSource((AcopTransportDataSource) getDataSource());
205 if (param == null) {
206 setDataSource(null);
207 setTitle("No Connection");
208 } else {
209 if (param.getPropertySize() == ConnectionParameters.AUTO_PROPERTY_SIZE) {
210 param = param.deriveWithPropertySize(1);
211 }
212 AcopTransportDataSource ds = factory.createDataSource(param);
213 setDataSource(ds);
214 }
215 firePropertyChange(CONNECTION_PARAMETERS_PROPERTY,old, connectionParameters);
216 }
217
218
219
220
221
222 public int getArrayIndex() {
223 return arrayIndex;
224 }
225
226
227
228
229
230 public void setArrayIndex(int arrayIndex) {
231 if (this.arrayIndex == arrayIndex) return;
232 int oldValue = this.arrayIndex;
233 this.arrayIndex = arrayIndex;
234 firePropertyChange("arrayIndex", oldValue, this.arrayIndex);
235 }
236
237
238
239
240
241 @Override
242 public InfoDialog getInfoDialog() {
243 if (dialog == null) {
244 dialog = new AcopInfoDialog(this);
245 }
246 return dialog;
247 }
248
249
250
251
252
253 public void setPropertiesPopupEnabled(boolean enable) {
254 Action[] actions = getPopupManager().getActions();
255 for (Action a : actions) {
256 if (a != null && "Preferences...".equals(a.getValue(Action.NAME))) {
257 a.setEnabled(enable);
258 return;
259 }
260 }
261 }
262
263
264
265
266
267 public boolean isPropertiesPopupEnabled() {
268 Action[] actions = getPopupManager().getActions();
269 for (Action a : actions) {
270 if (a != null && "Preferences...".equals(a.getValue(Action.NAME))) {
271 return a.isEnabled();
272 }
273 }
274 return false;
275 }
276 }
277
278