The backbone is the model class GestureMainModel . It provides access to data objects and uses the StorageManager to make them persistence. Beside that, the main model provides a set of listeners where views can register to be informed about changed data. Also other component models are based on the main model and so it is the only instance holding data and all alterations are propagated to it. Furthermore, the main model provides access to registered input devices.
The main model is initialised with a StorageEngine and a list of input devices. The fact that input devices are passed to the constructor allows the use of different input devices.
The most recent note that has been captured by the input device is stored in the main model and a listener informs registered views when it is altered. To prevent the destruction of the note by any views, the getter method always returns a clone of the original note. To pass the original reference would lead to non deterministic behaviour because some operations on the note change the note itself.
The management tool is structured into different tabs. Each tab contains functionality for a specific task and different tabs do not have any dependencies. This design decision has the advantage that new tabs can be added in a simple manner. The tabs are not hard coded in the main view and have to extend the abstract class GestureTab . The list of tabs is passed to the constructor of the main view and it creates the instances of the tabs using dynamic class loading and shows them in the order given by the list. This allows adding new tabs without a recompilation of the main view. The list of tabs is stored in a global property file.
A tab has a JDesktopPane as basis and all other components are attached to it. The existing implementations use JInternalFrames as main components on the base pane. The GuiFactory furthermore provides static methods to simplify the creation and reuse of components.
The Test Bench Tab shown in Figure 9 provides functionality to acquire a gesture from the input device and recognise it with the gesture set and algorithm of the user's choice. This enables a simple and quick test of specific gestures. All gesture sets of the currently opened database are available and the algorithms can be selected. The available algorithms have to be set in the global property file in a comma delimited list. For the recognition process default parameters are used.
The Admin Tab enables us to administrate gesture sets, classes and descriptors. This view as shown in Figure 10 has three main components which are always visible. These are a frame for capturing gestures, a list of all available classes and a tree structure to manage the sets.
Gesture classes can be created, edited and deleted in the list. These operations are accessible over a context menu. For editing a gesture class, a new frame opens and lists the existent descriptors. Again the three basic functions create, edit and delete are applicable on the descriptors.
To manipulate a descriptor another frame opens. At the moment we only have an implementation for a sample-based descriptor providing functionality to add and delete gesture samples in a list. To add a sample, the gesture needs to be gathered with the capture component and it can be copied to the list of samples.
The tree representing the gesture sets and the containing classes has several context menus for the operations create, delete, export and import a gesture set and to add gesture classes. For adding classes to the set, another window pops up to select classes from the list.
The export and import functionality of set level allows creating and reading XML files containing the set and the corresponding classes with their descriptors. These files can be used for initialising the recogniser and makes it therefore independent of the storage manager.
The Test Data Tab shown in Figure 11 can be used to create test sets for testing algorithms and their configuration. It also has a capture component, a list of available test sets and a frame to select the gesture class the input belongs to.
Test sets can be created, edited and deleted. Furthermore, we provide functionality to export and import test sets from the corresponding XML representation.
The global configuration file is named igestureTool.properties and contains the following parameter definitions:
INPUT_DEVICE_CONFIG = magicommPen.properties
TABS = org.ximtec.igesture.tool.CaptureTab, \
org.ximtec.igesture.tool.AdminTab, \
org.ximtec.igesture.tool.TestTab
ALGORITHM = org.ximtec.igesture.algorithm.rubine.RubineAlgorithm, \
org.ximtec.igesture.algorithm.signature.SignatureAlgorithm, \
org.ximtec.igesture.algorithm.siger.SigerRecogniser
DATABASE = igesture.db