View Javadoc

1   /*
2    * @(#)$Id: Application.java 689 2009-07-22 00:10:27Z bsigner $
3    *
4    * Author       :   Ueli Kurmann, igesture@uelikurmann.ch
5    *
6    * Purpose      :   
7    *
8    * -----------------------------------------------------------------------
9    *
10   * Revision Information:
11   *
12   * Date             Who         Reason
13   *
14   * Nov 15, 2006     ukurmann    Initial Release
15   * Mar 24, 2007     bsigner     Cleanup
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  
27  package org.ximtec.igesture.app.showcaseapp;
28  
29  import java.awt.Color;
30  import java.awt.Graphics2D;
31  import java.awt.image.BufferedImage;
32  import java.util.List;
33  import java.util.logging.Level;
34  import java.util.logging.Logger;
35  
36  import javax.swing.ImageIcon;
37  import javax.swing.JFrame;
38  import javax.swing.JLabel;
39  
40  import org.sigtec.ink.Note;
41  import org.sigtec.ink.Point;
42  import org.sigtec.util.Constant;
43  import org.ximtec.igesture.Recogniser;
44  import org.ximtec.igesture.algorithm.AlgorithmException;
45  import org.ximtec.igesture.app.showcaseapp.descriptor.ArrowDescriptor;
46  import org.ximtec.igesture.app.showcaseapp.descriptor.LineDescriptor;
47  import org.ximtec.igesture.app.showcaseapp.descriptor.RectangleDescriptor;
48  import org.ximtec.igesture.app.showcaseapp.descriptor.TriangleDescriptor;
49  import org.ximtec.igesture.app.showcaseapp.eventhandler.DeleteEventHandler;
50  import org.ximtec.igesture.app.showcaseapp.eventhandler.DrawEventHandler;
51  import org.ximtec.igesture.app.showcaseapp.eventhandler.RejectEventHandler;
52  import org.ximtec.igesture.app.showcaseapp.eventhandler.StyleEventHandler;
53  import org.ximtec.igesture.configuration.Configuration;
54  import org.ximtec.igesture.core.DigitalDescriptor;
55  import org.ximtec.igesture.core.Gesture;
56  import org.ximtec.igesture.core.GestureSet;
57  import org.ximtec.igesture.event.GestureActionManager;
58  import org.ximtec.igesture.io.GestureDevice;
59  import org.ximtec.igesture.io.GestureEventListener;
60  import org.ximtec.igesture.io.mouseclient.MouseReader;
61  import org.ximtec.igesture.util.XMLTool;
62  
63  
64  /**
65   * @version 1.0 Nov 2006
66   * @author Ueli Kurmann, igesture@uelikurmann.ch
67   * @author Beat Signer, signer@inf.ethz.ch
68   */
69  public class Application implements GestureEventListener {
70  
71     private static final Logger LOGGER = Logger.getLogger(Application.class
72           .getName());
73  
74     private Recogniser recogniser;
75  
76     private GestureDevice<Note, Point> client;
77  
78     private JFrame frame;
79  
80     private BufferedImage bufferedImage;
81  
82  
83     public Application() {
84        initialiseGUI();
85        initGestures();
86     }
87  
88  
89     private void initGestures() {
90        Configuration configuration = XMLTool.importConfiguration(ClassLoader
91              .getSystemResourceAsStream("rubineconfiguration.xml"));
92        GestureSet gestureSet = XMLTool.importGestureSet(ClassLoader
93              .getSystemResourceAsStream("demogestures.xml"));
94        GestureActionManager eventManager = new GestureActionManager();
95        eventManager.registerRejectEvent(new RejectEventHandler());
96        Style style = new Style();
97        StyleEventHandler styleEventHandler = new StyleEventHandler(style);
98        Graphics2D graphic = (Graphics2D)bufferedImage.getGraphics();
99        DrawEventHandler drawEventHandler = new DrawEventHandler(graphic, style);
100       gestureSet.getGestureClass("Rectangle").addDescriptor(
101             DigitalDescriptor.class, new RectangleDescriptor());
102       gestureSet.getGestureClass("LeftRight").addDescriptor(
103             DigitalDescriptor.class, new LineDescriptor());
104       gestureSet.getGestureClass("Triangle").addDescriptor(
105             DigitalDescriptor.class, new TriangleDescriptor());
106       gestureSet.getGestureClass("Arrow").addDescriptor(DigitalDescriptor.class,
107             new ArrowDescriptor());
108       eventManager.registerEventHandler("Rectangle", drawEventHandler);
109       eventManager.registerEventHandler("LeftRight", drawEventHandler);
110       eventManager.registerEventHandler("Triangle", drawEventHandler);
111       eventManager.registerEventHandler("Arrow", drawEventHandler);
112       eventManager.registerEventHandler("Delete",
113             new DeleteEventHandler(graphic));
114       eventManager.registerEventHandler("Red", styleEventHandler);
115       eventManager.registerEventHandler("Black", styleEventHandler);
116       eventManager.registerEventHandler("Yellow", styleEventHandler);
117       eventManager.registerEventHandler("Thin", styleEventHandler);
118       eventManager.registerEventHandler("Fat", styleEventHandler);
119       configuration.addGestureSet(gestureSet);
120       
121 
122       try {
123          recogniser = new Recogniser(configuration);
124          recogniser.addGestureHandler(eventManager);
125       }
126       catch (AlgorithmException e) {
127          LOGGER.log(Level.SEVERE, Constant.EMPTY_STRING, e);
128       }
129 
130       client = new MouseReader();
131       client.init();
132       client.addGestureHandler(this);
133 
134    } // initGestures
135 
136 
137    private void initialiseGUI() {
138       frame = new JFrame();
139       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
140       frame.setSize(440, 620);
141       bufferedImage = new BufferedImage(420, 600, BufferedImage.TYPE_INT_ARGB);
142       bufferedImage.getGraphics().setColor(Color.WHITE);
143       bufferedImage.getGraphics().fillRect(0, 0, 420, 600);
144       bufferedImage.getGraphics().setColor(Color.BLACK);
145       JLabel label = new JLabel();
146       label.setSize(420, 620);
147       label.setIcon(new ImageIcon(bufferedImage));
148       frame.add(label);
149       frame.setVisible(true);
150    } // initialiseGUI
151 
152 
153 
154 
155    public static void main(String[] args) {
156       new Application();
157    }
158 
159 
160    @Override
161    public void handleChunks(List< ? > chunks) {
162       // TODO Auto-generated method stub
163 
164    }
165 
166 
167    @Override
168    public void handleGesture(Gesture< ? > gesture) {
169 
170       if (gesture.getGesture() instanceof Note) {
171          Note note = (Note)gesture.getGesture();
172          Note clone = (Note)note.clone();
173          clone.scale(2);
174 
175          recogniser.recognise(clone);
176          frame.repaint();
177       }
178    }
179 
180 }