comparison g23m/condat/ms/src/bmi/MmiFileViewer.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 Texas Instruments
4
5 ********************************************************************************
6
7 This software product is the property of Texas Instruments and may not be
8 disclosed to any third party without the express permission of the owner.
9
10 ********************************************************************************
11
12 $Project name: File Viewer
13 $Module: File Viewer
14 $File: MmiFileViewer.c
15 $Revision: 1.0
16 $Author: xdeepadh - sasken India
17 $Date: 11/05/05
18
19 ********************************************************************************
20
21 Description: This module contains the functionality of File Viewer Application.
22
23 ********************************************************************************
24 $History: MmiFileViewer.c
25 Jan 03, 2006 REF: SPR OMAPS00060036 xdeepadh
26 Description:In file viewer, the user is not allowed to retain the old name once he/she goes to the rename file option.
27 Solution:While renaming the file,if the name already exists, display a proper error message
28
29 Aug 31, 2005 REF: SPR 34050 xdeepadh
30 Description: The application hangs if while renaming a saved file a special character such as '?', '!' etc is used
31 Solution: Error message will be displayed when ffs_rename() fails
32
33 Aug 30, 2005 REF:SPR 34049 xdeepadh
34 Description: FileViewer: Not able to delete a file that is too big to display
35 Solution: When the file was too big to display, the file handle was closed.
36
37 Aug 22, 2005 REF: ENH 31154 xdeepadh
38 Description: Application to Test Camera
39 Solution: Implemeted the Fileviewer to view the jpeg images.Camera Application to
40 preview,capture and save image has been implemented.
41
42
43
44 $End
45
46 *******************************************************************************/
47
48 #define ENTITY_MFW
49
50 /* includes */
51
52 #include <string.h>
53 #include <stdio.h>
54 #include <stdlib.h>
55
56
57 #if defined (NEW_FRAME)
58 #include "typedefs.h"
59 #include "Vsi.h"
60 #include "PEI.H"
61 #include "custom.h"
62 #include "gsm.h"
63 #include "prim.h"
64
65 #else
66 #include "stddefs.h"
67 #include "custom.h"
68 #include "gsm.h"
69 #include "Vsi.h"
70
71 #endif
72
73 #include "message.h" /* included for aci_cmh.h .... */
74 #include "aci_cmh.h" /* included for mfw_sat.h, included for MmiDummy.h, included for MmiMenu.h */
75
76 #include "mfw_mfw.h"
77 #include "mfw_win.h"
78 #include "mfw_icn.h" /* included for mfw_mnu.h */
79 #include "mfw_mnu.h"
80 #include "mfw_tim.h"
81 #include "mfw_kbd.h"
82 #include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */
83 #include "mfw_fv.h" //Will be enabled once the IMGIL APIS are provided.
84
85
86 #include "ffs/ffs_api.h"
87
88 #include "MmiBlkLangDB.h"
89 #include "mmiColours.h"
90 #include "MmiDialogs.h"
91 #include "MmiDummy.h" /* included for MmiMenu.h */
92 #include "MmiLists.h"
93 #include "MmiMenu.h"
94 #include "MmiSoftKeys.h"
95 #include "AUIEditor.h"
96 #include "MmiFileViewer.h"
97 #include "MmiMain.h"
98 #include "Mmibookshared.h"
99
100 /*local defines*/
101
102 //Events for windows
103 #define FV_INIT 1
104 #define FV_RETURN 2
105 #define FV_ABORT 3
106 #define FV_EXIT 4
107
108 //Events for editor
109 #define FV_EDITOR_CANCEL 5
110 #define FV_EDITOR_SELECT 6
111 #define FV_EDITOR_ERROR 7 //Aug 31, 2005 REF: SPR 34050 xdeepadh
112
113 //Ids for diffrent functionalities.
114 #define FV_OPT_ID 100
115 #define FV_EDT_ID 101
116 #define FV_DEL_ID 102
117
118 #define FV_INFO_SCRN_TIMEOUT 1500
119 //Aug 31, 2005 REF: SPR 34050 xdeepadh
120 #define FV_FILE_NAME_LENGTH 20
121 #define FV_DIR_PATH_LENGTH (10 + FV_FILE_NAME_LENGTH)
122 #define FV_DIR_NAME "/mmi/jpeg/"
123 #define FV_MAX_NUM_FILES 10
124 #define FV_MAX_JPEG_SIZE (64 * 1024)
125
126
127 //Variable defines
128
129
130 UINT8 qcif_yuv_lum[FV_DSPL_VOLUME]; //decoded and Scaled lum buffer
131 UINT8 qcif_yuv_cb[FV_SCALE_VOLUME]; //decoded and Scaled cb buffer
132 UINT8 qcif_yuv_cr[FV_SCALE_VOLUME]; //decoded and Scaled cr buffer
133
134 UINT8 qcif_rgb_array[ FV_DSPL_VOLUME * 2]; //Color converted buffer to view
135 UINT8 rgb_img_process_array[FV_DSPL_VOLUME * 2]; //Color converted buffer for zoom/rotate
136
137 UINT8 qcif_yuv_process_lum[FV_DSPL_VOLUME ]; //lum buffer for rotate and zoom
138 UINT8 qcif_yuv_process_cb[FV_SCALE_VOLUME]; //cb buffer for rotate and zoom
139 UINT8 qcif_yuv_process_cr[FV_SCALE_VOLUME]; //cr buffer for rotate and zoom
140
141
142 /*menu data structure definition*/
143 typedef struct
144 {
145 T_MMI_CONTROL mmi_control;
146 T_MFW_HND win;
147 T_MFW_HND kbd;
148 T_MFW_HND kbd_long;
149 T_MFW_HND fv_menu;
150 T_MFW_HND fv_option_win;
151 T_MFW_HND parent;
152 ListMenuData fv_list_data;
153 UBYTE fv_file_count;
154 ListCbFunc fv_list_cb;
155 UBYTE fv_list_idx;
156
157 }T_fv_menu;
158
159 typedef struct
160 {
161 /* administrative data */
162 T_MMI_CONTROL mmi_control;
163 T_MFW_HND win;
164 SHORT id;
165 T_MFW_HND parent;
166 /* associated handlers */
167 T_MFW_HND kbd;
168 T_MFW_HND kbd_long;
169 T_MFW_HND menu;
170 T_fv_menu * parent_data;
171 } T_fv_opt;
172
173 /*editor data structure*/
174 typedef struct{
175 T_MMI_CONTROL mmi_control;
176 MfwHnd win;
177 MfwHnd fv_win_editor;
178 UBYTE fv_buffer[FV_FILE_NAME_LENGTH];
179 } T_FV_Editor_Data;
180
181
182 /*default static menu*/
183 static MfwMnuAttr menuFvSearchListAttr =
184 {
185 &menuArea,
186 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
187 -1, /* use default font */
188 NULL, /* with these items (filled in later) */
189 0, /* number of items (filled in leter) */
190 COLOUR_LIST_XX, /* Colour */
191 TxtNull, /* Hdr Id */
192 NULL, /* Background */
193 MNUATTRSPARE /* unused */
194 };
195
196 static const MfwMnuItem Mmi_fv_OPTItems [] =
197 {
198 {0,0,0,(char *)TxtView,0,(MenuFunc)mmi_fv_view_image_start,item_flag_none},
199 {0,0,0,(char *)TxtDelete,0,(MenuFunc)mmi_fv_delete_start,item_flag_none},
200 {0,0,0,(char *)TxtRename,0,(MenuFunc)mmi_fv_reame_edit,item_flag_none}
201
202 };
203
204 static const MfwMnuAttr Mmi_fv_OPTAttrib =
205 {
206 &SmsSend_R_OPTArea,
207 MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */
208 -1, /* use default font */
209 (MfwMnuItem*)Mmi_fv_OPTItems, /* with these items */
210 sizeof(Mmi_fv_OPTItems)/sizeof(MfwMnuItem), /* number of items */
211 COLOUR_LIST_SMS, TxtNull, NULL, MNUATTRSPARE
212
213 };
214
215 //Variable definition
216 T_fv_menu fv_menu_data = {0};
217 //Variable to store the max jpeg file count.
218 int file_count = 0;
219
220 //Array to store the Jpeg filenames.
221 UBYTE jpegFiles[FV_MAX_NUM_FILES][FV_FILE_NAME_LENGTH] = {0};
222
223 //Buffer to store the jpeg image from FFS.
224
225 static UBYTE jpeg_test_array[FV_MAX_JPEG_SIZE] = {0};
226
227 T_MFW_HND fv_optwin;
228
229 UBYTE zoom_flag,rotate_flag = 0; //Flag to identify the rotate and zooming
230
231 //Function prototypes
232
233 static int mmi_fv_list_files_win_cb (MfwEvt e, MfwWin *w);
234 static void mmi_fv_menu_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData);
235 void mmi_fv_list_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
236 static T_MFW_HND mmi_fv_list_files_create(T_MFW_HND parent_window, void* callfun);
237 static T_MFW_HND mmi_fv_test_select_file (T_MFW_HND parent_win);
238 static int mmi_fv_opt_mnu_cb (MfwEvt e, MfwMnu *m);
239 static int mmi_fv_opt_kbd_cb (MfwEvt e, MfwKbd *k);
240 static int mmi_fv_opt_win_cb (MfwEvt e, MfwWin *w);
241 void mmi_fv_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
242 static void mmi_fv_delete_cb (T_MFW_HND win, USHORT Identifier, SHORT reason);
243 static void mmi_rename_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
244 MfwRes mmi_fv_editor_destroy(T_MFW_HND win);
245 void mmi_fv_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
246 T_MFW_HND mmi_fv_editor_create(T_MFW_HND parent);
247 static int mmi_fv_view_kbd_cb (MfwEvt e, MfwKbd *k);
248 static int mmi_fv_view_win_cb (MfwEvt e, MfwWin w);
249 static T_MFW_HND mmi_fv_view_image_create(MfwHnd parent_window);
250 static void mmi_fv_view_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
251 static int mmi_fv_rotate_win_cb (MfwEvt e, MfwWin w);
252 static int mmi_fv_rotate_kbd_cb (MfwEvt e, MfwKbd *k);
253 static void mmi_fv_rotate_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
254 static int mmi_fv_zoom_win_cb (MfwEvt e, MfwWin w);
255 static int mmi_fv_zoom_kbd_cb (MfwEvt e, MfwKbd *k);
256 static void mmi_fv_zoom_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
257 static MfwHnd mmi_fv_test_show_info(T_MFW_HND parent,int lsk, int rsk, int str1, int str2, T_VOID_FUNC callback);
258 static int mmi_fv_item_mnu_cb(MfwMnu * mnu, MfwMnuItem * item);
259 static void mmi_fv_menu_destroy(MfwHnd window);
260 static T_MFW_HND mmi_fv_opt_create(MfwHnd parent_window);
261 GLOBAL int mmi_fv_delete_jpeg_file(UBYTE index);
262 static T_MFW_HND mmi_fv_rotate_image_create(MfwHnd parent_window);
263 int mmi_fv_zoom_image_start(T_MFW_HND parent) ;
264 static T_MFW_HND mmi_fv_zoom_image_create(MfwHnd parent_window);
265
266 /*******************************************************************************
267
268 $Function: mmi_fv_get_file_count
269
270 $Description: returns the count of jpeg files
271
272 $Returns: The file count of the files in JPG folder.
273
274 $Arguments:None
275
276 *******************************************************************************/
277 UBYTE mmi_fv_get_file_count()
278 {
279 return file_count;
280 }
281
282
283 /*******************************************************************************
284
285 $Function: LaunchFileViewer
286
287 $Description: Initiates the creation of the jpeg file list window and post init event
288
289 $Returns: Execution status
290
291 $Arguments: m - pointer to current menu
292 i - pointer to current menu item
293
294 *******************************************************************************/
295 GLOBAL int LaunchFileViewer( MfwMnu *m, MfwMnuItem *i )
296 {
297 T_MFW_HND win;
298 T_MFW_HND parent_win = mfw_parent(mfw_header());
299
300 TRACE_FUNCTION ("LaunchFileViewer()");
301
302 mfw_fv_init();
303 win = mmi_fv_list_files_create(parent_win,(void*)mmi_fv_list_files_exec_cb);
304
305 if (win NEQ NULL)
306 {
307 SEND_EVENT (win, FV_INIT, 0, 0);
308 }
309 return MFW_EVENT_CONSUMED;
310 }
311
312 /*******************************************************************************
313
314 $Function: mmi_fileviewer_list_files_create
315
316 $Description: Creates the window and dialog handler for the window that
317 holds the list window
318
319 $Returns: Window Handler
320
321 $Arguments:parent_window - Parent Window
322 callfun- Callback function
323
324 *******************************************************************************/
325
326 static T_MFW_HND mmi_fv_list_files_create(T_MFW_HND parent_window, void* callfun)
327 {
328 T_fv_menu * data = (T_fv_menu *)mfwAlloc(sizeof (T_fv_menu));
329 T_MFW_WIN * win;
330 TRACE_FUNCTION ("mmi_fileviewer_list_files_create");
331
332 /* Create window handler */
333
334 data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fv_list_files_win_cb);
335 if (data->win EQ NULL)
336 {
337 return NULL;
338 }
339
340 TRACE_EVENT("list holder window created: " );
341 /* connect the dialog data to the MFW-window */
342
343 data->mmi_control.dialog = (T_DIALOG_FUNC)callfun;
344 data->mmi_control.data = data;
345 win = ((T_MFW_HDR *)data->win)->data;
346 win->user = (void *)data;
347 data->parent = parent_window;
348 winShow(data->win);
349 /*
350 * return window handle
351 */
352
353 return data->win;
354 }
355
356 /*******************************************************************************
357
358 $Function: mmi_fv_list_files_exec_cb
359
360 $Description: handler for the window that holds the list window
361
362 $Returns:None
363
364 $Arguments: win : The pointer to the window handler, so the function can reference the
365 dynamic user data, if any.
366 event : The incoming event
367 value : Generic incoming Parameter, it will be 'event' dependant
368 parameter : Generic incoming Parameter, it will be 'event' dependant
369
370 *******************************************************************************/
371 void mmi_fv_list_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
372 {
373 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
374 T_fv_menu * data = (T_fv_menu *)win_data->user;
375
376 TRACE_FUNCTION ("mmi_fv_list_files_exec_cb");
377
378 switch (event)
379 {
380 case FV_INIT:
381 data->fv_menu = mmi_fv_test_select_file(win);
382 if(data->fv_menu == NULL)
383 mmi_fv_menu_destroy((MfwHnd)data->win);
384 break;
385 case FV_RETURN:
386 default:
387 break;
388 }
389 }
390
391 /*******************************************************************************
392
393 $Function: mmi_fv_list_files_win_cb
394
395 $Description: window callback for the window that holds the list window
396
397 $Returns:Status
398
399 $Arguments: e - window handle event
400 w - window
401
402
403 *******************************************************************************/
404 static int mmi_fv_list_files_win_cb (MfwEvt e, MfwWin *w)
405 {
406 TRACE_FUNCTION ("mmi_fv_list_files_win_cb()");
407 switch (e)
408 {
409 case MfwWinVisible: /* window is visible */
410 break;
411 case MfwWinFocussed: /* input focus / selected */
412 case MfwWinDelete: /* window will be deleted */
413
414 default:
415 return MFW_EVENT_REJECTED;
416 }
417 return MFW_EVENT_CONSUMED;
418 }
419
420
421 /*******************************************************************************
422
423 $Function: mmi_fv_test_select_file
424
425 $Description: browse jpeg files and enable to select them
426
427 $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed.
428
429 $Arguments: parent : pointer to the parent window.
430
431
432 *******************************************************************************/
433 static T_MFW_HND mmi_fv_test_select_file (T_MFW_HND parent_win)
434 {
435 int j;
436 T_fv_menu *data;
437 T_MFW_HND win = parent_win;
438 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
439
440
441 TRACE_FUNCTION ("mmi_fv_test_select_file()");
442 //Populate the jpeg files from ffs
443 mmi_fv_init(&file_count);
444
445 data = (T_fv_menu *)win_data->user;
446 if (data->win EQ NULL)
447 {
448 return NULL;
449 }
450 //set count to 0
451 data->fv_file_count = 0;
452
453 //In case no files are present in ffs return info message
454 if(file_count == 0)
455 {
456 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileNotLoaded, TxtNull, NULL);
457 return NULL;
458 }
459 else
460 {
461 /* Create the list menu to display the results */
462 /* initialization of the dialog data */
463 data->fv_list_data.ListPosition = 1;/* True cursor position in list menu. */
464 data->fv_list_data.Font = 0;
465 data->fv_list_data.LeftSoftKey = TxtSoftOptions;
466 data->fv_list_data.RightSoftKey = TxtSoftBack;
467 data->fv_list_data.KeyEvents = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN |KEY_HUP;
468 data->fv_list_data.Reason = 0;
469 data->fv_list_data.Strings = TRUE;
470 data->fv_list_data.autoDestroy = TRUE;
471 data->fv_list_data.Attr = (MfwMnuAttr *)&menuFvSearchListAttr;
472 data->fv_list_data.Attr->hdrId = TxtFileViewer;
473 data->fv_list_data.Attr->nItems = file_count;
474 data->fv_list_cb = (ListCbFunc)mmi_fv_menu_listmnu_cb;
475 data->fv_list_data.ListLength = file_count; /* actual number of entries in list menu. */
476 data->fv_list_data.List = (MfwMnuItem *)mfwAlloc(data->fv_list_data.ListLength * sizeof (MfwMnuItem));
477 if (data->fv_list_data.List != (MfwMnuItem *)0)
478 {
479 MfwMnuItem *listItem;
480
481 /* Initialise the memory to 0x00 */
482 memset(data->fv_list_data.List, 0x00, data->fv_list_data.ListLength * sizeof (MfwMnuItem));
483
484 for (j = 0; j <data->fv_list_data.ListLength; j++)
485 {
486 listItem = &data->fv_list_data.List[j];
487 listItem->str = (char*)jpegFiles[data->fv_file_count++];
488 listItem->func = (MenuFunc)mmi_fv_item_mnu_cb;
489 listItem->flagFunc = (FlagFunc)item_flag_none;
490 }
491
492 /* Recreate the menu with the new details */
493 if (listDisplayListMenu(data->win, &data->fv_list_data, data->fv_list_cb, FALSE) != LISTS_FAIL)
494 return data->fv_list_data.win;
495
496 }
497 return data->win;
498 }
499
500 }
501
502 /*******************************************************************************
503
504 $Function: mmi_fv_test_show_info
505
506 $Description: This function displays a information screen with the textId's
507
508 $Returns: Dialog Window
509
510 $Arguments:parent- parent win
511 lsk- Left Softkey
512 rsk-Right Softkey
513 str1-String
514 str2-String
515 callback- Callback function
516
517 *******************************************************************************/
518 static MfwHnd mmi_fv_test_show_info(T_MFW_HND parent,int lsk, int rsk, int str1, int str2, T_VOID_FUNC callback)
519 {
520 T_DISPLAY_DATA display_info;
521
522 TRACE_FUNCTION ("mmi_fv_test_show_info()");
523
524 /*
525 ** Create a timed dialog to display the Message
526 */
527 dlg_initDisplayData_TextId( &display_info, lsk, rsk, str1, str2, COLOUR_STATUS);
528 dlg_initDisplayData_events( &display_info, callback, FV_INFO_SCRN_TIMEOUT, KEY_LEFT | KEY_CLEAR | KEY_HUP);
529
530 return info_dialog(parent, &display_info);
531 }
532
533 /*******************************************************************************
534
535 $Function: mmi_fv_init
536
537 $Description: Function retrieves the files present under the /JPG directory
538
539 $Returns: None
540
541 $Arguments: Filecount- count of files in FFS.
542
543 *******************************************************************************/
544 void mmi_fv_init(int* fileCount)
545 {
546
547 T_FFS_FD fd = 0;
548 char dir_name_p[] = FV_DIR_NAME;
549 T_FFS_DIR dir = {0};
550 char dest_name_p[FV_FILE_NAME_LENGTH] = "";
551 int i, max_files_count = 0;
552 char *fileExt;
553
554 TRACE_FUNCTION("mmi_fv_init()");
555
556 i = strlen(dir_name_p);
557 dir_name_p[i-1] = '\0';
558
559 TRACE_EVENT_P1("the dir name = %s",dir_name_p);
560
561 if ((max_files_count = ffs_opendir (dir_name_p, &dir)) <= 0)
562 {
563 return;
564 }
565
566 //Display only 10 files
567 if(max_files_count > FV_MAX_NUM_FILES)
568 max_files_count = FV_MAX_NUM_FILES;
569
570 *fileCount = max_files_count;
571 TRACE_EVENT_P1("Number of files = %d",*fileCount);
572
573 //read maximum of 10 file names
574 for (i = 0; (ffs_readdir (&dir, dest_name_p, 100) > 0x0) && (i<max_files_count); i++)
575 {
576 if(i >= FV_MAX_NUM_FILES)
577 break;
578
579 //retrieve file extension
580 fileExt = mmi_fv_GetExtension(dest_name_p);
581 //Store only jpeg file names in array
582 if ( (strcmp(fileExt, "jpg") == 0))
583 {
584 strcpy ((char*)jpegFiles[i], dest_name_p);
585 }
586 memset(dest_name_p,0,FV_FILE_NAME_LENGTH);
587 }
588
589 TRACE_EVENT_P1("Number of files after read = %d",*fileCount);
590 }
591
592 /*******************************************************************************
593
594 $Function: mmi_fv_item_mnu_cb
595
596 $Description: save index of currently selected file
597
598 $Returns:
599
600 $Arguments: m - pointer to current menu
601 i - pointer to current menu item
602
603 *******************************************************************************/
604 static int mmi_fv_item_mnu_cb(MfwMnu * mnu, MfwMnuItem * item)
605 {
606 T_MFW_HND win = mfw_parent(mfw_header());
607 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
608 T_fv_menu *data = (T_fv_menu *)win_data->user;
609
610 TRACE_FUNCTION ("mmi_fv_item_mnu_cb()");
611 if (data EQ NULL)
612 {
613 return NULL;
614 }
615 data->fv_list_idx = fv_menu_data.fv_list_idx = mnu->lCursor[mnu->level];
616 data->fv_option_win = mmi_fv_opt_start(data->win,(MfwMnuAttr*)&Mmi_fv_OPTAttrib);
617 return MFW_EVENT_CONSUMED;
618 }
619
620
621 /*******************************************************************************
622
623 $Function: mmi_fv_menu_listmnu_cb
624
625 $Description: destroy lists and menu in case of back softkey or menu exit
626
627 $Returns:None
628
629 $Arguments:parent-
630 Listadata-
631
632 *******************************************************************************/
633 static void mmi_fv_menu_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData)
634 {
635 T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data;
636 T_fv_menu *data = (T_fv_menu *)win_data->user;
637
638 TRACE_FUNCTION ("mmi_fv_menu_listmnu_cb()");
639
640 if ((ListData->Reason EQ LISTS_REASON_BACK) ||
641 (ListData->Reason EQ LISTS_REASON_CLEAR) ||
642 (ListData->Reason EQ LISTS_REASON_HANGUP))
643 {
644
645 /* Free the memory set aside for ALL the devices to be listed.*/
646 mfwFree((U8 *)data->fv_list_data.List, (U16)(ListData->ListLength* sizeof(MfwMnuItem)));
647 listsDestroy(ListData->win);
648 data->fv_list_data.List = NULL;
649 mmi_fv_menu_destroy((MfwHnd)data->win);
650 }
651
652 return;
653 }
654
655 /*******************************************************************************
656
657 $Function: mmi_fv_menu_destroy
658
659 $Description: destroy menu window
660
661 $Returns:None
662
663 $Arguments: window : pointer to the parent window.
664
665 *******************************************************************************/
666 static void mmi_fv_menu_destroy(MfwHnd window)
667 {
668 T_MFW_WIN * win_data = ((T_MFW_HDR *)window)->data;
669 T_fv_menu * data = (T_fv_menu *)win_data->user;
670
671 TRACE_FUNCTION ("mmi_fv_menu_destroy()");
672
673 if (window == NULL)
674 {
675 return;
676 }
677
678 if (data)
679 {
680 win_delete(data->win);
681 /* Free Memory */
682 mfwFree((void *)data, sizeof (T_fv_menu));
683 }
684 }
685
686
687 /*******************************************************************************
688
689 $Function: mmi_fv_set_rotate_90degree
690
691 $Description: Rotates the selected image by 90 degree.
692 $Returns: Status
693
694 $Arguments:m - pointer to current menu
695 i - pointer to current menu item
696
697 *******************************************************************************/
698 GLOBAL int mmi_fv_set_rotate_90degree (MfwMnu* m, MfwMnuItem* i)
699 {
700 T_MFW_HND win = mfwParent(mfw_header());
701 TRACE_FUNCTION ("mmi_fv_set_rotate_90degree()");
702 rotate_flag = FV_ROTATE_90;
703 mmi_fv_rotate_image_start(win);
704 return MFW_EVENT_CONSUMED;
705 }
706
707 /*******************************************************************************
708
709 $Function: mmi_fv_set_rotate_180degree
710
711 $Description: Rotates the selected image by 180 degree.
712 $Returns: Status
713
714 $Arguments:m - pointer to current menu
715 i - pointer to current menu item
716
717 *******************************************************************************/
718 GLOBAL int mmi_fv_set_rotate_180degree (MfwMnu* m, MfwMnuItem* i)
719 {
720 T_MFW_HND win = mfwParent(mfw_header());
721 TRACE_FUNCTION ("mmi_fv_set_rotate_180degree()");
722 rotate_flag = FV_ROTATE_180;
723 mmi_fv_rotate_image_start(win);
724 return MFW_EVENT_CONSUMED;
725 }
726
727
728 /*******************************************************************************
729
730 $Function: mmi_fv_set_rotate_270degree
731
732 $Description: Rotates the selected image anti-clockwise.
733 $Returns:
734
735 $Arguments: m - pointer to current menu
736 i - pointer to current menu item
737
738 *******************************************************************************/
739 GLOBAL int mmi_fv_set_rotate_270degree (MfwMnu* m, MfwMnuItem* i)
740 {
741 T_MFW_HND win = mfwParent(mfw_header());
742 TRACE_FUNCTION ("mmi_fv_set_rotate_270degree()");
743 rotate_flag = FV_ROTATE_270;
744 mmi_fv_rotate_image_start(win);
745 return MFW_EVENT_CONSUMED;
746 }
747
748 /*******************************************************************************
749
750 $Function: mmi_fv_set_zoom_out
751
752 $Description: Zooms out the selected image
753 $Returns:
754
755 $Arguments: m - pointer to current menu
756 i - pointer to current menu item
757
758 *******************************************************************************/
759 GLOBAL int mmi_fv_set_zoom_out (MfwMnu* m, MfwMnuItem* i)
760 {
761 T_MFW_HND win = mfwParent(mfw_header());
762 TRACE_FUNCTION ("mmi_fv_set_zoom_out()");
763 zoom_flag = FV_ZOOM_OUT;
764 mmi_fv_zoom_image_start(win);
765 return MFW_EVENT_CONSUMED;
766 }
767
768 /*******************************************************************************
769
770 $Function: mmi_fv_set_zoom_in
771
772 $Description: Zooms in the selected image
773 $Returns:
774
775 $Arguments: m - pointer to current menu
776 i - pointer to current menu item
777
778 *******************************************************************************/
779 GLOBAL int mmi_fv_set_zoom_in (MfwMnu* m, MfwMnuItem* i)
780 {
781 T_MFW_HND win = mfwParent(mfw_header());
782 TRACE_FUNCTION ("mmi_fv_set_zoom_in()");
783 zoom_flag = FV_ZOOM_IN;
784 mmi_fv_zoom_image_start(win);
785 return MFW_EVENT_CONSUMED;
786 }
787
788 /*******************************************************************************
789
790 $Function: mmi_fv_view_image_start
791
792 $Description: Create editor for viewing the image.
793
794 $Returns: none
795
796 $Arguments: m - menu handler
797 i - menu item selected.
798 *******************************************************************************/
799
800
801 int mmi_fv_view_image_start(MfwMnu* m, MfwMnuItem* i)
802 {
803 T_MFW_HND win;
804 T_MFW_HND parent_win = mfw_parent(mfw_header());
805 win = mmi_fv_view_image_create(parent_win);
806 TRACE_FUNCTION ("mmi_fv_view_image_start");
807 SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
808 return MFW_EVENT_CONSUMED;
809
810 }
811
812
813 /*******************************************************************************
814
815 $Function: mmi_fv_view_image_create
816
817 $Description: Create a window for viewing the image.
818
819 $Returns: window handle
820
821 $Arguments: parent_window - parent window.
822
823 *******************************************************************************/
824
825 static T_MFW_HND mmi_fv_view_image_create(MfwHnd parent_window)
826 {
827 T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
828 T_MFW_WIN * win;
829
830 TRACE_FUNCTION ("mmi_fv_view_image_create()");
831
832 // Create window handler
833 data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_view_win_cb);
834 if (data->win EQ NULL)
835 {
836 return NULL;
837 }
838
839 // connect the dialog data to the MFW-window
840 data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_view_exec_cb;
841 data->mmi_control.data = data;
842 win = ((T_MFW_HDR *)data->win)->data;
843 win->user = (MfwUserDataPtr)data;
844 data->parent = parent_window;
845 //Create keyboard handler
846 data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_view_kbd_cb);
847
848 return data->win;
849 }
850
851
852 /*******************************************************************************
853
854 $Function: mmi_fv_view_exec_cb
855
856 $Description: Callback handler for events sent by the images editor
857
858 $Returns: none
859
860 $Arguments: win - current window
861 event - event id
862 parameter - optional data.
863 *******************************************************************************/
864
865 static void mmi_fv_view_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
866 {
867 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
868 T_fv_opt * data = (T_fv_opt *)win_data->user;
869 int status;
870
871 TRACE_FUNCTION ("mmi_fv_view_exec_cb()");
872
873 switch (event)
874 {
875 case FV_INIT:
876 TRACE_EVENT("init");
877 status = mmi_fv_read_jpeg_file(fv_menu_data.fv_list_idx);
878
879 //Display the decoded jpeg image in QCIF-RGB565 format on LCD.
880 if(status == 1)
881 winShow(data->win);
882 else
883 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileTooBig, TxtNull, NULL);
884 break;
885
886 case FV_RETURN:
887 break;
888 default:
889 TRACE_EVENT("Err: Default");
890 return;
891 }
892 }
893
894
895 /*******************************************************************************
896
897 $Function: mmi_fv_opt_start
898
899 $Description: called when the user press the Option menu
900
901 $Returns: execution status
902
903 $Arguments: parent_window -parent window handle
904 menuAttr - Menu attributes.
905
906 *******************************************************************************/
907
908 T_MFW_HND mmi_fv_opt_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
909 {
910 T_MFW_HND win;
911
912 TRACE_FUNCTION ("mmi_fv_opt_start()");
913
914 fv_optwin = (T_MFW_HND)mmi_fv_opt_create ((MfwHnd)parent_window);
915
916 if (fv_optwin NEQ NULL)
917 {
918 SEND_EVENT (fv_optwin, FV_INIT, NULL, (void *)menuAttr);
919 }
920 return fv_optwin;
921 }
922
923 /*******************************************************************************
924
925 $Function: mmi_fv_opt_create
926
927 $Description: Create the Option window
928
929 $Returns: mfw window handle
930
931 $Arguments: parent_window -parent window handle
932
933 *******************************************************************************/
934
935 static T_MFW_HND mmi_fv_opt_create(MfwHnd parent_window)
936 {
937 T_fv_opt * data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
938 T_MFW_WIN * win;
939
940 TRACE_FUNCTION ("mmi_fv_opt_create()");
941
942 /*
943 * Create window handler
944 */
945
946 data->win =
947 win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fv_opt_win_cb);
948 if (data->win EQ NULL)
949 {
950 return NULL;
951 }
952 /*
953 * connect the dialog data to the MFW-window
954 */
955
956 data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_opt_exec_cb;
957 data->mmi_control.data = data;
958 win = ((T_MFW_HDR *)data->win)->data;
959 win->user = (void *)data;
960 data->parent = parent_window;
961
962 /*
963 * return window handle
964 */
965
966 return data->win;
967 }
968
969 /*******************************************************************************
970
971 $Function: mmi_fv_opt_destroy
972
973 $Description: Destroy the Option window
974
975 $Returns: mfw window handle
976
977 $Arguments: own_window - current window
978
979 *******************************************************************************/
980
981 static void mmi_fv_opt_destroy(MfwHnd own_window)
982 {
983 T_MFW_WIN * win_data;
984 T_fv_opt * data;
985
986 TRACE_FUNCTION ("mmi_fv_opt_destroy()");
987
988 if (own_window)
989 {
990 win_data = ((T_MFW_HDR *)own_window)->data;
991 data = (T_fv_opt *)win_data->user;
992
993 if (data)
994 {
995 /*
996 * Delete WIN handler
997 */
998
999 if (data->kbd)
1000 {
1001 kbd_delete(data->kbd);
1002 data->kbd = NULL;
1003 }
1004 if (data->kbd_long)
1005 {
1006 kbd_delete(data->kbd_long);
1007 data->kbd_long = NULL;
1008 }
1009 if (data->menu)
1010 {
1011 mnuDelete(data->menu);
1012 data->menu=NULL;
1013 }
1014
1015 win_delete (data->win);
1016
1017 /*
1018 * Free Memory
1019 */
1020 FREE_MEMORY ((void *)data, sizeof (T_fv_opt));
1021 }
1022 else
1023 {
1024 TRACE_EVENT ("mmi_fv_opt_destroy() called twice");
1025 }
1026 }
1027 }
1028
1029
1030 /*******************************************************************************
1031
1032 $Function: mmi_fv_opt_win_cb
1033
1034 $Description: Window callback function for the Option window
1035
1036 $Returns: execution status
1037
1038 $Arguments: e - event id
1039 w - window handle
1040 *******************************************************************************/
1041
1042 static int mmi_fv_opt_win_cb (MfwEvt e, MfwWin *w)
1043 {
1044 TRACE_FUNCTION ("mmi_fv_opt_win_cb()");
1045
1046 switch (e)
1047 {
1048 case MfwWinVisible: /* window is visible */
1049 dspl_ClearAll();
1050 displaySoftKeys(TxtSoftSelect,TxtSoftBack);
1051 break;
1052 case MfwWinFocussed: /* input focus / selected */
1053 case MfwWinDelete: /* window will be deleted */
1054 default:
1055 return MFW_EVENT_REJECTED;
1056 }
1057 return MFW_EVENT_CONSUMED;
1058 }
1059
1060
1061 /*******************************************************************************
1062
1063 $Function: mmi_fv_view_win_cb
1064
1065 $Description: Window callback function for the Option window
1066
1067 $Returns: execution status
1068
1069 $Arguments: e - event id
1070 w - window handle
1071 *******************************************************************************/
1072
1073 static int mmi_fv_view_win_cb (MfwEvt e, MfwWin w)
1074 {
1075 TRACE_FUNCTION ("mmi_fv_view_win_cb()");
1076
1077 switch (e)
1078 {
1079 case MfwWinVisible: /* window is visible */
1080 dspl_ClearAll();
1081 displaySoftKeys(TxtSoftOptions,TxtSoftBack);
1082 //Display the image now.
1083 mmi_fv_display_image();
1084 break;
1085 case MfwWinFocussed: /* input focus / selected */
1086 case MfwWinDelete: /* window will be deleted */
1087 default:
1088 return MFW_EVENT_REJECTED;
1089 }
1090 return MFW_EVENT_CONSUMED;
1091 }
1092 /*******************************************************************************
1093
1094 $Function: mmi_fv_opt_exec_cb
1095
1096 $Description: Exec callback function for the Option window
1097
1098 $Returns: none
1099
1100 $Arguments: win - current window
1101 event - event id
1102 value - unique id
1103 parameter - optional data.
1104
1105 *******************************************************************************/
1106
1107 void mmi_fv_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
1108 {
1109 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1110 T_fv_opt * data = (T_fv_opt *)win_data->user;
1111 T_MFW_HDR * parent = data->parent;
1112 T_MFW_WIN * win_data2 = ((T_MFW_HDR *)parent)->data;
1113 T_fv_menu* parent_data = (T_fv_menu *)win_data2->user;
1114
1115
1116 TRACE_FUNCTION ("mmi_fv_opt_exec_cb()");
1117
1118
1119 switch (event)
1120 {
1121 case FV_INIT:
1122
1123 TRACE_EVENT("mmi_fv_opt_exec_cb() Event:5.FV_INIT");
1124 /* initialization of administrative data */
1125 data->parent_data = parent_data;
1126 data->id = value;
1127 data->kbd = kbdCreate(data->win,KEY_ALL, (MfwCb)mmi_fv_opt_kbd_cb);
1128 data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)mmi_fv_opt_kbd_cb);
1129 data->menu = mnuCreate(data->win,(MfwMnuAttr*)parameter, E_MNU_ESCAPE, (MfwCb)mmi_fv_opt_mnu_cb);
1130 mnuLang(data->menu,mainMmiLng);
1131 /* put the (new) dialog window on top of the window stack */
1132 mnuUnhide(data->menu);
1133 winShow(win);
1134 break;
1135 default:
1136 return;
1137 }
1138 }
1139
1140 /*******************************************************************************
1141
1142 $Function: mmi_fv_opt_kbd_cb
1143
1144 $Description: Exec callback function for the Option window
1145
1146 $Returns: execution status
1147
1148 $Arguments: e - event id
1149 k - keyboard info
1150 *******************************************************************************/
1151
1152 static int mmi_fv_opt_kbd_cb (MfwEvt e, MfwKbd *k)
1153 {
1154 T_MFW_HND win = mfwParent(mfw_header());
1155 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1156 T_fv_opt * data = (T_fv_opt *)win_data->user;
1157
1158 TRACE_FUNCTION ("mmi_fv_opt_kbd_cb()");
1159
1160 if (e & KEY_LONG)
1161 {
1162 switch (k->code)
1163 {
1164 case KCD_HUP: /* back to previous menu */
1165 mnuEscape(data->menu);
1166 break;
1167 case KCD_RIGHT: /* Power Down */
1168 return MFW_EVENT_REJECTED; /* handled by idle */
1169 default: /* no response to all other keys */
1170 return MFW_EVENT_CONSUMED;
1171 }
1172 }
1173 else
1174 {
1175 switch (k->code)
1176 {
1177 case KCD_MNUUP: /* highlight previous entry */
1178 mnuUp(data->menu);
1179 break;
1180 case KCD_MNUDOWN: /* highlight next entry */
1181 mnuDown(data->menu);
1182 break;
1183 case KCD_MNUSELECT:
1184 case KCD_LEFT: /* activate this entry */
1185 mnuSelect(data->menu);
1186 break;
1187 case KCD_HUP: /* back to previous menu */
1188 case KCD_RIGHT: /* back to previous menu */
1189 mnuEscape(data->menu);
1190 break;
1191 default: /* no response to all other keys */
1192 return MFW_EVENT_CONSUMED;
1193 }
1194 }
1195 return MFW_EVENT_CONSUMED;
1196 }
1197
1198 /*******************************************************************************
1199
1200 $Function: mmi_fv_view_kbd_cb
1201
1202 $Description: Exec callback function for the view window
1203
1204 $Returns: execution status
1205
1206 $Arguments: e - event id
1207 k - keyboard info
1208 *******************************************************************************/
1209
1210 static int mmi_fv_view_kbd_cb (MfwEvt e, MfwKbd *k)
1211 {
1212 T_MFW_HND win = mfwParent(mfw_header());
1213 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1214 T_fv_opt * data = (T_fv_opt *)win_data->user;
1215
1216 TRACE_FUNCTION ("mmi_fv_view_kbd_cb()");
1217
1218 switch (k->code)
1219 {
1220 case KCD_LEFT:
1221 TRACE_EVENT("mmi_fv_view_kbd_cb,INFO_KCD_LEFT ");
1222 bookMenuStart(data->win, ViewOptionsMenuAttributes(),0);
1223 break;
1224
1225 case KCD_RIGHT:
1226 case KCD_HUP:
1227 TRACE_EVENT("mmi_fv_view_kbd_cb,INFO_KCD_RIGHT ");
1228 mmi_fv_opt_destroy(data->win);
1229 break;
1230 default:
1231
1232 break;
1233
1234 }
1235 return MFW_EVENT_CONSUMED;
1236 }
1237
1238 /*******************************************************************************
1239
1240 $Function: mmi_fv_opt_mnu_cb
1241
1242 $Description: Menu callback function for the Option window
1243
1244 $Returns: none
1245
1246 $Arguments: e - event id
1247 m - menu handle
1248 *******************************************************************************/
1249
1250 static int mmi_fv_opt_mnu_cb (MfwEvt e, MfwMnu *m)
1251
1252 {
1253 T_MFW_HND win = mfwParent(mfw_header());
1254 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1255 T_fv_opt * data = (T_fv_opt *)win_data->user;
1256
1257 TRACE_FUNCTION ("mmi_fv_opt_mnu_cb()");
1258
1259 switch (e)
1260 {
1261 case E_MNU_ESCAPE: /* back to previous menu */
1262 mmi_fv_opt_destroy(data->win);
1263 break;
1264 default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
1265 return MFW_EVENT_REJECTED;
1266 }
1267 return MFW_EVENT_CONSUMED;
1268 }
1269
1270 /*******************************************************************************
1271
1272 $Function: mmi_fv_rotate_start
1273
1274 $Description: This function creates and displays the Roate menu .
1275
1276 $Returns: Execution status
1277
1278 $Arguments: m - menu handler
1279 i - Menu item selected
1280
1281 *******************************************************************************/
1282
1283 int mmi_fv_rotate_start(MfwMnu* m, MfwMnuItem* i)
1284 {
1285
1286 T_MFW_HND win = mfwParent(mfw_header());
1287 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1288 T_fv_opt * data = (T_fv_opt *)win_data->user;
1289 TRACE_FUNCTION("mmi_fv_rotate_start");
1290 if (data->win EQ NULL)
1291 {
1292 return NULL;
1293 }
1294
1295 /* Create the Rotate menu*/
1296 bookMenuStart(data->win, rotateMenuAttributes(),0);
1297
1298 return MFW_EVENT_CONSUMED;
1299 }
1300
1301 /*******************************************************************************
1302
1303 $Function: mmi_fv_zoom_start
1304
1305 $Description: This function creates and displays the Zoom menu .
1306
1307 $Returns: Execution status
1308
1309 $Arguments: m - menu handler
1310 i - Menu item selected
1311
1312 *******************************************************************************/
1313
1314 int mmi_fv_zoom_start(MfwMnu* m, MfwMnuItem* i)
1315 {
1316
1317 T_MFW_HND win = mfwParent(mfw_header());
1318 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
1319 T_fv_opt * data = (T_fv_opt *)win_data->user;
1320 TRACE_FUNCTION("mmi_fv_zoom_start");
1321 if (data->win EQ NULL)
1322 {
1323 return NULL;
1324 }
1325
1326 /* Create the Zoom menu*/
1327 bookMenuStart(data->win, zoomMenuAttributes(),0);
1328
1329 return MFW_EVENT_CONSUMED;
1330 }
1331
1332 /*******************************************************************************
1333
1334 $Function: mmi_fv_GetExtension
1335
1336 $Description: public function to retrieve the extension of a file
1337
1338 $Returns:Extention of the filename
1339
1340 $Arguments: scr- Filename
1341
1342 *******************************************************************************/
1343 char *mmi_fv_GetExtension(char *src)
1344 {
1345 int i;
1346 TRACE_FUNCTION("mmi_fv_GetExtension");
1347 for(i = 0; i < strlen(src); i++){
1348 if(src[i] == '.'){
1349 return (src+i+1);
1350 }
1351 }
1352 return (src+i);
1353 }
1354
1355
1356 /*******************************************************************************
1357
1358 $Function: mmi_fv_delete_start
1359
1360 $Description: This function is called when the user press Delete .
1361
1362 $Returns: Execution status
1363
1364 $Arguments: m - menu handler
1365 i - Menu item selected
1366
1367 *******************************************************************************/
1368 int mmi_fv_delete_start(MfwMnu* m, MfwMnuItem* i)
1369 {
1370 T_MFW_HND win = mfwParent(mfw_header());
1371 T_DISPLAY_DATA display_info;
1372
1373 TRACE_FUNCTION("mmi_fv_delete_start");
1374 //Check whether files are present
1375 if ( mmi_fv_get_file_count() == 0)
1376 {
1377 /*tell user*/
1378 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtEmptyList, TxtNull, NULL);
1379 }
1380 else
1381 {
1382 TRACE_EVENT("files are present");
1383 TRACE_EVENT_P1("delete_index is %d",fv_menu_data.fv_list_idx);
1384 TRACE_EVENT_P1("The selected file = %s",jpegFiles[fv_menu_data.fv_list_idx]);
1385 dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtDeleteConfirm, TxtNull, COLOUR_STATUS);
1386 dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)mmi_fv_delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP);
1387 info_dialog (win, &display_info);
1388
1389 }
1390 return MFW_EVENT_CONSUMED;
1391
1392 }
1393
1394
1395 /*******************************************************************************
1396
1397 $Function: mmi_fv_delete_cb
1398
1399 $Description: Exec callback function for the delete window
1400
1401
1402 $Returns: none
1403
1404 $Arguments: win - current win
1405 Identifier-
1406 reason-
1407
1408 *******************************************************************************/
1409 static void mmi_fv_delete_cb (T_MFW_HND win, USHORT Identifier, SHORT reason)
1410 {
1411 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1412 T_fv_opt * data = (T_fv_opt *)win_data->user;
1413 int status;
1414
1415 TRACE_FUNCTION ("mmi_fv_delete_cb()");
1416
1417 switch (reason)
1418 {
1419 case INFO_KCD_LEFT:
1420 TRACE_EVENT("file has been left");
1421
1422 //Delete the selected file from FFS.
1423 status=mmi_fv_delete_jpeg_file((UBYTE)fv_menu_data.fv_list_idx);
1424 if(status>0)
1425 {
1426 mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtDeleted, TxtNull, NULL);
1427 }
1428 SEND_EVENT(data->parent, FV_INIT, Identifier, NULL);
1429 break;
1430 case INFO_KCD_RIGHT:
1431 case INFO_KCD_HUP:
1432 TRACE_EVENT("file has been back");
1433 break;
1434 default:
1435 break;
1436 }
1437 mmi_fv_opt_destroy(fv_optwin);
1438 }
1439
1440 /*******************************************************************************
1441
1442 $Function: mmi_fv_read_jpeg_file
1443
1444 $Description: reads the contents of the file into the buffer .
1445 $Returns: Status
1446
1447 $Arguments:index: Index of the file to be read from FFS.
1448
1449 *******************************************************************************/
1450 GLOBAL int mmi_fv_read_jpeg_file(UBYTE index)
1451 {
1452 T_FFS_FD file_handle = 0;
1453 SHORT readStatus = 1;
1454 //Aug 31, 2005 REF: SPR 34050 xdeepadh
1455 //The filename will have the full path details
1456 char file_name[FV_DIR_PATH_LENGTH];
1457
1458
1459 TRACE_FUNCTION ("mmi_fv_read_jpeg_file()");
1460
1461 strcpy((char*)file_name,FV_DIR_NAME);
1462 strcat((char*)file_name, (const char*)jpegFiles[index]);
1463
1464 TRACE_EVENT_P1("The selected file = %s",jpegFiles[index]);
1465
1466 file_handle = ffs_open(file_name,FFS_O_RDONLY);
1467 if(file_handle <0)
1468 {
1469 readStatus = -1;
1470 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileNotLoaded, TxtNull, NULL);
1471 }
1472 else
1473 {
1474 UINT16 Ffs_stat;
1475 struct stat_s stat;
1476 Ffs_stat = ffs_stat(file_name,&stat);
1477
1478 TRACE_EVENT_P1("read jpg size: %d", stat.size);
1479 if (Ffs_stat != 0)
1480 TRACE_EVENT_P1("read jpg size: %d", stat.size);
1481 if(stat.size >= FV_MAX_JPEG_SIZE )
1482 {
1483 TRACE_EVENT_P1("File zise too big: %d", stat.size);
1484 readStatus = -1;
1485 //Aug 30, 2005 REF:SPR 34049 xdeepadh
1486 //Close the file handle
1487 ffs_close(file_handle);
1488 return readStatus;
1489 }
1490 memset(jpeg_test_array,0,FV_MAX_JPEG_SIZE);
1491 Ffs_stat = ffs_read(file_handle, (UBYTE *)jpeg_test_array, stat.size);
1492 TRACE_EVENT_P1("read jpg file size: %d", Ffs_stat);
1493 ffs_close(file_handle);
1494 }
1495 return readStatus;
1496 }
1497
1498 /*******************************************************************************
1499
1500 $Function: mmi_fv_delete_jpeg_file
1501
1502 $Description: delete the selected file from FFS.
1503 $Returns:Status
1504
1505 $Arguments: index: Index of the file to be read from FFS.
1506
1507 *******************************************************************************/
1508 GLOBAL int mmi_fv_delete_jpeg_file(UBYTE index)
1509 {
1510 //Aug 31, 2005 REF: SPR 34050 xdeepadh
1511 //The filename will have the full path details
1512 char file_name[FV_DIR_PATH_LENGTH];
1513 T_FFS_RET status;
1514
1515 TRACE_FUNCTION ("mmi_fv_delete_jpeg_file()");
1516
1517 strcpy((char*)file_name,FV_DIR_NAME);
1518 strcat((char*)file_name, (const char*)jpegFiles[index]);
1519
1520 TRACE_EVENT_P1("The selected file = %s",jpegFiles[index]);
1521 TRACE_EVENT_P1("The deleted file = %s",file_name);
1522
1523 status = ffs_remove(file_name);
1524 if (status == EFFS_OK)
1525 {
1526 //Populate the list again
1527 file_count = 0;
1528 mmi_fv_init(&file_count);
1529 }
1530 return status;
1531 }
1532
1533
1534
1535 /*******************************************************************************
1536
1537 $Function: mmi_fv_display_image
1538
1539 $Description: The decoded and color converted image is displayed onto the screen.
1540
1541 $Returns:Status
1542
1543 $Arguments:None
1544
1545 *******************************************************************************/
1546
1547 GLOBAL int mmi_fv_display_image()
1548 {
1549 UBYTE status = 0;
1550 TRACE_FUNCTION("mmi_fv_display_image()");
1551
1552 status = mfw_fv_decode_image(jpeg_test_array,sizeof(jpeg_test_array));
1553 if(status)
1554 {
1555 TRACE_FUNCTION("mmi_fv_display_image()--OK");
1556 //return MFW_EVENT_CONSUMED;
1557 }
1558 else
1559 {
1560 TRACE_FUNCTION("mmi_fv_display_image()--Fail");
1561 //return MFW_EVENT_REJECTED;
1562 }
1563
1564 return MFW_EVENT_CONSUMED;
1565
1566 }
1567
1568 /*******************************************************************************
1569
1570 $Function: mmi_fv_reame_edit
1571
1572 $Description: This function is called when the user press rename .
1573
1574 $Returns: Execution status
1575
1576 $Arguments: m - menu handler
1577 i - Menu item selected
1578
1579 *******************************************************************************/
1580 GLOBAL int mmi_fv_reame_edit(MfwMnu* m, MfwMnuItem* i)
1581 {
1582 T_MFW_HND win = mfw_parent(mfw_header());
1583 //T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1584 T_MFW_HND win_temp;
1585 //T_FV_Editor_Data * data = (T_FV_Editor_Data *)(win_data->user);
1586
1587 TRACE_FUNCTION ("mmi_fv_reame_edit()");
1588
1589 win_temp = mmi_fv_editor_create(win);
1590
1591 if (win_temp != NULL)
1592 {
1593 SEND_EVENT(win_temp, FV_INIT, 0, (void *)NULL);
1594 }
1595 else
1596 {
1597 TRACE_FUNCTION ("mmi_fv_reame_edit() : Unable to create Editor Win!");
1598 }
1599 return MFW_EVENT_CONSUMED;
1600 }
1601
1602 /*******************************************************************************
1603
1604 $Function: mmi_fv_editor_create
1605
1606 $Description: Create a window for renaming the image file name
1607
1608 $Returns: window handle
1609
1610 $Arguments: parent - parent window.
1611
1612 *******************************************************************************/
1613
1614
1615 T_MFW_HND mmi_fv_editor_create(T_MFW_HND parent)
1616 {
1617 T_FV_Editor_Data *data;
1618 T_MFW_WIN * win;
1619
1620 TRACE_FUNCTION ("mmi_fv_editor_create");
1621
1622 data = (T_FV_Editor_Data *)mfwAlloc((U16)sizeof(T_FV_Editor_Data));
1623
1624 if (data == NULL)
1625 return data;
1626
1627 data->win = winCreate(parent, 0, E_WIN_VISIBLE, NULL);
1628
1629 if (data->win == NULL)
1630 {
1631 /*
1632 ** Failed to start : Free Memory, and exit
1633 */
1634 mfwFree((U8 *)data, (U16)sizeof(T_FV_Editor_Data));
1635 data = NULL;
1636 return data;
1637 }
1638 else
1639 {
1640 /*
1641 ** Setup the Dialog control functions
1642 */
1643 data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_editor_cntrl;
1644 data->mmi_control.data = data;
1645
1646 win = ((T_MFW_HDR *)data->win)->data;
1647 win->user = (void *)data;
1648 }
1649
1650 return data->win;
1651
1652 }
1653
1654 /*******************************************************************************
1655
1656 $Function: mmi_fv_editor_cntrl
1657
1658 $Description: Exec callback function for the rename window
1659
1660 $Returns: none
1661
1662 $Arguments: win - current window
1663 event - event id
1664 value - unique id
1665 parameter - optional data.
1666
1667 *******************************************************************************/
1668 void mmi_fv_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
1669 {
1670 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1671 T_FV_Editor_Data * data = (T_FV_Editor_Data *)win_data->user;
1672 T_AUI_EDITOR_DATA editor_data;
1673 //Aug 31, 2005 REF: SPR 34050 xdeepadh
1674 //The filename will have the full path details
1675 char new_filename[FV_DIR_PATH_LENGTH];
1676 char selected_file[FV_DIR_PATH_LENGTH];
1677 int status = 0;
1678
1679 switch (event)
1680 {
1681 case FV_INIT:
1682 #ifdef NEW_EDITOR
1683 //Clear the editor buffer
1684 memset(&editor_data,'\0',sizeof(editor_data));
1685 // Get the name from FFS
1686 TRACE_EVENT_P1("The file to be renamed file = %s",jpegFiles[fv_menu_data.fv_list_idx]);
1687 strcpy((char *)data->fv_buffer, (const char*)jpegFiles[fv_menu_data.fv_list_idx]);
1688
1689 /*
1690 ** Initialise the editor
1691 */
1692 AUI_edit_SetDefault(&editor_data);
1693 AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->fv_buffer, FV_FILE_NAME_LENGTH);
1694 AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtRename, NULL);
1695 AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
1696 AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_rename_editor_cb);
1697 data->fv_win_editor = AUI_edit_Start(data->win, &editor_data);
1698 #endif
1699 break;
1700
1701 case FV_EDITOR_CANCEL:
1702 /*
1703 ** The editor will have been destroyed. Reset the Window handler
1704 */
1705 data->fv_win_editor = NULL;
1706 /*
1707 ** Destroy the editor Window
1708 */
1709 TRACE_FUNCTION ("mmi_fv_editor_cntrl cancel");
1710 mmi_fv_editor_destroy(data->win);
1711 mmi_fv_opt_destroy(fv_optwin);
1712 break;
1713
1714 case FV_EDITOR_ERROR:
1715 //Aug 31, 2005 REF: SPR 34050 xdeepadh
1716 //Display the error message to the user
1717 mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtNoExtension, TxtNull, NULL);
1718 /*
1719 ** The editor will have been destroyed. Reset the Window handler
1720 */
1721 data->fv_win_editor = NULL;
1722 /*
1723 ** Destroy the editor Window
1724 */
1725 TRACE_FUNCTION ("mmi_fv_editor_cntrl cancel");
1726 mmi_fv_editor_destroy(data->win);
1727 mmi_fv_opt_destroy(fv_optwin);
1728 break;
1729
1730 case FV_EDITOR_SELECT:
1731 //copy the file name from the editor
1732 strcpy(new_filename,FV_DIR_NAME);
1733 strcat(new_filename,(char *)data->fv_buffer);
1734 TRACE_EVENT_P1("new_filename %s",new_filename);
1735
1736 strcpy(selected_file,FV_DIR_NAME);
1737 strcat(selected_file,(char*)jpegFiles[fv_menu_data.fv_list_idx]);
1738 TRACE_EVENT_P1("selected_file %s",selected_file);
1739
1740 // Rename the file in FFS.
1741 status = ffs_rename(selected_file,new_filename);
1742
1743 TRACE_EVENT_P1("status is %d",status);
1744 //Jan 03, 2006 REF: SPR OMAPS00060036 xdeepadh
1745 //While renaming the file,if the name already exists, display a proper error message.
1746 switch(status)
1747 {
1748
1749 case EFFS_OK:
1750 //Populate the list again
1751 file_count = 0;
1752 mmi_fv_init(&file_count);
1753 break;
1754
1755 case EFFS_EXISTS:
1756 mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtFileExists, TxtNull, NULL);
1757 break;
1758 default:
1759 //Display the error message to the user
1760 mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtWrongFilename, TxtNull, NULL);
1761 }
1762
1763 /*
1764 ** Destroy the Editor Window
1765 */
1766 mmi_fv_editor_destroy(data->win);
1767 mmi_fv_opt_destroy(fv_optwin);
1768
1769 break;
1770
1771 default:
1772 TRACE_FUNCTION ("mmi_fv_editor_cntrl(), Unexpected Event!");
1773 break;
1774 }
1775
1776
1777 }
1778
1779
1780 /*******************************************************************************
1781
1782 $Function: mmi_fv_editor_destroy
1783
1784 $Description: Destroy the rename editor window
1785
1786 $Returns: mfw window handle
1787
1788 $Arguments: own_window - current window
1789
1790 *******************************************************************************/
1791 MfwRes mmi_fv_editor_destroy(T_MFW_HND win)
1792 {
1793 T_MFW_WIN * win_data;
1794 T_FV_Editor_Data * data;
1795
1796 TRACE_FUNCTION ("mmi_fv_editor_destroy");
1797
1798
1799 if (win == NULL)
1800 return MfwResIllHnd;
1801
1802 win_data = ((T_MFW_HDR *) win)->data;
1803 data = (T_FV_Editor_Data *)win_data->user;
1804
1805 /*
1806 ** Destroy the Window
1807 */
1808 win_delete(data->win);
1809
1810 /*
1811 ** Free the dynamically allocated memory
1812 */
1813 mfwFree((U8 *)data, (U16)sizeof(T_FV_Editor_Data));
1814
1815 return MfwResOk;
1816 }
1817
1818 /*******************************************************************************
1819
1820 $Function: mmi_rename_editor_cb
1821
1822 $Description: This function provides the callback functionality to an editor for file viewer
1823
1824 $Returns: None
1825
1826 $Arguments: win - current window
1827 identifier -
1828 reason -
1829 *******************************************************************************/
1830
1831 static void mmi_rename_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
1832 {
1833 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1834 T_FV_Editor_Data* dev_name_data = (T_FV_Editor_Data *)win_data->user;
1835
1836 UBYTE * editor_buffer = NULL;
1837 SHORT max_edit_size = 0;
1838 T_MFW_HND editor_win;
1839 T_MFW_HND parent;
1840 char * fileExt;
1841
1842 TRACE_FUNCTION ("mmi_rename_editor_cb()");
1843
1844 editor_buffer = dev_name_data->fv_buffer;
1845 max_edit_size = FV_FILE_NAME_LENGTH - 1;
1846 editor_win = dev_name_data->fv_win_editor;
1847 parent = dev_name_data->win;
1848
1849 switch (reason)
1850 {
1851 case INFO_KCD_LEFT:
1852 {
1853 /*
1854 ** If there is no string entered, treat this as if it was a "Cancel"
1855 */
1856 if (editor_buffer[0] == NULL)
1857 {
1858 /*
1859 ** Send a "Cancel" to the window
1860 */
1861 SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
1862 }
1863 else
1864 {
1865 //If the file extn is not jpg, send cancel event
1866 fileExt = (char *)mmi_fv_GetExtension((char *)editor_buffer);
1867 if ( (strcmp(fileExt, "jpg") != 0))
1868 {
1869 //Aug 31, 2005 REF: SPR 34050 xdeepadh
1870 /*
1871 ** Send a "Error" to the window
1872 */
1873 SEND_EVENT(parent, FV_EDITOR_ERROR, identifier, NULL);
1874 }
1875 else
1876 {
1877 /*
1878 ** Send a "Select" to the window
1879 */
1880 SEND_EVENT(parent, FV_EDITOR_SELECT, identifier, NULL);
1881 }
1882 }
1883 }
1884 break;
1885
1886 case INFO_KCD_RIGHT:
1887 if (strlen((char *)editor_buffer) == NULL)
1888 {
1889
1890 /*
1891 ** Send a "Cancel" to the window
1892 */
1893 SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
1894 }
1895 break;
1896
1897 case INFO_KCD_HUP:
1898 /*
1899 ** Set the buffer to NULLS
1900 */
1901 memset(editor_buffer, NULL, max_edit_size);
1902
1903 /*
1904 ** Send a "Cancel" to the window
1905 */
1906 SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
1907 break;
1908
1909 default:
1910 /* otherwise no action to be performed
1911 */
1912 break;
1913 }
1914 }
1915
1916 /*******************************************************************************
1917
1918 $Function: mmi_fv_rotate_image_start
1919
1920 $Description: Create window for displaying the rotated image.
1921
1922 $Returns: none
1923
1924 $Arguments: m - menu handler
1925 i - menu item selected.
1926 *******************************************************************************/
1927 int mmi_fv_rotate_image_start(T_MFW_HND parent)
1928 {
1929 T_MFW_HND win;
1930 win = (T_MFW_HND)mmi_fv_rotate_image_create((MfwHnd)parent);
1931 TRACE_FUNCTION ("mmi_fv_rotate_image_start");
1932 if (win NEQ NULL)
1933 {
1934 SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
1935 }
1936
1937 return MFW_EVENT_CONSUMED;
1938 }
1939
1940
1941 /*******************************************************************************
1942
1943 $Function: mmi_fv_rotate_image_create
1944
1945 $Description: Create a window for rotating the image.
1946
1947 $Returns: window handle
1948
1949 $Arguments: parent_window - parent window.
1950
1951 *******************************************************************************/
1952
1953 static T_MFW_HND mmi_fv_rotate_image_create(MfwHnd parent_window)
1954 {
1955 T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
1956 T_MFW_WIN * win;
1957
1958 TRACE_FUNCTION ("mmi_fv_rotate_image_create()");
1959
1960 // Create window handler
1961 data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_rotate_win_cb);
1962 if (data->win EQ NULL)
1963 {
1964 return NULL;
1965 }
1966
1967 // connect the dialog data to the MFW-window
1968 data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_rotate_exec_cb;
1969 data->mmi_control.data = data;
1970 win = ((T_MFW_HDR *)data->win)->data;
1971 win->user = (MfwUserDataPtr)data;
1972 data->parent = parent_window;
1973 //Create keyboard handler
1974 data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_rotate_kbd_cb);
1975 winShow(data->win);
1976 return data->win;
1977 }
1978
1979
1980 /*******************************************************************************
1981
1982 $Function: mmi_fv_rotate_exec_cb
1983
1984 $Description: Callback handler for events sent by the images editor
1985
1986 $Returns: none
1987
1988 $Arguments: win - current window
1989 event - event id
1990 parameter - optional data.
1991 *******************************************************************************/
1992
1993 static void mmi_fv_rotate_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
1994 {
1995 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
1996 T_fv_opt * data = (T_fv_opt *)win_data->user;
1997 int status;
1998
1999 TRACE_FUNCTION ("mmi_fv_rotate_exec_cb()");
2000
2001 switch (event)
2002 {
2003 case FV_INIT:
2004 TRACE_EVENT("init");
2005 status = mfw_fv_rotate_image();
2006 if(!status)
2007 {
2008 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtError, TxtNull, NULL);
2009 }
2010 break;
2011
2012 case FV_RETURN:
2013
2014 break;
2015 default:
2016 TRACE_EVENT("Err: Default");
2017 return;
2018 }
2019 }
2020
2021 /*******************************************************************************
2022
2023 $Function: mmi_fv_rotate_win_cb
2024
2025 $Description: Window callback function for the rotate window
2026
2027 $Returns: execution status
2028
2029 $Arguments: e - event id
2030 w - window handle
2031 *******************************************************************************/
2032
2033 static int mmi_fv_rotate_win_cb (MfwEvt e, MfwWin w)
2034 {
2035 TRACE_FUNCTION ("mmi_fv_rotate_win_cb()");
2036
2037 switch (e)
2038 {
2039 case MfwWinVisible: /* window is visible */
2040 dspl_ClearAll();
2041 displaySoftKeys(TxtNull,TxtSoftBack);
2042 break;
2043 case MfwWinFocussed: /* input focus / selected */
2044 case MfwWinDelete: /* window will be deleted */
2045 default:
2046 return MFW_EVENT_REJECTED;
2047 }
2048 return MFW_EVENT_CONSUMED;
2049 }
2050
2051 /*******************************************************************************
2052
2053 $Function: mmi_fv_rotate_kbd_cb
2054
2055 $Description: Exec callback function for the rotate window
2056
2057 $Returns: execution status
2058
2059 $Arguments: e - event id
2060 k - keyboard info
2061 *******************************************************************************/
2062
2063 static int mmi_fv_rotate_kbd_cb (MfwEvt e, MfwKbd *k)
2064 {
2065 T_MFW_HND win = mfwParent(mfw_header());
2066 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
2067 T_fv_opt * data = (T_fv_opt *)win_data->user;
2068
2069 TRACE_FUNCTION ("mmi_fv_rotate_kbd_cb()");
2070
2071 switch (k->code)
2072 {
2073 case KCD_LEFT:
2074 TRACE_EVENT("mmi_fv_rotate_kbd_cb,INFO_KCD_LEFT ");
2075 break;
2076
2077 case KCD_RIGHT:
2078 case KCD_HUP:
2079 TRACE_EVENT("mmi_fv_rotate_kbd_cb,INFO_KCD_RIGHT ");
2080 mmi_fv_opt_destroy(data->win);
2081 break;
2082 default:
2083
2084 break;
2085
2086 }
2087 return MFW_EVENT_CONSUMED;
2088 }
2089
2090 /*******************************************************************************
2091
2092 $Function: mmi_fv_zoom_image_start
2093
2094 $Description: Create window for displaying the zoomed image.
2095
2096 $Returns: none
2097
2098 $Arguments: m - menu handler
2099 i - menu item selected.
2100 *******************************************************************************/
2101 int mmi_fv_zoom_image_start(T_MFW_HND parent)
2102 {
2103 T_MFW_HND win;
2104 win = (T_MFW_HND)mmi_fv_zoom_image_create((MfwHnd)parent);
2105 TRACE_FUNCTION ("mmi_fv_zoom_image_start");
2106 if (win NEQ NULL)
2107 {
2108 SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
2109 }
2110 return MFW_EVENT_CONSUMED;
2111
2112 }
2113
2114 /*******************************************************************************
2115
2116 $Function: mmi_fv_zoom_image_create
2117
2118 $Description: Create a window for zooming the image.
2119
2120 $Returns: window handle
2121
2122 $Arguments: parent_window - parent window.
2123
2124 *******************************************************************************/
2125
2126 static T_MFW_HND mmi_fv_zoom_image_create(MfwHnd parent_window)
2127 {
2128 T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
2129 T_MFW_WIN * win;
2130
2131 TRACE_FUNCTION ("mmi_fv_zoom_image_create()");
2132
2133 // Create window handler
2134 data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_zoom_win_cb);
2135 if (data->win EQ NULL)
2136 {
2137 return NULL;
2138 }
2139
2140 // connect the dialog data to the MFW-window
2141 data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_zoom_exec_cb;
2142 data->mmi_control.data = data;
2143 win = ((T_MFW_HDR *)data->win)->data;
2144 win->user = (MfwUserDataPtr)data;
2145 data->parent = parent_window;
2146 //Create keyboard handler
2147 data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_zoom_kbd_cb);
2148 winShow(data->win);
2149 return data->win;
2150 }
2151
2152
2153 /*******************************************************************************
2154
2155 $Function: mmi_fv_zoom_exec_cb
2156
2157 $Description: Callback handler for events sent by the images editor
2158
2159 $Returns: none
2160
2161 $Arguments: win - current window
2162 event - event id
2163 parameter - optional data.
2164 *******************************************************************************/
2165
2166 static void mmi_fv_zoom_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
2167 {
2168 T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data;
2169 T_fv_opt * data = (T_fv_opt *)win_data->user;
2170 int status;
2171
2172 TRACE_FUNCTION ("mmi_fv_zoom_exec_cb()");
2173
2174 switch (event)
2175 {
2176 case FV_INIT:
2177 TRACE_EVENT("init");
2178 status = mfw_fv_zoom_image();
2179 if(!status)
2180 {
2181 mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtError, TxtNull, NULL);
2182 }
2183
2184 break;
2185
2186 case FV_RETURN:
2187
2188 break;
2189 default:
2190 TRACE_EVENT("Err: Default");
2191 return;
2192 }
2193 }
2194
2195 /*******************************************************************************
2196
2197 $Function: mmi_fv_zoom_win_cb
2198
2199 $Description: Window callback function for the Option window
2200
2201 $Returns: execution status
2202
2203 $Arguments: e - event id
2204 w - window handle
2205 *******************************************************************************/
2206
2207 static int mmi_fv_zoom_win_cb (MfwEvt e, MfwWin w)
2208 {
2209 TRACE_FUNCTION ("mmi_fv_zoom_win_cb()");
2210
2211 switch (e)
2212 {
2213 case MfwWinVisible: /* window is visible */
2214 dspl_ClearAll();
2215 displaySoftKeys(TxtNull,TxtSoftBack);
2216 break;
2217 case MfwWinFocussed: /* input focus / selected */
2218 case MfwWinDelete: /* window will be deleted */
2219 default:
2220 return MFW_EVENT_REJECTED;
2221 }
2222 return MFW_EVENT_CONSUMED;
2223 }
2224
2225 /*******************************************************************************
2226
2227 $Function: mmi_fv_zoom_kbd_cb
2228
2229 $Description: Exec callback function for the zoom window
2230
2231 $Returns: execution status
2232
2233 $Arguments: e - event id
2234 k - keyboard info
2235 *******************************************************************************/
2236
2237 static int mmi_fv_zoom_kbd_cb (MfwEvt e, MfwKbd *k)
2238 {
2239 T_MFW_HND win = mfwParent(mfw_header());
2240 T_MFW_WIN * win_data = ((T_MFW_HDR *)win)->data;
2241 T_fv_opt * data = (T_fv_opt *)win_data->user;
2242
2243 TRACE_FUNCTION ("mmi_fv_zoom_kbd_cb()");
2244
2245 switch (k->code)
2246 {
2247 case KCD_LEFT:
2248 TRACE_EVENT("mmi_fv_zoom_kbd_cb,INFO_KCD_LEFT ");
2249 break;
2250
2251 case KCD_RIGHT:
2252 case KCD_HUP:
2253 TRACE_EVENT("mmi_fv_zoom_kbd_cb,INFO_KCD_RIGHT ");
2254 mmi_fv_opt_destroy(data->win);
2255 break;
2256 default:
2257
2258 break;
2259
2260 }
2261 return MFW_EVENT_CONSUMED;
2262 }
2263
2264