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.demo.example;
24
25 import java.awt.Color;
26 import java.beans.PropertyVetoException;
27
28 import com.cosylab.gui.adapters.Converter;
29 import com.cosylab.gui.adapters.ConverterChain;
30 import com.cosylab.gui.adapters.LinearConverter;
31 import com.cosylab.gui.adapters.LogarithmicConverter;
32 import com.cosylab.gui.components.NumberField;
33 import com.cosylab.util.CommonException;
34
35 import de.desy.acop.displayers.AcopNumberLabel;
36 import de.desy.acop.transport.AccessMode;
37 import de.desy.acop.transport.ConnectionParameters;
38
39 public class NumberLabelExample {
40
41 public static void main(String[] args) {
42
43 //How to connect number label to a remote property?
44 //First we create an instance of the AcopNumberLabel object.
45 AcopNumberLabel numberLabel = new AcopNumberLabel();
46 //We require ConnectionParameters which describe the remote property
47 ConnectionParameters parameters = new ConnectionParameters("TINE",
48 "context", "server", "device", "property", AccessMode.POLL, 1000);
49 //These parameters describe a remote property 'context/server/device/property'
50 //in the TINE control system. We will request a constant monitoring,
51 //therefore AccessMode.POLL was used. Polling rate is set to 1000 milliseconds,
52 //which means that value on the number label will be updated every 1000 milliseconds.
53 //Parameters are then attached to the number label. Connection is created automatically.
54 try {
55 numberLabel.setConnectionParameters(parameters);
56 } catch (CommonException e) {
57 e.printStackTrace();
58 } catch (PropertyVetoException e) {
59 e.printStackTrace();
60 }
61 //If no exception occurred, number label should show the remote value.
62
63
64 //The number label will set the value on the property only when the user
65 //navigates away from the label (the label loses focus). We want to set a
66 //new value while typing it in
67 numberLabel.setSettingPolicy(NumberField.SET_AS_TYPED);
68 //Or we want to avoid the overload and only change the value when one
69 //presses the [Enter] key.
70 numberLabel.setSettingPolicy(NumberField.SET_ON_APPLY);
71 //Finally we can switch back to set a new value only when navigating
72 //away from the number label.
73 numberLabel.setSettingPolicy(NumberField.SET_ON_EXIT);
74
75
76 //The incoming values are too large (large exponents) and have a large extent.
77 //We want to show values in more readable form. Let us show the logarithm of
78 //the value. For this we will use a logarithmic converter with logarithm base 10:
79 LogarithmicConverter logConverter = new LogarithmicConverter(10);
80 try {
81 numberLabel.setConverter(logConverter);
82 } catch (PropertyVetoException e) {
83 e.printStackTrace();
84 }
85 //Instead of real value 'x' number label will now show log_10(x).
86 //Similarly we can shift the values to be comparable with some other property.
87 //We will use linear converter:
88 LinearConverter linConverter = new LinearConverter(5,4);
89 try {
90 numberLabel.setConverter(linConverter);
91 } catch (PropertyVetoException e) {
92 e.printStackTrace();
93 }
94 //Instead of value 'x' number label will now show 5 x + 4. We can even combine both
95 //converters into a single one.
96 try {
97 ConverterChain chain = new ConverterChain(new Converter[]{logConverter, linConverter});
98 numberLabel.setConverter(chain);
99 } catch (PropertyVetoException e) {
100 e.printStackTrace();
101 }
102 //Number label will now show 5 (log_10(x)) + 4.
103
104 //If we don't want to change the values at all (just use the number label
105 //as a monitor displayer) we can put in read only mode
106 numberLabel.setEditable(false);
107
108 //When the value received from the 3rd party exceeds the set value bounds (minimum/maximum),
109 //the number label may visually indicate this by tilting the border in a given color.
110 numberLabel.setTiltingEnabled(true);
111 numberLabel.setOutOfBoundsColor(Color.YELLOW);
112
113 //Other properties of the number label can also simply be adjusted by calling the
114 //appropriate setter methods. These properties include maximum/minimum value
115 //background/foreground color, title etc.:
116 numberLabel.setMaximum(100);
117 numberLabel.setMinimum(5.2);
118 numberLabel.setBackground(Color.RED);
119 numberLabel.setForeground(Color.GREEN);
120 }
121 }