1/*
2 * Copyright (C) 2008-2012  OMRON SOFTWARE Co., Ltd.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package jp.co.omronsoft.openwnn;
18
19import android.view.KeyEvent;
20import java.util.*;
21
22/**
23 * The definition class of event message used by OpenWnn framework.
24 *
25 * @author Copyright (C) 2009-2011 OMRON SOFTWARE CO., LTD.  All Rights Reserved.
26 */
27public class OpenWnnEvent {
28    /** Offset value for private events */
29    public static final int PRIVATE_EVENT_OFFSET = 0xFF000000;
30
31    /** Undefined */
32    public static final int UNDEFINED = 0;
33
34    /**
35     * Reverse key.
36     * <br>
37     * This is used for multi-tap keyboard like 12-key.
38     */
39    public static final int TOGGLE_REVERSE_CHAR = 0xF0000001;
40
41    /**
42     * Convert.
43     * <br>
44     * This event makes {@link OpenWnn} to display conversion candidates from {@link ComposingText}.
45     */
46    public static final int CONVERT = 0xF0000002;
47
48    /**
49     * Predict.
50     * <br>
51     * This event makes {@link OpenWnn} to display prediction candidates from {@link ComposingText}.
52     */
53    public static final int PREDICT = 0xF0000008;
54
55    /**
56     * List candidates (normal view).
57     * <br>
58     * This event changes the candidates view's size
59     */
60    public static final int LIST_CANDIDATES_NORMAL = 0xF0000003;
61
62    /**
63     * List candidates (wide view).
64     * <br>
65     * This event changes the candidates view's size
66     */
67    public static final int LIST_CANDIDATES_FULL = 0xF0000004;
68
69    /**
70     * Close view
71     */
72    public static final int CLOSE_VIEW = 0xF0000005;
73
74    /**
75     * Insert character(s).
76     * <br>
77     * This event input specified character({@code chars}) into the cursor position.
78     */
79    public static final int INPUT_CHAR = 0xF0000006;
80
81    /**
82     * Toggle a character.
83     * <br>
84     * This event changes a character at cursor position with specified rule({@code toggleMap}).
85     * This is used for multi-tap keyboard.
86     */
87    public static final int TOGGLE_CHAR = 0xF000000C;
88
89    /**
90     * Replace a character at the cursor.
91     */
92    public static final int REPLACE_CHAR = 0xF000000D;
93
94    /**
95     * Input key.
96     * <br>
97     * This event processes a {@code keyEvent}.
98     */
99    public static final int INPUT_KEY  = 0xF0000007;
100
101    /**
102     * Input Soft key.
103     * <br>
104     * This event processes a {@code keyEvent}.
105     * If the event is not processed in {@link OpenWnn}, the event is thrown to the IME's client.
106     */
107    public static final int INPUT_SOFT_KEY  = 0xF000000E;
108
109    /**
110     * Focus to the candidates view.
111     */
112    public static final int FOCUS_TO_CANDIDATE_VIEW  = 0xF0000009;
113
114    /**
115     * Focus out from the candidates view.
116     */
117    public static final int FOCUS_OUT_CANDIDATE_VIEW  = 0xF000000A;
118
119    /**
120     * Select a candidate
121     */
122    public static final int SELECT_CANDIDATE  = 0xF000000B;
123
124    /**
125     * Change Mode
126     */
127    public static final int CHANGE_MODE  = 0xF000000F;
128
129    /**
130     * Key long press event.
131     */
132    public static final int KEYLONGPRESS = 0xF0000024;
133
134    /**
135     * The definition class of engine's mode.
136     */
137    public static final class Mode {
138        /** Default (use both of the letterConverter and the {@link WnnEngine}) */
139        public static final int DEFAULT      = 0;
140        /** Direct input (not use the letterConverter and the {@link WnnEngine}) */
141        public static final int DIRECT       = 1;
142        /** Do not use the {@link LetterConverter} */
143        public static final int NO_LV1_CONV  = 2;
144        /** Do not use the {@link WnnEngine} */
145        public static final int NO_LV2_CONV  = 3;
146    }
147
148    /**
149     * Commit the composing text
150     */
151    public static final int COMMIT_COMPOSING_TEXT  = 0xF0000010;
152
153    /**
154     * List symbols
155     */
156    public static final int LIST_SYMBOLS  = 0xF0000011;
157
158    /**
159     * Switch Language
160     */
161    public static final int SWITCH_LANGUAGE  = 0xF0000012;
162
163    /**
164     * Initialize the user dictionary.
165     */
166    public static final int INITIALIZE_USER_DICTIONARY = 0xF0000013;
167
168    /**
169     * Initialize the learning dictionary.
170     */
171    public static final int INITIALIZE_LEARNING_DICTIONARY = 0xF0000014;
172
173    /**
174     * List words in the user dictionary.
175     * <br>
176     * To get words from the list, use {@code GET_WORD} event.
177     */
178    public static final int LIST_WORDS_IN_USER_DICTIONARY = 0xF0000015;
179
180    /**
181     * Get a word from the user dictionary.
182     * <br>
183     * Get a word from top of the list made by {@code LIST_WORDS_IN_USER_DICTIONARY}.
184     */
185    public static final int GET_WORD  = 0xF0000018;
186
187    /**
188     * Add word to the user dictionary.
189     */
190    public static final int ADD_WORD     = 0xF0000016;
191
192    /**
193     * Delete a word from the dictionary.
194     */
195    public static final int DELETE_WORD  = 0xF0000017;
196
197    /**
198     * Update the candidate view
199     */
200    public static final int UPDATE_CANDIDATE = 0xF0000019;
201
202    /**
203     * Edit words in the user dictionary.
204     */
205    public static final int EDIT_WORDS_IN_USER_DICTIONARY = 0xF000001A;
206
207    /**
208     * Undo
209     */
210    public static final int UNDO  = 0xF000001B;
211
212    /**
213     * Change input view
214     */
215    public static final int CHANGE_INPUT_VIEW = 0xF000001C;
216
217    /**
218     * Touch the candidate view.
219     */
220    public static final int CANDIDATE_VIEW_TOUCH = 0xF000001D;
221
222    /**
223     * Key up event.
224     */
225    public static final int KEYUP = 0xF000001F;
226
227    /**
228     * Touch the other key.
229     */
230    public static final int TOUCH_OTHER_KEY = 0xF0000020;
231
232    /**
233     * Start focus candidate.
234     */
235    public static final int FOCUS_CANDIDATE_START = 0xF0002000;
236
237    /**
238     * End focus candidate.
239     */
240    public static final int FOCUS_CANDIDATE_END = 0xF0002001;
241
242    /**
243     * Scroll up for symbol keyboard.
244     */
245    public static final int CANDIDATE_VIEW_SCROLL_UP = 0xF0001000;
246
247    /**
248     * Scroll down for symbol keyboard.
249     */
250    public static final int CANDIDATE_VIEW_SCROLL_DOWN = 0xF0001001;
251
252    /**
253     * Scroll full up for symbol keyboard.
254     */
255    public static final int CANDIDATE_VIEW_SCROLL_FULL_UP = 0xF0001002;
256
257    /**
258     * Scroll full down for symbol keyboard.
259     */
260    public static final int CANDIDATE_VIEW_SCROLL_FULL_DOWN = 0xF0001003;
261
262    /** Event code */
263    public int code = UNDEFINED;
264    /** Detail mode of the event */
265    public int mode = 0;
266    /** Type of dictionary */
267    public int dictionaryType = 0;
268    /** Input character(s) */
269    public char[] chars = null;
270    /** Key event */
271    public KeyEvent keyEvent = null;
272    /** Mapping table for toggle input */
273    public String[]  toggleTable = null;
274    /** Mapping table for toggle input */
275    public HashMap<?,?> replaceTable = null;
276    /** Word's information */
277    public WnnWord  word = null;
278    /** Error code */
279    public int errorCode;
280
281    /**
282     * Generate {@link OpenWnnEvent}
283     *
284     * @param code      The code
285     */
286    public OpenWnnEvent(int code) {
287        this.code = code;
288    }
289    /**
290     * Generate {@link OpenWnnEvent} for changing the mode
291     *
292     * @param code      The code
293     * @param mode      The mode
294     */
295    public OpenWnnEvent(int code, int mode) {
296        this.code = code;
297        this.mode = mode;
298    }
299    /**
300     * Generate {@link OpenWnnEvent} for a inputing character
301     *
302     * @param code      The code
303     * @param c         The inputing character
304     */
305    public OpenWnnEvent(int code, char c) {
306        this.code = code;
307        this.chars = new char[1];
308        this.chars[0] = c;
309     }
310    /**
311     * Generate {@link OpenWnnEvent} for inputing characters
312     *
313     * @param code      The code
314     * @param c         The array of inputing character
315     */
316    public OpenWnnEvent(int code, char c[]) {
317        this.code = code;
318        this.chars = c;
319    }
320    /**
321     * Generate {@link OpenWnnEvent} for toggle inputing a character
322     *
323     * @param code          The code
324     * @param toggleTable   The array of toggle inputing a character
325     */
326    public OpenWnnEvent(int code, String[] toggleTable) {
327        this.code = code;
328        this.toggleTable = toggleTable;
329    }
330    /**
331     * Generate {@link OpenWnnEvent} for replacing a character
332     *
333     * @param code          The code
334     * @param replaceTable  The replace table
335     */
336    public OpenWnnEvent(int code, HashMap<?,?> replaceTable) {
337        this.code = code;
338        this.replaceTable = replaceTable;
339    }
340    /**
341     * Generate {@link OpenWnnEvent} from {@link KeyEvent}
342     * <br>
343     * This constructor is same as {@code OpenWnnEvent(INPUT_KEY, ev)}.
344     *
345     * @param ev    The key event
346     */
347    public OpenWnnEvent(KeyEvent ev) {
348        if(ev.getAction() != KeyEvent.ACTION_UP){
349            this.code = INPUT_KEY;
350        }else{
351            this.code = KEYUP;
352        }
353        this.keyEvent = ev;
354    }
355    /**
356     * Generate {@link OpenWnnEvent} from {@link KeyEvent}
357     *
358     * @param code      The code
359     * @param ev        The key event
360     */
361    public OpenWnnEvent(int code, KeyEvent ev) {
362        this.code = code;
363        this.keyEvent = ev;
364    }
365    /**
366     * Generate {@link OpenWnnEvent} for selecting a candidate
367     *
368     * @param code      The code
369     * @param word      The selected candidate
370     */
371    public OpenWnnEvent(int code, WnnWord word) {
372        this.code = code;
373        this.word = word;
374    }
375
376    /**
377     * Generate {@link OpenWnnEvent} for dictionary management
378     *
379     * @param code      The code
380     * @param dict      The type of dictionary
381     * @param word      The selected candidate
382     */
383    public OpenWnnEvent(int code, int dict, WnnWord word) {
384        this.code = code;
385        this.dictionaryType = dict;
386        this.word = word;
387    }
388}
389
390