author | harlekin <harlekin> | 2002-05-30 20:36:49 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2002-05-30 20:36:49 (UTC) |
commit | 0d8dcd470820a8bdc90d0ab3408d123eecd01113 (patch) (unidiff) | |
tree | 388daa866fc99003e3a51c6e6734e80fe74eef2e /inputmethods/kjumpx | |
parent | 5ccef6fc78375e668af32138b244ec476418de1f (diff) | |
download | opie-0d8dcd470820a8bdc90d0ab3408d123eecd01113.zip opie-0d8dcd470820a8bdc90d0ab3408d123eecd01113.tar.gz opie-0d8dcd470820a8bdc90d0ab3408d123eecd01113.tar.bz2 |
koran version of jumpx by Jake Richardson <jake@asdfnews.org>
-rw-r--r-- | inputmethods/kjumpx/char10.png | bin | 0 -> 1117 bytes | |||
-rw-r--r-- | inputmethods/kjumpx/char11.png | bin | 0 -> 1362 bytes | |||
-rw-r--r-- | inputmethods/kjumpx/font.txt | 1 | ||||
-rw-r--r-- | inputmethods/kjumpx/icon.xpm | 18 | ||||
-rw-r--r-- | inputmethods/kjumpx/keyboard.cpp | 855 | ||||
-rw-r--r-- | inputmethods/kjumpx/keyboard.h | 79 | ||||
-rw-r--r-- | inputmethods/kjumpx/keyboard.xcf | bin | 0 -> 90970 bytes | |||
-rw-r--r-- | inputmethods/kjumpx/keyboardimpl.cpp | 97 | ||||
-rw-r--r-- | inputmethods/kjumpx/keyboardimpl.h | 43 | ||||
-rw-r--r-- | inputmethods/kjumpx/kjumpx.pro | 12 | ||||
-rw-r--r-- | inputmethods/kjumpx/layout12.png | bin | 0 -> 1939 bytes | |||
-rw-r--r-- | inputmethods/kjumpx/opie-kjumpx.control | 10 | ||||
-rw-r--r-- | inputmethods/kjumpx/opie-kjumpx.control~ | 10 | ||||
-rwxr-xr-x | inputmethods/kjumpx/opie-kjumpx.postinst | 2 | ||||
-rwxr-xr-x | inputmethods/kjumpx/opie-kjumpx.postrm | 2 |
15 files changed, 1129 insertions, 0 deletions
diff --git a/inputmethods/kjumpx/char10.png b/inputmethods/kjumpx/char10.png new file mode 100644 index 0000000..f2fdefa --- a/dev/null +++ b/inputmethods/kjumpx/char10.png | |||
Binary files differ | |||
diff --git a/inputmethods/kjumpx/char11.png b/inputmethods/kjumpx/char11.png new file mode 100644 index 0000000..df15c5f --- a/dev/null +++ b/inputmethods/kjumpx/char11.png | |||
Binary files differ | |||
diff --git a/inputmethods/kjumpx/font.txt b/inputmethods/kjumpx/font.txt new file mode 100644 index 0000000..4c195f7 --- a/dev/null +++ b/inputmethods/kjumpx/font.txt | |||
@@ -0,0 +1 @@ | |||
abcdefghijklmnopqrtsuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ -+*!:'.%/$ _=#?;",|\& ()[]{}<>@~ \ No newline at end of file | |||
diff --git a/inputmethods/kjumpx/icon.xpm b/inputmethods/kjumpx/icon.xpm new file mode 100644 index 0000000..996f786 --- a/dev/null +++ b/inputmethods/kjumpx/icon.xpm | |||
@@ -0,0 +1,18 @@ | |||
1 | /* XPM */ | ||
2 | static char * icon_xpm[] = { | ||
3 | "26 13 2 1", | ||
4 | " c None", | ||
5 | ".c #000000", | ||
6 | " ... ... ... ... ... ... ", | ||
7 | ". . . . . ", | ||
8 | ". . ... .. . . ", | ||
9 | ". . .. . . ", | ||
10 | " ...... ...... ... .... ", | ||
11 | ". .. .. .. . ", | ||
12 | ". .. .. .. . ", | ||
13 | ". ... .. . ", | ||
14 | " ...... .. ...... ", | ||
15 | ". . .. . . ", | ||
16 | ". . ....... . . ", | ||
17 | ". . . . . ", | ||
18 | " ... ... ... ... ... ... "}; | ||
diff --git a/inputmethods/kjumpx/keyboard.cpp b/inputmethods/kjumpx/keyboard.cpp new file mode 100644 index 0000000..52a8bf4 --- a/dev/null +++ b/inputmethods/kjumpx/keyboard.cpp | |||
@@ -0,0 +1,855 @@ | |||
1 | /**************************************************************************************94x78** | ||
2 | ** | ||
3 | ** This file may be distributed and/or modified under the terms of the | ||
4 | ** GNU General Public License version 2 as published by the Free Software | ||
5 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
6 | ** packaging of this file. | ||
7 | ** | ||
8 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
9 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
10 | ** | ||
11 | *********************************************************************************************/ | ||
12 | #include "keyboard.h" | ||
13 | |||
14 | #include <qpe/resource.h> | ||
15 | |||
16 | //#include <iostream.h> | ||
17 | |||
18 | |||
19 | static const int autorepeatDelaytime = 500; // ms | ||
20 | static const int autorepeatRate = 20; // chars per second | ||
21 | |||
22 | static const int mod1x1 = 0; | ||
23 | static const int mod1x2 = 23; | ||
24 | static const int mod1w = mod1x2 - mod1x1; | ||
25 | |||
26 | static const int letterx1 = 27; | ||
27 | static const int letterx2 = 129; | ||
28 | static const int letterw = 17; | ||
29 | static const int letterh = 14; | ||
30 | |||
31 | static const int num1x1 = 130; | ||
32 | static const int num1x2 = 137; | ||
33 | static const int num1w = num1x2 - num1x1; | ||
34 | |||
35 | static const int specialx1 = 138; | ||
36 | static const int specialx2 = 170; | ||
37 | static const int specialw = 16; | ||
38 | |||
39 | static const int num2x1 = 171; | ||
40 | static const int num2x2 = 178; | ||
41 | static const int num2w = num2x2 - num2x1; | ||
42 | |||
43 | static const int mod2x1 = 179; | ||
44 | static const int mod2x2 = 203; | ||
45 | static const int mod2w = mod2x2 - mod2x1; | ||
46 | |||
47 | static const int cursorx1 = 207; | ||
48 | static const int cursorw = 16; | ||
49 | |||
50 | static const int myParenID = -10; | ||
51 | |||
52 | |||
53 | typedef struct mapElement | ||
54 | { | ||
55 | int qcode; | ||
56 | ushort unicode; | ||
57 | }; | ||
58 | |||
59 | static const mapElement mod1Map[] = { | ||
60 | { Qt::Key_Escape, 27 }, | ||
61 | { Qt::Key_Tab, 9 }, | ||
62 | { Qt::Key_Return, 13 }, | ||
63 | { Qt::Key_Alt, 0 }, | ||
64 | { Qt::Key_Control, 0 }, | ||
65 | }; | ||
66 | |||
67 | static const uchar *const letterMap[] = { | ||
68 | (const uchar *const)"zvchwk", | ||
69 | (const uchar *const)"fitaly", | ||
70 | (const uchar *const)" ne ", | ||
71 | (const uchar *const)"gdorsb", | ||
72 | (const uchar *const)"qjumpx", | ||
73 | }; | ||
74 | |||
75 | static const ushort kletterMap[][6] = { | ||
76 | { 0x110c, 0x1112, 0x1109, 0x116d, 0x1167, 0x1163 }, | ||
77 | { 0x110f, 0x1105, 0x1100, 0x1161, 0x1175, 0x1162 }, | ||
78 | { ' ', ' ', 0x110b, 0x1165, ' ', ' ' }, | ||
79 | { 0x1110, 0x1103, 0x1102, 0x1169, 0x1173, 0x1166 }, | ||
80 | { 0x110e, 0x1107, 0x1106, 0x1111, 0x116e, 0x1172 }, | ||
81 | }; | ||
82 | |||
83 | static const uchar *const letterMapShift[] = { | ||
84 | (const uchar *const)"ZVCHWK", | ||
85 | (const uchar *const)"FITALY", | ||
86 | (const uchar *const)" NE ", | ||
87 | (const uchar *const)"GDORSB", | ||
88 | (const uchar *const)"QJUMPX", | ||
89 | }; | ||
90 | |||
91 | static const ushort kletterMapShift[][6] = { | ||
92 | { 0x110d, 0x1112, 0x110a, 0x116d, 0x1167, 0x1163 }, | ||
93 | { 0x110f, 0x1105, 0x1101, 0x1161, 0x1175, 0x1164 }, | ||
94 | { ' ', ' ', 0x110b, 0x1165, ' ', ' ' }, | ||
95 | { 0x1110, 0x1103, 0x1102, 0x1169, 0x1173, 0x1168 }, | ||
96 | { 0x110e, 0x1108, 0x1106, 0x1111, 0x116e, 0x1172 }, | ||
97 | }; | ||
98 | |||
99 | static const uchar *const num1Map = (const uchar *const)"12345"; | ||
100 | |||
101 | static const uchar *const specialMap[] = { | ||
102 | (const uchar *const)"-+", | ||
103 | (const uchar *const)"*!", | ||
104 | (const uchar *const)",'", | ||
105 | (const uchar *const)".%", | ||
106 | (const uchar *const)"/$", | ||
107 | }; | ||
108 | |||
109 | static const uchar *const specialMapShift[] = { | ||
110 | (const uchar *const)"_=", | ||
111 | (const uchar *const)"#?", | ||
112 | (const uchar *const)";\"", | ||
113 | (const uchar *const)":|", | ||
114 | (const uchar *const)"\\&", | ||
115 | }; | ||
116 | |||
117 | static const uchar *const specialMapParen[] = { | ||
118 | (const uchar *const)"()", | ||
119 | (const uchar *const)"[]", | ||
120 | (const uchar *const)"{}", | ||
121 | (const uchar *const)"<>", | ||
122 | (const uchar *const)"@~", | ||
123 | }; | ||
124 | |||
125 | static const uchar *const num2Map = (const uchar *const)"67890"; | ||
126 | |||
127 | static const mapElement mod2Map[] = { | ||
128 | { Qt::Key_Backspace, 8 }, | ||
129 | { Qt::Key_Delete, 0 }, | ||
130 | { Qt::Key_Return, 13 }, | ||
131 | { Qt::Key_Shift, 0 }, | ||
132 | { myParenID, 0 }, | ||
133 | }; | ||
134 | |||
135 | static const int cursorMap[][2] = { | ||
136 | { Qt::Key_Home, Qt::Key_PageUp }, | ||
137 | { Qt::Key_End, Qt::Key_PageDown }, | ||
138 | { Qt::Key_Up, Qt::Key_Up }, | ||
139 | { Qt::Key_Left, Qt::Key_Right }, | ||
140 | { Qt::Key_Down, Qt::Key_Down }, | ||
141 | }; | ||
142 | |||
143 | |||
144 | Keyboard::Keyboard(QWidget* parent, const char* name, WFlags f) : | ||
145 | QFrame(parent, name, f), | ||
146 | shift(0), paren(0), ctrl(0), alt(0), lang(1), lastKey(0), | ||
147 | pressedKeyUnicode(0), pressedKeyQcode(0), pressedMod(0), | ||
148 | isnoncont(false), | ||
149 | slideKeyUnicodeH(0), slideKeyQcodeH(0), slideKeyUnicodeV(0), slideKeyQcodeV(0), | ||
150 | enableMouseTracking(false), slidePix(NULL), slidePixH(NULL), slidePixV(NULL), | ||
151 | releasedPix(NULL), pressedPix(NULL) | ||
152 | { | ||
153 | //setPalette(QPalette(QColor(240,240,230))); // Beige! | ||
154 | |||
155 | releasedPlain = releasedShift = releasedParen = Resource::loadPixmap("kjumpx/released"); | ||
156 | pressedPlain = pressedShift = pressedParen = Resource::loadPixmap("kjumpx/pressed"); | ||
157 | pressedDigit = Resource::loadPixmap("kjumpx/pressed"); | ||
158 | |||
159 | QPixmap tmp; | ||
160 | |||
161 | tmp = Resource::loadPixmap("kjumpx/releasedShift"); | ||
162 | bitBlt(&releasedShift, letterx1, 0, &tmp); | ||
163 | |||
164 | tmp = Resource::loadPixmap("kjumpx/releasedParen"); | ||
165 | bitBlt(&releasedParen, specialx1, 0, &tmp); | ||
166 | |||
167 | tmp = Resource::loadPixmap("kjumpx/pressedShift"); | ||
168 | bitBlt(&pressedShift, letterx1, 0, &tmp); | ||
169 | |||
170 | tmp = Resource::loadPixmap("kjumpx/pressedParen"); | ||
171 | bitBlt(&pressedParen, specialx1, 0, &tmp); | ||
172 | |||
173 | tmp = Resource::loadPixmap("kjumpx/pressedDigit"); | ||
174 | bitBlt(&pressedDigit, specialx1, 0, &tmp); | ||
175 | |||
176 | offscreen = QPixmap( releasedPlain ); | ||
177 | |||
178 | releasedPix = &releasedPlain; | ||
179 | pressedPix = &pressedPlain; | ||
180 | slidePix = &pressedPlain; | ||
181 | |||
182 | delayTimer = new QTimer(this); | ||
183 | rateTimer = new QTimer(this); | ||
184 | connect( delayTimer, SIGNAL( timeout() ), this, SLOT( delayTimerDone() ) ); | ||
185 | connect( rateTimer, SIGNAL( timeout() ), this, SLOT( rateTimerDone() ) ); | ||
186 | } | ||
187 | |||
188 | void Keyboard::resizeEvent(QResizeEvent*) | ||
189 | { | ||
190 | //cout << "resizeEvent()" << endl; | ||
191 | } | ||
192 | |||
193 | void Keyboard::paintEvent(QPaintEvent*) | ||
194 | { | ||
195 | bitBlt(this, 0, 0, &offscreen); | ||
196 | } | ||
197 | |||
198 | void Keyboard::mousePressEvent(QMouseEvent *e) | ||
199 | { | ||
200 | pressedx = -1; | ||
201 | pressedKeyUnicode = pressedKeyQcode = pressedMod = 0; | ||
202 | |||
203 | int x = e->x(); | ||
204 | int y = e->y(); | ||
205 | |||
206 | int row = (y - 1) / letterh; | ||
207 | |||
208 | if ( x <= mod1x2 ) // mod1 | ||
209 | { | ||
210 | pressedx = mod1x1; | ||
211 | pressedy = row * letterh; | ||
212 | pressedw = mod1w + 1; | ||
213 | pressedh = letterh + 1; | ||
214 | if ( row == 2 ) // return | ||
215 | { | ||
216 | pressed2x = mod2x1; | ||
217 | pressed2y = 2 * letterh; | ||
218 | pressed2w = mod2w + 1; | ||
219 | pressed2h = letterh + 1; | ||
220 | isnoncont = true; | ||
221 | } | ||
222 | else if ( row == 3 ) // alt | ||
223 | alt = 1; | ||
224 | else if ( row == 4 ) // ctrl | ||
225 | ctrl = 1; | ||
226 | pressedKeyUnicode = mod1Map[row].unicode; | ||
227 | pressedKeyQcode = mod1Map[row].qcode; | ||
228 | } | ||
229 | else if ( x >= letterx1 && x <= letterx2 ) // letter | ||
230 | { | ||
231 | int column = (x - letterx1 - 1) / letterw; | ||
232 | QChar temp; | ||
233 | if (lang == 0) // english | ||
234 | if ( shift ) | ||
235 | temp = QChar( letterMapShift[row][column] ); | ||
236 | else | ||
237 | temp = QChar( letterMap[row][column] ); | ||
238 | else if (lang == 1) // korean | ||
239 | if ( shift ) | ||
240 | temp = parseKoreanInput( kletterMapShift[row][column] ); | ||
241 | else | ||
242 | temp = parseKoreanInput( kletterMap[row][column] ); | ||
243 | |||
244 | if ( temp == ' ' ) // space | ||
245 | { | ||
246 | if ( column < 3 ) | ||
247 | { | ||
248 | pressedx = letterx1; | ||
249 | pressed2x = letterx1 + letterw * 4; | ||
250 | } | ||
251 | else | ||
252 | { | ||
253 | pressedx = letterx1 + letterw * 4; | ||
254 | pressed2x = letterx1; | ||
255 | } | ||
256 | pressedy = pressed2y = row * letterh; | ||
257 | pressedw = pressed2w = letterw * 2 + 1; | ||
258 | pressedh = pressed2h = letterh + 1; | ||
259 | isnoncont = true; | ||
260 | } | ||
261 | else | ||
262 | { | ||
263 | pressedx = letterx1 + column * letterw; | ||
264 | pressedy = row * letterh; | ||
265 | pressedw = letterw + 1; | ||
266 | pressedh = letterh + 1; | ||
267 | } | ||
268 | pressedKeyUnicode = temp.unicode(); | ||
269 | pressedKeyQcode = slideKeyQcodeH = slideKeyQcodeV = temp.upper().unicode(); | ||
270 | if ( temp == ' ' ) | ||
271 | { | ||
272 | slideKeyUnicodeH = slideKeyUnicodeV = 8; | ||
273 | slideKeyQcodeH = slideKeyQcodeV = Qt::Key_Backspace; | ||
274 | } | ||
275 | else if ( temp == temp.lower() ) | ||
276 | { | ||
277 | slideKeyUnicodeH = slideKeyUnicodeV = temp.upper().unicode(); | ||
278 | slidePixH = slidePixV = &pressedShift; | ||
279 | } | ||
280 | else | ||
281 | { | ||
282 | slideKeyUnicodeH = slideKeyUnicodeV = temp.lower().unicode(); | ||
283 | slidePixH = slidePixV = &pressedPlain; | ||
284 | } | ||
285 | enableMouseTracking = true; | ||
286 | } | ||
287 | else if ( x >= num1x1 && x <= num1x2 ) // num1 | ||
288 | { | ||
289 | pressedx = num1x1; | ||
290 | pressedy = row * letterh; | ||
291 | pressedw = num1w + 1; | ||
292 | pressedh = letterh + 1; | ||
293 | QChar temp = QChar( num1Map[row] ); | ||
294 | pressedKeyUnicode = pressedKeyQcode = temp.unicode(); | ||
295 | } | ||
296 | else if ( x >= specialx1 && x <= specialx2 ) // special | ||
297 | { | ||
298 | int column = (x - specialx1 - 1) / specialw; | ||
299 | pressedx = specialx1 + column * specialw; | ||
300 | pressedy = row * letterh; | ||
301 | pressedw = specialw + 1; | ||
302 | pressedh = letterh + 1; | ||
303 | QChar temp; | ||
304 | if ( shift ) | ||
305 | temp = QChar( specialMapShift[row][column] ); | ||
306 | else if ( paren ) | ||
307 | temp = QChar( specialMapParen[row][column] ); | ||
308 | else | ||
309 | temp = QChar( specialMap[row][column] ); | ||
310 | pressedKeyUnicode = pressedKeyQcode = temp.unicode(); | ||
311 | slideKeyUnicodeH = slideKeyQcodeH = slideKeyUnicodeV = slideKeyQcodeV = | ||
312 | QChar('0').unicode() + ( 5 * column + row + 1 ) % 10; | ||
313 | slidePixH = slidePixV = &pressedDigit; | ||
314 | if ( shift ) | ||
315 | { | ||
316 | slideKeyUnicodeV = slideKeyQcodeV = | ||
317 | QChar( specialMap[row][column] ).unicode(); | ||
318 | slidePixV = &pressedPlain; | ||
319 | } | ||
320 | else if ( !(shift || paren) ) | ||
321 | { | ||
322 | slideKeyUnicodeV = slideKeyQcodeV = | ||
323 | QChar( specialMapShift[row][column] ).unicode(); | ||
324 | slidePixV = &pressedShift; | ||
325 | } | ||
326 | enableMouseTracking = true; | ||
327 | } | ||
328 | else if ( x >= num2x1 && x <= num2x2 ) // num2 | ||
329 | { | ||
330 | pressedx = num2x1; | ||
331 | pressedy = row * letterh; | ||
332 | pressedw = num2w + 1; | ||
333 | pressedh = letterh + 1; | ||
334 | QChar temp = QChar( num2Map[row] ); | ||
335 | pressedKeyUnicode = pressedKeyQcode = temp.unicode(); | ||
336 | } | ||
337 | else if ( x >= mod2x1 && x <= mod2x2 ) // mod2 | ||
338 | { | ||
339 | pressedx = mod2x1; | ||
340 | pressedy = row * letterh; | ||
341 | pressedw = mod2w + 1; | ||
342 | pressedh = letterh + 1; | ||
343 | if ( row == 2 ) // return | ||
344 | { | ||
345 | pressed2x = mod1x1; | ||
346 | pressed2y = 2 * letterh; | ||
347 | pressed2w = mod2w + 1; | ||
348 | pressed2h = letterh + 1; | ||
349 | isnoncont = true; | ||
350 | } | ||
351 | pressedKeyUnicode = mod2Map[row].unicode; | ||
352 | pressedKeyQcode = mod2Map[row].qcode; | ||
353 | |||
354 | if ( row == 3 ) // shift | ||
355 | { | ||
356 | paren = 0; | ||
357 | switch ( shift ) | ||
358 | { | ||
359 | case 0: | ||
360 | { | ||
361 | shift = 1; | ||
362 | releasedPix = &releasedShift; | ||
363 | pressedPix = &pressedShift; | ||
364 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
365 | break; | ||
366 | } | ||
367 | case 1: | ||
368 | { | ||
369 | shift = 2; | ||
370 | break; | ||
371 | } | ||
372 | case 2: | ||
373 | { | ||
374 | shift = 0; | ||
375 | releasedPix = &releasedPlain; | ||
376 | pressedPix = &pressedPlain; | ||
377 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
378 | break; | ||
379 | } | ||
380 | } | ||
381 | } | ||
382 | else if ( row == 4 ) // parenthesis | ||
383 | { | ||
384 | shift = 0; | ||
385 | switch ( paren ) | ||
386 | { | ||
387 | case 0: | ||
388 | { | ||
389 | paren = 1; | ||
390 | releasedPix = &releasedParen; | ||
391 | pressedPix = &pressedParen; | ||
392 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
393 | break; | ||
394 | } | ||
395 | case 1: | ||
396 | { | ||
397 | paren = 2; | ||
398 | break; | ||
399 | } | ||
400 | case 2: | ||
401 | { | ||
402 | paren = 0; | ||
403 | releasedPix = &releasedPlain; | ||
404 | pressedPix = &pressedPlain; | ||
405 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
406 | break; | ||
407 | } | ||
408 | } | ||
409 | } | ||
410 | } | ||
411 | else if ( x >= cursorx1 ) // cursor | ||
412 | { | ||
413 | int column = (x - cursorx1 - 1) / cursorw; | ||
414 | if ( row == 2 || row == 4 ) | ||
415 | pressedx = cursorx1 + cursorw / 2; | ||
416 | else | ||
417 | pressedx = cursorx1 + column * cursorw; | ||
418 | pressedy = row * letterh; | ||
419 | pressedw = cursorw + 1; | ||
420 | pressedh = letterh + 1; | ||
421 | pressedKeyQcode = cursorMap[row][column]; | ||
422 | } | ||
423 | |||
424 | pressedMod = ( shift ? Qt::ShiftButton : 0 ) | | ||
425 | ( ctrl ? Qt::ControlButton : 0 ) | | ||
426 | ( alt ? Qt::AltButton : 0 ); | ||
427 | |||
428 | lastKey = pressedKeyUnicode; | ||
429 | |||
430 | emit key( pressedKeyUnicode, pressedKeyQcode, pressedMod, true, false ); | ||
431 | delayTimer->start( autorepeatDelaytime, true ); | ||
432 | |||
433 | if ( pressedx == -1 ) | ||
434 | return; | ||
435 | |||
436 | bitBlt( &offscreen, pressedx, pressedy, | ||
437 | pressedPix, pressedx, pressedy, pressedw, pressedh ); | ||
438 | if ( isnoncont ) | ||
439 | bitBlt( &offscreen, pressed2x, pressed2y, | ||
440 | pressedPix, pressed2x, pressed2y, pressed2w, pressed2h ); | ||
441 | |||
442 | repaint( false ); | ||
443 | } | ||
444 | |||
445 | void Keyboard::mouseReleaseEvent(QMouseEvent*) | ||
446 | { | ||
447 | //cout << pressedx << " " << pressedy << " " << pressedw << " " << pressedh << endl; | ||
448 | |||
449 | delayTimer->stop(); | ||
450 | rateTimer->stop(); | ||
451 | enableMouseTracking = false; | ||
452 | |||
453 | if ( pressedx == -1 ) | ||
454 | return; | ||
455 | |||
456 | if ( shift == 2 && pressedKeyQcode == Qt::Key_Shift ) | ||
457 | return; | ||
458 | if ( paren == 2 && pressedKeyQcode == myParenID ) | ||
459 | return; | ||
460 | |||
461 | if ( shift == 1 && pressedKeyQcode != Qt::Key_Shift ) | ||
462 | { | ||
463 | shift = 0; | ||
464 | releasedPix = &releasedPlain; | ||
465 | pressedPix = &pressedPlain; | ||
466 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
467 | } | ||
468 | |||
469 | if ( paren == 1 && pressedKeyQcode != myParenID ) | ||
470 | { | ||
471 | paren = 0; | ||
472 | releasedPix = &releasedPlain; | ||
473 | pressedPix = &pressedPlain; | ||
474 | bitBlt( &offscreen, 0, 0, releasedPix ); | ||
475 | } | ||
476 | |||
477 | if ( alt && pressedKeyQcode != Qt::Key_Alt ) | ||
478 | alt = 0; | ||
479 | if ( ctrl && pressedKeyQcode != Qt::Key_Control ) | ||
480 | ctrl = 0; | ||
481 | |||
482 | bitBlt( &offscreen, pressedx, pressedy, | ||
483 | releasedPix, pressedx, pressedy, pressedw, pressedh ); | ||
484 | |||
485 | if ( isnoncont ) | ||
486 | { | ||
487 | isnoncont = false; | ||
488 | bitBlt( &offscreen, pressed2x, pressed2y, | ||
489 | releasedPix, pressed2x, pressed2y, pressed2w, pressed2h ); | ||
490 | } | ||
491 | |||
492 | repaint( false ); | ||
493 | } | ||
494 | |||
495 | void Keyboard::mouseMoveEvent(QMouseEvent *e) | ||
496 | { | ||
497 | if ( !enableMouseTracking ) | ||
498 | return; | ||
499 | |||
500 | if ( e->x() < pressedx || e->x() >= pressedx + pressedw ) | ||
501 | { | ||
502 | pressedKeyUnicode = slideKeyUnicodeH; | ||
503 | pressedKeyQcode = slideKeyQcodeH; | ||
504 | slidePix = slidePixH; | ||
505 | } | ||
506 | else if ( e->y() < pressedy || e->y() >= pressedy + pressedh ) | ||
507 | { | ||
508 | pressedKeyUnicode = slideKeyUnicodeV; | ||
509 | pressedKeyQcode = slideKeyQcodeV; | ||
510 | slidePix = slidePixV; | ||
511 | } | ||
512 | else | ||
513 | return; | ||
514 | |||
515 | enableMouseTracking = false; | ||
516 | |||
517 | delayTimer->stop(); | ||
518 | rateTimer->stop(); | ||
519 | |||
520 | bitBlt( &offscreen, pressedx, pressedy, | ||
521 | slidePix, pressedx, pressedy, pressedw, pressedh ); | ||
522 | |||
523 | emit key( 8, Qt::Key_Backspace, pressedMod, true, false ); | ||
524 | emit key( pressedKeyUnicode, pressedKeyQcode, pressedMod, true, false ); | ||
525 | delayTimer->start( autorepeatDelaytime, true ); | ||
526 | |||
527 | repaint( false ); | ||
528 | } | ||
529 | |||
530 | void Keyboard::delayTimerDone() | ||
531 | { | ||
532 | emit key( pressedKeyUnicode, pressedKeyQcode, pressedMod, true, true ); | ||
533 | rateTimer->start( 1000/autorepeatRate, false ); | ||
534 | } | ||
535 | |||
536 | void Keyboard::rateTimerDone() | ||
537 | { | ||
538 | emit key( pressedKeyUnicode, pressedKeyQcode, pressedMod, true, true ); | ||
539 | } | ||
540 | |||
541 | QSize Keyboard::sizeHint() const | ||
542 | { | ||
543 | return offscreen.size(); | ||
544 | } | ||
545 | |||
546 | void Keyboard::resetState() | ||
547 | { | ||
548 | //cout << "resetState()" << endl; | ||
549 | } | ||
550 | |||
551 | /* | ||
552 | * | ||
553 | * TODO | ||
554 | * one major problem with this implementation is that you can't move the | ||
555 | * cursor after inputing korean chars, otherwise it will eat up and replace | ||
556 | * the char before the cursor you move to. fix that | ||
557 | * | ||
558 | * make a kor/eng swaping key | ||
559 | * | ||
560 | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | ||
561 | * | ||
562 | * how korean input works | ||
563 | * | ||
564 | * all following chars means unicode char value and are in hex | ||
565 | * | ||
566 | * ÃÊÀ½ = schar (start char) | ||
567 | * ÁßÀ½ = mchar (middle char) | ||
568 | * ³¡À½ = echar (end char) | ||
569 | * | ||
570 | * there are 19 schars. unicode position is at 1100 - 1112 | ||
571 | * there are 21 mchars. unicode position is at 1161 - 1175 | ||
572 | * there are 27 echars. unicode position is at 11a8 - 11c2 | ||
573 | * | ||
574 | * the map with everything combined is at ac00 - d7a3 | ||
575 | * | ||
576 | * to find a combination of schar + mchar in the map, lookup | ||
577 | * ((schar - 0x1100) * 587) + ((mchar - 0x1161) * 27) + (echar - 0x11a8) + 0xac00) | ||
578 | * | ||
579 | */ | ||
580 | |||
581 | QChar Keyboard::parseKoreanInput (ushort c) { | ||
582 | |||
583 | static ushort schar, mchar, echar; | ||
584 | |||
585 | if ((lastKey < 0x1100 || 0x11c2 < lastKey) && (lastKey < 0xac00 || 0xd7a3 < lastKey) | ||
586 | && !(lastKey == 0 && (shift || paren || ctrl || alt))) { | ||
587 | |||
588 | //printf ("reset...\n"); | ||
589 | schar = 0, mchar = 0, echar = 0; | ||
590 | } | ||
591 | |||
592 | //printf ("in %x %x %x %x %x\n", schar, mchar, echar, c, lastKey); | ||
593 | if ( 0x1100 <= c && c <= 0x1112 ) { // schar or echar was input | ||
594 | |||
595 | if (schar == 0 || (schar != 0 && mchar == 0)) { | ||
596 | schar = c; mchar = 0; echar = 0; | ||
597 | return QChar(c); | ||
598 | } | ||
599 | else if (mchar != 0) { | ||
600 | |||
601 | if (echar == 0) { | ||
602 | |||
603 | if (!(echar = constoe(c))) { | ||
604 | |||
605 | schar = c; mchar = 0; echar = 0; | ||
606 | return QChar(c); | ||
607 | } | ||
608 | |||
609 | } | ||
610 | else { // must figure out what the echar is | ||
611 | |||
612 | if (echar == 0x11a8) { // ¤¡ | ||
613 | |||
614 | if (c == 0x1100) echar = 0x11a9; // ¤¡ + ¤¡ | ||
615 | else if (c == 0x1109) echar = 0x11aa; // ¤¡ + ¤µ | ||
616 | else { | ||
617 | schar = c; mchar = 0; echar = 0; | ||
618 | return QChar(c); | ||
619 | } | ||
620 | |||
621 | } else if (echar == 0x11ab) { // ¤¤ | ||
622 | |||
623 | if (c == 0x110c) echar = 0x11ac; // ¤¤ + ¤¸ | ||
624 | else if (c == 0x1112) echar = 0x11ad; // ¤¤ + ¤¾ | ||
625 | else { | ||
626 | schar = c; mchar = 0; echar = 0; | ||
627 | return QChar(c); | ||
628 | } | ||
629 | |||
630 | } else if (echar == 0x11af) { // ¤© | ||
631 | |||
632 | if (c == 0x1100) echar = 0x11b0; // ¤© + ¤¡ | ||
633 | else if (c == 0x1106) echar = 0x11b1; // ¤© + ¤± | ||
634 | else if (c == 0x1107) echar = 0x11b2; // ¤© + ¤² | ||
635 | else if (c == 0x1109) echar = 0x11b3; // ¤© + ¤µ | ||
636 | else if (c == 0x1110) echar = 0x11b4; // ¤© + ¤¼ | ||
637 | else if (c == 0x1111) echar = 0x11b5; // ¤© + ¤½ | ||
638 | else if (c == 0x1112) echar = 0x11b6; // ¤© + ¤¾ | ||
639 | else { | ||
640 | schar = c; mchar = 0; echar = 0; | ||
641 | return QChar(c); | ||
642 | } | ||
643 | |||
644 | } else if (echar == 0x11b8) { // ¤² | ||
645 | |||
646 | if (c == 0x1109) echar = 0x11b9; // ¤² + ¤µ | ||
647 | else { | ||
648 | schar = c; mchar = 0; echar = 0; | ||
649 | return QChar(c); | ||
650 | } | ||
651 | |||
652 | } else if (echar == 0x11ba) { // ¤µ | ||
653 | |||
654 | if (c == 0x1109) echar = 0x11bb; // ¤µ + ¤µ | ||
655 | else { | ||
656 | schar = c; mchar = 0; echar = 0; | ||
657 | return QChar(c); | ||
658 | } | ||
659 | |||
660 | } else { // if any other char, cannot combine chars | ||
661 | |||
662 | schar = c; mchar = 0; echar = 0; | ||
663 | return QChar(c); | ||
664 | } | ||
665 | |||
666 | lastKey = echar; | ||
667 | } | ||
668 | } | ||
669 | |||
670 | } | ||
671 | else if (0x1161 <= c && c <= 0x1175) { // mchar was input | ||
672 | |||
673 | if (schar != 0 && mchar == 0) { mchar = c; } | ||
674 | |||
675 | else if (schar != 0 && mchar != 0 && echar == 0) { | ||
676 | |||
677 | switch (mchar) { | ||
678 | case 0x1169: | ||
679 | if (c == 0x1161) mchar = 0x116a; | ||
680 | else if (c == 0x1162) mchar = 0x116b; | ||
681 | else if (c == 0x1175) mchar = 0x116c; | ||
682 | else { | ||
683 | schar = 0; mchar = 0; echar = 0; | ||
684 | return QChar(c); | ||
685 | } | ||
686 | break; | ||
687 | case 0x116e: | ||
688 | if (c == 0x1165) mchar = 0x116f; | ||
689 | else if (c == 0x1166) mchar = 0x1170; | ||
690 | else if (c == 0x1175) mchar = 0x1171; | ||
691 | else { | ||
692 | schar = 0; mchar = 0; echar = 0; | ||
693 | return QChar(c); | ||
694 | } | ||
695 | break; | ||
696 | case 0x1173: | ||
697 | if (c == 0x1175) mchar = 0x1174; | ||
698 | else { | ||
699 | schar = 0; mchar = 0; echar = 0; | ||
700 | return QChar(c); | ||
701 | } | ||
702 | break; | ||
703 | default: | ||
704 | schar = 0; mchar = 0; echar = 0; | ||
705 | return QChar(c); | ||
706 | } | ||
707 | } | ||
708 | else if (schar != 0 && mchar != 0 && echar != 0) { | ||
709 | |||
710 | emit key( 8, Qt::Key_Backspace, 0, true, false ); | ||
711 | |||
712 | ushort prev = 0; | ||
713 | switch (echar) { | ||
714 | /* | ||
715 | case 0x11a9: | ||
716 | prev = combineKoreanChars(schar, mchar, 0x11a8); | ||
717 | schar = 0x1100; | ||
718 | break; | ||
719 | */ | ||
720 | case 0x11aa: | ||
721 | prev = combineKoreanChars(schar, mchar, 0x11a8); | ||
722 | schar = 0x1109; | ||
723 | break; | ||
724 | case 0x11ac: | ||
725 | prev = combineKoreanChars(schar, mchar, 0x11ab); | ||
726 | schar = 0x110c; | ||
727 | break; | ||
728 | case 0x11ad: | ||
729 | prev = combineKoreanChars(schar, mchar, 0x11ab); | ||
730 | schar = 0x1112; | ||
731 | break; | ||
732 | case 0x11b0: | ||
733 | prev = combineKoreanChars(schar, mchar, 0x11af); | ||
734 | schar = 0x1100; | ||
735 | break; | ||
736 | case 0x11b1: | ||
737 | prev = combineKoreanChars(schar, mchar, 0x11af); | ||
738 | schar = 0x1106; | ||
739 | break; | ||
740 | case 0x11b2: | ||
741 | prev = combineKoreanChars(schar, mchar, 0x11af); | ||
742 | schar = 0x1107; | ||
743 | break; | ||
744 | case 0x11b3: | ||
745 | prev = combineKoreanChars(schar, mchar, 0x11af); | ||
746 | schar = 0x1109; | ||
747 | break; | ||
748 | case 0x11b4: | ||
749 | prev = combineKoreanChars(schar, mchar, 0x11af); | ||
750 | schar = 0x1110; | ||
751 | break; | ||
752 | case 0x11b9: | ||
753 | prev = combineKoreanChars(schar, mchar, 0x11b8); | ||
754 | schar = 0x1109; | ||
755 | break; | ||
756 | /* | ||
757 | case 0x11bb: | ||
758 | prev = combineKoreanChars(schar, mchar, 0x11ba); | ||
759 | schar = 0x1109; | ||
760 | break; | ||
761 | */ | ||
762 | default: | ||
763 | |||
764 | if (constoe(echar)) { | ||
765 | |||
766 | prev = combineKoreanChars(schar, mchar, 0); | ||
767 | schar = constoe(echar); | ||
768 | } | ||
769 | break; | ||
770 | } | ||
771 | |||
772 | emit key( prev, prev, 0, true, false ); | ||
773 | |||
774 | mchar = c; echar = 0; | ||
775 | |||
776 | return QChar(combineKoreanChars(schar, mchar, 0)); | ||
777 | |||
778 | } | ||
779 | else { | ||
780 | schar = 0; mchar = 0; echar = 0; | ||
781 | return QChar(c); | ||
782 | } | ||
783 | |||
784 | } | ||
785 | else if (c == ' ') return QChar(c); | ||
786 | |||
787 | |||
788 | // and now... finally delete previous char, and return new char | ||
789 | emit key( 8, Qt::Key_Backspace, 0, true, false ); | ||
790 | |||
791 | //printf ("out %x %x %x %x\n", schar, mchar, echar, c); | ||
792 | |||
793 | |||
794 | return QChar (combineKoreanChars( schar, mchar, echar)); | ||
795 | |||
796 | } | ||
797 | |||
798 | ushort Keyboard::combineKoreanChars(const ushort s, const ushort m, const ushort e) { | ||
799 | |||
800 | return ((s - 0x1100) * 588) + ((m - 0x1161) * 28) + (e ? e - 0x11a7 : 0) + 0xac00; | ||
801 | |||
802 | } | ||
803 | |||
804 | ushort Keyboard::constoe(const ushort c) { | ||
805 | |||
806 | // converts schars to echars if possible | ||
807 | |||
808 | if (0x1100 <= c && c <= 0x1112) { // schar to echar | ||
809 | |||
810 | switch (c) { | ||
811 | case 0x1100: return 0x11a8; | ||
812 | case 0x1101: return 0x11a9; | ||
813 | case 0x1102: return 0x11ab; | ||
814 | case 0x1103: return 0x11ae; | ||
815 | case 0x1105: return 0x11af; | ||
816 | case 0x1106: return 0x11b7; | ||
817 | case 0x1107: return 0x11b8; | ||
818 | case 0x1109: return 0x11ba; | ||
819 | case 0x110a: return 0x11bb; | ||
820 | case 0x110b: return 0x11bc; | ||
821 | case 0x110c: return 0x11bd; | ||
822 | case 0x110e: return 0x11be; | ||
823 | case 0x110f: return 0x11bf; | ||
824 | case 0x1110: return 0x11c0; | ||
825 | case 0x1111: return 0x11c1; | ||
826 | case 0x1112: return 0x11c2; | ||
827 | default: return 0; | ||
828 | |||
829 | } | ||
830 | |||
831 | } else { //echar to schar | ||
832 | |||
833 | switch (c) { | ||
834 | case 0x11a8: return 0x1100; | ||
835 | case 0x11a9: return 0x1101; | ||
836 | case 0x11ab: return 0x1102; | ||
837 | case 0x11ae: return 0x1103; | ||
838 | case 0x11af: return 0x1105; | ||
839 | case 0x11b7: return 0x1106; | ||
840 | case 0x11b8: return 0x1107; | ||
841 | case 0x11ba: return 0x1109; | ||
842 | case 0x11bb: return 0x110a; | ||
843 | case 0x11bc: return 0x110b; | ||
844 | case 0x11bd: return 0x110c; | ||
845 | case 0x11be: return 0x110e; | ||
846 | case 0x11bf: return 0x110f; | ||
847 | case 0x11c0: return 0x1110; | ||
848 | case 0x11c1: return 0x1111; | ||
849 | case 0x11c2: return 0x1112; | ||
850 | default: return 0; | ||
851 | |||
852 | } | ||
853 | |||
854 | } | ||
855 | } | ||
diff --git a/inputmethods/kjumpx/keyboard.h b/inputmethods/kjumpx/keyboard.h new file mode 100644 index 0000000..148cb72 --- a/dev/null +++ b/inputmethods/kjumpx/keyboard.h | |||
@@ -0,0 +1,79 @@ | |||
1 | /**************************************************************************************94x78** | ||
2 | ** | ||
3 | ** This file may be distributed and/or modified under the terms of the | ||
4 | ** GNU General Public License version 2 as published by the Free Software | ||
5 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
6 | ** packaging of this file. | ||
7 | ** | ||
8 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
9 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
10 | ** | ||
11 | *********************************************************************************************/ | ||
12 | #include <qframe.h> | ||
13 | #include <qpixmap.h> | ||
14 | #include <qtimer.h> | ||
15 | |||
16 | class Keyboard : public QFrame | ||
17 | { | ||
18 | Q_OBJECT | ||
19 | public: | ||
20 | Keyboard( QWidget* parent=0, const char* name=0, WFlags f=0 ); | ||
21 | |||
22 | void resetState(); | ||
23 | |||
24 | void mousePressEvent(QMouseEvent*); | ||
25 | void mouseReleaseEvent(QMouseEvent*); | ||
26 | void mouseMoveEvent(QMouseEvent*); | ||
27 | void resizeEvent(QResizeEvent*); | ||
28 | void paintEvent(QPaintEvent* e); | ||
29 | //void timerEvent(QTimerEvent* e); | ||
30 | |||
31 | QSize sizeHint() const; | ||
32 | |||
33 | QChar parseKoreanInput(ushort); | ||
34 | ushort combineKoreanChars(const ushort, const ushort, const ushort); | ||
35 | ushort constoe(const ushort); | ||
36 | |||
37 | |||
38 | signals: | ||
39 | void key( ushort unicode, ushort qcode, ushort modifiers, bool, bool ); | ||
40 | |||
41 | private slots: | ||
42 | void delayTimerDone(); | ||
43 | void rateTimerDone(); | ||
44 | |||
45 | private: | ||
46 | int shift; // 0, 1, 2 | ||
47 | int paren; // 0, 1, 2 | ||
48 | int ctrl; // 0, 1 | ||
49 | int alt; // 0, 1 | ||
50 | bool lang; // 0 -> english, 1 -> korean | ||
51 | |||
52 | int lastKey; | ||
53 | |||
54 | int pressedKeyUnicode, pressedKeyQcode, pressedMod; | ||
55 | int pressedx, pressedy, pressedw, pressedh; | ||
56 | bool isnoncont; | ||
57 | int pressed2x, pressed2y, pressed2w, pressed2h; | ||
58 | |||
59 | int slideKeyUnicodeH, slideKeyQcodeH, slideKeyUnicodeV, slideKeyQcodeV; | ||
60 | bool enableMouseTracking; | ||
61 | QPixmap *slidePix, *slidePixH, *slidePixV; | ||
62 | |||
63 | QPixmap releasedPlain; | ||
64 | QPixmap releasedShift; | ||
65 | QPixmap releasedParen; | ||
66 | |||
67 | QPixmap pressedPlain; | ||
68 | QPixmap pressedShift; | ||
69 | QPixmap pressedParen; | ||
70 | QPixmap pressedDigit; | ||
71 | |||
72 | QPixmap offscreen; | ||
73 | |||
74 | QPixmap *releasedPix; | ||
75 | QPixmap *pressedPix; | ||
76 | |||
77 | QTimer *delayTimer; | ||
78 | QTimer *rateTimer; | ||
79 | }; | ||
diff --git a/inputmethods/kjumpx/keyboard.xcf b/inputmethods/kjumpx/keyboard.xcf new file mode 100644 index 0000000..9f088c4 --- a/dev/null +++ b/inputmethods/kjumpx/keyboard.xcf | |||
Binary files differ | |||
diff --git a/inputmethods/kjumpx/keyboardimpl.cpp b/inputmethods/kjumpx/keyboardimpl.cpp new file mode 100644 index 0000000..5d8e0d3 --- a/dev/null +++ b/inputmethods/kjumpx/keyboardimpl.cpp | |||
@@ -0,0 +1,97 @@ | |||
1 | /**************************************************************************************94x78** | ||
2 | ** | ||
3 | ** This file may be distributed and/or modified under the terms of the | ||
4 | ** GNU General Public License version 2 as published by the Free Software | ||
5 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
6 | ** packaging of this file. | ||
7 | ** | ||
8 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
9 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
10 | ** | ||
11 | *********************************************************************************************/ | ||
12 | #include <qapplication.h> | ||
13 | #include <qpixmap.h> | ||
14 | #include "keyboard.h" | ||
15 | #include "keyboardimpl.h" | ||
16 | |||
17 | /* XPM */ | ||
18 | static char * icon_xpm[] = { | ||
19 | "26 13 2 1", | ||
20 | " c None", | ||
21 | ".c #000000", | ||
22 | " ... ... ... ... ... ... ", | ||
23 | ". . . . . ", | ||
24 | ". . ... .. . . ", | ||
25 | ". . .. . . ", | ||
26 | " ...... ...... ... .... ", | ||
27 | ". .. .. .. . ", | ||
28 | ". .. .. .. . ", | ||
29 | ". ... .. . ", | ||
30 | " ...... .. ...... ", | ||
31 | ". . .. . . ", | ||
32 | ". . ....... . . ", | ||
33 | ". . . . . ", | ||
34 | " ... ... ... ... ... ... "}; | ||
35 | |||
36 | |||
37 | KeyboardImpl::KeyboardImpl() | ||
38 | : input(0), icn(0), ref(0) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | KeyboardImpl::~KeyboardImpl() | ||
43 | { | ||
44 | delete input; | ||
45 | delete icn; | ||
46 | } | ||
47 | |||
48 | QWidget *KeyboardImpl::inputMethod( QWidget *parent, Qt::WFlags f ) | ||
49 | { | ||
50 | if ( !input ) | ||
51 | input = new Keyboard( parent, "Keyboard", f ); | ||
52 | return input; | ||
53 | } | ||
54 | |||
55 | void KeyboardImpl::resetState() | ||
56 | { | ||
57 | if ( input ) | ||
58 | input->resetState(); | ||
59 | } | ||
60 | |||
61 | QPixmap *KeyboardImpl::icon() | ||
62 | { | ||
63 | if ( !icn ) | ||
64 | icn = new QPixmap( (const char **)icon_xpm ); | ||
65 | return icn; | ||
66 | } | ||
67 | |||
68 | QString KeyboardImpl::name() | ||
69 | { | ||
70 | return qApp->translate( "InputMethods", "KJumpX" ); | ||
71 | } | ||
72 | |||
73 | void KeyboardImpl::onKeyPress( QObject *receiver, const char *slot ) | ||
74 | { | ||
75 | if ( input ) | ||
76 | QObject::connect( input, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot ); | ||
77 | } | ||
78 | |||
79 | #ifndef QT_NO_COMPONENT | ||
80 | QRESULT KeyboardImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) | ||
81 | { | ||
82 | *iface = 0; | ||
83 | if ( uuid == IID_QUnknown ) | ||
84 | *iface = this; | ||
85 | else if ( uuid == IID_InputMethod ) | ||
86 | *iface = this; | ||
87 | |||
88 | if ( *iface ) | ||
89 | (*iface)->addRef(); | ||
90 | return QS_OK; | ||
91 | } | ||
92 | |||
93 | Q_EXPORT_INTERFACE() | ||
94 | { | ||
95 | Q_CREATE_INSTANCE( KeyboardImpl ) | ||
96 | } | ||
97 | #endif | ||
diff --git a/inputmethods/kjumpx/keyboardimpl.h b/inputmethods/kjumpx/keyboardimpl.h new file mode 100644 index 0000000..a82ec4a --- a/dev/null +++ b/inputmethods/kjumpx/keyboardimpl.h | |||
@@ -0,0 +1,43 @@ | |||
1 | /**************************************************************************************94x78** | ||
2 | ** | ||
3 | ** This file may be distributed and/or modified under the terms of the | ||
4 | ** GNU General Public License version 2 as published by the Free Software | ||
5 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
6 | ** packaging of this file. | ||
7 | ** | ||
8 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
9 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
10 | ** | ||
11 | *********************************************************************************************/ | ||
12 | #ifndef KEYBOARDIMPL_H | ||
13 | #define KEYBOARDIMPL_H | ||
14 | |||
15 | #include <qpe/inputmethodinterface.h> | ||
16 | |||
17 | class Keyboard; | ||
18 | class QPixmap; | ||
19 | |||
20 | class KeyboardImpl : public InputMethodInterface | ||
21 | { | ||
22 | public: | ||
23 | KeyboardImpl(); | ||
24 | virtual ~KeyboardImpl(); | ||
25 | |||
26 | #ifndef QT_NO_COMPONENT | ||
27 | QRESULT queryInterface( const QUuid&, QUnknownInterface** ); | ||
28 | Q_REFCOUNT | ||
29 | #endif | ||
30 | |||
31 | virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f ); | ||
32 | virtual void resetState(); | ||
33 | virtual QPixmap *icon(); | ||
34 | virtual QString name(); | ||
35 | virtual void onKeyPress( QObject *receiver, const char *slot ); | ||
36 | |||
37 | private: | ||
38 | Keyboard *input; | ||
39 | QPixmap *icn; | ||
40 | ulong ref; | ||
41 | }; | ||
42 | |||
43 | #endif | ||
diff --git a/inputmethods/kjumpx/kjumpx.pro b/inputmethods/kjumpx/kjumpx.pro new file mode 100644 index 0000000..f8a5c38 --- a/dev/null +++ b/inputmethods/kjumpx/kjumpx.pro | |||
@@ -0,0 +1,12 @@ | |||
1 | TEMPLATE = lib | ||
2 | CONFIG += qt warn_on release | ||
3 | HEADERS = keyboard.h \ | ||
4 | keyboardimpl.h | ||
5 | SOURCES = keyboard.cpp \ | ||
6 | keyboardimpl.cpp | ||
7 | TARGET = qkjumpx | ||
8 | DESTDIR = ../../plugins/inputmethods | ||
9 | INCLUDEPATH += $(OPIEDIR)/include | ||
10 | DEPENDPATH += $(OPIEDIR)/include | ||
11 | LIBS += -lqpe | ||
12 | VERSION = 1.0.0 | ||
diff --git a/inputmethods/kjumpx/layout12.png b/inputmethods/kjumpx/layout12.png new file mode 100644 index 0000000..81f0ef1 --- a/dev/null +++ b/inputmethods/kjumpx/layout12.png | |||
Binary files differ | |||
diff --git a/inputmethods/kjumpx/opie-kjumpx.control b/inputmethods/kjumpx/opie-kjumpx.control new file mode 100644 index 0000000..153c90b --- a/dev/null +++ b/inputmethods/kjumpx/opie-kjumpx.control | |||
@@ -0,0 +1,10 @@ | |||
1 | Files: plugins/inputmethods/libqkjumpx.so* pics/kjumpx/* | ||
2 | Priority: optional | ||
3 | Section: opie/inputmethods | ||
4 | Maintainer: Jake Richardson <jake@asdfnews.org> | ||
5 | Architecture: arm | ||
6 | Version: $QPE_VERSION-$SUB_VERSION | ||
7 | Depends: opie-base ($QPE_VERSION) | ||
8 | License: GPL | ||
9 | Description: Koreanized JumpX input method | ||
10 | Keyboard-like input method for the Opie environment. | ||
diff --git a/inputmethods/kjumpx/opie-kjumpx.control~ b/inputmethods/kjumpx/opie-kjumpx.control~ new file mode 100644 index 0000000..81a4c1e --- a/dev/null +++ b/inputmethods/kjumpx/opie-kjumpx.control~ | |||
@@ -0,0 +1,10 @@ | |||
1 | Files: plugins/inputmethods/libqkjumpx.so* pics/kjumpx | ||
2 | Priority: optional | ||
3 | Section: opie/inputmethods | ||
4 | Maintainer: Jake Richardson <jake@asdfnews.org> | ||
5 | Architecture: arm | ||
6 | Version: $QPE_VERSION-$SUB_VERSION | ||
7 | Depends: opie-base ($QPE_VERSION) | ||
8 | License: GPL | ||
9 | Description: Koreanized JumpX input method | ||
10 | Keyboard-like input method for the Opie environment. | ||
diff --git a/inputmethods/kjumpx/opie-kjumpx.postinst b/inputmethods/kjumpx/opie-kjumpx.postinst new file mode 100755 index 0000000..c254b01 --- a/dev/null +++ b/inputmethods/kjumpx/opie-kjumpx.postinst | |||
@@ -0,0 +1,2 @@ | |||
1 | #!/bin/sh | ||
2 | /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()" | ||
diff --git a/inputmethods/kjumpx/opie-kjumpx.postrm b/inputmethods/kjumpx/opie-kjumpx.postrm new file mode 100755 index 0000000..c254b01 --- a/dev/null +++ b/inputmethods/kjumpx/opie-kjumpx.postrm | |||
@@ -0,0 +1,2 @@ | |||
1 | #!/bin/sh | ||
2 | /opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()" | ||