comparison g23m/condat/ms/src/bmi/AUIEditor.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: AUIEditor.c
16 $Revision: 1.0
17
18 $Author: Condat(UK)
19 $Date: 22/02/01
20
21 ********************************************************************************
22
23 Description:
24 Generic MMI Editor.
25
26 ********************************************************************************
27
28 $History: AUIEditor.c
29
30 Mar 14, 2006 DR: OMAPS00061468 - x0035544.
31 Description: SAT 27.22.4.22.2 SET UP IDLE MODE TEXT (Icon support) fails
32 Solution : In the function AUI_edit_SetDefault() set the default value for
33 display_type to SAT_ICON_NONE.
34
35 Jan 16, 2006 DR: OMAPS00061460 - Shashi Shekar B.S.
36 Description: SAT Icon support
37 Solution : SAT icon support added.
38
39 Dec-20-2004 MMI-SPR-27382 xreddymn
40 Added NULL window handle check for AUI_edit_Destroy
41
42 Sep 2, 2004 REF: CRR 21370 xkundadu
43 Description: Giving wrong expected result by long press on "#" key
44 Fix: When user presses long on '#' key it will display 'p'.
45 Changed the long press of '*' key to display 'w'.
46
47 Jul 22,2004 CRR:21605 xrashmic - SASKEN
48 Description: After deleting all the characters in the editor the case does not change to
49 sentence case.
50 Fix: After deleting a character, check if editor is empty and then set the case to
51 sentence case only if the user has not modified the case.
52
53
54 Jul 29, 2004 REF: CRR:20892 xrashmic - SASKEN
55 Description: By Long press on Left/Right key at 'Message Editor' screen,
56 cursor not scrolling continuously
57 Fix: The Long press of left/right key is now handled in AUI_edit_KbdLongCB.
58 The continuous long press of a key was being ignored for all keys. Now
59 only for left and right keys this is handled, for rest of the keys the continuos
60 long press is ignored.
61
62
63 31/01/02 Original Condat(UK) BMI version.
64
65 $End
66
67 *******************************************************************************/
68
69 #define ENTITY_MFW
70
71 /* includes */
72 #include <string.h>
73 #include <stdio.h>
74 #include <stdlib.h>
75
76 #if defined (NEW_FRAME)
77
78 #include "typedefs.h"
79 #include "vsi.h"
80 #include "pei.h"
81 #include "custom.h"
82 #include "gsm.h"
83
84 #else
85
86 #include "STDDEFS.H"
87 #include "custom.h"
88 #include "gsm.h"
89 #include "vsi.h"
90
91 #endif
92
93 #include "mfw_mfw.h"
94 #include "mfw_win.h"
95 #include "mfw_kbd.h"
96 #include "mfw_tim.h"
97 #include "mfw_phb.h"
98 #include "mfw_sms.h"
99 #include "mfw_ss.h"
100 #include "mfw_icn.h"
101 #include "mfw_mnu.h"
102 #include "mfw_lng.h"
103 #include "mfw_sat.h"
104 #include "mfw_kbd.h"
105 #include "mfw_nm.h"
106 #include "mfw_cm.h"
107 #include "mfw_edt.h"
108
109 #include "dspl.h"
110
111 #include "ksd.h"
112 #include "psa.h"
113
114 #include "ATBCommon.h"
115 #include "ATBDisplay.h"
116 #include "ATBEditor.h"
117 #include "AUIEditor.h"
118
119 #include "MmiDummy.h"
120 #include "MmiMmi.h"
121
122 #include "MmiDialogs.h"
123 #include "MmiLists.h"
124 #include "MmiMenu.h"
125 #include "MmiSoftKeys.h"
126 #include "MmiIdle.h"
127
128 #include "cus_aci.h"
129 #include "prim.h"
130 #ifndef PCM_2_FFS
131 #include "pcm.h"
132 #endif
133
134 #include "Mmiicons.h"
135 #include "MmiBookShared.h"
136 #include "mmiSmsMenu.h"
137 #include "mfw_ffs.h"
138 #ifdef EASY_TEXT_ENABLED
139 #include "MmiDictionary.h"
140 #endif
141 #include "mmiColours.h"
142
143 #include "MmiDictionary.h"
144 #include "ATBCommon.h"
145 #include "ATBDisplay.h"
146 #include "ATBEditor.h"
147 #include "AUITextEntry.h"
148 #include "AUIEditor.h"
149 #include "AUIEditor_i.h"
150 #include "AUISymbol.h"
151
152 /* Mar 08, 2006 REF:ER OMAPS00065168 */
153 #ifdef NEPTUNE_BOARD
154 #include "audio.h"
155 #endif
156
157
158
159 #ifndef MFW_EVENT_PASSED
160 #define MFW_EVENT_PASSED 0
161 #endif
162
163 #define TRACE_AUIEditor // Def/undef this to show/hide the trace_events for this file
164
165 static void AUI_edit_ClearPredText(T_AUI_EDITOR_INFO *data);
166
167 /* API - 08/07/03 - CQ10728*/
168 static void AUI_Edit_Display_Only_CB(T_MFW_HND win, USHORT Identifier, SHORT reason);
169 static void AUI_Edit_Display_Only_Destroy (T_MFW_HND window);
170 /* API - 08/07/03 - CQ10728 END*/
171
172
173 /*******************************************************************************
174
175 Static Data
176
177 ********************************************************************************/
178
179 /* eZiText icon */
180
181 static const unsigned char TextIconeZiTextSmall[] =
182 {
183 0x03,0x03,0x18,0x7c,0xcc,0x08,0x10,0x0c
184 };
185
186 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
187 // This variable would tell us if the user had changed the case explicitly
188 UBYTE CaseChanged = FALSE;
189
190 #define ED_IND_UPPER "ABC"
191 #define ED_IND_LOWER "abc"
192 #define ED_IND_CAPS "Abc"
193 #define ED_IND_NUM "123"
194 #define ED_IND_NONE "---"
195
196
197 /*******************************************************************************
198
199 $Function: AUI_edit_Start
200
201 $Description: Start the editor.
202
203 $Returns: None.
204
205 $Arguments: None.
206
207 *******************************************************************************/
208
209 T_MFW_HND AUI_edit_Start(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
210 {
211 T_MFW_HND win;
212
213 TRACE_FUNCTION ("AUI_edit_Start()");
214
215 win = AUI_edit_Create(parent, editor_data);
216
217 return win;
218 }
219
220
221 /*******************************************************************************
222
223 $Function: AUI_edit_QuickStart
224
225 $Description: Start the editor.
226
227 $Returns: Dialog handler for the editor.
228
229 $Arguments: win - the parent window
230 TitleId - the text id of the title (or NULL)
231 TitleString - the text string of the title (or NULL)
232 buffer - the unicode input buffer
233 len - maximum length of the text entered
234 editor_info - the T_AUI_EDITOR_DATA structure (allocated but empty)
235
236 *******************************************************************************/
237
238 T_MFW_HND AUI_edit_QuickStart(T_MFW_HND win, USHORT TitleId, UBYTE *TitleString, USHORT *buffer, USHORT len,
239 T_AUI_EDITOR_DATA *editor_info, T_AUI_EDIT_CB editor_cb)
240 {
241
242 TRACE_FUNCTION ("AUI_edit_QuickStart()");
243
244 AUI_edit_SetDisplay(editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT);
245 AUI_edit_SetEvents(editor_info, 0, TRUE, FOREVER, editor_cb);
246 AUI_edit_SetBuffer(editor_info, ATB_DCS_UNICODE, (UBYTE *)buffer, len);
247 AUI_edit_SetTextStr(editor_info, TxtSoftOK, TxtDelete, TitleId, TitleString);
248 AUI_edit_SetAltTextStr(editor_info, 0, NULL, TRUE, TxtSoftBack);
249 /* create the dialog handler */
250 return AUI_edit_Start(win, editor_info); /* start the common editor */
251 }
252
253
254 /*******************************************************************************
255
256 $Function: AUI_edit_Create
257
258 $Description: Create the editor.
259
260 $Returns: Pointer to the editor's window.
261
262 $Arguments: parent - The parent window.
263
264 *******************************************************************************/
265
266 static T_MFW_HND AUI_edit_Create(T_MFW_HND parent, T_AUI_EDITOR_DATA *editor_data)
267 {
268 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)ALLOC_MEMORY (sizeof (T_AUI_EDITOR_INFO));
269 T_MFW_WIN *win_data;
270
271 TRACE_FUNCTION ("AUI_edit_Create()");
272
273 /* Create window handler */
274
275 data->win = win_create(parent, 0, E_WIN_VISIBLE, (T_MFW_CB)AUI_edit_WinCb); // Create window
276
277 if (data->win==NULL) // Make sure window exists
278 {
279 return NULL;
280 }
281
282 /* Connect the dialog data to the MFW-window */
283
284 data->mmi_control.dialog = (T_DIALOG_FUNC)AUI_edit_ExecCb; /* Setup the destination for events */
285 data->mmi_control.data = data;
286 data->parent = parent;
287 win_data = ((T_MFW_HDR *)data->win)->data;
288 win_data->user = (void *)data;
289
290 data->kbd = kbd_create(data->win, KEY_ALL,(T_MFW_CB)AUI_edit_KbdCb);
291 data->kbd_long = kbd_create(data->win, KEY_ALL|KEY_LONG,(T_MFW_CB)AUI_edit_KbdLongCb);
292 data->editor = ATB_edit_Create(&data->editor_data.editor_attr,0);
293
294 data->editor_data = *editor_data;
295
296 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
297 // The initial value of this variable should be false. i.e the user has still not changed the case.
298 CaseChanged=FALSE;
299
300 AUI_edit_Init(data->win);
301
302 SEND_EVENT(data->win, E_ED_INIT, 0, 0);
303
304 /* Return window handle */
305
306 return data->win;
307 }
308
309
310 /*******************************************************************************
311
312 $Function: AUI_edit_Init
313
314 $Description: Initialise the editor.
315
316 $Returns: Pointer to the editor's window.
317
318 $Arguments: win - The editor window
319
320 *******************************************************************************/
321
322 static void AUI_edit_Init(T_MFW_HND win)
323 {
324 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
325 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
326 T_ATB_TEXT text;
327
328 TRACE_FUNCTION("AUI_edit_Init()");
329
330 data->editor->update = ED_UPDATE_FULL;
331 data->predText.len = 0; /* Blank out predictive text buffer */
332
333 /* Set up title information */
334
335 data->hasTitle = FALSE;
336 data->title.len = 0; /* Blank out title buffer */
337
338 if (data->editor_data.TitleId!=NULL)
339 {
340 data->hasTitle = TRUE;
341 text.data = (UBYTE *)GET_TEXT(data->editor_data.TitleId);
342 }
343 else if (data->editor_data.TitleString!=NULL)
344 {
345 data->hasTitle = TRUE;
346 text.data = data->editor_data.TitleString;
347 }
348
349 /* If title exists, get its dcs and length */
350
351 if (data->hasTitle)
352 {
353 if (text.data[0]==0x80)
354 {
355 text.data += 2; /* Skip over two unicode indicator bytes */
356 text.dcs = ATB_DCS_UNICODE;
357 }
358 #ifdef EASY_TEXT_ENABLED
359 else if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
360 {
361 text.dcs = ATB_DCS_UNICODE;
362 }
363 #endif
364 else
365 {
366 text.dcs = ATB_DCS_ASCII;
367 }
368
369 text.len = ATB_string_Length(&text);
370
371 /* Allocate memory for the title and copy the text there */
372 data->title.data = (UBYTE *)ALLOC_MEMORY((text.len + 1)*ATB_string_Size(&text));
373
374 ATB_string_Copy(&data->title, &text);
375 }
376
377 /* Set up correct parameters for easytext */
378
379 #ifdef EASY_TEXT_ENABLED
380 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
381 {
382 /* Allocate word buffer memory */
383
384 data->predText.data = (UBYTE *)ALLOC_MEMORY((ED_PREDTEXT_MAX+1)*sizeof(UBYTE));
385 data->predText.dcs = ATB_DCS_ASCII;
386 data->predText.len = 0;
387
388 FFS_flashData.PredTextAvailable = TRUE;
389 Initialize_Dict(Mmi_getCurrentLanguage()/*SPR1508*/, 0);
390 ResetDictSearch();
391 }
392 #endif
393
394 /* Initialise editor */
395
396 ATB_edit_Init(data->editor);
397
398 /* Initialise text entry */
399
400 data->entry_data = AUI_entry_Create(data->win, data->editor, E_ED_UPDATE);
401
402 /* If there's a timeout, create the timer */
403
404 if (data->editor_data.timeout && (data->editor_data.timeout != FOREVER))
405 {
406 data->timer = tim_create(data->win, data->editor_data.timeout, (T_MFW_CB)AUI_edit_TimerCb);
407 tim_start(data->timer);
408 }
409 else
410 {
411 data->timer = NULL;
412 }
413
414 /* Title timer, if required, is set up in WinCb */
415
416 data->title_timer = NULL;
417
418 return;
419 }
420
421
422 /*******************************************************************************
423
424 $Function: AUI_edit_Destroy
425
426 $Description: Destroy the editor.
427
428 $Returns: None.
429
430 $Arguments: window - The editor window.
431
432 *******************************************************************************/
433
434 void AUI_edit_Destroy(T_MFW_HND win)
435 {
436 T_MFW_WIN *win_data;
437 T_AUI_EDITOR_INFO *data;
438
439 #ifdef TRACE_AUIEditor
440 TRACE_FUNCTION ("AUI_edit_Destroy()");
441 #endif
442
443 if (win == NULL)
444 {
445 #ifdef TRACE_AUIEditor
446 TRACE_EVENT ("Error : Called with NULL Pointer");
447 #endif
448 return;
449 }
450 // xreddymn Dec-21-2004 MMI-SPR-27382: Added NULL window handle check for AUI_edit_Destroy
451 win_data = ((T_MFW_HDR *)win)->data;
452 if(win_data == NULL) return;
453 data = (T_AUI_EDITOR_INFO *)win_data->user;
454 if (data)
455 {
456 /* Free memory allocated for easytext buffer */
457
458 #ifdef EASY_TEXT_ENABLED
459 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA) && data->predText.data )
460 {
461 TRACE_EVENT("Freeing predictive text buffer");
462 FREE_MEMORY((void *)data->predText.data, (ED_PREDTEXT_MAX+1)*sizeof(UBYTE));
463 }
464 #endif
465
466 /* Free memory allocated for title */
467
468 if (data->hasTitle)
469 {
470 FREE_MEMORY(data->title.data, (data->title.len + 1)*ATB_string_Size(&data->title));
471 }
472
473 /* Delete timers */
474
475 if (data->timer)
476 {
477 tim_delete(data->timer);
478 data->timer = NULL;
479 }
480 if (data->title_timer)
481 {
482 tim_delete(data->title_timer);
483 data->title_timer = NULL;
484 }
485
486 win_delete (data->win);
487
488 /* Free editor memory */
489
490 AUI_entry_Destroy(data->entry_data);
491 ATB_edit_Destroy(data->editor);
492 FREE_MEMORY ((void *)data, sizeof (T_AUI_EDITOR_INFO));
493 }
494
495 return;
496 }
497
498
499 /*******************************************************************************
500
501 $Function: AUI_edit_ExecCb
502
503 $Description: Dialog function for editor.
504
505 $Returns: None.
506
507 $Arguments: None.
508
509 *******************************************************************************/
510
511 static void AUI_edit_ExecCb(T_MFW_HND win, USHORT event, USHORT value, void *parameter)
512 {
513 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
514 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
515
516 T_MFW_HND parent_win = data->parent;
517 USHORT alphachar;
518 /* Store these in case editor is destroyed on callback */
519 USHORT Identifier = data->editor_data.Identifier;
520 T_AUI_EDIT_CB Callback = data->editor_data.Callback;
521 UBYTE destroyEditor = data->editor_data.destroyEditor;
522
523 /* Mar 08, 2006 REF:ER OMAPS00065168 */
524 #ifdef NEPTUNE_BOARD
525 UBYTE ringer;
526 #endif
527
528 #ifdef TRACE_AUIEditor
529 TRACE_FUNCTION ("AUI_edit_ExecCb()");
530 #endif
531
532 switch (event)
533 {
534 /* Initialise */
535
536 case E_ED_INIT:
537 TRACE_EVENT("E_ED_INIT");
538 win_show(data->win);
539 break;
540
541 /* Destroy the editor */
542
543 case E_ED_DESTROY:
544 AUI_edit_Destroy(data->win);
545 break;
546
547 /* De-initialise editor */
548 case E_ED_DEINIT:
549 TRACE_EVENT("E_ED_DEINIT");
550
551 /* Mar 08, 2006 REF:ER OMAPS00065168 */
552 /* Stop playing ring tone on key press */
553 #ifdef NEPTUNE_BOARD
554 ringer = getcurrentSMSTone();
555 audio_StopSoundbyID( AUDIO_BUZZER, ringer );
556
557 vsi_t_sleep(0,10); /* small delay */
558 #endif
559
560 if (Callback)
561 (Callback) (parent_win, Identifier, value);
562
563 if(destroyEditor)
564 AUI_edit_Destroy(data->win);
565 break;
566
567 /* Insert a character */
568
569 case E_ED_INSERT:
570 alphachar = (USHORT)value;
571 /* If value is set, insert character */
572 if (alphachar!=NULL)
573 {
574 ATB_edit_Char(data->editor, alphachar, TRUE);
575 #ifdef EASY_TEXT_ENABLED
576 if(FFS_flashData.PredTextAvailable && FFS_flashData.PredTextSelected && ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT))
577 {
578 if ((alphachar == UNICODE_FULLSTOP) ||(alphachar == UNICODE_EXCLAMATION)
579 || (alphachar == UNICODE_QUESTION))
580 {
581 ATB_edit_Char(data->editor, UNICODE_SPACE, TRUE);
582 }
583 }
584 #endif
585 }
586 else
587 /* If parameter is set, insert string */
588 if (parameter!=NULL)
589 {
590 ATB_edit_InsertString(data->editor, (T_ATB_TEXT *)parameter);
591 }
592 win_show(data->win);
593 break;
594
595 /* Update word wrap & redraw editor window */
596
597 case E_ED_UPDATE:
598 //ATB_edit_Refresh(data->editor); /* SPR#2342 - SH */
599 win_show(data->win);
600 break;
601
602 default:
603 break;
604 }
605 return;
606 }
607
608
609 /*******************************************************************************
610
611 $Function: AUI_edit_WinCb
612
613 $Description: Editor window event handler.
614
615 $Returns: None.
616
617 $Arguments: event - the event
618 win - the editor window
619
620 *******************************************************************************/
621
622 static int AUI_edit_WinCb(T_MFW_EVENT event, T_MFW_WIN *win_data)
623 {
624 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
625 T_ED_DATA *editor = data->editor;
626 USHORT scrollBarSize;
627 USHORT scrollBarPos;
628 SHORT editX = editor->attr->win_size.px;
629 SHORT editY = editor->attr->win_size.py;
630 SHORT editWidth = editor->attr->win_size.sx;
631 SHORT editHeight = editor->attr->win_size.sy;
632 char lengthIndC[12];
633
634 /* Strings for the header */
635 T_ATB_TEXT string;
636 USHORT stringWidth;
637 USHORT stringHeight;
638 T_ATB_TEXT title;
639 USHORT titleWidth;
640 USHORT titleHeight;
641
642 USHORT textLen;
643 static USHORT oldTextLen = 0xFFFF;
644 USHORT startPos;
645 static USHORT oldStartPos = 0xFFFF;
646
647 T_DS_TEXTFORMAT format;
648 BOOL showIcons; /* Flag that stores whether icons (e.g. alignment icons) should be shown */
649 T_ED_LINE *line;
650 USHORT leftSK;
651 USHORT rightSK;
652 USHORT textIndex;
653 T_ATB_TEXT newTitle;
654 USHORT lastSpace;
655 USHORT character;
656 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
657 #ifdef FF_MMI_SAT_ICON
658 SHORT titleIconWidth = 0;
659 SHORT iconX;
660 SHORT iconY;
661 #endif
662
663 #ifdef TRACE_AUIEditor
664 TRACE_FUNCTION ("AUI_edit_WinCb()");
665 #endif
666
667 if (!data)
668 return MFW_EVENT_CONSUMED;
669
670 switch(event)
671 {
672 case E_WIN_VISIBLE: /* window is visible */
673 if (win_data->flags & E_WIN_VISIBLE)
674 {
675 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
676 #ifdef FF_MMI_SAT_ICON
677 if (editor->attr->TitleIcon.data != NULL)
678 {
679 if (editor->attr->TitleIcon.width > TITLE_ICON_WIDTH)
680 {
681 titleIconWidth = TITLE_ICON_WIDTH;
682 }
683 else
684 {
685 titleIconWidth = editor->attr->TitleIcon.width;
686 }
687 }
688 else
689 {
690 titleIconWidth = 0;
691 }
692 #endif
693
694 textLen = data->editor->attr->text.len;
695 line = ATB_edit_LineGet(data->editor, data->editor->winStartLine);
696 startPos = line->pos;
697
698 if (editor->update==ED_UPDATE_TRIVIAL)
699 editor->update = ED_UPDATE_DEFAULT;
700
701 TRACE_EVENT("Updating whole screen.");
702
703 oldTextLen = textLen;
704 oldStartPos = startPos;
705
706 /* Show the edited text */
707 /* Don't update editor text if in ED_UPDATE_PARTIAL */
708
709 if (editor->update!=ED_UPDATE_PARTIAL)
710 {
711 ATB_edit_Show(data->editor);
712 }
713
714 /* Set the colour for drawing title and scrollbar */
715
716 resources_setTitleColour(COLOUR_EDITOR);
717
718 /* TITLE */
719
720 if (data->editor_data.zone_id & ZONE_TITLE)
721 {
722 dspl_Clear(0,0, SCREEN_SIZE_X-1, editY-1);
723
724 /* Display the title, if it exists */
725
726 string.len = 0;
727 string.dcs = ATB_DCS_ASCII;
728 title.len = 0;
729 title.dcs = ATB_DCS_ASCII;
730
731 if (data->hasTitle)
732 {
733 title.data = data->title.data;
734 title.len = data->title.len;
735 title.dcs = data->title.dcs;
736 }
737
738 /* Uppercase/lowercase indicator */
739
740 if (!ATB_edit_Mode(editor, ED_MODE_READONLY))
741 {
742 switch(ATB_edit_GetCasePref(editor))
743 {
744 case ED_CASEPREF_ALPHA_UC:
745 case ED_CASEPREF_ALPHANUM_UC:
746 string.data = (UBYTE *)ED_IND_UPPER;
747 break;
748
749 case ED_CASEPREF_ALPHA_LC:
750 case ED_CASEPREF_ALPHANUM_LC:
751 string.data = (UBYTE *)ED_IND_LOWER;
752 break;
753
754 case ED_CASEPREF_ALPHANUM:
755 if (ATB_edit_GetCase(editor)==ED_CASE_UPPER)
756 string.data = (UBYTE *)ED_IND_UPPER;
757 else if (ATB_edit_GetCase(editor)==ED_CASE_LOWER)
758 string.data = (UBYTE *)ED_IND_LOWER;
759 else if (ATB_edit_GetCase(editor)==ED_CASE_CAPS)
760 string.data = (UBYTE *)ED_IND_CAPS;
761 else
762 string.data = (UBYTE *)ED_IND_NUM;
763 break;
764
765 case ED_CASEPREF_NUM:
766 string.data = (UBYTE *)ED_IND_NUM;
767 break;
768
769 default:
770 string.data = (UBYTE *)ED_IND_NONE;
771 break;
772 }
773
774 string.len = ATB_string_Length(&string);
775
776 #ifdef EASY_TEXT_ENABLED
777 /* Display predicted word in header */
778
779 if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected)
780 {
781 if (ATB_edit_CapitaliseWord(data->editor)) /* Word is capitalised */
782 string.data = (UBYTE *)ED_IND_CAPS;
783 else
784 string.data = (UBYTE *)ED_IND_LOWER;
785 string.len = ATB_string_Length(&string);
786
787 if(data->predText.len!=0)
788 {
789 title.data = data->predText.data;
790 title.len = data->predText.len;
791 title.dcs = data->predText.dcs;
792 }
793 }
794 #endif
795 if (ATB_edit_Mode(editor, ED_MODE_ALPHA) && title.len==0)
796 {
797 /* SPR#1995 - SH - 'size' includes null terminator, so
798 * remaining characters is size-1 */
799 #ifdef LSCREEN
800 sprintf(lengthIndC, "%d/%d", textLen, editor->attr->size-1);
801 #else
802 sprintf(lengthIndC, "%d", editor->attr->size-textLen-1);
803 #endif
804
805 title.data = (UBYTE *)lengthIndC;
806 title.len = ATB_string_Length(&title);
807 }
808 }
809
810 /* Draw the string to the right of the editor - the case/format indicator, and icons (if appropriate) */
811
812 stringWidth = 0;
813 stringHeight = 0;
814 showIcons = FALSE;
815
816 if (string.len)
817 {
818 TRACE_EVENT("Displaying string on right");
819 ATB_display_SetFormatAttr(&format, 0, FALSE); /* Set format to format at cursor */
820 stringWidth = ATB_display_StringWidth(&string, &format)+2;
821 stringHeight = ATB_display_StringHeight(&string, &format);
822 ATB_display_Text(SCREEN_SIZE_X-stringWidth+2,0, &format, &string);
823 showIcons = TRUE; /* If showing case, show icons */
824 }
825
826 #ifdef EASY_TEXT_ENABLED
827 /* Display ezitext icon to the left of the case indicator */
828
829 if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected == TRUE)
830 {
831 if (data->predText.len==0) // Show icons only if there's no predicted text entry currently
832 showIcons = TRUE;
833 else
834 showIcons = FALSE;
835 }
836 #endif
837
838 /* Show icons to the left of the case indicator */
839
840 if (showIcons)
841 {
842
843 #ifdef EASY_TEXT_ENABLED
844 /* Display ezitext icon to the left of the case indicator */
845 if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected == TRUE)
846 {
847 stringWidth += 8;
848 dspl_BitBlt(SCREEN_SIZE_X-stringWidth+2,
849 0,8,8,0,(char*)TextIconeZiTextSmall,0);
850 }
851 #endif
852
853 if (stringHeight<Mmi_layout_line_height())
854 stringHeight = Mmi_layout_line_height();
855 }
856
857
858 /* Draw the string to the left of the screen - the editor title, or the number of characters
859 * remaining free in the buffer, or the predicted text word. */
860
861 titleWidth = 0;
862 titleHeight = 0;
863
864 if (title.len)
865 {
866 ATB_display_SetFormatAttr(&format, 0, FALSE); /* Clear format */
867
868 titleWidth = ATB_display_StringWidth(&title, &format)+2;
869 titleHeight = ATB_display_StringHeight(&title, &format);
870
871 /* Check to see if title fits into top line - if it doesn't,
872 * we will need display a section of it. */
873
874 if (titleWidth>(SCREEN_SIZE_X-stringWidth-2))
875 {
876 /* Create timer if it doesn't exist */
877
878 if (!data->title_timer)
879 {
880 data->title_timer = tim_create(data->win, 3000, (T_MFW_CB)AUI_edit_TitleTimerCb);
881 data->title_pos = 0;
882 data->title_next_pos = 0;
883 tim_start(data->title_timer);
884 }
885
886 titleWidth = 0;
887 textIndex = data->title_pos;
888 lastSpace = 0;
889
890 while (titleWidth<(SCREEN_SIZE_X-stringWidth-2) && textIndex<title.len)
891 {
892 character = ATB_string_GetChar(&title, textIndex);
893 titleWidth+=ATB_display_GetCharWidth(character, &format);
894 textIndex++;
895 if (character==UNICODE_SPACE)
896 lastSpace = textIndex;
897 }
898
899 TRACE_EVENT_P1("Characters that fit: %d", textIndex);
900
901 /* Calculate next start position */
902
903 if (textIndex==title.len)
904 data->title_next_pos = 0;
905 else
906 {
907 /* Word wrap to last space, if there was one */
908
909 if (lastSpace>0)
910 textIndex = lastSpace;
911 data->title_next_pos = textIndex;
912 }
913
914 TRACE_EVENT_P1("Next position: %d", data->title_next_pos);
915
916 newTitle.len = textIndex-data->title_pos;
917 newTitle.data = (UBYTE *)ALLOC_MEMORY((newTitle.len+1)*ATB_string_Size(&title));
918 newTitle.dcs = title.dcs;
919
920 for (textIndex=0; textIndex<newTitle.len; textIndex++)
921 {
922 ATB_string_SetChar(&newTitle, textIndex, ATB_string_GetChar(&title, data->title_pos+textIndex));
923 }
924 ATB_string_SetChar(&newTitle, newTitle.len, UNICODE_EOLN);
925 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
926 #ifdef FF_MMI_SAT_ICON
927 /* Check if the icon is self-explanatory, GSM 11.14, Sec 6.5.4, 12.32.
928 If the icon is to displayed, move the text by icon width. */
929 if (editor->attr->TitleIcon.selfExplanatory == FALSE)
930 ATB_display_Text(titleIconWidth+1,0,&format, &newTitle);
931 #else
932 ATB_display_Text(0,0,&format, &newTitle);
933 #endif
934 FREE_MEMORY((UBYTE *)newTitle.data, (newTitle.len+1)*ATB_string_Size(&title));
935 }
936 else
937 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
938 #ifdef FF_MMI_SAT_ICON
939 {
940 /* Check if the icon is self-explanatory, GSM 11.14, Sec 6.5.4, 12.32.
941 If the icon is to displayed, move the text by icon width. */
942 if (editor->attr->TitleIcon.selfExplanatory == FALSE)
943 ATB_display_Text(titleIconWidth+1,0,&format, &title);
944 }
945 #else
946 ATB_display_Text(0,0,&format, &title);
947 #endif
948
949 #ifdef EASY_TEXT_ENABLED
950 /* Provides a cursor in the predicted word, so the user can tell which of the characters
951 * entered are being used to select the word. */
952
953 if(ATB_edit_Mode(editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextSelected && data->predText.len!=0)
954 {
955 ATB_display_Cursor(&data->predText, data->predTextChar.pos, ED_CURSOR_BLOCK,
956 data->predTextChar.lineWidth, 0, data->predTextChar.width, data->predTextChar.height);
957 }
958 #endif
959 }
960
961 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
962 #ifdef FF_MMI_SAT_ICON
963 if(editor->attr->TitleIcon.data != NULL)
964 {
965
966 if (titleHeight == 0)
967 titleHeight = TITLE_ICON_HEIGHT;
968
969 /* Display '?' icon if the size is bigger,
970 else display the icon*/
971 if ((editor->attr->TitleIcon.width > TITLE_ICON_WIDTH) || (editor->attr->TitleIcon.height > TITLE_ICON_HEIGHT))
972 {
973 /* iconY calculates place hoilder to place the icon
974 at the center of the screen. */
975 iconX = 1;
976 iconY = 1+ ((titleHeight-2) / 2) - (10 / 2);
977 dspl_BitBlt2(iconX, iconY, 8,
978 10, (void*)SATIconQuestionMark, 0, BMP_FORMAT_256_COLOUR);
979 }
980 else
981 {
982 /* iconY calculates place hoilder to place the icon
983 at the center of the screen. */
984 iconX = 1;
985 iconY = 1+ ((titleHeight-2) / 2) - (editor->attr->TitleIcon.height / 2);
986 dspl_BitBlt2(iconX, iconY, editor->attr->TitleIcon.width, editor->attr->TitleIcon.height,
987 (void*)editor->attr->TitleIcon.data, 0, BMP_FORMAT_256_COLOUR);
988 }
989 }
990 #endif
991
992 /* Draw line on top */
993
994 if (stringHeight>titleHeight)
995 titleHeight = stringHeight;
996
997 /* Non colour display - draw line between title texts*/
998 #ifndef LSCREEN
999 if (titleHeight>0)
1000 {
1001 if (stringWidth==0)
1002 stringWidth = 1; /* Make sure end of line is on-screen */
1003 dspl_DrawLine(titleWidth, titleHeight/2, SCREEN_SIZE_X-stringWidth, titleHeight/2); /* Line between title & indicator */
1004 }
1005 #endif
1006 }
1007
1008 /* SCROLLBAR */
1009
1010 if (data->editor_data.zone_id & ZONE_SCROLLBAR)
1011 {
1012 dspl_Clear(editX+editWidth, editY, editX+editWidth+ED_SCROLLBAR_WIDTH-1, editY+editHeight-1);
1013
1014 /* Vertical scrollbar - only show if editor is taller than view size */
1015
1016 if (editor->totalHeight > 0 && editor->viewHeight<editor->totalHeight)
1017 {
1018 dspl_DrawLine(editX+editWidth, editY, editX+editWidth, editY+editHeight-1);
1019 scrollBarSize = editor->viewHeight * editHeight / editor->totalHeight;
1020 if (scrollBarSize>editHeight)
1021 scrollBarSize = editHeight;
1022 scrollBarPos = editor->viewStartPos * editHeight / editor->totalHeight;
1023
1024 dspl_DrawLine(editX+editWidth+1, editY+scrollBarPos, editX+editWidth+1,
1025 editY+scrollBarPos+scrollBarSize);
1026 dspl_DrawLine(editX+editWidth+2, editY+scrollBarPos, editX+editWidth+2,
1027 editY+scrollBarPos+scrollBarSize);
1028 }
1029 }
1030
1031 /* SOFTKEYS */
1032
1033 if (data->editor_data.zone_id & ZONE_SOFTKEYS)
1034 {
1035 #ifdef EASY_TEXT_ENABLED
1036 /* If a word is being entered, display OK and Delete */
1037
1038 if (ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT) && data->predText.len!=0 && FFS_flashData.PredTextSelected == TRUE)
1039 {
1040 leftSK = TxtSoftOK;
1041 rightSK = TxtDelete;
1042 }
1043 else
1044 #endif
1045 {
1046 /* Entered less than the required number of chars: Alternate Left Softkey appears */
1047 if (textLen < data->editor_data.min_enter)
1048 {
1049 leftSK = data->editor_data.AltLeftSoftKey;
1050 }
1051 else
1052 {
1053 leftSK = data->editor_data.LeftSoftKey;
1054 }
1055 /* Buffer is empty and alternative rsk enabled: alternative rsk appears */
1056 if (textLen==0 && data->editor_data.change_rsk_on_empty)
1057 {
1058 rightSK = data->editor_data.AltRightSoftKey;
1059 }
1060 else
1061 {
1062 rightSK = data->editor_data.RightSoftKey;
1063 }
1064 }
1065 displaySoftKeys(leftSK, rightSK);
1066 }
1067
1068 /* Finished drawing screen */
1069 }
1070 break;
1071
1072 default:
1073 return MFW_EVENT_PASSED;
1074 // break; // RAVI
1075 }
1076
1077 data->editor->update = ED_UPDATE_DEFAULT;
1078
1079 return MFW_EVENT_CONSUMED;
1080 }
1081
1082
1083 /*******************************************************************************
1084
1085 $Function: AUI_edit_KbdCb
1086
1087 $Description: Editor keyboard event handler
1088
1089 $Returns: None.
1090
1091 $Arguments: event - the keyboard event
1092 keyboard
1093
1094 *******************************************************************************/
1095
1096 static int AUI_edit_KbdCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
1097 {
1098 T_MFW_HND win = mfw_parent (mfw_header());
1099 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
1100 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
1101 #if (BOARD != 61)
1102 T_ATB_TEXT *PredText = &data->predText;
1103 USHORT character;
1104 #endif
1105 ED_RES result;
1106
1107 TRACE_FUNCTION("AUI_edit_KbdCb()");
1108
1109 /* Suppress unwanted long keypresses */
1110
1111 data->doNextLongPress = TRUE; /* next Key_long event is correct */
1112
1113 /* Restart the timer */
1114
1115 if (data->timer !=NULL)
1116 {
1117 tim_stop(data->timer);
1118 tim_start(data->timer);
1119 }
1120
1121 #ifdef EASY_TEXT_ENABLED
1122 if (FFS_flashData.PredTextSelected==FALSE || !ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT))
1123 {
1124 /* Predictive text is off */
1125 #endif
1126
1127 switch (keyboard->code)
1128 {
1129 /* UP key */
1130
1131 case KCD_MNUUP:
1132 /* For DSample, up and down move cursor up and down a line in all modes */
1133 #ifdef LSCREEN
1134 ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
1135
1136 /* For other samples, up and down move left and right when not in read only mode */
1137 #else
1138 if (ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* Acts as up key in read-only mode */
1139 {
1140 ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
1141 }
1142 else
1143 {
1144 ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
1145 }
1146 #endif
1147 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update */
1148 win_show(data->win);
1149 break;
1150
1151 /* DOWN key */
1152
1153 case KCD_MNUDOWN:
1154 /* For DSample, up and down move cursor up and down a line in all modes */
1155 #ifdef LSCREEN
1156 ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
1157
1158 /* For other samples, up and down move left and right when not in read only mode */
1159 #else
1160 if (ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* Act as down key in read-only mode */
1161 {
1162 ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
1163 }
1164 else
1165 {
1166 ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); /* Otherwise, move cursor left */
1167 }
1168 #endif
1169 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1170 win_show(data->win);
1171 break;
1172
1173 /* For DSample, left and right keys move cursor left and right */
1174 #ifdef LSCREEN
1175
1176 /* MENU LEFT */
1177
1178 case KCD_MNULEFT:
1179 ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); /* Move cursor left */
1180 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1181 win_show(data->win);
1182 break;
1183
1184 /* MENU RIGHT */
1185
1186 case KCD_MNURIGHT:
1187 ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE); /* Move cursor right */
1188 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1189 win_show(data->win);
1190 break;
1191 #endif
1192
1193 /* LEFT SOFT KEY */
1194
1195 case KCD_LEFT:
1196 if (data->editor_data.editor_attr.text.len < data->editor_data.min_enter)
1197 {
1198 /* Entered less than the required number of chars */
1199 if (data->editor_data.AltLeftSoftKey!=TxtNull)
1200 {
1201 /* an alternate softkey is defined: execute it */
1202 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_ALTERNATELEFT, NULL);
1203 }
1204 }
1205 else if (data->editor_data.LeftSoftKey!=TxtNull)
1206 {
1207 /* Left Softkey is enabled (and entered sufficient number of chars): execute it
1208 * get the orginal text back into the editor instead of the hide buffer ( only filled with '*') */
1209 if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN))
1210 {
1211 ATB_edit_HiddenExit(data->editor);
1212 }
1213 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_LEFT, NULL);
1214 }
1215 break;
1216
1217 /* HANGUP key */
1218
1219 case KCD_HUP:
1220 if (data->editor_data.RightSoftKey NEQ TxtNull) /* Right softkey is enabled: execute it */
1221 {
1222 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_HUP, NULL); /* Deinitialise the editor */
1223 }
1224 break;
1225
1226 /* SEND KEY */
1227
1228 case KCD_CALL:
1229 if (data->editor_data.editor_attr.text.len >= data->editor_data.min_enter)
1230 {
1231 /* Send this event to generate an MO call in SMS editor */
1232 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_CALL, NULL);
1233 }
1234 break;
1235
1236 /* RIGHT SOFT KEY */
1237
1238 case KCD_RIGHT:
1239 TRACE_EVENT("KCD_RIGHT");
1240 if (ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* in read only mode, */
1241 {
1242 TRACE_EVENT("SENDING DEINIT EVENT");
1243 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL); /* just deinitialise editor */
1244 }
1245 else /* otherwise, RSK acts as clear key */
1246 {
1247 /* If multitap is in progress, delete current character
1248 * rather than previous character */
1249
1250 if (data->editor->multitap)
1251 {
1252 AUI_entry_StopMultitap(data->entry_data); /* Cancel multitap */
1253 result = ATB_edit_DeleteRight(data->editor, TRUE); /* SPR#2342 - SH */
1254 }
1255 else
1256 {
1257 result = ATB_edit_DeleteLeft(data->editor, TRUE); /* SPR#2342 - SH */
1258 }
1259
1260 /* If we delete from first character in the editor, exit editor */
1261 if (result==ED_DONE)
1262 {
1263 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
1264 }
1265 else
1266 {
1267 win_show(data->win);
1268 }
1269 }
1270 break;
1271
1272 /* Switch text mode: uppercase, lowercase */
1273 case KCD_HASH:
1274 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
1275 {
1276 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
1277 // The user has explicitly changed the case. When
1278 // the editor becomes empty, we should not reset the
1279 // case to sentence case
1280 CaseChanged=TRUE;
1281 switch(ATB_edit_GetCase(data->editor))
1282 {
1283 case ED_CASE_LOWER:
1284 // Jul 22,2004 CRR:21605 xrashmic - SASKEN
1285 // The user has changed the case to sentence case.
1286 // when the editor becomes empty, we have to reset
1287 // the case to sentence case.
1288 CaseChanged=FALSE;
1289 ATB_edit_SetCase(data->editor, ED_CASE_CAPS);
1290 break;
1291 case ED_CASE_CAPS:
1292 ATB_edit_SetCase(data->editor, ED_CASE_UPPER);
1293 break;
1294 case ED_CASE_UPPER:
1295 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1296
1297 /* If easy text selected, switch to it */
1298 #ifdef EASY_TEXT_ENABLED
1299 if (ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT) && FFS_flashData.PredTextAvailable)
1300 {
1301 FFS_flashData.PredTextSelected = TRUE;
1302 }
1303 #endif
1304 break;
1305 case ED_CASE_NUM:
1306 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1307 break;
1308 }
1309 }
1310 else
1311 {
1312 /* SPR#1788 - SH - Forbid '#' entry in read only mode */
1313 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
1314 AUI_entry_EventKey(data->entry_data, event, keyboard);
1315 }
1316
1317 win_show(data->win);
1318 break;
1319
1320 case (KCD_STAR):
1321 /* If we're in apha mode and not in read-only mode, display the symbol screen */
1322 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA) && !ATB_edit_Mode(data->editor, ED_MODE_READONLY))
1323 {
1324 AUI_symbol_Start (data->win, E_ED_INSERT);
1325 }
1326 else
1327 {
1328 /* SPR#1788 - SH - Allow '*' to be entered in numeric mode */
1329 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
1330 AUI_entry_EventKey(data->entry_data, event, keyboard);
1331 }
1332
1333 win_show(data->win);
1334 break;
1335
1336 /* KEY ENTRY 0 - 9 */
1337
1338 case KCD_0:
1339 case KCD_1:
1340 case KCD_2:
1341 case KCD_3:
1342 case KCD_4:
1343 case KCD_5:
1344 case KCD_6:
1345 case KCD_7:
1346 case KCD_8:
1347 case KCD_9:
1348 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY))
1349 {
1350 AUI_entry_EventKey(data->entry_data, event, keyboard);
1351 win_show(data->win);
1352 }
1353 break;
1354 }
1355
1356 #ifdef EASY_TEXT_ENABLED
1357 }
1358 else
1359
1360 /* Short key press in EasyText */
1361
1362 {
1363 if(FFS_flashData.PredTextAvailable == TRUE)
1364 {
1365 switch (keyboard->code)
1366 {
1367 case KCD_MNUUP:
1368 if(PredText->len==0)
1369 {
1370 #ifdef LSCREEN
1371 ATB_edit_MoveCursor(data->editor, ctrlUp, TRUE);
1372
1373 /* For other samples, up and down move left and right when not in read only mode */
1374 #else
1375 ATB_edit_MoveCursor(data->editor,ctrlRight, TRUE);
1376 #endif
1377 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update */
1378 win_show(data->win);
1379 }
1380 break;
1381
1382 case KCD_MNUDOWN:
1383 if(PredText->len==0)
1384 {
1385 #ifdef LSCREEN
1386 ATB_edit_MoveCursor(data->editor, ctrlDown, TRUE);
1387
1388 /* For other samples, up and down move left and right when not in read only mode */
1389 #else
1390 ATB_edit_MoveCursor(data->editor,ctrlLeft, TRUE);
1391 #endif
1392 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update */
1393 win_show(data->win);
1394 }
1395 break;
1396
1397 #ifdef LSCREEN
1398 case KCD_MNURIGHT:
1399 if(PredText->len==0)
1400 {
1401 ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE);
1402 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update */
1403 win_show(data->win);
1404 }
1405 break;
1406
1407 case KCD_MNULEFT:
1408 if(PredText->len==0)
1409 {
1410 ATB_edit_MoveCursor(data->editor,ctrlLeft, TRUE);
1411 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update */
1412 win_show(data->win);
1413 }
1414 break;
1415 #endif
1416
1417 case KCD_LEFT:
1418 if(PredText->len==0)
1419 {
1420 if (data->editor_data.LeftSoftKey NEQ TxtNull)
1421 {
1422 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_LEFT, NULL);
1423 }
1424 }
1425 else
1426 {
1427 if ((data->editor_data.editor_attr.text.len + PredText->len) < data->editor_data.editor_attr.size)
1428 {
1429 if (ATB_string_GetChar(PredText,0)!=UNICODE_STAR)
1430 {
1431 /* Capitalise first letter of words and the letter 'I' */
1432
1433 if (ATB_edit_CapitaliseWord(data->editor) || (PredText->len==1 && ATB_string_GetChar(PredText, 0)==ATB_char_Unicode('i')))
1434 {
1435 ATB_string_SetChar(PredText, 0, ATB_edit_FindCapital(ATB_string_GetChar(PredText, 0)));/*SPR1508*/
1436 }
1437 character = ATB_edit_GetCursorChar(data->editor, -1);
1438
1439 if ( character != UNICODE_SPACE && character != UNICODE_EOLN)
1440 {
1441 ATB_string_MoveRight(PredText,0,1,ED_PREDTEXT_MAX);
1442 ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
1443 }
1444 ATB_edit_InsertString(data->editor,PredText);
1445 }
1446 }
1447 ResetDictSearch();
1448 AUI_edit_ClearPredText(data);
1449 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1450 win_show(data->win);
1451 }
1452 break;
1453
1454 case KCD_HUP:
1455 if (data->editor_data.RightSoftKey NEQ TxtNull) /* Right softkey is enabled: execute it */
1456 {
1457 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_HUP, NULL);
1458 }
1459 break;
1460
1461 case KCD_RIGHT:
1462 if(PredText->len==0)
1463 {
1464 if(ATB_string_GetChar(&data->editor_data.editor_attr.text, 0)!=UNICODE_EOLN)
1465 {
1466 ATB_edit_Char(data->editor,ctrlBack,TRUE);
1467 win_show(data->win);
1468 }
1469 else
1470 {
1471 /* leave editor if buffer already empty */
1472 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
1473 }
1474 }
1475 else
1476 {
1477 if (PredText->len==1)
1478 {
1479 DictBackSpace((char *)data->predText.data);
1480 AUI_edit_ClearPredText(data);
1481 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1482 }
1483 else
1484 {
1485 DictBackSpace((char *)data->predText.data);
1486 data->predTextChar.pos--; /* char deleted, move cursor pos back */
1487 AUI_edit_CalcPredText(data);
1488 }
1489 win_show(data->win);
1490 }
1491 break;
1492
1493 case KCD_2:
1494 case KCD_3:
1495 case KCD_4:
1496 case KCD_5:
1497 case KCD_6:
1498 case KCD_7:
1499 case KCD_8:
1500 case KCD_9:
1501 if (PredText->len==0)
1502 {
1503 AUI_edit_ClearPredText(data);
1504 }
1505 if (DictAlphaKeyPress(keyboard->code,(char *)PredText->data))
1506 {
1507 PredText->len = ATB_string_Length(PredText);
1508 data->predTextChar.pos++; /* The keypress was used to find a word, advance cursor */
1509 AUI_edit_CalcPredText(data);
1510 }
1511 win_show(data->win);
1512 break;
1513
1514 case KCD_HASH:
1515 switch(ATB_edit_GetCase(data->editor))
1516 {
1517 /* Press # once to switch into capitalise mode */
1518 case ED_CASE_CAPS:
1519 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1520 /* Switch out of easy text mode, if we're not entering a word */
1521 if (PredText->len==0)
1522 {
1523 FFS_flashData.PredTextSelected = FALSE;
1524 }
1525 break;
1526 default:
1527 ATB_edit_SetCase(data->editor, ED_CASE_CAPS);
1528 break;
1529 }
1530 win_show(data->win);
1531 break;
1532
1533 case KCD_STAR:
1534 if (PredText->len==0)
1535 {
1536 AUI_symbol_Start (data->win, E_ED_INSERT);
1537 }
1538 else
1539 {
1540 int i;
1541 MoreCandidates((char *)PredText->data, &i);
1542 AUI_edit_CalcPredText(data);
1543 win_show(data->win);
1544 }
1545 break;
1546
1547 case KCD_0:
1548 case KCD_1:
1549 if (PredText->len!=0)
1550 {
1551 if ((data->editor_data.editor_attr.text.len + PredText->len) < MAX_MSG_LEN)
1552 {
1553 /* If char b4 cursor full stop/question/exclamation (or last char space and char b4 full stop) */
1554 if (ATB_edit_CapitaliseWord(data->editor) || (PredText->len==1 && ATB_string_GetChar(PredText,0)==ATB_char_Unicode('i')))
1555 ATB_string_SetChar(PredText, 0, ATB_edit_FindCapital(ATB_string_GetChar(PredText, 0)));/*SPR1508*/
1556
1557 /* Capitalise first letter of char. If char before cursor not space, insert space */
1558 character = ATB_edit_GetCursorChar(data->editor, -1);
1559
1560 if (ATB_string_GetChar(PredText, 0) != UNICODE_STAR)
1561 {
1562 if (keyboard->code == KCD_1)
1563 {
1564 /* Insert space at end of string */
1565 ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
1566 PredText->len++;
1567 ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
1568
1569 if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
1570 {
1571 /* Insert space at start of string */
1572 ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
1573 ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
1574 }
1575 }
1576 else
1577 {
1578 /* Insert space and full stop at end of string */
1579 ATB_string_SetChar(PredText, PredText->len, UNICODE_FULLSTOP);
1580 PredText->len++;
1581 ATB_string_SetChar(PredText, PredText->len, UNICODE_SPACE);
1582 PredText->len++;
1583 ATB_string_SetChar(PredText, PredText->len, UNICODE_EOLN);
1584
1585 if ( character!=UNICODE_SPACE && character!=UNICODE_EOLN)
1586 {
1587 /* Insert space at start of string */
1588 ATB_string_MoveRight(PredText, 0, 1, ED_PREDTEXT_MAX);
1589 ATB_string_SetChar(PredText, 0, UNICODE_SPACE);
1590 }
1591 }
1592 ATB_edit_InsertString(data->editor, PredText);
1593 }
1594 }
1595 AUI_edit_ClearPredText(data);
1596 ResetDictSearch();
1597 ATB_edit_SetCase(data->editor, ED_CASE_LOWER);
1598 win_show(data->win);
1599 }
1600 break;
1601
1602 /* Any key */
1603
1604 default:
1605 if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* ignore normal keys if in read-only mode */
1606 {
1607 AUI_entry_EventKey(data->entry_data, event, keyboard);
1608 ATB_edit_Char(data->editor,ctrlBack,TRUE);
1609 win_show(data->win);
1610 }
1611 break;
1612 }
1613 }
1614 }
1615 #endif
1616
1617 return MFW_EVENT_CONSUMED;
1618 }
1619
1620
1621 /*******************************************************************************
1622
1623 $Function: AUI_edit_KbdLongCb
1624
1625 $Description: Editor keyboard event handler for long keypresses
1626
1627 $Returns: None.
1628
1629 $Arguments: event - the keyboard event
1630 keyboard
1631
1632 *******************************************************************************/
1633
1634 static int AUI_edit_KbdLongCb(T_MFW_EVENT event, T_MFW_KBD *keyboard)
1635 {
1636 T_MFW_HND win = mfw_parent (mfw_header());
1637 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
1638 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
1639
1640 #if (BOARD != 61)
1641 T_ATB_TEXT *PredText = &data->predText;
1642 #endif
1643
1644 ED_RES result;
1645
1646 #ifdef TRACE_AUIEditor
1647 TRACE_FUNCTION("AUI_edit_KbdLongCb()");
1648 #endif
1649
1650 /* Suppress unwanted long keypresses */
1651
1652 if ( data->doNextLongPress )
1653 data->doNextLongPress = FALSE; /* mark Key_long event as consumed but do current long press */
1654 // Jul 29, 2004 REF: CRR:20892 xrashmic - SASKEN
1655 // Description: By Long press on Left/Right key at 'Message Editor' screen,
1656 // cursor not scrolling continuously
1657 // Fix: The continuous long press of a key was being ignored for all keys.
1658 // Now only for left and right keys this is handled.
1659 else if(!(keyboard->code==KCD_MNULEFT ||keyboard->code== KCD_MNURIGHT))
1660 {
1661 return MFW_EVENT_CONSUMED; /* don't do current long press */
1662 }
1663
1664 /* Restart the timer */
1665
1666 if (data->timer !=NULL)
1667 {
1668 tim_stop(data->timer);
1669 tim_start(data->timer);
1670 }
1671
1672 #ifdef EASY_TEXT_ENABLED
1673 if (FFS_flashData.PredTextSelected == FALSE || !ATB_edit_Mode(data->editor, ED_MODE_PREDTEXT)) {
1674 /* Predictive text is off */
1675 #endif
1676
1677 switch (keyboard->code)
1678 {
1679 // Jul 29, 2004 REF: CRR:20892 xrashmic - SASKEN
1680 // Description: By Long press on Left/Right key at 'Message Editor' screen,
1681 // cursor not scrolling continuously
1682 // Fix: The Long press of left/right key is now handled in AUI_edit_KbdLongCB.
1683 case KCD_MNULEFT:
1684 ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); /* Move cursor left */
1685 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1686 win_show(data->win);
1687 break;
1688 case KCD_MNURIGHT:
1689 ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE); /* Move cursor right */
1690 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1691 win_show(data->win);
1692 break;
1693
1694 case KCD_RIGHT:
1695 result = ATB_edit_ClearAll(data->editor); /* Otherwise, clear the editor */
1696
1697 /* If buffer is empty, right soft key causes exit from editor */
1698 if (result==ED_DONE)
1699 {
1700 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
1701 }
1702 else
1703 {
1704 win_show(data->win);
1705 }
1706 break;
1707
1708 /* KEY ENTRY 0 */
1709
1710 case KCD_0:
1711 /* Alpha mode: insert a '0' */
1712 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
1713 {
1714 if (keyboard->code<=KCD_HASH)
1715 {
1716 ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */
1717 AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
1718 win_show(data->win);
1719 }
1720 }
1721
1722 /* Number mode: insert a '+'*/
1723 else if (!ATB_edit_Mode(data->editor, ED_MODE_READONLY)) /* ignore normal keys if in read-only mode */
1724 {
1725 if (ATB_edit_Mode(data->editor, ED_MODE_HIDDEN)) /* in hidden mode do not allow entering of '+' */
1726 {
1727 ATB_edit_DeleteLeft(data->editor, TRUE); /* remove the '0'. SPR#2342 - SH */
1728 }
1729 else
1730 {
1731 ATB_edit_Char(data->editor,ctrlBack,FALSE); /* remove the '0' */
1732 ATB_edit_Char(data->editor,UNICODE_PLUS,TRUE); /* insert the '+' */
1733 }
1734 win_show(data->win);
1735 }
1736 break;
1737 case (KCD_STAR):
1738 /* MZ cq11414 add Pause Character */
1739 ATB_edit_DeleteLeft(data->editor, FALSE);
1740
1741 //Sep 2, 2004 REF: CRR 21370 xkundadu
1742 //Changed the long press of '*' key to display 'w'
1743 AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('w'), FALSE);
1744 win_show(data->win);
1745 break;
1746
1747 case (KCD_HASH):
1748
1749 /* In alphanumeric mode, a long hold of # selects number case */
1750 if (ATB_edit_GetCasePref(data->editor)==ED_CASEPREF_ALPHANUM)
1751 ATB_edit_SetCase(data->editor, ED_CASE_NUM);
1752 else
1753 {
1754 /* MZ cq11414 add Wait Character */
1755 ATB_edit_DeleteLeft(data->editor, FALSE);
1756
1757 //Sep 2, 2004 REF: CRR 21370 xkundadu
1758 //Changed the long press of '#' key to display 'p'
1759 AUI_entry_EditChar(data->entry_data, ATB_char_Unicode('p'), FALSE);
1760 }
1761 win_show(data->win);
1762 break;
1763
1764 /* KEY ENTRY 1 - 9 */
1765
1766 case KCD_1:
1767 case KCD_2:
1768 case KCD_3:
1769 case KCD_4:
1770 case KCD_5:
1771 case KCD_6:
1772 case KCD_7:
1773 case KCD_8:
1774 case KCD_9:
1775 /* Insert equivalent numeric character, only possible in Alpha modes */
1776 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
1777 {
1778 if (keyboard->code<=KCD_HASH)
1779 {
1780 ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */
1781 AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
1782 win_show(data->win);
1783 }
1784 }
1785 break;
1786
1787 }
1788
1789 #ifdef EASY_TEXT_ENABLED
1790 }
1791 else
1792 {
1793 if(FFS_flashData.PredTextAvailable == TRUE)
1794 {
1795 switch (keyboard->code)
1796 {
1797 // Jul 29, 2004 REF: CRR:20892 xrashmic - SASKEN
1798 // Description: By Long press on Left/Right key at 'Message Editor'
1799 // screen, cursor not scrolling continuously
1800 // Fix: The Long press of left/right key is now handled in
1801 // AUI_edit_KbdLongCB.
1802 case KCD_MNULEFT:
1803 ATB_edit_MoveCursor(data->editor, ctrlLeft, TRUE); /* Move cursor left */
1804 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1805 win_show(data->win);
1806 break;
1807 case KCD_MNURIGHT:
1808 ATB_edit_MoveCursor(data->editor, ctrlRight, TRUE); /* Move cursor right */
1809 data->editor->update = ED_UPDATE_TRIVIAL; /* This flag speeds up update - no change to text */
1810 win_show(data->win);
1811 break;
1812
1813 case KCD_RIGHT: /*empty predictive text string */
1814 if(PredText->len!=0)
1815 {
1816 PredText->len = 0;
1817 ATB_string_SetChar(PredText, 0, UNICODE_EOLN);
1818 ResetDictSearch();
1819 win_show(data->win);
1820 }
1821 else /*empty whole editor */
1822 {
1823 if(data->editor_data.editor_attr.text.len > 0 )
1824 {
1825 ATB_edit_ClearAll(data->editor);
1826 win_show(data->win);
1827 }
1828 else
1829 {
1830 /* leave editor if buffer already empty */
1831 SEND_EVENT (win, E_ED_DEINIT, INFO_KCD_RIGHT, NULL);
1832 }
1833 }
1834 break;
1835
1836 case(KCD_STAR):
1837 AUI_symbol_Start(data->win, E_ED_INSERT);
1838 break;
1839
1840 case (KCD_HASH):
1841 break;
1842
1843 /* KEY ENTRY 1 - 9 */
1844
1845 case KCD_0:
1846 case KCD_1:
1847 case KCD_2:
1848 case KCD_3:
1849 case KCD_4:
1850 case KCD_5:
1851 case KCD_6:
1852 case KCD_7:
1853 case KCD_8:
1854 case KCD_9:
1855 if(PredText->len==0)
1856 {
1857 /* Insert equivalent numeric character, only possible in Alpha modes */
1858 if (ATB_edit_Mode(data->editor, ED_MODE_ALPHA))
1859 {
1860 if (keyboard->code<=KCD_HASH)
1861 {
1862 ATB_edit_DeleteLeft(data->editor, FALSE); /* SPR#2342 - SH */
1863 AUI_entry_EditDigit(data->entry_data, keyboard->code); // enter the character, not multi-tap
1864 }
1865 }
1866 win_show(data->win);
1867 }
1868 break;
1869 }
1870 }
1871 }
1872 #endif
1873
1874 return MFW_EVENT_CONSUMED;
1875 }
1876
1877
1878 /*******************************************************************************
1879
1880 $Function: AUI_edit_TimerCb
1881
1882 $Description: Callback function for the editor info timer.
1883
1884 $Returns: None.
1885
1886 $Arguments: event - the event type
1887 timer - the timer
1888
1889 *******************************************************************************/
1890
1891 static int AUI_edit_TimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
1892 {
1893 T_MFW_HND win = mfw_parent (mfw_header());
1894 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
1895 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
1896
1897 // T_MFW_HND parent_win = data->parent; // RAVI
1898 // USHORT Identifier = data->editor_data.Identifier; // RAVI
1899 // T_AUI_EDIT_CB Callback = data->editor_data.Callback; // RAVI
1900
1901 TRACE_FUNCTION("AUI_edit_TimerCb");
1902
1903 #if 0
1904 AUI_edit_Destroy(data->win);
1905
1906 if (Callback)
1907 (Callback) (parent_win, Identifier, INFO_TIMEOUT);
1908 #else
1909 SEND_EVENT (win, E_ED_DEINIT, INFO_TIMEOUT, NULL);
1910 #endif
1911
1912 return MFW_EVENT_CONSUMED;
1913 }
1914
1915 /*******************************************************************************
1916
1917 $Function: AUI_edit_TitleTimerCb
1918
1919 $Description: Callback function for the editor title timer. Recalculates title_pos so that
1920 the next part of the string is displayed.
1921
1922 $Returns: None.
1923
1924 $Arguments: event - the event type
1925 timer - the timer
1926
1927 *******************************************************************************/
1928
1929 static int AUI_edit_TitleTimerCb (T_MFW_EVENT event, T_MFW_TIM *timer)
1930 {
1931 /* Use the mfwHeader property of the timer to get the window */
1932 T_MFW_HND win = mfw_parent(timer->mfwHeader);
1933 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
1934 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
1935
1936 TRACE_FUNCTION("AUI_edit_TitleTimerCb");
1937
1938 /* SPR#1597 - SH - Since there may be multiple timers running at once, only
1939 call win_show if the window is focussed. */
1940
1941 if (winIsFocussed(win))
1942 {
1943 if (data->title_next_pos!=data->title_pos)
1944 {
1945 data->title_pos = data->title_next_pos;
1946 }
1947
1948 data->editor->update = ED_UPDATE_PARTIAL; /* Don't update editor text */
1949 win_show(data->win);
1950
1951 tim_start(data->title_timer);
1952 }
1953
1954 return MFW_EVENT_CONSUMED;
1955 }
1956
1957
1958 /*******************************************************************************
1959
1960 $Function: AUI_edit_CalcPredText
1961
1962 $Description: Calculate properties of predicted text string.
1963
1964 $Returns: None.
1965
1966 $Arguments: data - The AUI editor data
1967
1968 *******************************************************************************/
1969
1970 static void AUI_edit_CalcPredText(T_AUI_EDITOR_INFO *data)
1971 {
1972 USHORT character;
1973 T_ATB_TEXT dummy;
1974
1975 data->predText.len = ATB_string_Length(&data->predText);
1976
1977 /* Get position of current entry */
1978 dummy.data = data->predText.data;
1979 dummy.dcs = data->predText.dcs;
1980 dummy.len = data->predTextChar.pos;
1981 data->predTextChar.lineWidth = ATB_display_StringWidth(&dummy, &data->predTextChar.format);
1982 data->predTextChar.lineHeight = ATB_display_StringHeight(&dummy, &data->predTextChar.format);
1983
1984 /* Get width and height of current character */
1985 character = ATB_string_GetChar(&data->predText, data->predTextChar.pos);
1986 data->predTextChar.width = ATB_display_GetCharWidth(character, &data->predTextChar.format);
1987 data->predTextChar.height = ATB_display_GetCharHeight(character, &data->predTextChar.format);
1988
1989 return;
1990 }
1991
1992
1993 /*******************************************************************************
1994
1995 $Function: AUI_edit_ClearPredText
1996
1997 $Description: Clear the predictive text buffer
1998
1999 $Returns: None.
2000
2001 $Arguments: data - The AUI editor data
2002
2003 *******************************************************************************/
2004
2005 static void AUI_edit_ClearPredText(T_AUI_EDITOR_INFO *data)
2006 {
2007 data->predText.len = 0;
2008 ATB_string_SetChar(&data->predText,0,UNICODE_EOLN);
2009 memset(&data->predTextChar, 0, sizeof(T_ED_CHAR));
2010 return;
2011 }
2012
2013
2014 /*******************************************************************************
2015
2016 $Function: AUI_edit_InsertString
2017
2018 $Description: Insert a string into the editor
2019
2020 $Returns: Pointer to the editor's window.
2021
2022 $Arguments: win - The editor window
2023 string - The string to insert
2024 dcs - The dcs of the string
2025
2026 *******************************************************************************/
2027
2028 void AUI_edit_InsertString(T_MFW_HND win, UBYTE *string, T_ATB_DCS dcs)
2029 {
2030 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
2031 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
2032 T_ATB_TEXT text;
2033
2034 text.data = string;
2035 text.dcs = dcs;
2036 text.len = ATB_string_Length(&text);
2037
2038 ATB_edit_InsertString(data->editor, &text);
2039
2040 return;
2041 }
2042
2043
2044 /*******************************************************************************
2045
2046 $Function: AUI_edit_InsertChar
2047
2048 $Description: Insert a character into the editor
2049
2050 $Returns: Pointer to the editor's window.
2051
2052 $Arguments: win - The editor window
2053 character - The character to insert
2054
2055 *******************************************************************************/
2056
2057 void AUI_edit_InsertChar(T_MFW_HND win, USHORT character)
2058 {
2059 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
2060 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
2061
2062 ATB_edit_Char(data->editor, character, TRUE);
2063
2064 return;
2065 }
2066
2067
2068 /*******************************************************************************
2069
2070 $Function: AUI_edit_GetSpecificWindowSIze
2071
2072 $Description: Sets up window size
2073
2074 $Returns: None.
2075
2076 $Arguments: attr - The ATB editor attributes
2077 zone_id - Specifies the window size (See ZONE_... in header file)
2078
2079 *******************************************************************************/
2080 #ifndef LSCREEN
2081 //Sizes defined for CSAMPLE editore
2082 #define BOOKDETAILS_EDITOR_SIZE 0, 0, SCREEN_SIZE_X-4, Mmi_layout_line(LAST_LINE_TOP)
2083 #define NUMBER_EDITOR_SIZE 0, 12, SCREEN_SIZE_X , MNU3LINE
2084 #define PHONEBOOK_DLG_EDITOR_SIZE 4, Mmi_layout_line(3)+2, SCREEN_SIZE_X-4, SCREEN_SIZE_Y-(Mmi_layout_line(3)+2)
2085 #define BOOKSDN_EDITOR_SIZE 34, Mmi_layout_line(3)+2, 50, Mmi_layout_line(1)+2
2086
2087 //MMIbooksearchwindow
2088 //#define BOOKSEARCH_EDITOR_SIZE 0, Mmi_layout_line(SECOND_LAST_LINE_TOP), SCREEN_SIZE_X, Mmi_layout_line(1)
2089
2090 //MMICall
2091 #define CALL_EDITOR_SIZE 4,28,SCREEN_SIZE_X-4, 20
2092 #define CALLSCRATCHPAD_EDITOR_SIZE 6, Mmi_layout_line(2),SCREEN_SIZE_X-6, 16
2093
2094 //MMIServices
2095 #define SERVICE_CREATE_EDITOR_SIZE 4,Mmi_layout_line(1)+2,SCREEN_SIZE_X-4, MNU3LINE
2096 #define PASSWORD_EDITOR_SIZE 0, 12, SCREEN_SIZE_X , 13
2097 #define EM_EDITOR_SIZE 0, 0, SCREEN_SIZE_X-4, Mmi_layout_line(LAST_LINE_TOP)
2098
2099 //From MMIIdle
2100 //GW Changed window height from 30 (27?) to 24.
2101 #define WIN_DIALLING_SIZE 0,Mmi_layout_line_icons(2), SCREEN_SIZE_X,24
2102 #define WIN_DIALLING_C_SIZE 0,Mmi_layout_line_icons(1),SCREEN_SIZE_X,32
2103
2104 //Positions for editor windows in mmismssend
2105 #define PHNO_EDITOR_SIZE 0, (Mmi_layout_line(1)+2), SCREEN_SIZE_X, 20
2106
2107 //NB defines below used twice, second time START/SIZE_Y was same as START/SIZE_Y above
2108 #define CENTRE_EDITOR_SIZE 0, Mmi_layout_line(1), SCREEN_SIZE_X, MNU3LINE+3
2109
2110 //And for MMIServices - moved here from mmiservices.c
2111 #define SAT_EDITOR_SIZE 6,30,SCREEN_SIZE_X-6, 20
2112
2113 #define RPWD_EDITOR_SIZE 0,12,SCREEN_SIZE_X,13
2114
2115 //MMIBookCallDetails
2116 #define PHB_EDITOR_SIZE 4,0,SCREEN_SIZE_X-4, ALLBUT2LINE
2117
2118 //MMIPins
2119 #define PIN_EDIT_RESET_SIZE 12,20,84-12,16
2120
2121 //MMITimeDate
2122 #define TIMEDATE_EDITOR_AREA_SIZE 0,10,70,10
2123 #endif
2124 /* GW SPR#1840 26/03/03 - Copied from MMieditor.c*/
2125 static void setSize(T_ATB_WIN_SIZE *win, int px, int py, int sx, int sy)
2126 {
2127 win->px = px; win->py = py;
2128 win->sx = sx; win->sy = sy;
2129 }
2130
2131 void AUI_edit_GetSpecificWindowSize(T_ED_ATTR* attr, int zone_id )
2132 {
2133 switch (zone_id)
2134 {
2135 case ZONE_SMALL_EDITOR:
2136 attr->win_size.px = 6;
2137 attr->win_size.py = Mmi_layout_IconHeight()*2;
2138 attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
2139 attr->win_size.sy = Mmi_layout_line_height()*2+4;
2140 break;
2141
2142 case ZONE_BOTTOM_LINE:
2143 attr->win_size.px = 0;
2144 attr->win_size.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight();
2145 attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
2146 attr->win_size.sy = Mmi_layout_line_height();
2147 break;
2148
2149 case ZONE_BOTTOM_LINE_FIND: //used for phonebook search
2150 attr->win_size.px = dspl_GetTextExtent(MmiRsrcGetText(TxtFind),0);
2151 attr->win_size.py = SCREEN_SIZE_Y - Mmi_layout_line_height() - Mmi_layout_softkeyHeight();
2152 attr->win_size.sx = SCREEN_SIZE_X-attr->win_size.px;
2153 attr->win_size.sy = Mmi_layout_line_height();
2154 break;
2155
2156 #ifndef LSCREEN
2157 case BOOKDETAILS_EDITOR: setSize(&attr->win_size,BOOKDETAILS_EDITOR_SIZE); break;
2158 case NUMBER_EDITOR: setSize(&attr->win_size,NUMBER_EDITOR_SIZE); break;
2159 case PHONEBOOK_DLG_EDITOR: setSize(&attr->win_size,PHONEBOOK_DLG_EDITOR_SIZE); break;
2160 case BOOKSDN_EDITOR: setSize(&attr->win_size,BOOKSDN_EDITOR_SIZE); break;
2161 // case BOOKSEARCH_EDITOR: setSize(&attr->win_size,BOOKSEARCH_EDITOR_SIZE); break;
2162 case CALL_EDITOR: setSize(&attr->win_size,CALL_EDITOR_SIZE); break;
2163 case CALLSCRATCHPAD_EDITOR: setSize(&attr->win_size,CALLSCRATCHPAD_EDITOR_SIZE); break;
2164 case SERVICE_CREATE_EDITOR: setSize(&attr->win_size,SERVICE_CREATE_EDITOR_SIZE); break;
2165 case PASSWORD_EDITOR: setSize(&attr->win_size,PASSWORD_EDITOR_SIZE); break;
2166 case EM_CREATE_EDITOR: setSize(&attr->win_size,EM_EDITOR_SIZE); break;/*SPR#1840*/
2167
2168 case WIN_DIALLING:
2169 case WIN_DIALLING_CB:
2170 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
2171 setSize(&attr->win_size,WIN_DIALLING_C_SIZE);
2172 else
2173 setSize(&attr->win_size,WIN_DIALLING_SIZE);
2174 break;
2175 case WIN_DIALLING_SMS:
2176 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
2177 {
2178 setSize(&attr->win_size,0,Mmi_layout_line_icons(1),SCREEN_SIZE_X,24);/*SPR#1840*/
2179 }
2180 else
2181 setSize(&attr->win_size,WIN_DIALLING_SIZE);
2182 break;
2183 case WIN_DIALLING_SAT:
2184 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
2185 setSize(&attr->win_size,WIN_DIALLING_C_SIZE);
2186 else
2187 setSize(&attr->win_size,WIN_DIALLING_SIZE);
2188 break;
2189
2190 case PHNO_EDITOR: setSize(&attr->win_size,PHNO_EDITOR_SIZE); break;
2191 case CENTRE_EDITOR: setSize(&attr->win_size,CENTRE_EDITOR_SIZE); break;
2192 case SAT_EDITOR : setSize(&attr->win_size,SAT_EDITOR_SIZE); break;
2193 case RPWD_EDITOR: setSize(&attr->win_size,RPWD_EDITOR_SIZE); break;
2194 case PHB_EDITOR: setSize(&attr->win_size,PHB_EDITOR_SIZE); break;
2195 case PIN_EDIT_RESET: setSize(&attr->win_size,PIN_EDIT_RESET_SIZE); break;
2196 case TIMEDATE_EDITOR_AREA: setSize(&attr->win_size,TIMEDATE_EDITOR_AREA_SIZE); break;
2197 #endif
2198 default:
2199 break;
2200 }
2201 }
2202
2203 /*******************************************************************************
2204
2205 $Function: AUI_edit_CalculateWindow
2206
2207 $Description: Sets up window size
2208
2209 $Returns: None.
2210
2211 $Arguments: attr - The ATB editor attributes
2212 zone_id - Specifies the window size (See ZONE_... in header file)
2213 SPR#1559 - SH - this is now a pointer to the zone_id, allowing
2214 the zone_id to be modified by this function
2215
2216 *******************************************************************************/
2217
2218 void AUI_edit_CalculateWindow(T_ED_ATTR* attr, int *zone_id_pointer )
2219 {
2220 int zone_id = *zone_id_pointer;
2221
2222 attr->win_size.px = 0;
2223 attr->win_size.py = 0;
2224 attr->win_size.sx = SCREEN_SIZE_X;
2225 attr->win_size.sy = SCREEN_SIZE_Y;
2226
2227 if (zone_id == ZONE_BORDER_EDITOR)
2228 { //Leave border on left/right of screen.
2229 attr->win_size.px = 4;
2230 attr->win_size.sx = attr->win_size.sx - 2*attr->win_size.px;
2231 zone_id = ZONE_FULLSOFTKEYS;
2232 *zone_id_pointer = zone_id;
2233 }
2234 else if ((zone_id != 0x0000) && ((zone_id &0xF000)==0xF000))/*SPR#1840*/
2235 {
2236 AUI_edit_GetSpecificWindowSize(attr,zone_id);
2237 return;
2238 }
2239 else if (zone_id == 0)
2240 {
2241 zone_id = ZONE_FULLSOFTKEYS;
2242 *zone_id_pointer = zone_id;
2243 }
2244
2245 if (zone_id & ZONE_ICONS)
2246 attr->win_size.py = attr->win_size.py + Mmi_layout_IconHeight();
2247
2248 if (zone_id & ZONE_SOFTKEYS)
2249 attr->win_size.sy = attr->win_size.sy - Mmi_layout_softkeyHeight();
2250
2251 if (zone_id & ZONE_TITLE)
2252 attr->win_size.py = attr->win_size.py + Mmi_layout_TitleHeight();
2253
2254 if (zone_id & ZONE_CASE_ABC)
2255 attr->win_size.sy = attr->win_size.sy - Mmi_layout_line_height();
2256
2257 if (zone_id & ZONE_SCROLLBAR)
2258 attr->win_size.sx = attr->win_size.sx - ED_SCROLLBAR_WIDTH;
2259
2260 attr->win_size.sy = attr->win_size.sy - attr->win_size.py;
2261
2262 if ((zone_id & ZONE_FULLSCREEN) == ZONE_FULLSCREEN)
2263 return;
2264
2265 /*Else window is not entire screen */
2266
2267 switch (zone_id & ZONE_FULL_HEIGHT)
2268 {
2269 case ZONE_FULL_HEIGHT:
2270 break;
2271 case ZONE_TOPHALF_HEIGHT:
2272 attr->win_size.sy = attr->win_size.sy/2;
2273 break;
2274 case ZONE_MIDDLE_HEIGHT:
2275 attr->win_size.sy = attr->win_size.sy/2;
2276 attr->win_size.py = attr->win_size.py+attr->win_size.sy/2;
2277 break;
2278 case ZONE_BOTTOMHALF_HEIGHT:
2279 attr->win_size.sy = attr->win_size.sy/2;
2280 attr->win_size.py = attr->win_size.py+attr->win_size.sy;
2281 break;
2282 case ZONE_BOTTOMTWOLINES_HEIGHT:
2283 attr->win_size.py = attr->win_size.py+attr->win_size.sy-Mmi_layout_line_height()*2;
2284 attr->win_size.sy = Mmi_layout_line_height()*2;
2285 break;
2286 default:
2287 //No action
2288 break;
2289 }
2290
2291 switch (zone_id & ZONE_FULL_WIDTH)
2292 {
2293 case ZONE_FULL_WIDTH:
2294 break;
2295 case ZONE_LEFTHALF_WIDTH:
2296 attr->win_size.sx = attr->win_size.sx/2;
2297 break;
2298 case ZONE_MIDDLE_WIDTH :
2299 attr->win_size.sx = attr->win_size.sx/2;
2300 attr->win_size.px = attr->win_size.px+attr->win_size.sx/2;
2301 break;
2302 case ZONE_RIGHTHALF_WIDTH:
2303 attr->win_size.sx = attr->win_size.sx/2;
2304 attr->win_size.px = attr->win_size.px+attr->win_size.sx;
2305 break;
2306 default:
2307 //No action
2308 break;
2309 }
2310 }
2311
2312
2313 /*******************************************************************************
2314
2315 $Function: AUI_edit_SetDefault
2316
2317 $Description: Sets up standard editor attributes.
2318
2319 $Returns: None.
2320
2321 $Arguments: editor_data - The MMI editor data that is to be modified.
2322
2323 *******************************************************************************/
2324
2325 void AUI_edit_SetDefault(T_AUI_EDITOR_DATA *editor_data)
2326 {
2327 /* Set everything to zero... */
2328 /* SPR#1559 - Move CalculateWindow to below */
2329
2330 memset(editor_data, 0, sizeof(T_AUI_EDITOR_DATA));
2331
2332 /* Except these things... */
2333
2334 editor_data->editor_attr.colour = COLOUR_EDITOR;
2335 editor_data->editor_attr.font = EDITOR_FONT;
2336 editor_data->editor_attr.cursor = ED_CURSOR_BAR;
2337 editor_data->editor_attr.mode = ED_MODE_ALPHA;
2338 editor_data->editor_attr.text.dcs = ATB_DCS_ASCII;
2339 editor_data->timeout = FOREVER;
2340 editor_data->destroyEditor = TRUE;
2341 editor_data->zone_id = ZONE_FULL_SK_TITLE;
2342
2343 // Shashi Shekar B.S., a0876501, Jan 16, 2006, DR: OMAPS00061460
2344 #ifdef FF_MMI_SAT_ICON
2345 editor_data->editor_attr.TitleIcon.data = NULL;
2346 editor_data->editor_attr.TitleIcon.width = 0;
2347 editor_data->editor_attr.TitleIcon.height = 0;
2348 editor_data->editor_attr.TitleIcon.isTitle = FALSE;
2349 //x0035544 Mar 14, 2006 DR:OMAPS00061468
2350 //set the default value for display_type to SAT_ICON_NONE
2351 editor_data->editor_attr.TitleIcon.display_type = SAT_ICON_NONE;
2352 editor_data->editor_attr.TitleIcon.selfExplanatory = FALSE;
2353 #endif
2354
2355 /* SPR#1559 - SH - CalculateWindow moved here; pointer to zone_id used */
2356 AUI_edit_CalculateWindow(&editor_data->editor_attr, &editor_data->zone_id);
2357
2358 ATB_display_ClearFormat(&editor_data->editor_attr.startFormat);
2359 return;
2360 }
2361
2362
2363 /*******************************************************************************
2364
2365 $Function: AUI_edit_SetDisplay
2366
2367 $Description: Sets up standard editor attributes.
2368
2369 $Returns: None.
2370
2371 $Arguments: editor_data - The MMI editor data that is to be modified.
2372 zone_id - Type of editor screen (see header file for ZONE_...)
2373 colour - Colour of the editor
2374
2375 *******************************************************************************/
2376
2377 void AUI_edit_SetDisplay(T_AUI_EDITOR_DATA *editor_data, int zone_id, int colour, UBYTE font )
2378 {
2379 /* SPR#1559 - SH - Use pointer to zone_id */
2380 AUI_edit_CalculateWindow(&editor_data->editor_attr, &zone_id);
2381 editor_data->zone_id = zone_id;
2382 editor_data->editor_attr.colour = colour;
2383 editor_data->editor_attr.font = font;
2384
2385 return;
2386 }
2387
2388 /*******************************************************************************
2389
2390 $Function: AUI_edit_SetEvents
2391
2392 $Description: Sets up standard editor attributes.
2393
2394 $Returns: None.
2395
2396 $Arguments: editor_data - The MMI editor data that is to be modified.
2397
2398 *******************************************************************************/
2399
2400 void AUI_edit_SetEvents(T_AUI_EDITOR_DATA *editor_data, USHORT Identifier, BOOL destroyEditor, ULONG timeout, T_AUI_EDIT_CB Callback)
2401 {
2402 if (editor_data)
2403 {
2404 editor_data->Identifier = Identifier;
2405 editor_data->destroyEditor = destroyEditor;
2406 editor_data->timeout = timeout;
2407 editor_data->Callback = Callback;
2408 }
2409 return;
2410 }
2411
2412
2413 /*******************************************************************************
2414
2415 $Function: AUI_edit_SetMode
2416
2417 $Description: Sets up standard editor attributes.
2418
2419 $Returns: None.
2420
2421 $Arguments: editor_data - The MMI editor data that is to be modified.
2422 mode - Editor mode (see header file for ED_MODE_...)
2423 cursor - Editor cursor (see header file for ED_CURSOR_...)
2424
2425 *******************************************************************************/
2426
2427 void AUI_edit_SetMode(T_AUI_EDITOR_DATA *editor_data, USHORT mode, USHORT cursor )
2428 {
2429 if (editor_data)
2430 {
2431 editor_data->editor_attr.mode = mode;
2432 editor_data->editor_attr.cursor = cursor;
2433 }
2434
2435 return;
2436 }
2437
2438 /*******************************************************************************
2439
2440 $Function: AUI_edit_SetBuffer
2441
2442 $Description: Sets up standard editor attributes.
2443
2444 $Returns: None.
2445
2446 $Arguments: editor_data - The MMI editor data that is to be modified.
2447 dcs - Data coding scheme of text (see ATB_DCS_...)
2448 text - The text in the appropriate coding scheme
2449 size - Maximum size of the edit buffer in characters
2450
2451 *******************************************************************************/
2452
2453 void AUI_edit_SetBuffer(T_AUI_EDITOR_DATA *editor_data, UBYTE dcs, UBYTE *text, USHORT size)
2454 {
2455 if (editor_data)
2456 {
2457 editor_data->editor_attr.text.dcs = dcs;
2458 editor_data->editor_attr.text.data = text;
2459 editor_data->editor_attr.text.len = ATB_string_Length(&editor_data->editor_attr.text);
2460 editor_data->editor_attr.size = size;
2461 }
2462
2463 return;
2464 }
2465
2466 /*******************************************************************************
2467
2468 $Function: AUI_edit_SetTextStr
2469
2470 $Description: Sets up standard editor attributes.
2471
2472 $Returns: None.
2473
2474 $Arguments: editor_data - The MMI editor data that is to be modified.
2475 LeftSoftKey, RightSoftKey - Text IDs of the softkeys
2476 TitleId - Text ID for the title
2477 TextString - Text string for the title, used if TitleId is 0
2478
2479 *******************************************************************************/
2480
2481 void AUI_edit_SetTextStr(T_AUI_EDITOR_DATA *editor_data, USHORT LeftSoftKey, USHORT RightSoftKey, USHORT TitleId, UBYTE *TitleString)
2482 {
2483 if (editor_data)
2484 {
2485 editor_data->LeftSoftKey = LeftSoftKey;
2486 editor_data->RightSoftKey = RightSoftKey;
2487 editor_data->AltRightSoftKey = RightSoftKey;
2488 editor_data->TitleId = TitleId;
2489 editor_data->TitleString = TitleString;
2490 }
2491
2492 return;
2493 }
2494
2495 /*******************************************************************************
2496
2497 $Function: AUI_edit_SetAltTextStr
2498
2499 $Description: Sets up standard editor attributes.
2500
2501 $Returns: None.
2502
2503 $Arguments: editor_data - The MMI editor data that is to be modified.
2504 min_enter - No of characters needed to be entered
2505 AltLeftSoftKey - Text ID of alternate left softkey
2506 change_rsk_on_empty - TRUE if alternative right soft key is used for
2507 empty buffer
2508 AltRightSoftKey - Text ID of alternative right softkey
2509
2510 *******************************************************************************/
2511
2512 void AUI_edit_SetAltTextStr(T_AUI_EDITOR_DATA *editor_data, UBYTE min_enter, USHORT AltLeftSoftKey, BOOL change_rsk_on_empty, USHORT AltRightSoftKey)
2513 {
2514 if (editor_data)
2515 {
2516 editor_data->AltLeftSoftKey = AltLeftSoftKey;
2517 editor_data->min_enter = min_enter;
2518 editor_data->AltRightSoftKey = AltRightSoftKey;
2519 editor_data->change_rsk_on_empty = change_rsk_on_empty;
2520 }
2521
2522 return;
2523 }
2524
2525 /*******************************************************************************
2526
2527 $Function: AUI_edit_SetFormatStr
2528
2529 $Description: Sets up standard editor attributes.
2530
2531 $Returns: None.
2532
2533 $Arguments: editor_data - The MMI editor data that is to be modified.
2534 formatstr - The formatted input string
2535 preformat - TRUE if format codes are to be inserted into text
2536 before editing
2537 filler - If preformat is true, this character will be used to
2538 pad out the provided string
2539
2540 *******************************************************************************/
2541
2542 void AUI_edit_SetFormatStr(T_AUI_EDITOR_DATA *editor_data, char *formatstr, BOOL preformat, char filler)
2543 {
2544 USHORT textIndex;
2545 USHORT formatIndex;
2546 // USHORT character; // RAVI
2547
2548 TRACE_FUNCTION("AUI_edit_SetFormatStr()");
2549
2550 if (editor_data)
2551 {
2552 editor_data->editor_attr.FormatString = formatstr;
2553
2554 /* SPR#1983 - SH - *m and *M strings are freeform, no preformatting required */
2555 if (preformat && strcmp(formatstr, "*m")!=0 && strcmp(formatstr, "*M")!=0)
2556 {
2557 formatIndex = 0;
2558 textIndex = 0;
2559
2560 /* SPR#1983 - SH - Ensure formatting doesn't write over null terminator */
2561 while (formatstr[formatIndex]!=0 &&
2562 !strchr("123456789*", formatstr[formatIndex]) && /* Exit at delimited field */
2563 textIndex<(editor_data->editor_attr.size-1))
2564 {
2565 /* Encountered fixed character */
2566 if (formatstr[formatIndex]=='\\')
2567 {
2568 formatIndex++;
2569 ATB_string_SetChar(&editor_data->editor_attr.text, textIndex, ATB_char_Unicode(formatstr[formatIndex]));
2570 }
2571 /* If editor text has run out, fill the rest with our filler character */
2572 else if (textIndex>editor_data->editor_attr.text.len)
2573 {
2574 ATB_string_SetChar(&editor_data->editor_attr.text, textIndex, ATB_char_Unicode(filler));
2575 }
2576
2577 formatIndex++;
2578 textIndex++;
2579 }
2580 }
2581 }
2582
2583 return;
2584 }
2585
2586 /*******************************************************************************
2587
2588 $Function: AUI_edit_SetFormatAttr
2589
2590 $Description: Sets up standard editor attributes.
2591
2592 $Returns: None.
2593
2594 $Arguments: editor_data - The MMI editor data that is to be modified.
2595 startFormat - Pointer to text formatting data structure
2596
2597 *******************************************************************************/
2598
2599 void AUI_edit_SetFormatAttr(T_AUI_EDITOR_DATA *editor_data, UBYTE attr)
2600 {
2601 if (editor_data)
2602 {
2603 editor_data->editor_attr.startFormat.attr = attr;
2604 }
2605
2606 return;
2607 }
2608
2609 /*******************************************************************************
2610
2611 $Function: AUI_edit_SetAttr
2612
2613 $Description: Set some standard editor attributes
2614
2615 $Returns: None.
2616
2617 $Arguments: attr - The editor attr
2618
2619 *******************************************************************************/
2620 void AUI_edit_SetAttr(T_ED_ATTR *attr, int zone_id, ULONG colour, UBYTE font, USHORT mode, USHORT cursor, T_ATB_DCS dcs, UBYTE *text, USHORT size)
2621 {
2622 /* Populate the structure with the parameters
2623 */
2624 /* SPR#1559 - SH - Use pointer to zone_id */
2625 AUI_edit_CalculateWindow(attr, &zone_id );
2626 attr->colour = colour;
2627 attr->font = font;
2628 attr->mode = mode;
2629 attr->cursor = cursor;
2630 attr->text.dcs = dcs;
2631 attr->text.data = text;
2632 attr->text.len = ATB_string_Length(&attr->text);
2633 attr->size = size;
2634
2635 return;
2636 }
2637
2638 /* API - 08/07/03 - CQ10728 - Query your own number with a D1 SIM*/
2639 /*******************************************************************************
2640
2641 $Function: AUI_Edit_Display_Only
2642
2643 $Description: Sets up the display requirements for the Editor & also shows it
2644
2645 $Returns: None.
2646
2647 $Arguments: win - parent window, LSK - Left Soft Key, RSK - Right Soft Key
2648 string1 - String details, string2 - String details, Title - Editor title string
2649
2650 *******************************************************************************/
2651 void AUI_Edit_Display_Only(T_MFW_HND win, int LSK, int RSK, char *string1, char *string2, int Title)
2652 {
2653
2654 T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
2655 T_AUI_EDITOR_INFO *data = (T_AUI_EDITOR_INFO *)win_data->user;
2656
2657 T_AUI_EDITOR_DATA display_editor_info;
2658
2659 int size = MAX_RO_EDITOR_LEN;
2660
2661 AUI_edit_SetDefault(&display_editor_info);
2662
2663 /* Include title for colour display */
2664 #ifdef COLOURDISPLAY
2665 AUI_edit_SetDisplay(&display_editor_info, ZONE_FULL_SK_TITLE_SCROLL, COLOUR_EDITOR, EDITOR_FONT);
2666 #else /* COLOURDISPLAY */
2667 AUI_edit_SetDisplay(&display_editor_info, ZONE_FULL_SK_SCROLL, COLOUR_EDITOR, EDITOR_FONT);
2668 #endif /* COLOURDISPLAY */
2669 AUI_edit_SetMode(&display_editor_info, ED_MODE_ALPHA | ED_MODE_READONLY, ED_CURSOR_NONE);
2670 AUI_edit_SetEvents(&display_editor_info, 0, FALSE, FOREVER, (T_AUI_EDIT_CB) AUI_Edit_Display_Only_CB);
2671 AUI_edit_SetTextStr(&display_editor_info, LSK, RSK, Title, NULL);
2672
2673 /* SPR#2672 - SH - Allocate buffer dynamically */
2674
2675 data->displayBuffer = (char *)ALLOC_MEMORY(size);
2676
2677 strcpy(data->displayBuffer, string1);
2678
2679 if(string2 != NULL)
2680 {
2681 strcat(data->displayBuffer, "\n");
2682 strcat(data->displayBuffer, string2);
2683 }
2684
2685 if (data->displayBuffer[0]==0x80)
2686 {
2687 AUI_edit_SetBuffer(&display_editor_info, ATB_DCS_UNICODE, (UBYTE *)&data->displayBuffer[2], size/2);
2688 }
2689 else
2690 {
2691 AUI_edit_SetBuffer(&display_editor_info, ATB_DCS_ASCII, (UBYTE *)&data->displayBuffer[0], size);
2692 }
2693
2694 data->win = AUI_edit_Start(win,&display_editor_info); /* start the editor */
2695
2696 }
2697
2698 /*******************************************************************************
2699
2700 $Function: AUI_Edit_Display_Only_CB
2701
2702 $Description: Handles the key call back from the Read only Editor
2703
2704 $Returns: None.
2705
2706 $Arguments:
2707
2708 *******************************************************************************/
2709 static void AUI_Edit_Display_Only_CB(T_MFW_HND win, USHORT Identifier, SHORT reason)
2710 {
2711 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
2712 T_AUI_EDITOR_INFO * data = (T_AUI_EDITOR_INFO *)win_data->user;
2713
2714 TRACE_EVENT("AUI_Edit_Display_Only_CB");
2715
2716 switch(reason)
2717 {
2718 case INFO_KCD_RIGHT:
2719 case INFO_KCD_HUP:
2720 TRACE_EVENT("INFO_KCD_RIGHT/HUP");
2721 AUI_Edit_Display_Only_Destroy(data->win);
2722 break;
2723
2724 default:
2725 TRACE_EVENT("Err: Default");
2726 break;
2727
2728 }
2729 }
2730
2731 /*******************************************************************************
2732
2733 $Function: AUI_Edit_Display_Only_Destroy
2734
2735 $Description: Destroy the Read only information Editor
2736
2737 $Returns: none
2738
2739 $Arguments: own_window - current window handler
2740
2741 *******************************************************************************/
2742
2743 static void AUI_Edit_Display_Only_Destroy(MfwHnd own_window)
2744 {
2745 T_MFW_WIN * win_data;
2746 T_AUI_EDITOR_INFO * data;
2747
2748 // USHORT i; // RAVI
2749
2750 TRACE_FUNCTION ("SmsRead_R_TEXTEDT2_destroy()");
2751
2752 if (own_window)
2753 {
2754 win_data = ((T_MFW_HDR *)own_window)->data;
2755 data = (T_AUI_EDITOR_INFO *)win_data->user;
2756
2757 if (data)
2758 {
2759 /*
2760 * Delete WIN handler
2761 */
2762
2763 /* SPR#2672 - SH - Delete buffer */
2764
2765 if (data->displayBuffer!=NULL)
2766 {
2767 FREE_MEMORY((void *)data->displayBuffer, MAX_RO_EDITOR_LEN);
2768 }
2769
2770 /* SPR#1428 - SH - New Editor changes */
2771 #ifdef NEW_EDITOR
2772 AUI_edit_Destroy(data->win);
2773 #else /* NEW_EDITOR */
2774 editor_destroy(data->win);
2775 #endif /* NEW_EDITOR */
2776
2777 win_delete (data->win);
2778
2779 FREE_MEMORY ((void *)data, sizeof (T_AUI_EDITOR_INFO));
2780
2781
2782 }
2783 else
2784 {
2785 TRACE_EVENT ("SmsRead_R_TEXTEDT2_destroy() called twice");
2786 }
2787 }
2788 }
2789 /* API - 08/07/03 - CQ10728 END*/