FreeCalypso > hg > tcs211-c139
comparison g23m/condat/ms/src/bmi/MmiSoftKeys.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: Softkeys | |
15 $File: MmiSoftkeys.c | |
16 $Revision: 1.0 | |
17 | |
18 $Author: Condat(UK) | |
19 $Date: 22/02/01 | |
20 | |
21 ******************************************************************************** | |
22 | |
23 Description: | |
24 | |
25 | |
26 | |
27 ******************************************************************************** | |
28 | |
29 $History: | |
30 | |
31 xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
32 To display '?' to indicate to the user that help is available for a STK menu | |
33 | |
34 25/10/00 Original Condat(UK) BMI version. | |
35 | |
36 $End | |
37 | |
38 *******************************************************************************/ | |
39 | |
40 | |
41 /******************************************************************************* | |
42 | |
43 Include Files | |
44 | |
45 *******************************************************************************/ | |
46 | |
47 #define ENTITY_MFW | |
48 | |
49 /* includes */ | |
50 #include <string.h> | |
51 #include <stdio.h> | |
52 #include <stdlib.h> | |
53 | |
54 | |
55 #if defined (NEW_FRAME) | |
56 | |
57 #include "typedefs.h" | |
58 #include "vsi.h" | |
59 #include "pei.h" | |
60 #include "custom.h" | |
61 #include "gsm.h" | |
62 | |
63 #else | |
64 | |
65 #include "STDDEFS.H" | |
66 #include "custom.h" | |
67 #include "gsm.h" | |
68 #include "vsi.h" | |
69 | |
70 #endif | |
71 #include "mfw_sys.h" | |
72 #include "prim.h" | |
73 | |
74 #include "mfw_mfw.h" | |
75 #include "mfw_win.h" | |
76 #include "mfw_kbd.h" | |
77 #include "mfw_lng.h" | |
78 #include "mfw_phb.h" | |
79 #include "mfw_nm.h" | |
80 #include "dspl.h" | |
81 | |
82 #include "ksd.h" | |
83 #include "psa.h" | |
84 | |
85 | |
86 #include "MmiMmi.h" | |
87 #include "MmiMain.h" | |
88 | |
89 #include "MmiUserData.h" | |
90 #include "MmiSoftKeys.h" | |
91 #include "MmiResources.h" | |
92 | |
93 #include "mmiColours.h" | |
94 | |
95 typedef struct | |
96 { | |
97 MfwHnd leftKeyHandler; | |
98 MfwHnd rightKeyHandler; | |
99 | |
100 LangTxt leftKeyLabel; | |
101 LangTxt rightKeyLabel; | |
102 } SoftKeysData, *SoftKeys; | |
103 | |
104 | |
105 #ifdef LSCREEN | |
106 #define HorizontalOffset 4 | |
107 #else | |
108 #define HorizontalOffset 1 | |
109 #endif | |
110 #define LeftMargin (HorizontalOffset) | |
111 #define RightMargin (HorizontalOffset) | |
112 | |
113 #define ALLOC_MEMORY mfwAlloc | |
114 #define FREE_MEMORY mfwFree | |
115 | |
116 static U8 softKeyFont = 0; | |
117 static UBYTE softKeysDisplayAttibutes = DSPL_TXTATTR_NORMAL; | |
118 | |
119 | |
120 /* | |
121 * Change the <font> and <displayAttibutes> for _all_ softkeys. | |
122 * All consecutive calls of softKeysUpdate() will reflect the change. | |
123 * Returns SOFTKEYS_CHANGED when everything went fine, | |
124 * or SOFTKEYS_FAILURE on failure. | |
125 */ | |
126 SoftKeysResult softKeysAttributes( U8 font, UBYTE displayAttibutes) | |
127 { | |
128 if( font == (U8)-1 ) | |
129 { | |
130 return SOFTKEYS_FAILURE; | |
131 } | |
132 | |
133 softKeyFont = font; | |
134 softKeysDisplayAttibutes = displayAttibutes; | |
135 | |
136 return SOFTKEYS_CHANGED; | |
137 } | |
138 | |
139 | |
140 /* | |
141 * Creates the softkeys for <window>, which will display the | |
142 * <leftKeyLabel> and <rightKeyLabel> in the softkey area | |
143 * on the screen, and invoke <leftKeyCallBack> or <rightKeyCallBack> | |
144 * when the approrpiate key is pressed. Returns SOFTKEYS_CREATED when | |
145 * everything went fine, or SOFTKEYS_FAILURE on failure. | |
146 */ | |
147 SoftKeysResult softKeysHndCreate( MfwHnd window, SoftKeysSetup *setup) | |
148 { | |
149 if( window == NULL || setup == NULL ) | |
150 { | |
151 return SOFTKEYS_FAILURE; | |
152 } | |
153 | |
154 return softKeysWinCreate( (MfwWin *)((MfwHdr *)window)->data, setup); | |
155 } | |
156 | |
157 | |
158 SoftKeysResult softKeysWinCreate( MfwWin *window, SoftKeysSetup *setup) | |
159 { | |
160 SoftKeys newKeys; | |
161 | |
162 if( window == NULL || setup == NULL ) | |
163 { | |
164 return SOFTKEYS_FAILURE; | |
165 } | |
166 | |
167 newKeys = (SoftKeys)ALLOC_MEMORY(sizeof(SoftKeysData)); | |
168 | |
169 if( newKeys == NULL ) | |
170 { | |
171 return SOFTKEYS_FAILURE; | |
172 } | |
173 | |
174 if( userDataWinSet( window, UD_SOFTKEYS, (void *)newKeys) == NULL ) | |
175 { | |
176 FREE_MEMORY( (void *)newKeys, sizeof(SoftKeysData)); | |
177 | |
178 return SOFTKEYS_FAILURE; | |
179 } | |
180 | |
181 newKeys->leftKeyHandler = kbdCreate( NULL, KEY_LEFT, | |
182 setup->leftKeyCallBack); | |
183 newKeys->rightKeyHandler = kbdCreate( NULL, KEY_RIGHT, | |
184 setup->rightKeyCallBack); | |
185 | |
186 newKeys->leftKeyLabel = setup->leftKeyLabel; | |
187 newKeys->rightKeyLabel = setup->rightKeyLabel; | |
188 | |
189 if( newKeys->leftKeyHandler == NULL || newKeys->rightKeyHandler == NULL ) | |
190 { | |
191 kbdDelete(newKeys->leftKeyHandler); | |
192 kbdDelete(newKeys->rightKeyHandler); | |
193 | |
194 userDataWinDelete( window, UD_SOFTKEYS); | |
195 | |
196 FREE_MEMORY( (void *)newKeys, sizeof(SoftKeysData)); | |
197 | |
198 return SOFTKEYS_FAILURE; | |
199 } | |
200 | |
201 return SOFTKEYS_CREATED; | |
202 } | |
203 | |
204 | |
205 /* | |
206 * Change the setup of the softkeys for <window>. Use TxtNull if you | |
207 * don't want to change a ...Label, and NULL if you don't want to change | |
208 * a ...CallBack. Returns SOFTKEYS_CHANGED when everything went fine, | |
209 * or SOFTKEYS_FAILURE on failure. | |
210 */ | |
211 SoftKeysResult softKeysHndSet( MfwHnd window, SoftKeysSetup *changes) | |
212 { | |
213 if( window == NULL || changes == NULL ) | |
214 { | |
215 return SOFTKEYS_FAILURE; | |
216 } | |
217 | |
218 return softKeysWinSet( (MfwWin *)((MfwHdr *)window)->data, changes); | |
219 } | |
220 | |
221 | |
222 SoftKeysResult softKeysWinSet( MfwWin *window, SoftKeysSetup *changes) | |
223 { | |
224 SoftKeys softKeys = (SoftKeys)userDataWinGet( window, UD_SOFTKEYS); | |
225 | |
226 if( window == NULL || softKeys == NULL || changes == NULL ) | |
227 { | |
228 return SOFTKEYS_FAILURE; | |
229 } | |
230 | |
231 if( changes->leftKeyCallBack != NULL ) | |
232 { | |
233 MfwHnd NewKeyHandler = kbdCreate( NULL, KEY_LEFT, | |
234 changes->leftKeyCallBack); | |
235 | |
236 if( NewKeyHandler == NULL ) | |
237 { | |
238 return SOFTKEYS_FAILURE; | |
239 } | |
240 else | |
241 { | |
242 kbdDelete(softKeys->leftKeyHandler); | |
243 | |
244 softKeys->leftKeyHandler = NewKeyHandler; | |
245 } | |
246 } | |
247 | |
248 if( changes->rightKeyCallBack != NULL ) | |
249 { | |
250 MfwHnd NewKeyHandler = kbdCreate( NULL, KEY_LEFT, | |
251 changes->rightKeyCallBack); | |
252 | |
253 if( NewKeyHandler == NULL ) | |
254 { | |
255 return SOFTKEYS_FAILURE; | |
256 } | |
257 else | |
258 { | |
259 kbdDelete(softKeys->rightKeyHandler); | |
260 | |
261 softKeys->rightKeyHandler = NewKeyHandler; | |
262 } | |
263 } | |
264 | |
265 if( changes->leftKeyLabel != TxtNull ) | |
266 { | |
267 softKeys->leftKeyLabel = changes->leftKeyLabel; | |
268 } | |
269 | |
270 if( changes->rightKeyLabel != TxtNull ) | |
271 { | |
272 softKeys->rightKeyLabel = changes->rightKeyLabel; | |
273 } | |
274 | |
275 return SOFTKEYS_CHANGED; | |
276 } | |
277 | |
278 | |
279 /* | |
280 * You will need to call this whenever <window> is updated. | |
281 */ | |
282 void softKeysHndUpdate(MfwHnd window) | |
283 { | |
284 if( window == NULL ) | |
285 { | |
286 return; | |
287 } | |
288 | |
289 softKeysWinUpdate((MfwWin *)((MfwHdr *)window)->data); | |
290 } | |
291 | |
292 | |
293 void softKeysWinUpdate(MfwWin *window) | |
294 { | |
295 SoftKeys softKeys = (SoftKeys)userDataWinGet( window, UD_SOFTKEYS); | |
296 U8 oldFont = dspl_SelectFontbyID(softKeyFont); | |
297 | |
298 if( window == NULL || softKeys == NULL ) | |
299 { | |
300 return; | |
301 } | |
302 | |
303 PROMPT( LeftMargin,Mmi_layout_line(LAST_LINE_TOP), 0, softKeys->leftKeyLabel); | |
304 | |
305 dspl_SelectFontbyID(oldFont); | |
306 } | |
307 | |
308 | |
309 /* | |
310 * Deletes the softkeys for <window>. | |
311 */ | |
312 void softkeysHndDelete(MfwHnd window) | |
313 { | |
314 if( window == NULL ) | |
315 { | |
316 return; | |
317 } | |
318 | |
319 softkeysWinDelete((MfwWin *)((MfwHdr *)window)->data); | |
320 } | |
321 | |
322 | |
323 void softkeysWinDelete(MfwWin *window) | |
324 { | |
325 SoftKeys softKeys = (SoftKeys)userDataWinDelete( window, UD_SOFTKEYS); | |
326 | |
327 if( window == NULL || softKeys == NULL ) | |
328 { | |
329 return; | |
330 } | |
331 | |
332 kbdDelete(softKeys->leftKeyHandler); | |
333 kbdDelete(softKeys->rightKeyHandler); | |
334 | |
335 FREE_MEMORY( (void *)softKeys, sizeof(SoftKeysData)); | |
336 } | |
337 typedef struct { | |
338 char* str; | |
339 int posX; | |
340 int posY; | |
341 } T_SK_DATA; | |
342 typedef struct { | |
343 T_SK_DATA lsk; | |
344 T_SK_DATA rsk; | |
345 MfwRect* rect; | |
346 } T_SK_DSPL_STRUCT; | |
347 | |
348 /******************************************************************************* | |
349 | |
350 $Function: | |
351 | |
352 $Description: | |
353 | |
354 $Returns: | |
355 | |
356 $Arguments: | |
357 | |
358 $History | |
359 GW 28/11/02 - | |
360 | |
361 *******************************************************************************/ | |
362 static void softKeys_displayAll(T_SK_DSPL_STRUCT* sk_data , int format, unsigned int colIndex ) | |
363 { | |
364 resources_setSKColour(colIndex); | |
365 // #ifdef COLOURDISPLAY | |
366 dspl_Clear( sk_data->rect->px, | |
367 sk_data->rect->py, | |
368 sk_data->rect->px+sk_data->rect->sx-1, | |
369 sk_data->rect->py+sk_data->rect->sy-1); | |
370 /* Line height must be less than rect.sy */ | |
371 // #endif | |
372 if (sk_data->lsk.str!= NULL) | |
373 dspl_TextOut(sk_data->lsk.posX, sk_data->lsk.posY,DSPL_TXTATTR_CURRENT_MODE, sk_data->lsk.str); | |
374 if (sk_data->rsk.str!= NULL) | |
375 dspl_TextOut(sk_data->rsk.posX, sk_data->rsk.posY,DSPL_TXTATTR_CURRENT_MODE, sk_data->rsk.str); | |
376 resources_restoreMnuColour(); | |
377 } | |
378 | |
379 /******************************************************************************* | |
380 | |
381 $Function: | |
382 | |
383 $Description: | |
384 | |
385 $Returns: | |
386 | |
387 $Arguments: | |
388 | |
389 $History | |
390 GW 28/11/02 - | |
391 | |
392 *******************************************************************************/ | |
393 void softKeys_displayStrXY(char* leftSoftKey_str,char* rightSoftKey_str, int format, unsigned int colIndex, MfwRect* rect ) | |
394 { | |
395 MfwRect defRect; | |
396 | |
397 T_SK_DSPL_STRUCT sk_data; | |
398 sk_data.lsk.str = leftSoftKey_str; | |
399 sk_data.rsk.str = rightSoftKey_str; | |
400 if (rect != NULL) | |
401 sk_data.rect = rect; | |
402 else | |
403 { | |
404 Mmi_layout_softkeyArea( &defRect ); | |
405 sk_data.rect = &defRect; | |
406 } | |
407 sk_data.lsk.posY = sk_data.rect->py + (sk_data.rect->sy-Mmi_layout_line_height())/2; | |
408 sk_data.rsk.posY = sk_data.lsk.posY; | |
409 sk_data.lsk.posX = sk_data.rect->px+LeftMargin; | |
410 sk_data.rsk.posX = sk_data.rect->px+sk_data.rect->sx-RightMargin-dspl_GetTextExtent(sk_data.rsk.str, 0); | |
411 | |
412 softKeys_displayAll( &sk_data , format, colIndex); | |
413 } | |
414 /******************************************************************************* | |
415 | |
416 $Function: | |
417 | |
418 $Description: | |
419 | |
420 $Returns: | |
421 | |
422 $Arguments: | |
423 | |
424 $History | |
425 GW 28/11/02 - | |
426 | |
427 *******************************************************************************/ | |
428 void softKeys_displayStr(char* leftSoftKey_str,char* rightSoftKey_str, int format, int unsigned colIndex) | |
429 { | |
430 softKeys_displayStrXY(leftSoftKey_str, rightSoftKey_str,format,colIndex, NULL); | |
431 } | |
432 | |
433 /******************************************************************************* | |
434 | |
435 $Function: | |
436 | |
437 $Description: | |
438 | |
439 $Returns: | |
440 | |
441 $Arguments: | |
442 | |
443 $History | |
444 GW 28/11/02 - | |
445 | |
446 *******************************************************************************/ | |
447 void softKeys_displayId(int leftSoftKey,int rightSoftKey, int format, unsigned int colIndex) | |
448 { | |
449 char *lsk,*rsk; | |
450 lsk = MmiRsrcGetText(leftSoftKey); | |
451 rsk = MmiRsrcGetText(rightSoftKey); | |
452 softKeys_displayStrXY(lsk,rsk,format,colIndex,NULL); | |
453 } | |
454 | |
455 /******************************************************************************* | |
456 | |
457 $Function: | |
458 | |
459 $Description: | |
460 | |
461 $Returns: | |
462 | |
463 $Arguments: | |
464 | |
465 $History | |
466 GW 28/11/02 - | |
467 | |
468 *******************************************************************************/ | |
469 //Old function - replace with calls to 'softKeys_displayId' | |
470 //GW 28/11/02 - Removed commented out code | |
471 void displaySoftKeys(int leftSoftKey,int rightSoftKey) | |
472 { | |
473 char *lsk,*rsk; | |
474 lsk = MmiRsrcGetText(leftSoftKey); | |
475 rsk = MmiRsrcGetText(rightSoftKey); | |
476 softKeys_displayStrXY(lsk,rsk,0, COLOUR_LIST_SUBMENU, NULL); | |
477 } | |
478 | |
479 /******************************************************************************* | |
480 | |
481 $Function: | |
482 | |
483 $Description: | |
484 | |
485 $Returns: | |
486 | |
487 $Arguments: | |
488 | |
489 $History | |
490 GW 28/11/02 - | |
491 | |
492 *******************************************************************************/ | |
493 void displaySoftKeysXY(int leftSoftKey,int rightSoftKey,int lskX,int rskX, int lpos) | |
494 { | |
495 char *lsk,*rsk; | |
496 MfwRect rect; | |
497 | |
498 lsk = MmiRsrcGetText(leftSoftKey); | |
499 rsk = MmiRsrcGetText(rightSoftKey); | |
500 rect.px = lskX; | |
501 rect.py = lpos; | |
502 rect.sx = rskX-lskX; | |
503 rect.sy = Mmi_layout_softkeyHeight(); | |
504 softKeys_displayStrXY(lsk, rsk, 0,COLOUR_LIST_MAIN, &rect); | |
505 | |
506 | |
507 | |
508 } | |
509 | |
510 | |
511 /******************************************************************************* | |
512 | |
513 $Function: displaySoftKeys_edition | |
514 | |
515 $Description: | |
516 | |
517 $Returns: | |
518 | |
519 $Arguments: | |
520 | |
521 $History | |
522 | |
523 *******************************************************************************/ | |
524 void displaySoftKeys_edition(int leftSoftKey,int index, int rightSoftKey) | |
525 { | |
526 char *lsk,*rsk, *ind; | |
527 USHORT lpos; | |
528 | |
529 lsk = MmiRsrcGetText(leftSoftKey); | |
530 ind = MmiRsrcGetText(index); | |
531 rsk = MmiRsrcGetText(rightSoftKey); | |
532 lpos = Mmi_layout_line(SECOND_LAST_LINE_TOP); | |
533 | |
534 dspl_TextOut(LeftMargin,lpos, 0,lsk); | |
535 | |
536 dspl_TextOut( 5 + dspl_GetTextExtent(lsk, (USHORT)strlen(lsk)) ,lpos, 0, ind); | |
537 | |
538 dspl_TextOut((mmiScrX-1)-RightMargin-dspl_GetTextExtent(rsk, (USHORT)strlen(rsk)),lpos ,0, rsk); | |
539 } | |
540 | |
541 | |
542 /******************************************************************************* | |
543 | |
544 $Function: displayCustSoftKeys | |
545 | |
546 $Description: Display softkeys with text strings instead of text ID's | |
547 | |
548 $Returns: None | |
549 | |
550 $Arguments: LeftSoftKey - char array to be displayed at the bottom-left of the display | |
551 or NULL if no string is to be displayed | |
552 RightSoftKey- char array to be displayed at the bottom-right of the display | |
553 or NULL if no string is to be displayed | |
554 | |
555 $History | |
556 GW 28/11/02 - | |
557 | |
558 *******************************************************************************/ | |
559 // SH - 25/5/01 | |
560 // This function provided for WAP, to allow the printing of custom softkeys | |
561 // from strings provided. | |
562 | |
563 void displayCustSoftKeys(char *LeftSoftKey, char *RightSoftKey) | |
564 { | |
565 softKeys_displayStrXY(LeftSoftKey,RightSoftKey,0,COLOUR_LIST_MAIN, NULL); | |
566 } | |
567 | |
568 | |
569 /******************************************************************************* | |
570 | |
571 $Function: displayHelpSymbol | |
572 | |
573 $Description: Displaying '?' to indicate to the user that help is available for a menu | |
574 xrashmic 5 Oct, 2005 MMI-SPR-29356, MMI-SPR-29357 | |
575 | |
576 $Returns: None | |
577 | |
578 $Arguments: None | |
579 *******************************************************************************/ | |
580 void displayHelpSymbol(void) | |
581 { | |
582 MfwRect defRect, rect; | |
583 U16 line_height; | |
584 T_SK_DSPL_STRUCT sk_data; | |
585 Mmi_layout_softkeyArea( &defRect ); | |
586 rect.px = defRect.sx >> 1; | |
587 rect.py = defRect.py + 4; | |
588 resources_setSKColour(COLOUR_LIST_XX); | |
589 //Display the symbol in the center between the softkeys | |
590 dspl_TextOut(rect.px, rect.py, DSPL_TXTATTR_CURRENT_MODE, "?"); | |
591 resources_restoreMnuColour(); | |
592 | |
593 } |