comparison g23m/condat/ms/src/bmi/MmiBookInputWindow.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: PhoneBook
15 $File: MmiBookInputWindow.h
16 $Revision: 1.0
17
18 $Author: Condat(UK)
19 $Date: 25/10/00
20
21 ********************************************************************************
22
23 Description:
24
25 This module provides the functionality for the input window of the
26 phone book module.
27
28 ********************************************************************************
29 $History: MmiBookInputWindow.h
30
31 25/10/00 Original Condat(UK) BMI version.
32
33 $End
34
35 *******************************************************************************/
36
37
38
39
40
41 /*******************************************************************************
42
43 Include Files
44
45 *******************************************************************************/
46 #define ENTITY_MFW
47
48 /* includes */
49 #include <string.h>
50 #include <stdio.h>
51 #include <stdlib.h>
52
53 #if defined (NEW_FRAME)
54
55 #include "typedefs.h"
56 #include "vsi.h"
57 #include "pei.h"
58 #include "custom.h"
59 #include "gsm.h"
60
61 #else
62
63 #include "STDDEFS.H"
64 #include "custom.h"
65 #include "gsm.h"
66 #include "vsi.h"
67
68 #endif
69
70 #include "mfw_sys.h"
71
72 #include "mfw_mfw.h"
73 #include "mfw_win.h"
74 #include "mfw_kbd.h"
75 #include "mfw_lng.h"
76 /* SPR#1428 - SH - New Editor changes */
77 #ifndef NEW_EDITOR
78 #include "mfw_edt.h"
79 #endif
80 #include "mfw_icn.h"
81 #include "mfw_mnu.h"
82 #include "mfw_tim.h"
83
84 #include "mfw_sim.h"
85 #include "mfw_cm.h"
86 #include "mfw_nm.h"
87 #include "mfw_phb.h"
88 #include "mfw_mme.h"
89 #include "mfw_sat.h"
90 #include "mfw_sms.h"
91
92 #include "dspl.h"
93
94 #include "ksd.h"
95 #include "psa.h"
96
97 #include "MmiMain.h"
98 #include "MmiBookController.h"
99 #include "MmiDummy.h"
100 #include "MmiDialogs.h"
101 #include "MmiLists.h"
102
103
104
105 #include "MmiMenu.h"
106 #include "mmiCall.h"
107 #include "Mmiicons.h"
108 #include "MmiIdle.h"
109
110 #include "MmiSoftKeys.h"
111 #include "MmiSounds.h"
112 #include "MmiIdle.h"
113 #include "MmiNetwork.h"
114 #include "mmiSat_i.h"
115 #include "MmiAoc.h"
116
117 #include "gdi.h"
118 #include "audio.h"
119
120 #include "cus_aci.h"
121 #include "mfw_ffs.h"
122 #include "MmiTimers.h"
123
124 #include "MmiBookShared.h"
125 #ifdef EASY_TEXT_ENABLED
126 #include "MmiChineseInput.h"
127 #endif
128
129 #include "mmiColours.h"
130 /* SPR#1428 - SH - New Editor
131 * This file is obsolete with new editor and should not be compiled */
132 #ifndef NEW_EDITOR
133
134 #define NAME 0
135 #define NUMBER 1
136
137 static int DoNextLongPress = FALSE;
138 static UBYTE UPPER_CASE = TRUE;
139 static UBYTE MODE;
140 extern int upCase;
141
142
143 /*******************************************************************************
144
145 Private Methods
146
147 *******************************************************************************/
148
149 /*******************************************************************************
150
151 $Function: bookInputDialog
152
153 $Description: Dialog function for the input window
154
155 $Returns: None
156
157 $Arguments: win, window handle
158 event, event to be handled
159 value, not used
160 parameter, not used
161
162 *******************************************************************************/
163
164 static void bookInputDialog( T_MFW_HND win, USHORT event, SHORT value, void *parameter )
165 {
166 T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data;
167 tBookStandard *data = (tBookStandard *) win_data->user;
168 tInputSpecifics *properties = (tInputSpecifics *) parameter;
169
170 TRACE_FUNCTION ("bookInputDialog()");
171
172 /* Handle the input event, ew only deal with initialise and
173 destroy of the window in here
174 */
175 switch( event )
176 {
177 case INPUT_INIT:
178 {
179 /* Initialise the input window
180 */
181 data->properties.abc = properties->abc;
182 data->properties.text = properties->text;
183 data->properties.edt_attr_input = properties->edt_attr_input;
184 data->properties.left_soft_key = properties->left_soft_key;
185 data->properties.right_soft_key = properties->right_soft_key;
186 data->properties.callback = properties->callback;
187 data->edt = edtCreate( data->win, data->properties.edt_attr_input, 0, 0 );
188
189 /* activate our editor, stopping any others before doing so
190 */
191 editDeactivate();
192 editActivate( data->edt, properties->abc );
193 edtChar( data->edt, ecBottom );
194
195 /* show the window
196 */
197 winShow( data->win );
198 }
199 break;
200
201 case INPUT_DESTROY:
202 {
203 /* destroy the input window
204 */
205 bookInputDestroy( win );
206 }
207 break;
208 }
209 }
210
211
212
213
214
215
216 /*******************************************************************************
217
218 $Function: bookInputWindowCB
219
220 $Description: Window event handler
221
222 $Returns: MFW_CONSUMED for the visible event, MFW_PASSED otherwise
223
224 $Arguments: e, event, w, window handle
225
226 *******************************************************************************/
227
228 static int bookInputWindowCB( MfwEvt e, MfwWin *w )
229 {
230 tBookStandard *data = (tBookStandard *) w->user;
231
232 TRACE_FUNCTION ("bookInputWindowCB()");
233
234 /* Handle the visible event, otherwise return MFW_EVENT_PASSED
235 */
236 switch( e )
237 {
238 case MfwWinVisible:
239 {
240 /* Window visible
241 */
242 MmiBookShowDefault();
243 edtShow( data->edt );
244 PROMPT( MmiBookMenuArea().px, MmiBookMenuArea().py, 0, data->properties.text );
245 softKeys_displayId(data->properties.left_soft_key, data->properties.right_soft_key, 0, COLOUR_LIST_SUBMENU);
246 }
247 break;
248
249 default:
250 {
251 /* unabel to handle event, pass handling of event back up tree
252 */
253 return MFW_EVENT_PASSED;
254 }
255 }
256
257 /* if we get here, we have handled the event
258 */
259 return MFW_EVENT_CONSUMED;
260 }
261
262
263
264
265
266
267 /*******************************************************************************
268
269 $Function: bookInputKbdCB
270
271 $Description: Input window keyboard handler
272
273 $Returns: MFW_EVENT_CONSUMED always, this will pass LEFT, RIGHT and CLEAR
274 events back to the calling window using the installed callback
275 method
276
277 $Arguments: e, event, k, key handle
278
279 *******************************************************************************/
280
281 static int bookInputKbdCB( MfwEvt e, MfwKbd *k )
282 {
283 T_MFW_HND win = mfwParent( mfw_header() );
284 T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data;
285 tBookStandard *data = (tBookStandard *) win_data->user;
286
287 TRACE_FUNCTION ("bookInputKbdCB()");
288
289 /* make sure the active editor is ours
290 */
291 if ( activeEditor() != data->edt )
292 editActivate( data->edt, data->properties.abc );
293
294 /* Handle the key press
295 */
296 switch (k->code)
297 {
298 case KCD_MNUUP:
299 {
300 /* move right
301 */
302 edtChar( data->edt, ecRight );
303 }
304 break;
305
306 case KCD_MNUDOWN:
307 {
308 /* move left
309 */
310 edtChar( data->edt, ecLeft );
311 }
312 break;
313
314 case KCD_MNUSELECT:
315 case KCD_LEFT:
316 {
317 /* select the entry using the parent window callback
318 */
319 data->properties.callback( data->parent_win, INPUT_LEFT );
320
321 }
322 break;
323
324 case KCD_HUP:
325 {
326 /* get edit control block
327 */
328 MfwEdt *edt = ( (MfwHdr *) data->edt )->data;
329
330 data->properties.callback( data->parent_win, INPUT_CLEAR );
331 }
332 break;
333
334 case KCD_RIGHT:
335 {
336 MfwEdt *edt = ( (MfwHdr *) data->edt )->data;
337 /* select the entry using the parent windows callback
338 */
339 //If we have any data input, delete the char before cursor
340 if ( edt->attr->text[0] )
341 edtChar( data->edt, ecBack );
342 else
343 {
344 data->properties.callback( data->parent_win, INPUT_RIGHT );
345 displaySoftKeys_edition (TxtNull, TxtNull ,TxtNull);
346 MODE = NUMBER;
347 }
348
349 }
350 break;
351
352 case KCD_HASH:
353 {
354 /* deal with hash key
355 */
356 edtChar( data->edt, '#' );
357 }
358 break;
359
360 case KCD_STAR:
361 {
362 /* deal with star key
363 */
364 edtChar( data->edt, '*' );
365 }
366 break;
367
368 default:
369 {
370 /* default handling for the key being pressed
371 */
372
373 /*NM, p015a */
374 /* it is better to use these two function for different mode*/
375 if (data->properties.abc EQ TRUE)
376 editEventKey(e, k); /* alpha-mode*/
377 else
378 edtChar(data->edt ,editControls[k->code]); /*digit -mode*/
379
380 edtShow(data->edt);
381 /*p015a end */
382
383 }
384 break;
385 }
386
387 /* always consume the event
388 */
389 return MFW_EVENT_CONSUMED;
390 }
391
392
393
394
395
396
397 /*******************************************************************************
398
399 $Function: bookInputKbdLongCB
400
401 $Description: Keyboard long event handler
402
403 $Returns: MFW_EVENT_CONSUMED always
404
405 $Arguments: e, event, k, key handle
406
407 *******************************************************************************/
408
409 static int bookInputKbdLongCB( MfwEvt e, MfwKbd *k )
410 {
411 T_MFW_HND win = mfwParent( mfw_header() );
412 T_MFW_WIN *win_data = ((T_MFW_HDR *) win)->data;
413 tBookStandard *data = (tBookStandard *) win_data->user;
414
415 TRACE_FUNCTION ("bookInputKbdLongCB()");
416
417
418 /* subpress unwanted longpresses (mfw throws more than one long press event for one long press on a key)*/
419 if ( e & KEY_LONG )
420 {
421 if ( DoNextLongPress EQ FALSE )
422 DoNextLongPress = TRUE;
423 else
424 DoNextLongPress = FALSE;
425 }
426 if ( !DoNextLongPress )
427 return MFW_EVENT_CONSUMED; /* don't do current long press */
428
429
430
431 /* Handling the long keypress events needs to deal with a
432 number of characters in the input window, not just the
433 normal clear event
434 */
435
436 /* if the event is long key clear and the buffer is not empty then
437 clear the buffer. Otherwise if the buffer is empty then destroy
438 the input editor
439 */
440
441 switch(k->code)
442 {
443 case KCD_HUP:
444 {
445 MfwEdt *edt;
446
447 /* get edit control block
448 */
449 edt = ((MfwHdr *) data->edt)->data;
450
451 /* if buffer empty then kill the editor window, otherwise clear the buffer
452 */
453 if ( edt->attr->text[0] )
454 {
455 char *c_ptr = data->properties.edt_attr_input->text;
456 memset( c_ptr, '\0', strlen( c_ptr ) );
457 edtReset( data->edt );
458 edtShow( data->edt );
459 }
460 else
461 bookInputDestroy( data->win );
462 }
463 break;
464
465 case KCD_HASH:
466 edtChar( data->edt, ecBack );
467 edtChar( data->edt, 'p' );
468 break;
469
470 case KCD_0:
471 edtChar( data->edt, ecBack );
472 edtChar( data->edt, '+' );
473 break;
474
475
476 default:
477 if (MODE EQ NAME)
478 {
479
480 if (UPPER_CASE EQ FALSE)
481 {
482 TRACE_EVENT("UPPER_CASE EQ FALSE");
483 UPPER_CASE = TRUE;
484 upCase = FALSE;
485 displaySoftKeys_edition (TxtLowercase, TxtNull ,TxtNull);
486
487 }
488 else
489 {
490 TRACE_EVENT("UPPER_CASE EQ TRUE");
491 UPPER_CASE = FALSE;
492 upCase = TRUE;
493 displaySoftKeys_edition (TxtUppercase, TxtNull ,TxtNull);
494 }
495 edtChar(data->edt, ecBack);
496 }
497 break;
498
499 }
500
501 /* always handle the event
502 */
503 return MFW_EVENT_CONSUMED;
504 }
505
506
507
508
509
510 /*******************************************************************************
511
512 $Function: bookInputCreate
513
514 $Description: Create the input window and asociate it's handlers
515
516 $Returns: handle of new window, or NULL if failure
517
518 $Arguments: parent, handle of the parent window
519
520 *******************************************************************************/
521
522 static T_MFW_HND bookInputCreate( MfwHnd parent )
523 {
524 T_MFW_WIN *parent_win_data = ( (T_MFW_HDR *) parent )->data;
525 tBookStandard *parent_data = (tBookStandard *) parent_win_data->user;
526 T_phbk *phbk = parent_data->phbk;
527 T_MFW_WIN *win_data;
528 tBookStandard *data;
529
530 TRACE_FUNCTION ("bookInputCreate()");
531
532 /* allocate memory for our control block
533 */
534 if ( ( data = (tBookStandard *) ALLOC_MEMORY( sizeof( tBookStandard ) ) ) == NULL )
535 return NULL;
536
537 /* Create the window if we can
538 */
539 if ( ( data->win = win_create( parent, 0, E_WIN_VISIBLE, (T_MFW_CB) bookInputWindowCB ) ) == NULL )
540 {
541 FREE_MEMORY( (void *)data, sizeof( tBookStandard ) );
542 return NULL;
543 }
544
545 /* Okay, we have created the control block and the window, so
546 we now need to configure the dialog and data pointers
547 */
548 data->mmi_control.dialog = (T_DIALOG_FUNC) bookInputDialog;
549 data->mmi_control.data = data;
550 win_data = ((T_MFW_HDR *)data->win)->data;
551 win_data->user = (void *) data;
552 data->phbk = phbk;
553 data->parent_win = parent;
554
555 /* create keyboards and menus for our window
556 */
557 data->kbd = kbdCreate( data->win, KEY_ALL, (MfwCb) bookInputKbdCB );
558 data->kbd_long = kbdCreate( data->win, KEY_ALL | KEY_LONG, (MfwCb) bookInputKbdLongCB );
559
560 /* And return the handle of the newly created window
561 */
562 return data->win;
563 }
564
565
566
567
568
569 /*******************************************************************************
570
571 Public Methods
572
573 *******************************************************************************/
574
575 /*******************************************************************************
576
577 $Function: bookInputStart
578
579 $Description: Start the input handler
580
581 $Returns: Handle of newly created window, or NULL if failure
582
583 $Arguments: parent, parent window handle, properties, input window property
584 control block.
585
586 *******************************************************************************/
587
588 MfwHnd bookInputStart( MfwHnd parent,tInputSpecifics *properties )
589 {
590 T_MFW_HND win;
591
592 TRACE_FUNCTION ("bookInputStart()");
593
594 /* allocate window, and if successful initialise it
595 */
596 if ( ( win = bookInputCreate( parent ) ) != NULL )
597 SEND_EVENT( win, INPUT_INIT, 0, properties );
598 return win;
599 }
600
601
602 /*******************************************************************************
603
604 $Function: bookInputStartNumberEditor
605
606 $Description: Start the input handler using default properties
607
608 $Returns: Handle of newly created window, or NULL if failure
609
610 $Arguments: parent, parent window handle, buffer, input buffer
611
612 *******************************************************************************/
613
614 MfwHnd bookInputStartNumberEditor( MfwHnd parent, void *buffer )
615 {
616 T_MFW_HND win = parent;
617 T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data;
618 tBookStandard *data = (tBookStandard *) win_data->user;
619 T_phbk *Phbk = data->phbk;
620 tInputSpecifics DefaultParameters;
621
622 TRACE_FUNCTION ("bookInputStartNumberEditor()");
623 MODE = NUMBER;
624
625 /* Set up the default parameters for the input window
626 */
627 bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0,
628 (char *) buffer, NUMBER_LENGTH, &Phbk->edt_attr_number );
629
630 DefaultParameters.abc = FALSE;
631 DefaultParameters.text = TxtEnterNumber;
632 DefaultParameters.edt_attr_input = &Phbk->edt_attr_number;
633 DefaultParameters.left_soft_key = TxtSoftOK;
634 DefaultParameters.right_soft_key = TxtDelete;//Changed text
635 // dunno if that changes softkey functionality
636 DefaultParameters.callback = bookAddNumberCB;
637
638 /* allocate window, and if successful initialise it
639 */
640 return bookInputStart( parent, &DefaultParameters );
641 }
642
643
644
645 /*******************************************************************************
646
647 $Function: bookInputStartNameEditor
648
649 $Description: Start the input handler using default properties
650
651 $Returns: Handle of newly created window, or NULL if failure
652
653 $Arguments: parent, parent window handle, buffer, input buffer
654
655 *******************************************************************************/
656
657 MfwHnd bookInputStartNameEditor( MfwHnd parent, void *buffer )
658 {
659 T_MFW_WIN *win_data = ( (T_MFW_HDR *) parent )->data;
660 tBookStandard *data = (tBookStandard *) win_data->user;
661 T_phbk *Phbk = data->phbk;
662
663 tInputSpecifics DefaultParameters;
664
665 MODE = NAME;
666
667 TRACE_FUNCTION ("bookInputStartNameEditor()");
668
669 /* Set up the default parameters for the input window */
670
671 /*MC 1957, name strings should use MAX_ALPHA_LEN*/
672 bookSetEditAttributes( NUMBER_EDITOR, COLOUR_EDITOR_XX, 0, edtCurBar1, 0,
673 (char *) buffer, MAX_ALPHA_LEN, &Phbk->edt_attr_name );
674
675 /*SPR 1434*/
676
677 /*SPR 1526, changed #ifdef to #if*/
678 #if defined(CHINESE_MMI) && defined(EASY_TEXT_ENABLED)
679 /*MC, the chinese editor MUST have a unicode string as input*/
680 /*MC , SPR 1242 merged in from b-sample build*/
681 if (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE)
682 { T_CHINESE_DATA chinese_data;
683 chinese_data.TextString = (char*) Phbk->edt_buf_name;
684 if (chinese_data.TextString[0]== 0)//if, empty string
685 { chinese_data.TextString[0] = 0x80;//give string Unicode tag
686 chinese_data.TextString[1] = 0x7F;
687 }
688 else
689 { char l_name[MAX_ALPHA_LEN];
690 int ascii_len = strlen(chinese_data.TextString);
691 int i;
692 if (chinese_data.TextString[0]!= 0x80)/*If ASCII string*/
693 { memset(l_name, '\0', MAX_ALPHA_LEN);
694 l_name[0] = 0x80;//give Unicode tag
695 l_name[1] = 0x7F;
696 /*convert ascii string to unicode*/
697 { for (i =0; i < (ascii_len); i++)
698 { if ((2+2*i+1)>=MAX_ALPHA_LEN)
699 break;
700 l_name[2+2*i] = 0x00;
701 l_name[2+2*i+1] = chinese_data.TextString[i];
702 }
703 if ((2+2*i+1)<=MAX_ALPHA_LEN)
704 { l_name[2+2*i] = 0x00; //double null termination
705 l_name[2+2*i+1] = 0x00;
706 }
707 }
708 memcpy(chinese_data.TextString, l_name, MAX_ALPHA_LEN);
709 }
710 }
711 /*MC end*/
712
713 chinese_data.Callback = (T_EDIT_CB)bookAddNameCB;
714 chinese_data.Identifier = INPUT_LEFT ;
715 chinese_data.LeftSoftKey = TxtSave;
716 chinese_data.DestroyEditor = TRUE;
717 chinese_data.EditorSize = (USHORT)((MAX_ALPHA_LEN-4)/2);//i.e.8
718 return chinese_input(parent, &chinese_data);
719 }
720 else
721 #endif
722 {
723 DefaultParameters.abc = TRUE;
724 DefaultParameters.text = TxtEnterName;
725 DefaultParameters.edt_attr_input = &Phbk->edt_attr_name;
726 DefaultParameters.left_soft_key = TxtSoftOK;
727 DefaultParameters.right_soft_key = TxtDelete;//Changed text - MC
728 DefaultParameters.callback = bookAddNameCB;
729
730 /* allocate window, and if successful initialise it
731 */
732 return bookInputStart( parent, &DefaultParameters );
733 }
734 }
735
736
737
738 /*******************************************************************************
739
740 $Function: bookInputDestroy
741
742 $Description: Destroy Input Window
743
744 $Returns: None
745
746 $Arguments: Handle of window to be destroyed
747
748 *******************************************************************************/
749
750 void bookInputDestroy( MfwHnd window )
751 {
752 T_MFW_WIN *win = ((T_MFW_HDR *) window)->data;
753 tBookStandard *data = (tBookStandard *) win->user;
754
755 TRACE_FUNCTION ("bookInputDestroy()");
756
757 if (data)
758 {
759 editDeactivate();
760
761 winDelete ( data->win );
762 FREE_MEMORY( (void *) data, sizeof( tBookStandard ) );
763 }
764 }
765
766 #endif /* NEW_EDITOR */
767
768 /*******************************************************************************
769
770 End of File
771
772 *******************************************************************************/