1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
52
53
54
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
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
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
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
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 }