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;
24  
25  import java.awt.BorderLayout;
26  import java.awt.Color;
27  import java.awt.event.MouseEvent;
28  
29  import javax.swing.JPanel;
30  
31  import com.cosylab.gui.components.util.RunnerHelper;
32  
33  import de.desy.acop.chart.AcopDisplayMode;
34  import de.desy.acop.chart.AcopEvent;
35  import de.desy.acop.chart.AcopGraphStyleEnum;
36  import de.desy.acop.chart.AcopListener;
37  import de.desy.acop.displayers.AcopChart;
38  import de.desy.acop.displayers.tools.AcopGraphParameters;
39  import de.desy.acop.transport.AccessMode;
40  import de.desy.acop.transport.ConnectionParameters;
41  
42  public class AcopChartDemo2 extends JPanel {
43  
44  	private AcopChart chart;
45  	
46  	public AcopChartDemo2() {
47  		super();
48  		initialize();
49  	}
50  	
51  	private void initialize() {
52  		setLayout(new BorderLayout());
53  		add(getAcopChart(), BorderLayout.CENTER);
54  	}
55  	
56  	private AcopChart getAcopChart() {
57  		if (chart == null) {
58  			try {
59  				chart = new AcopChart();
60  				
61  				double[] yData = new double[50];
62  				double[] xData = new double[50];
63  				for (int i = 0; i < yData.length; i++) {
64  					yData[i] = Math.random()*100;
65  					xData[i] = System.currentTimeMillis()/1000 - 300 * (1. - (double)i/(yData.length-1) );
66  				}
67  				
68  				//set blue color
69  				chart.setForeground(Color.BLUE);
70  				
71  				// TODO to draw point and dots two data arrays need to be drawn
72  				//draw line over the data
73  				chart.setDisplayMode(AcopDisplayMode.PolyLine.ordinal());
74  				final int handle1 = chart.draw(yData, xData);
75  				//draw points over the data
76  				chart.setDisplayMode(AcopDisplayMode.Dots.ordinal());
77  				final int handle2 = chart.draw(yData, xData);
78  				
79  				// TODO 2. limits set here are not aligned with data on chart
80  				//set axis
81  				chart.setXMin(System.currentTimeMillis()/1000 - 300 );
82  				chart.setXMax(System.currentTimeMillis()/1000);				
83  				chart.setGraphStyle(AcopGraphStyleEnum.TimeLin.ordinal());
84  				
85  				new Thread(new Runnable(){
86  					public void run() {
87  						while(true) {
88  							double[] y = new double[]{Math.random()*100};
89  							double[] x = new double[]{System.currentTimeMillis()/1000};
90  							// TODO to draw point and dots two data arrays need to be drawn
91  							//draw line and point
92  							chart.appendScreen(y, handle1,x);
93  							chart.appendScreen(y, handle2,x);
94  							try {
95  								Thread.sleep(1000);
96  							} catch (InterruptedException e) {
97  								// TODO Auto-generated catch block
98  								e.printStackTrace();
99  							}
100 						}
101 					}
102 				}).start();
103 				
104 				
105 				chart.addAcopListener(new AcopListener(){
106 
107 					public void acopMouseClick(AcopEvent click) {
108 						System.out.println("POS X: "+click.getMousePositionX());
109 						System.out.println("POS Y: " +click.getMousePositionY());
110 						// TODO 1. How to get data under mouse?
111 						System.out.println("Idx: "+click.getHistoIndex());
112 						
113 						
114 					}
115 
116 					public void acopMouseDoubleClick(AcopEvent doubleClick) {
117 						// TODO Auto-generated method stub
118 						
119 					}
120 
121 					public void acopMouseEnter(AcopEvent enter) {
122 						// TODO Auto-generated method stub
123 						
124 					}
125 
126 					public void acopMouseExit(AcopEvent exit) {
127 						// TODO Auto-generated method stub
128 						
129 					}
130 
131 					public void acopMouseMove(AcopEvent move) {
132 						
133 					}
134 
135 					public void acopMousePressed(AcopEvent pressed) {
136 						// TODO Auto-generated method stub
137 						
138 					}
139 
140 					public void acopMouseZoom(AcopEvent zoom) {
141 						// TODO Auto-generated method stub
142 						
143 					}
144 
145 					public void acopReceive(AcopEvent receive) {
146 						// TODO Auto-generated method stub
147 						
148 					}
149 					
150 				});
151 			} catch (java.lang.Throwable e) {
152 				e.printStackTrace();
153 			}
154 		}
155 		return chart;
156 	}
157 	
158 	public static void main(String[] args) {
159 		RunnerHelper.runComponent(new AcopChartDemo2(), 600,600);
160 	}
161 
162 }