FreeCalypso > hg > leo2moko-debug
comparison g23m/condat/ms/src/bmi/AUICalcEditor.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:509db1a7b7b8 |
---|---|
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 (6349) | |
14 $Module: MMI | |
15 $File: AUICalcEditor.c | |
16 $Revision: 1.0 | |
17 | |
18 $Author: Condat(UK) | |
19 $Date: 22/02/01 | |
20 | |
21 ******************************************************************************** | |
22 | |
23 Description: Editor for calculator, or generic floating-point number input | |
24 | |
25 | |
26 | |
27 ******************************************************************************** | |
28 | |
29 $History: AUICalcEditor.c | |
30 | |
31 xrashmic 20 Oct, 2005 MMI-SPR-33845 | |
32 To display BACK softkey when no more character are left in the calculator editor | |
33 | |
34 14/11/02 Original Condat(UK) BMI version. | |
35 $End | |
36 | |
37 *******************************************************************************/ | |
38 | |
39 #define ENTITY_MFW | |
40 | |
41 /* includes */ | |
42 #include <string.h> | |
43 #include <stdio.h> | |
44 #include <stdlib.h> | |
45 | |
46 #if defined (NEW_FRAME) | |
47 | |
48 #include "typedefs.h" | |
49 #include "vsi.h" | |
50 #include "pei.h" | |
51 #include "custom.h" | |
52 #include "gsm.h" | |
53 | |
54 #else | |
55 | |
56 #include "STDDEFS.H" | |
57 #include "custom.h" | |
58 #include "gsm.h" | |
59 #include "vsi.h" | |
60 | |
61 #endif | |
62 | |
63 #include "mfw_mfw.h" | |
64 #include "mfw_win.h" | |
65 #include "mfw_kbd.h" | |
66 #include "mfw_tim.h" | |
67 #include "mfw_phb.h" | |
68 #include "mfw_sms.h" | |
69 #include "mfw_ss.h" | |
70 #include "mfw_icn.h" | |
71 #include "mfw_mnu.h" | |
72 #include "mfw_lng.h" | |
73 #include "mfw_sat.h" | |
74 #include "mfw_kbd.h" | |
75 #include "mfw_nm.h" | |
76 #include "mfw_cm.h" | |
77 | |
78 #include "dspl.h" | |
79 | |
80 #include "ksd.h" | |
81 #include "psa.h" | |
82 | |
83 #include "MmiDummy.h" | |
84 #include "MmiMmi.h" | |
85 | |
86 #include "MmiDialogs.h" | |
87 #include "MmiLists.h" | |
88 #include "MmiMenu.h" | |
89 #include "MmiSoftKeys.h" | |
90 #include "MmiIdle.h" | |
91 #include "MmiResources.h" | |
92 | |
93 #include "cus_aci.h" | |
94 #include "prim.h" | |
95 #ifndef PCM_2_FFS | |
96 #include "pcm.h" | |
97 #endif | |
98 | |
99 #include "mmiColours.h" | |
100 | |
101 #include "ATBCommon.h" | |
102 #include "ATBDisplay.h" | |
103 #include "ATBEditor.h" | |
104 #include "AUIEditor.h" | |
105 #include "AUITextEntry.h" | |
106 | |
107 #include "AUICalcEditor.h" | |
108 | |
109 typedef struct | |
110 { | |
111 T_MMI_CONTROL mmi_control; | |
112 T_MFW_HND parent; // The parent window | |
113 T_MFW_HND win; // The edit window | |
114 T_MFW_HND kbd; // The keyboard handler | |
115 T_MFW_HND kbd_long; // The longpress keyboard handler | |
116 T_MFW_HND timer; // The timer for timeouts | |
117 | |
118 T_ED_DATA *editor; /* The ATB editor */ | |
119 T_AUI_EDITOR_DATA editor_data; /* The MMI editor data, provided by caller */ | |
120 T_AUI_ENTRY_DATA *entry_data; /* The MMI text entry data */ | |
121 | |
122 BOOL haveTitle; /* TRUE if a title is supplied */ | |
123 T_ATB_TEXT title; /* Title of editor */ | |
124 BOOL haveResult; /* TRUE if a result is supplied */ | |
125 T_ATB_TEXT result; /* Text of result */ | |
126 | |
127 BOOL doNextLongPress; /* Flag used to notice/not notice long keypress */ | |
128 BOOL hasDecimalPoint; /* Ensures only one decimal point per number */ | |
129 } | |
130 T_AUI_CALC_DATA; | |
131 | |
132 /* LOCAL FUNCTION PROTOTYPES */ | |
133 static T_MFW_HND AUI_calc_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data); | |
134 static void AUI_calc_ExecCb(T_MFW_HND win, USHORT event, SHORT value, void *parameter); | |
135 static int AUI_calc_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data); | |
136 static int AUI_calc_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard); | |
137 static int AUI_calc_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard); | |
138 | |
139 | |
140 | |
141 | |
142 /******************************************************************************* | |
143 | |
144 $Function: AUI_calc_Start | |
145 | |
146 $Description: Start the Calc editor. | |
147 | |
148 $Returns: None. | |
149 | |
150 $Arguments: None. | |
151 | |
152 *******************************************************************************/ | |
153 | |
154 T_MFW_HND AUI_calc_Start(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data) | |
155 { | |
156 T_MFW_HND win; | |
157 | |
158 TRACE_FUNCTION ("AUI_calc_Start()"); | |
159 win = AUI_calc_Create(parent, editor_data); | |
160 | |
161 return win; | |
162 } | |
163 | |
164 | |
165 /******************************************************************************* | |
166 | |
167 $Function: AUI_calc_Create | |
168 | |
169 $Description: Create the Calc editor. | |
170 | |
171 $Returns: Pointer to the editor's window. | |
172 | |
173 $Arguments: parent - The parent window. | |
174 | |
175 *******************************************************************************/ | |
176 | |
177 static T_MFW_HND AUI_calc_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data) | |
178 { | |
179 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)ALLOC_MEMORY(sizeof (T_AUI_CALC_DATA)); | |
180 T_MFW_WIN *win_data; | |
181 | |
182 TRACE_FUNCTION ("AUI_calc_Create()"); | |
183 | |
184 /* Create window handler */ | |
185 | |
186 data->win = win_create(parent, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_calc_WinCb); // Create window | |
187 | |
188 if (data->win==NULL) // Make sure window exists | |
189 { | |
190 return NULL; | |
191 } | |
192 | |
193 /* Connect the dialog data to the MFW-window */ | |
194 | |
195 data->mmi_control.dialog = (T_DIALOG_FUNC)AUI_calc_ExecCb; /* Setup the destination for events */ | |
196 data->mmi_control.data = data; | |
197 data->parent = parent; | |
198 win_data = ((T_MFW_HDR *)data->win)->data; | |
199 win_data->user = (void *)data; | |
200 | |
201 data->kbd = kbd_create(data->win, KEY_ALL,(T_MFW_CB)AUI_calc_KbdCb); | |
202 data->kbd_long = kbd_create(data->win, KEY_ALL|KEY_LONG,(T_MFW_CB)AUI_calc_KbdLongCb); | |
203 data->editor = ATB_edit_Create(&data->editor_data.editor_attr,0); | |
204 | |
205 data->editor_data = *editor_data; | |
206 data->entry_data = AUI_entry_Create(data->win, data->editor, E_CALC_UPDATE); | |
207 | |
208 SEND_EVENT(data->win, E_CALC_INIT, 0, 0); | |
209 | |
210 /* Return window handle */ | |
211 | |
212 return data->win; | |
213 } | |
214 | |
215 | |
216 /******************************************************************************* | |
217 | |
218 $Function: AUI_calc_Destroy | |
219 | |
220 $Description: Destroy the Calc editor. | |
221 | |
222 $Returns: None. | |
223 | |
224 $Arguments: window - The editor window. | |
225 | |
226 *******************************************************************************/ | |
227 | |
228 void AUI_calc_Destroy(T_MFW_HND win) | |
229 { | |
230 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
231 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)win_data->user; | |
232 | |
233 if (data) | |
234 { | |
235 AUI_entry_Destroy(data->entry_data); | |
236 | |
237 win_delete (data->win); | |
238 | |
239 /* Free memory allocated to store result */ | |
240 | |
241 if (data->haveResult) | |
242 { | |
243 FREE_MEMORY(data->result.data, data->result.len*sizeof(char)); | |
244 } | |
245 | |
246 /* Free editor memory */ | |
247 | |
248 ATB_edit_Destroy(data->editor); | |
249 FREE_MEMORY ((void *)data, sizeof (T_AUI_CALC_DATA)); | |
250 } | |
251 | |
252 return; | |
253 } | |
254 | |
255 | |
256 /******************************************************************************* | |
257 | |
258 $Function: AUI_calc_ExecCb | |
259 | |
260 $Description: Dialog function for Calc editor. | |
261 | |
262 $Returns: None. | |
263 | |
264 $Arguments: None. | |
265 | |
266 *******************************************************************************/ | |
267 | |
268 static void AUI_calc_ExecCb(T_MFW_HND win, USHORT event, SHORT value, void *parameter) | |
269 { | |
270 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
271 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)win_data->user; | |
272 T_MFW_HND parent_win = data->parent; | |
273 USHORT textIndex; | |
274 T_ATB_TEXT text; | |
275 /* Store these in case editor is destroyed on callback */ | |
276 USHORT Identifier = data->editor_data.Identifier; | |
277 T_AUI_EDIT_CB Callback = data->editor_data.Callback; | |
278 UBYTE destroyEditor = data->editor_data.destroyEditor; | |
279 | |
280 TRACE_FUNCTION ("AUI_calc_ExecCb()"); | |
281 | |
282 switch (event) | |
283 { | |
284 /* Initialise */ | |
285 | |
286 case E_CALC_INIT: | |
287 TRACE_EVENT("E_CALC_INIT"); | |
288 ATB_edit_Init(data->editor); | |
289 | |
290 data->haveTitle = FALSE; | |
291 data->haveResult = FALSE; | |
292 | |
293 /* If we require an output line, shrink editor to fit it at bottom | |
294 * NB TitleString is assumed here to be a numeric string of ascii digits */ | |
295 | |
296 if (data->editor_data.TitleString) | |
297 { | |
298 data->haveResult = TRUE; | |
299 text.dcs = ATB_DCS_ASCII; | |
300 text.data = data->editor_data.TitleString; | |
301 text.len = ATB_string_Length(&text); | |
302 | |
303 data->result.data = ALLOC_MEMORY(text.len*sizeof(char)); | |
304 ATB_string_Copy(&data->result, &text); | |
305 | |
306 /* Change size of editor to fit result line in */ | |
307 data->editor_data.editor_attr.win_size.sy -= ATB_display_StringHeight(&data->result, NULL); | |
308 } | |
309 | |
310 /* Set up title */ | |
311 | |
312 if (data->editor_data.TitleId!=NULL) | |
313 { | |
314 data->haveTitle = TRUE; | |
315 data->title.data = (UBYTE *)MmiRsrcGetText(data->editor_data.TitleId); | |
316 } | |
317 | |
318 /* If title exists, get its dcs and length */ | |
319 | |
320 if (data->haveTitle) | |
321 { | |
322 if (data->title.data[0]==0x80) | |
323 { | |
324 data->title.data += 2; /* Skip over two unicode indicator bytes */ | |
325 data->title.dcs = ATB_DCS_UNICODE; | |
326 } | |
327 #ifdef EASY_TEXT_ENABLED | |
328 else if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE) | |
329 { | |
330 data->title.dcs = ATB_DCS_UNICODE; | |
331 } | |
332 #endif | |
333 else | |
334 { | |
335 data->title.dcs = ATB_DCS_ASCII; | |
336 } | |
337 | |
338 data->title.len = ATB_string_Length(&data->title); | |
339 } | |
340 | |
341 /* Check to see if number already has decimal point */ | |
342 | |
343 data->hasDecimalPoint = FALSE; | |
344 | |
345 for (textIndex = 0; textIndex<data->editor->attr->text.len; textIndex++) | |
346 { | |
347 if (ATB_string_GetChar(&data->editor->attr->text, textIndex)==UNICODE_FULLSTOP) | |
348 { | |
349 data->hasDecimalPoint = TRUE; | |
350 } | |
351 } | |
352 | |
353 /* Show the window */ | |
354 win_show(data->win); | |
355 break; | |
356 | |
357 case E_CALC_UPDATE: | |
358 TRACE_EVENT("E_CALC_UPDATE"); | |
359 win_show(data->win); | |
360 break; | |
361 | |
362 case E_CALC_DEINIT: | |
363 TRACE_EVENT("E_CALC_DEINIT"); | |
364 | |
365 if (Callback) | |
366 (Callback) (parent_win, Identifier, value); | |
367 | |
368 if (destroyEditor) | |
369 AUI_calc_Destroy(data->win); | |
370 | |
371 break; | |
372 | |
373 } | |
374 | |
375 return; | |
376 } | |
377 | |
378 /******************************************************************************* | |
379 | |
380 $Function: AUI_calc_WinCb | |
381 | |
382 $Description: Calc editor window event handler. | |
383 | |
384 $Returns: None. | |
385 | |
386 $Arguments: event - the event | |
387 win - the editor window | |
388 | |
389 *******************************************************************************/ | |
390 | |
391 static int AUI_calc_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data) | |
392 { | |
393 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)win_data->user; | |
394 T_ED_DATA *editor = data->editor; | |
395 T_ATB_WIN_SIZE *win_size = &data->editor->attr->win_size; | |
396 T_DS_TEXTFORMAT format; | |
397 // USHORT titleLen; // RAVI | |
398 | |
399 TRACE_EVENT("AUI_calc_WinCb"); | |
400 | |
401 if (!data) | |
402 return MFW_EVENT_CONSUMED; | |
403 | |
404 switch(event) | |
405 { | |
406 case E_WIN_VISIBLE: /* window is visible */ | |
407 if (win_data->flags & E_WIN_VISIBLE) | |
408 { | |
409 if (editor->update==ED_UPDATE_TRIVIAL) | |
410 { | |
411 TRACE_EVENT("Only updating editor."); | |
412 ATB_edit_Show(data->editor); | |
413 } | |
414 else | |
415 { | |
416 TRACE_EVENT("Updating whole screen."); | |
417 | |
418 ATB_edit_Show(data->editor); | |
419 | |
420 /* Set the colour for drawing title */ | |
421 | |
422 resources_setTitleColour(COLOUR_EDITOR); | |
423 | |
424 /* TITLE */ | |
425 | |
426 dspl_Clear(0,0, SCREEN_SIZE_X-1, win_size->py-1); | |
427 | |
428 if (data->haveTitle) | |
429 { | |
430 ATB_display_SetFormatAttr(&format, 0, FALSE); | |
431 ATB_display_Text(0,0,&format, &data->title); | |
432 } | |
433 | |
434 /* RESULT */ | |
435 | |
436 if (data->haveResult) | |
437 { | |
438 resources_setHLColour(COLOUR_EDITOR); | |
439 ATB_display_SetFormatAttr(&format, 0, FALSE); | |
440 dspl_Clear( win_size->px, win_size->py+win_size->sy, win_size->px+win_size->sx, | |
441 win_size->py+win_size->sy+ATB_display_StringHeight(&data->result, &format)); | |
442 | |
443 ATB_display_Text(win_size->px+win_size->sx-ATB_display_StringWidth(&data->result, &format), | |
444 win_size->py+win_size->sy,&format, &data->result); | |
445 } | |
446 | |
447 /* Display Soft Keys */ | |
448 //xrashmic 20 Oct, 2005 MMI-SPR-33845 | |
449 //Need to display the alternate right softkey when the editor is does not contain any character other than 0. | |
450 if (data->editor_data.editor_attr.text.len == data->editor_data.min_enter && (data->editor_data.editor_attr.text.data[0] == '0')) | |
451 { | |
452 /* entered less than the required number of chars: Alternate Softkey appears */ | |
453 displaySoftKeys(data->editor_data.LeftSoftKey,data->editor_data.AltRightSoftKey); | |
454 } | |
455 else | |
456 { | |
457 /* entered sufficient number of chars: Normal Softkey appears */ | |
458 displaySoftKeys(data->editor_data.LeftSoftKey, data->editor_data.RightSoftKey); | |
459 } | |
460 } | |
461 } | |
462 break; | |
463 } | |
464 | |
465 data->editor->update = ED_UPDATE_DEFAULT; | |
466 | |
467 return; | |
468 } | |
469 | |
470 | |
471 /******************************************************************************* | |
472 | |
473 $Function: AUI_calc_KbdCb | |
474 | |
475 $Description: Calc editor keyboard event handler | |
476 | |
477 $Returns: None. | |
478 | |
479 $Arguments: event - The keyboard event | |
480 keyboard - The keypress info | |
481 | |
482 *******************************************************************************/ | |
483 | |
484 static int AUI_calc_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard) | |
485 { | |
486 T_MFW_HND win = mfw_parent (mfw_header()); | |
487 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
488 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)win_data->user; | |
489 ED_RES result; | |
490 | |
491 TRACE_FUNCTION("AUI_calc_KbdCb()"); | |
492 | |
493 /* Suppress unwanted long keypresses */ | |
494 | |
495 data->doNextLongPress = TRUE; /* next Key_long event is correct */ | |
496 data->editor->update = ED_UPDATE_DEFAULT; /* Default behaviour is just to update text */ | |
497 | |
498 switch (keyboard->code) | |
499 { | |
500 #ifdef COLOURDISPLAY | |
501 case KCD_MNUSELECT: | |
502 if (data->editor_data.Callback) | |
503 (data->editor_data.Callback) (data->parent, data->editor_data.Identifier, INFO_KCD_SELECT); | |
504 break; | |
505 | |
506 #endif /* COLOURDISPLAY */ | |
507 | |
508 case KCD_STAR: | |
509 if (data->editor_data.Callback) | |
510 (data->editor_data.Callback) (data->parent, data->editor_data.Identifier, INFO_KCD_STAR); | |
511 break; | |
512 | |
513 case KCD_HASH: | |
514 /* Insert decimal point, if the number doesn't have one already */ | |
515 if (!data->hasDecimalPoint) | |
516 { | |
517 data->hasDecimalPoint = TRUE; | |
518 AUI_entry_EditChar(data->entry_data, UNICODE_FULLSTOP, FALSE); | |
519 win_show(data->win); | |
520 } | |
521 break; | |
522 | |
523 case KCD_LEFT: | |
524 if (data->editor_data.editor_attr.text.len < data->editor_data.min_enter) | |
525 { | |
526 /* Entered less than the required number of chars */ | |
527 if (data->editor_data.AltLeftSoftKey!=TxtNull) | |
528 { | |
529 /* an alternate softkey is defined: execute it */ | |
530 SEND_EVENT (win, E_CALC_DEINIT, INFO_KCD_ALTERNATELEFT, NULL); | |
531 } | |
532 } | |
533 else if (data->editor_data.LeftSoftKey!=TxtNull) | |
534 { | |
535 /* Left Softkey is enabled (and entered sufficient number of chars): execute it */ | |
536 SEND_EVENT (win, E_CALC_DEINIT, INFO_KCD_LEFT, NULL); | |
537 } | |
538 break; | |
539 | |
540 case KCD_HUP: | |
541 SEND_EVENT(data->win, E_CALC_DEINIT, INFO_KCD_HUP, 0); | |
542 break; | |
543 | |
544 case KCD_RIGHT: | |
545 /* If we're deleting the decimal point... */ | |
546 if (ATB_edit_GetCursorChar(data->editor, -1)==UNICODE_FULLSTOP) | |
547 { | |
548 data->hasDecimalPoint = FALSE; | |
549 } | |
550 | |
551 /* If we've just got a zero, delete it so we can exit with next call to ATB_edit_DeleteLeft() */ | |
552 | |
553 if (ATB_edit_GetCursorChar(data->editor, -1)==ATB_char_Unicode('0')) | |
554 { | |
555 ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */ | |
556 } | |
557 | |
558 /* Perform normal delete */ | |
559 result = ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */ | |
560 | |
561 /* If buffer is now empty, insert '0' */ | |
562 if (data->editor->attr->text.len==0 && result!=ED_DONE) | |
563 { | |
564 AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('0'), FALSE); | |
565 } | |
566 | |
567 /* If we've deleted on an empty buffer, exit editor */ | |
568 if (result==ED_DONE) | |
569 { | |
570 SEND_EVENT(data->win, E_CALC_DEINIT, INFO_KCD_RIGHT, 0); | |
571 } | |
572 else | |
573 { | |
574 win_show(data->win); | |
575 } | |
576 break; | |
577 | |
578 /* 0 - 9 */ | |
579 | |
580 case KCD_0: | |
581 case KCD_1: | |
582 case KCD_2: | |
583 case KCD_3: | |
584 case KCD_4: | |
585 case KCD_5: | |
586 case KCD_6: | |
587 case KCD_7: | |
588 case KCD_8: | |
589 case KCD_9: | |
590 /* Remove leading zero */ | |
591 if (data->editor->attr->text.len==1 && ATB_edit_GetCursorChar(data->editor, -1)==ATB_char_Unicode('0')) | |
592 { | |
593 ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */ | |
594 } | |
595 | |
596 /* Insert the digit */ | |
597 AUI_entry_EventKey(data->entry_data, event, keyboard); | |
598 win_show(data->win); | |
599 break; | |
600 } | |
601 | |
602 return MFW_EVENT_CONSUMED; | |
603 } | |
604 | |
605 | |
606 /******************************************************************************* | |
607 | |
608 $Function: AUI_calc_KbdLongCb | |
609 | |
610 $Description: Calc editor long keypress event handler | |
611 | |
612 $Returns: None. | |
613 | |
614 $Arguments: event - The keyboard event | |
615 keyboard - The keypress info | |
616 | |
617 *******************************************************************************/ | |
618 | |
619 static int AUI_calc_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard) | |
620 { | |
621 T_MFW_HND win = mfw_parent (mfw_header()); | |
622 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data; | |
623 T_AUI_CALC_DATA *data = (T_AUI_CALC_DATA *)win_data->user; | |
624 ED_RES result; | |
625 | |
626 /* Suppress unwanted long keypresses */ | |
627 | |
628 if ( data->doNextLongPress ) | |
629 data->doNextLongPress = FALSE; /* mark Key_long event as consumed but do current long press */ | |
630 else | |
631 return MFW_EVENT_CONSUMED; /* don't do current long press */ | |
632 | |
633 switch (keyboard->code) | |
634 { | |
635 case KCD_RIGHT: | |
636 /* Long press of RSK deletes buffer */ | |
637 result = ATB_edit_ClearAll(data->editor); | |
638 | |
639 /* If buffer is now empty, insert '0' */ | |
640 if (data->editor->attr->text.len==0 && result!=ED_DONE) | |
641 { | |
642 AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('0'), FALSE); | |
643 } | |
644 | |
645 /* If we've deleted on an empty buffer, exit editor */ | |
646 if (result==ED_DONE) | |
647 { | |
648 SEND_EVENT(data->win, E_CALC_DEINIT, INFO_KCD_RIGHT, 0); | |
649 } | |
650 else | |
651 { | |
652 win_show(data->win); | |
653 } | |
654 break; | |
655 } | |
656 | |
657 return MFW_EVENT_CONSUMED; | |
658 } |