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  import java.io.File;
28  
29  import com.cosylab.gui.ValueIconPair;
30  import com.cosylab.gui.components.util.IconHelper;
31  import com.cosylab.util.CommonException;
32  
33  import de.desy.acop.displayers.AcopIcon;
34  import de.desy.acop.transport.AccessMode;
35  import de.desy.acop.transport.ConnectionParameters;
36  
37  public class IconExample {
38  
39  	public static void main(String[] args) {
40  		
41  		//How to connect icon to a remote property?
42  		//First we create an instance of the AcopIcon object.
43  		AcopIcon icon = new AcopIcon();
44  		//We require ConnectionParameters which describe the remote property
45  		ConnectionParameters parameters = new ConnectionParameters("TINE",
46  				"context", "server", "device", "property", AccessMode.POLL, 1000);
47  		//These parameters describe a remote property 'context/server/device/property'
48  		//in the TINE control system. We will request a constant monitoring,
49  		//therefore AccessMode.POLL was used. Polling rate is set to 1000 milliseconds,
50  		//which means that value on the icon will be updated every 1000 milliseconds.
51  		//Parameters are then attached to the icon. Connection is created automatically.
52  		try {
53  			icon.setConnectionParameters(parameters);
54  		} catch (CommonException e) {
55  			e.printStackTrace();
56  		} catch (PropertyVetoException e) {
57  			e.printStackTrace();
58  		}
59  		//If no exception occurred, icon should show the remote value rendered as an appropriate icon.
60  		//The icons used to render the values received can be set as
61  		ValueIconPair[] valueIconPairs = new ValueIconPair[] {
62  				new ValueIconPair(0L, IconHelper.createIcon("icons/navigation/ArrowLeftLeft16.gif")),
63  		        new ValueIconPair(1L, IconHelper.createIcon("icons/navigation/ArrowLeft16.gif")),
64  		        new ValueIconPair(2L, IconHelper.createIcon("icons/navigation/ArrowRight16.gif")),
65  		        new ValueIconPair(3L, IconHelper.createIcon("icons/navigation/ArrowRightRight16.gif"))
66  		};
67  		icon.setIcons(valueIconPairs);
68  		//Value icon pairs can be added also later or in the runtime
69  		icon.addIcon(new ValueIconPair(4L, IconHelper.createIcon("icons/navigation/Plus16.gif")));
70  		//When using the IconHelper there are several ways how to create an icon.
71  		//The above code, where string parameters are supplied will search for the given
72  		//path in the classpath of the project and create an icon if the path exists.
73  		//If we want to use a local image file for the icon, we can generate the File
74  		//pointing to that location and pass it to the IconHelper
75  		File file = new File("C:/foo.png");
76  		ValueIconPair pair = new ValueIconPair(5L, file);
77  		icon.addIcon(pair);
78  		
79  		
80  		
81  		//We want to be notified when value is out of bounds. In Icon displayer this
82  		//means that a displayer will be updated with a value, which doesn't have any
83  		//icon assigned to (the ValueIconPair for that value was never added). Therefore,
84  		//we set a default icon to the IconDisplayer, which will be shown in these cases:
85  		icon.setDefaultIcon(IconHelper.createIcon("icons/media/Stop16.gif"));
86  		
87  		//All icons are not the same size as the component is, which can result
88  		//in only a part of the icon being visible in the displayer, or only a part
89  		//of the displayer is filled with icon. We can force the displayer to scale 
90  		//all icons to fit its size
91  		icon.setScaleIcons(true);
92  		//The icons will now be the size of the displayer but they might look strange
93  		//because the displayer does not have the aspect ration of the icon. Therefore,
94  		//we will set the displayer to preserve the aspect ratio of icons.
95  		icon.setKeepRatio(true);
96  		
97  		//Other properties of the icon can also simply be adjusted by calling the
98  		//appropriate setter methods. These properties include background/foreground color, title etc.:
99  		icon.setBackground(Color.RED);
100 		icon.setForeground(Color.GREEN);
101 	}
102 }