comparison src/aci2/bmi/MmiLatinPredText.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
comparison
equal deleted inserted replaced
2:c41a534f33c6 3:93999a60b835
1 /*******************************************************************************
2
3 CONDAT (UK)
4
5 ********************************************************************************
6
7 This software product is the property of Condat (UK) Ltd and may not be
8 disclosed to any third party without the express permission of the owner.
9
10 ********************************************************************************
11
12 $Project name: Basic MMI
13 $Project code: BMI
14 $Module: MMI
15 $File: MmiLatinPredText.c
16 $Revision: 1.0
17
18 $Author: Condat(UK)
19 $Date:
20
21 ********************************************************************************
22
23 Description: Latin alphabet predictiev text editor. English-only for the moment.
24
25
26
27 ********************************************************************************
28
29 $History: MmLatinPredText.c
30 03/10/02 Replaced most of the file with version on 3.3.3 line (MC, SPR 1242)
31
32 $End
33
34 *******************************************************************************/
35
36 #include <stdio.h>
37 #include <string.h>
38 #include <stdlib.h>
39
40
41 #if defined (NEW_FRAME)
42
43 #include "typedefs.h"
44 #include "Vsi.h"
45 #include "PEI.H"
46 #include "custom.h"
47 #include "gsm.h"
48
49 #else
50
51 #include "STDDEFS.H"
52 #include "custom.h"
53 #include "gsm.h"
54 #include "vsi.h"
55
56 #endif
57
58 #include "mfw_mfw.h"
59 #include "mfw_win.h"
60 #include "mfw_kbd.h"
61 #include "mfw_edt.h"
62 #include "mfw_tim.h"
63 #include "mfw_phb.h"
64 #include "mfw_sms.h"
65 #include "mfw_ss.h"
66 #include "mfw_icn.h"
67 #include "mfw_mnu.h"
68 #include "mfw_lng.h"
69 #include "mfw_sat.h"
70 #include "mfw_kbd.h"
71 #include "mfw_nm.h"
72 #include "mfw_cm.h"
73
74 #include "dspl.h"
75
76 #include "ksd.h"
77 #include "psa.h"
78
79
80 #include "MmiMain.h"
81 #include "MmiDummy.h"
82 #include "MmiMmi.h"
83
84 #include "MmiDialogs.h"
85 #include "MmiLists.h"
86 #include "MmiMenu.h"
87 #include "MmiSoftKeys.h"
88 #include "MmiIdle.h"
89
90 #include "MmiEditor.h"
91 #include "MmiEditor_i.h"
92 #include "MmiDictionary.h"
93 #include "mmiColours.h"
94
95 #include "cus_aci.h"
96 #include "prim.h"
97
98
99 #ifndef MFW_EVENT_PASSED
100 #define MFW_EVENT_PASSED 0
101 #endif
102
103 //data structure for punctuation symbols selection screen
104 typedef struct
105 {
106 T_MMI_CONTROL mmi_control;
107 T_MFW_HND parent;
108 T_MFW_HND edt_win;
109 T_MFW_HND edt_edt;
110 T_MFW_HND edt_kbd;
111 T_MFW_HND edt_kbd_long;
112 T_MFW_HND edt_tim; // c015 rsa
113 T_MFW_HND edt_input; // RM 25-08
114
115 T_EDITOR_DATA editor_data;
116 UBYTE cursor_position;
117 char* output_symbol;
118
119 }
120 T_SYMBOL_INFO;
121
122 //events in main editor screen
123 typedef enum
124 {
125 EDITOR_INIT,
126 EDITOR_DEINIT,
127 EDITOR_UPDATE
128 } editor_events;
129
130 /*********************************************************************
131 **********************************************************************
132
133 DYNAMIC EDITOR WINDOW. DECLARATION
134
135 *********************************************************************
136 **********************************************************************/
137
138
139 //protoypes
140
141
142
143 static T_MFW_HND SymbolScreencreate (T_MFW_HND parent);
144 static int SymbolScreenwin_cb (T_MFW_EVENT event, T_MFW_WIN * win);
145 static int SymbolScreenkbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard);
146 static void SymbolScreenexec_cb (T_MFW_HND win, USHORT event, SHORT value, char * symbol);
147
148 char SymbolChar;
149
150
151
152 /*******************************************************************************
153
154 $Function: SymbolScreendestroy
155
156 $Description: Destroy thesymbol screen
157
158 $Returns: None.
159
160 $Arguments: window handle
161
162 *******************************************************************************/
163
164 void SymbolScreendestroy (T_MFW_HND window)
165 {
166 T_MFW_WIN * win = ((T_MFW_HDR *)window)->data;
167 T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win->user;
168 char Punctuation_symbol = *data->output_symbol;
169 TRACE_FUNCTION ("SymbolScreendestroy()");
170
171
172 SEND_EVENT (data->parent, EDITOR_UPDATE,(short)Punctuation_symbol, NULL);
173 if (data)
174 {
175 /*
176 * Delete WIN Handler
177 */
178 win_delete (data->edt_win);
179 /*
180 * Free Memory
181 */
182 FREE_MEMORY ((void *)data, sizeof (T_SYMBOL_INFO));
183 }
184 else
185 {
186 TRACE_EVENT ("SymbolScreendestroy() called twice");
187 return ;
188 }
189 }
190
191
192 /*******************************************************************************
193
194 $Function: SymbolScreenstart
195
196 $Description: Starts the symbol screen
197
198 $Returns: handle
199
200 $Arguments: parent window, editor data
201
202 *******************************************************************************/
203 T_MFW_HND SymbolScreenstart (T_MFW_HND parent, char * symbol)
204 {
205 T_MFW_HND win;
206
207
208 TRACE_FUNCTION ("SymbolScreenstart()");
209
210 win = SymbolScreencreate (parent);
211
212 if (win NEQ NULL)
213 {
214 SEND_EVENT (win, E_EDITOR_INIT, 0, 0);
215 }
216 return win;
217 }
218
219
220 /*******************************************************************************
221
222 $Function: LatinEditorcreate
223
224 $Description: Creation of a symbol screen
225
226 $Returns: handle of new window
227
228 $Arguments: parent window
229
230 *******************************************************************************/
231 static T_MFW_HND SymbolScreencreate (T_MFW_HND parent)
232 {
233 T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)ALLOC_MEMORY (sizeof (T_SYMBOL_INFO));
234 T_MFW_WIN * win;
235
236 TRACE_FUNCTION ("SymbolScreencreate()");
237
238 /*
239 * Create window handler
240 */
241
242 data->edt_win = win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB)SymbolScreenwin_cb);
243
244 if (data->edt_win EQ NULL)
245 {
246 return NULL;
247 }
248
249 /*
250 * connect the dialog data to the MFW-window
251 */
252
253
254 data->mmi_control.dialog = (T_DIALOG_FUNC)SymbolScreenexec_cb;
255 data->mmi_control.data = data;
256 data->parent = parent;
257 win = ((T_MFW_HDR *)data->edt_win)->data;
258 win->user = (void *)data;
259
260 return data->edt_win;
261 }
262
263 /*******************************************************************************
264
265 $Function: SymbolScreenexec_cb
266
267 $Description: handles events for symbol window
268
269 $Returns: None.
270
271 $Arguments: window, event, value, editor data
272
273 *******************************************************************************/
274 static void SymbolScreenexec_cb (T_MFW_HND win, USHORT event, SHORT value, char * symbol)
275 {
276 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
277 T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win_data->user;
278
279 T_MFW_HND parent_win = data->parent;
280 USHORT Identifier = data->editor_data.Identifier;
281 T_EDIT_CB Callback = data->editor_data.Callback;
282 char debug[20];
283 char* symStr = ".,?!:;-+#*()\'\"_@&$£%/<>=";
284
285 TRACE_FUNCTION ("SymbolScreenexec_cb()");
286
287 switch (event)
288 {
289 case E_EDITOR_INIT:
290
291
292 /* Note that we do not copy the edited buffer here */
293 data->editor_data.editor_attr.predText[0] = '\0';
294
295 /*
296 * Create the handler
297 */
298 data->edt_kbd = kbd_create (data->edt_win, KEY_ALL, (T_MFW_CB)SymbolScreenkbd_cb);
299 data->edt_edt = edtCreate (data->edt_win, &data->editor_data.editor_attr,MfwEdtVisible,0);
300
301 /*
302 * Set the mode for the editor
303 */
304 editor_attr_init(&data->editor_data.editor_attr, 0, edtCurMask, NULL, symStr, strlen(symStr), COLOUR_EDITOR );
305 editActivate(data->edt_edt,ALPHA_MODE);
306 data->output_symbol = symbol;
307 data->cursor_position = 0;
308
309 edtChar(data->edt_edt,ecTop); /* in read-only mode set cursor to begin */
310 win_show(data->edt_win);
311
312 break;
313
314 case E_EDITOR_DEINIT:
315
316 SymbolScreendestroy (data->edt_win);
317 break;
318
319 default:
320 break;
321 }
322 }
323 /*******************************************************************************
324
325 $Function: SymbolScreenwin_cb
326
327 $Description: Editor window event handler.
328
329 $Returns: status int
330
331 $Arguments: event, window
332
333 *******************************************************************************/
334 static int SymbolScreenwin_cb (T_MFW_EVENT event, T_MFW_WIN * win)
335 {
336 T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win->user;
337 TRACE_FUNCTION ("SymbolScreen_win_cb()");
338
339
340 if (data->edt_edt!=activeEditor())
341 editActivate(data->edt_edt,data->editor_data.mode);
342 if (data EQ 0)
343 {
344 return MFW_EVENT_CONSUMED;
345 }
346
347 switch (event)
348 {
349 case E_WIN_VISIBLE: /* window is visible */
350 if (win->flags & E_WIN_VISIBLE)
351 {
352 /*
353 * Clear Screen
354 */
355 dspl_ClearAll();
356
357 /*
358 * Print the information
359 */
360 edtShow(data->edt_edt);
361
362 /*
363 * Print the softkeys
364 */
365 displaySoftKeys(TxtSoftSelect, TxtSoftBack);
366
367 }
368 break;
369 default:
370 return MFW_EVENT_PASSED;
371 }
372 return MFW_EVENT_CONSUMED;
373 }
374 /*******************************************************************************
375
376 $Function: SymbolScreen_kbd_cb
377
378 $Description: Symbol screen keyboard event handler
379
380 $Returns: None.
381
382 $Arguments: event, keyborad data
383
384 *******************************************************************************/
385 static int SymbolScreenkbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
386 {
387 T_MFW_HND win = mfw_parent (mfw_header());
388 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
389 T_SYMBOL_INFO * data = (T_SYMBOL_INFO *)win_data->user;
390 char debug[20];
391 TRACE_FUNCTION ("SymbolScreen_kbd_cb()");
392
393
394
395 switch (keyboard->code)
396 {
397 case KCD_MNUUP:
398 edtChar(data->edt_edt,ecLeft);
399 if (data->cursor_position > 0)
400 data->cursor_position--;
401 edtShow(data->edt_edt);
402 break;
403
404 case KCD_MNUDOWN:
405 edtChar(data->edt_edt,ecRight);
406 if (data->cursor_position < strlen(data->editor_data.editor_attr.text))
407 data->cursor_position++;
408 edtShow(data->edt_edt);
409 break;
410
411 case KCD_LEFT:
412 *data->output_symbol = data->editor_data.editor_attr.text[data->cursor_position];
413 SymbolChar = data->editor_data.editor_attr.text[data->cursor_position];
414 TRACE_EVENT(debug);
415 SymbolScreendestroy(data->edt_win);
416 break;
417
418
419 case KCD_HUP:
420 case KCD_RIGHT:
421 *data->output_symbol = '\0';
422 SymbolChar ='\0' ;
423 SymbolScreendestroy(data->edt_win);
424
425 break;
426
427 }
428
429 return MFW_EVENT_CONSUMED;
430 }
431