View Javadoc

1   /*
2    * @(#)$Id: SwingMouseReader.java 824 2010-05-26 22:38:01Z bpuype $
3    *
4    * Author		:	Ueli Kurmann, igesture@uelikurmann.ch
5    *                  
6    *
7    * Purpose		: 
8    *
9    * -----------------------------------------------------------------------
10   *
11   * Revision Information:
12   *
13   * Date				Who			Reason
14   *
15   * 03.05.2008			ukurmann	Initial Release
16   *
17   * -----------------------------------------------------------------------
18   *
19   * Copyright 1999-2009 ETH Zurich. All Rights Reserved.
20   *
21   * This software is the proprietary information of ETH Zurich.
22   * Use is subject to license terms.
23   * 
24   */
25  
26  package org.ximtec.igesture.io.mouseclient;
27  
28  import java.awt.Color;
29  import java.awt.Dimension;
30  import java.awt.MouseInfo;
31  import java.awt.Point;
32  import java.awt.PointerInfo;
33  import java.awt.event.MouseAdapter;
34  import java.awt.event.MouseEvent;
35  import java.util.List;
36  import java.util.concurrent.Executors;
37  import java.util.logging.Level;
38  import java.util.logging.Logger;
39  
40  import javax.swing.BorderFactory;
41  import javax.swing.JPanel;
42  
43  import org.sigtec.ink.Note;
44  import org.sigtec.ink.Trace;
45  import org.sigtec.util.Constant;
46  import org.ximtec.igesture.core.Gesture;
47  import org.ximtec.igesture.core.GestureSample;
48  import org.ximtec.igesture.io.AbstractGestureDevice;
49  
50  /**
51   * Comment
52   * 
53   * @version 1.0 03.05.2008
54   * @author Ueli Kurmann
55   */
56  public class SwingMouseReader extends AbstractGestureDevice<Note, Point> {
57  
58    private static final Logger LOGGER = Logger.getLogger(SwingMouseReader.class.getName());
59  
60    private org.sigtec.ink.Point translation;
61    private SwingMouseReaderPanel currentPanel;
62  
63    private Note note;
64    private Trace trace;
65    private boolean lastKeyState = false;
66  
67    private Point lastPoint;
68  
69    public SwingMouseReader() {
70  	  
71  	  //MODIFY >
72  	  setName("SwingMouseReader");
73  	  setDeviceType(org.ximtec.igesture.util.Constant.TYPE_2D);
74  	  setDeviceID("System Mouse");
75  	  setConnectionType(org.ximtec.igesture.util.Constant.CONNECTION_USB);
76  	  setIsConnected(true);
77  	  setDefaultDevice(true);
78  	  //MODIFY <
79    }
80    
81    public JPanel getPanel()
82    {
83  	  return getPanel(new Dimension(200,200));
84    }
85  
86    public JPanel getPanel(Dimension dimension) {
87  
88      SwingMouseReaderPanel panel = new SwingMouseReaderPanel(this);
89      panel.setSize(dimension);
90      panel.setPreferredSize(dimension);
91      panel.setOpaque(true);
92      panel.setBackground(Color.WHITE);
93      panel.setBorder(BorderFactory.createLineBorder(Color.BLUE));
94  
95      panel.addMouseListener(new SwingMouseListener(panel));
96  
97      return panel;
98    }
99  
100   public void clear() {
101     note = new Note();
102     trace = new Trace();
103     if (currentPanel != null) {
104       currentPanel.clear();
105     }
106   }
107 
108   private class SwingMouseListener extends MouseAdapter {
109 
110     SwingMouseReaderPanel owner;
111 
112     private SwingMouseListener(SwingMouseReaderPanel panel) {
113       this.owner = panel;
114     }
115 
116     @Override
117     public void mousePressed(MouseEvent e) {
118       super.mousePressed(e);
119       LOGGER.info("Mouse pressed...");
120       currentPanel = owner;
121       Point p1 = e.getPoint();
122       Point p2 = MouseInfo.getPointerInfo().getLocation();
123       long timestamp = System.currentTimeMillis();
124       translation = new org.sigtec.ink.Point((int) (p1.getX() - p2.getX()), (int) (p1.getY() - p2.getY()), timestamp);
125 
126       lastKeyState = true;
127 
128     }
129 
130     @Override
131     public void mouseReleased(MouseEvent e) {
132       super.mouseReleased(e);
133       if (lastKeyState) {
134         note.add(trace);
135         trace = new Trace();
136 
137         lastKeyState = false;
138         lastPoint = null;
139         fireGestureEvent(getGesture());
140       }
141     }
142   }
143 
144   @Override
145   public void dispose() {
146     removeAllListener();
147     clear();
148 
149   }
150 
151   @Override
152   public List<Point> getChunks() {
153     // TODO Auto-generated method stub
154     return null;
155   }
156 
157   @Override
158   public Gesture<Note> getGesture() {
159     return new GestureSample(this,Constant.EMPTY_STRING, note);
160   }
161 
162   @Override
163   public void init() {
164     note = new Note();
165     trace = new Trace();
166 
167     Executors.newCachedThreadPool().execute(new Worker());
168   }
169 
170   private class Worker implements Runnable {
171 
172     @Override
173     public void run() {
174       while (true) {
175         if (lastKeyState) {
176           PointerInfo info = MouseInfo.getPointerInfo();
177           Point currentPoint = info.getLocation();
178 
179           currentPoint.move((int) (currentPoint.getX() + translation.getX()), (int) (currentPoint.getY() + translation
180               .getY()));
181 
182           trace.add(new org.sigtec.ink.Point(currentPoint.getX(), currentPoint.getY(), System.currentTimeMillis()));
183           if (currentPanel != null && lastPoint != null) {
184             currentPanel.drawLine(lastPoint, currentPoint);
185 
186           }
187 
188           lastPoint = currentPoint;
189         }
190 
191         try {
192           Thread.sleep(1000 / 100);
193         } catch (InterruptedException e) {
194           e.printStackTrace();
195         }
196       }
197     }
198   }
199 
200   //MODIFY >
201   
202 	@Override
203 	public void connect() {
204 		setIsConnected(true);
205 		LOGGER.log(Level.WARNING, "Still to implement");
206 	}
207 	
208 	@Override
209 	public void disconnect() {
210 		setIsConnected(false);
211 		LOGGER.log(Level.WARNING, "Still to implement");
212 	}
213 
214 	@Override
215 	public boolean isConnectable() {
216 		return false;
217 	}
218    	
219    	@Override
220 	public boolean isDisconnectable() {
221 		return false;
222 	}
223 }