diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/bmi/MmiFileViewer.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,2264 @@
+/*******************************************************************************
+
+          Texas Instruments
+
+********************************************************************************
+
+ This software product is the property of Texas Instruments and may not be
+ disclosed to any third party without the express permission of the owner.
+
+********************************************************************************
+
+ $Project name:	File Viewer
+ $Module:   		File Viewer
+ $File:       		MmiFileViewer.c
+ $Revision:   		1.0
+ $Author:   		xdeepadh - sasken India
+ $Date:       		11/05/05
+
+********************************************************************************
+
+ Description: This module contains the functionality of File Viewer Application.
+
+********************************************************************************
+ $History: MmiFileViewer.c
+ 	Jan 03, 2006    REF: SPR OMAPS00060036  xdeepadh
+ 	Description:In file viewer, the user is not allowed to retain the old name once he/she goes to the rename file option.
+ 	Solution:While renaming the file,if the name already exists,  display a proper error message
+ 	
+ 	Aug 31, 2005    REF: SPR 34050 xdeepadh
+	Description: The application hangs if while renaming a saved file a special character such as '?', '!' etc is used
+	Solution: Error message will be displayed when ffs_rename() fails
+	
+	 Aug 30, 2005    REF:SPR 34049 xdeepadh
+   	Description:  FileViewer: Not able to delete a file that is too big to display
+   	Solution: When the file was too big to display, the file handle was closed.
+
+	Aug 22, 2005    REF: ENH 31154 xdeepadh
+   	Description: Application to Test Camera
+   	Solution: Implemeted the Fileviewer to view the jpeg images.Camera Application to 
+   	preview,capture and save image has been implemented.
+
+     
+
+ $End
+
+*******************************************************************************/
+
+#define ENTITY_MFW
+
+/* includes */
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#if defined (NEW_FRAME)
+#include "typedefs.h"
+#include "Vsi.h"
+#include "PEI.H"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+
+#else
+#include "stddefs.h"
+#include "custom.h"
+#include "gsm.h"
+#include "Vsi.h"
+
+#endif
+
+#include "message.h" /* included for aci_cmh.h .... */
+#include "aci_cmh.h" /* included for mfw_sat.h, included for MmiDummy.h, included for MmiMenu.h */
+
+#include "mfw_mfw.h"
+#include "mfw_win.h"
+#include "mfw_icn.h"	/* included for mfw_mnu.h */
+#include "mfw_mnu.h"
+#include "mfw_tim.h"
+#include "mfw_kbd.h"
+#include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */
+#include "mfw_fv.h" //Will be enabled once the IMGIL APIS are provided.
+
+
+#include "ffs/ffs_api.h"
+
+#include "MmiBlkLangDB.h"
+#include "mmiColours.h"
+#include "MmiDialogs.h"
+#include "MmiDummy.h" /* included for MmiMenu.h */
+#include "MmiLists.h"
+#include "MmiMenu.h"
+#include "MmiSoftKeys.h"
+#include "AUIEditor.h"
+#include "MmiFileViewer.h"
+#include "MmiMain.h"
+#include "Mmibookshared.h"
+
+/*local defines*/
+
+//Events for windows
+#define FV_INIT 		1
+#define FV_RETURN 	2
+#define FV_ABORT  	3
+#define FV_EXIT 		4
+
+//Events for editor
+#define FV_EDITOR_CANCEL	 5
+#define FV_EDITOR_SELECT	 6
+#define FV_EDITOR_ERROR         7  //Aug 31, 2005    REF: SPR 34050 xdeepadh
+
+//Ids for diffrent functionalities.
+#define FV_OPT_ID		 100
+#define FV_EDT_ID 		 101
+#define FV_DEL_ID		 102
+
+#define FV_INFO_SCRN_TIMEOUT  		1500
+//Aug 31, 2005    REF: SPR 34050 xdeepadh
+#define FV_FILE_NAME_LENGTH 		20 
+#define FV_DIR_PATH_LENGTH 		(10 + FV_FILE_NAME_LENGTH)
+#define FV_DIR_NAME 				"/mmi/jpeg/"
+#define FV_MAX_NUM_FILES			10
+#define FV_MAX_JPEG_SIZE 			(64  *  1024)
+
+
+//Variable defines
+
+
+UINT8 qcif_yuv_lum[FV_DSPL_VOLUME]; 		 //decoded and Scaled  lum buffer
+UINT8 qcif_yuv_cb[FV_SCALE_VOLUME];		//decoded and Scaled cb  buffer
+UINT8 qcif_yuv_cr[FV_SCALE_VOLUME];		//decoded and Scaled cr buffer
+
+UINT8 qcif_rgb_array[ FV_DSPL_VOLUME  *  2];			//Color converted buffer to view
+UINT8 rgb_img_process_array[FV_DSPL_VOLUME  *  2];  	//Color converted buffer for zoom/rotate
+
+UINT8 qcif_yuv_process_lum[FV_DSPL_VOLUME ];		//lum buffer for rotate and zoom
+UINT8 qcif_yuv_process_cb[FV_SCALE_VOLUME];		//cb buffer for rotate and zoom
+UINT8 qcif_yuv_process_cr[FV_SCALE_VOLUME];		//cr buffer for rotate and zoom
+
+
+/*menu data structure definition*/
+typedef struct
+{
+  T_MMI_CONTROL     mmi_control;
+  T_MFW_HND         	win;
+  T_MFW_HND         	kbd;
+  T_MFW_HND         	kbd_long;
+  T_MFW_HND         	fv_menu;
+  T_MFW_HND         	fv_option_win;
+  T_MFW_HND         	parent;
+  ListMenuData	 	fv_list_data;
+  UBYTE				fv_file_count;
+  ListCbFunc			fv_list_cb;
+  UBYTE				fv_list_idx;
+  
+}T_fv_menu;
+
+typedef struct
+{
+	/* administrative data */
+	T_MMI_CONTROL   	mmi_control;
+	T_MFW_HND       		win;
+	SHORT          			 id;
+	T_MFW_HND       		parent;
+	/* associated handlers */
+	T_MFW_HND      		 kbd;
+	T_MFW_HND       		kbd_long;
+	T_MFW_HND      		 menu;
+	T_fv_menu * parent_data;
+} T_fv_opt;
+
+/*editor data structure*/
+typedef struct{
+	T_MMI_CONTROL		mmi_control;
+	MfwHnd				win;
+	MfwHnd				fv_win_editor;
+	UBYTE				fv_buffer[FV_FILE_NAME_LENGTH];
+}	T_FV_Editor_Data;
+
+
+/*default static menu*/
+static MfwMnuAttr menuFvSearchListAttr =
+{
+	&menuArea,
+	MNU_LEFT | MNU_LIST | MNU_CUR_LINE,	/* centered page menu */
+	-1,										/* use default font  */
+	NULL,									/* with these items (filled in later) */
+	0,										/* number of items (filled in leter)  */
+	COLOUR_LIST_XX,						/* Colour */
+	TxtNull,								       /* Hdr Id */
+	NULL,									/* Background */
+	MNUATTRSPARE							/* unused */
+};
+
+static const MfwMnuItem Mmi_fv_OPTItems [] =
+{
+	{0,0,0,(char *)TxtView,0,(MenuFunc)mmi_fv_view_image_start,item_flag_none},
+	{0,0,0,(char *)TxtDelete,0,(MenuFunc)mmi_fv_delete_start,item_flag_none},
+	{0,0,0,(char *)TxtRename,0,(MenuFunc)mmi_fv_reame_edit,item_flag_none}
+	
+};
+
+static const MfwMnuAttr Mmi_fv_OPTAttrib =
+{
+    &SmsSend_R_OPTArea,
+    MNU_LEFT | MNU_LIST | MNU_CUR_LINE,		 /* centered page menu       */
+    -1,                                 						/* use default font         */
+    (MfwMnuItem*)Mmi_fv_OPTItems,                    		/* with these items         */
+    sizeof(Mmi_fv_OPTItems)/sizeof(MfwMnuItem), 	/* number of items     */
+    COLOUR_LIST_SMS,	TxtNull, NULL, MNUATTRSPARE
+
+};
+
+//Variable definition
+T_fv_menu	fv_menu_data = {0};
+//Variable to store the  max jpeg  file count.
+int 	file_count = 0;
+
+//Array to store the Jpeg filenames.
+UBYTE	jpegFiles[FV_MAX_NUM_FILES][FV_FILE_NAME_LENGTH] = {0};
+
+//Buffer to store the jpeg image from FFS.
+
+static UBYTE jpeg_test_array[FV_MAX_JPEG_SIZE] = {0};
+
+T_MFW_HND fv_optwin;
+
+UBYTE  zoom_flag,rotate_flag = 0;  //Flag to identify the rotate and zooming
+
+//Function prototypes
+
+static int mmi_fv_list_files_win_cb (MfwEvt e, MfwWin *w);
+static void mmi_fv_menu_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData);
+void mmi_fv_list_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static T_MFW_HND mmi_fv_list_files_create(T_MFW_HND parent_window, void* callfun);
+static T_MFW_HND mmi_fv_test_select_file (T_MFW_HND parent_win);
+static int mmi_fv_opt_mnu_cb (MfwEvt e, MfwMnu *m);
+static int mmi_fv_opt_kbd_cb (MfwEvt e, MfwKbd *k);
+static int mmi_fv_opt_win_cb (MfwEvt e, MfwWin *w);
+void mmi_fv_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+static void mmi_fv_delete_cb (T_MFW_HND win, USHORT Identifier, SHORT reason);
+static void mmi_rename_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason);
+MfwRes mmi_fv_editor_destroy(T_MFW_HND win);
+void mmi_fv_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
+T_MFW_HND mmi_fv_editor_create(T_MFW_HND parent);
+static int mmi_fv_view_kbd_cb (MfwEvt e, MfwKbd *k);
+static int mmi_fv_view_win_cb (MfwEvt e, MfwWin w);
+static T_MFW_HND mmi_fv_view_image_create(MfwHnd parent_window);
+static void mmi_fv_view_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
+static int mmi_fv_rotate_win_cb (MfwEvt e, MfwWin w);
+static int mmi_fv_rotate_kbd_cb (MfwEvt e, MfwKbd *k);
+static void mmi_fv_rotate_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
+static int mmi_fv_zoom_win_cb (MfwEvt e, MfwWin w);
+static int mmi_fv_zoom_kbd_cb (MfwEvt e, MfwKbd *k);
+static void mmi_fv_zoom_exec_cb(T_MFW_HND win, USHORT event, void *parameter);
+static MfwHnd mmi_fv_test_show_info(T_MFW_HND parent,int lsk, int rsk, int str1, int str2, T_VOID_FUNC callback);
+static int mmi_fv_item_mnu_cb(MfwMnu * mnu, MfwMnuItem * item);
+static void mmi_fv_menu_destroy(MfwHnd window);
+static T_MFW_HND mmi_fv_opt_create(MfwHnd parent_window);
+GLOBAL int  mmi_fv_delete_jpeg_file(UBYTE index);
+static T_MFW_HND mmi_fv_rotate_image_create(MfwHnd parent_window);
+int mmi_fv_zoom_image_start(T_MFW_HND parent) ;
+static T_MFW_HND mmi_fv_zoom_image_create(MfwHnd parent_window);
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_get_file_count
+
+ $Description:	returns the count of jpeg files
+
+ $Returns: The file count of the files in JPG folder.
+
+ $Arguments:None
+
+*******************************************************************************/
+UBYTE mmi_fv_get_file_count()
+{
+	return file_count;
+}
+
+
+/*******************************************************************************
+
+ $Function:     LaunchFileViewer
+
+ $Description:	Initiates the creation of the  jpeg file list window and post init event
+
+ $Returns: Execution status
+
+ $Arguments:		m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int LaunchFileViewer( MfwMnu *m, MfwMnuItem *i )
+{
+	T_MFW_HND win;
+	T_MFW_HND parent_win = mfw_parent(mfw_header());
+
+	TRACE_FUNCTION ("LaunchFileViewer()");
+
+	mfw_fv_init();
+	win = mmi_fv_list_files_create(parent_win,(void*)mmi_fv_list_files_exec_cb);
+
+	if (win NEQ NULL)
+	{
+		SEND_EVENT (win, FV_INIT, 0, 0);
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fileviewer_list_files_create
+
+ $Description:	Creates the window and dialog handler for the window that 
+ 			holds the list window
+
+ $Returns:	Window Handler
+
+ $Arguments:parent_window - Parent Window
+ 			callfun- Callback function
+
+*******************************************************************************/
+
+static T_MFW_HND mmi_fv_list_files_create(T_MFW_HND parent_window, void* callfun)
+{
+	T_fv_menu *  data = (T_fv_menu *)mfwAlloc(sizeof (T_fv_menu));
+	T_MFW_WIN  * win;
+	TRACE_FUNCTION ("mmi_fileviewer_list_files_create");
+
+	/* Create window handler */
+
+	data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fv_list_files_win_cb);
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+
+	TRACE_EVENT("list holder window created: " );
+	/* connect the dialog data to the MFW-window */
+
+	data->mmi_control.dialog = (T_DIALOG_FUNC)callfun;
+	data->mmi_control.data   = data;
+	win                      = ((T_MFW_HDR *)data->win)->data;
+	win->user                = (void *)data;
+	data->parent             = parent_window;
+	winShow(data->win);
+	/*
+	* return window handle
+	*/
+
+	return data->win;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_list_files_exec_cb
+
+ $Description: handler for the window that holds the list window
+
+ $Returns:None
+
+ $Arguments:		win :		The pointer to the window handler, so the function can reference the
+							dynamic user data, if any.
+ 				event :		The incoming event
+ 				value :		Generic incoming Parameter, it will be 'event' dependant
+ 				parameter :	Generic incoming Parameter, it will be 'event' dependant
+
+*******************************************************************************/
+void mmi_fv_list_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+    T_MFW_WIN   * win_data = ((T_MFW_HDR *) win)->data;
+    T_fv_menu   * data = (T_fv_menu *)win_data->user;
+	
+    TRACE_FUNCTION ("mmi_fv_list_files_exec_cb");
+	
+    switch (event)
+	{
+    case FV_INIT:
+		data->fv_menu = mmi_fv_test_select_file(win);
+		if(data->fv_menu == NULL)
+			mmi_fv_menu_destroy((MfwHnd)data->win);
+		break;
+    case FV_RETURN:
+	default:
+		break;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_list_files_win_cb
+
+ $Description: window callback for the window that holds the list window
+
+ $Returns:Status
+
+ $Arguments: 		e		- window handle event
+ 				w			- window
+
+
+*******************************************************************************/
+static int mmi_fv_list_files_win_cb (MfwEvt e, MfwWin *w)   
+{
+	TRACE_FUNCTION ("mmi_fv_list_files_win_cb()");
+	switch (e)
+	{
+    case MfwWinVisible:  /* window is visible  */
+		break;
+    case MfwWinFocussed: /* input focus / selected   */
+    case MfwWinDelete:   /* window will be deleted   */
+		
+    default:
+		return MFW_EVENT_REJECTED;
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_test_select_file
+
+ $Description:	browse jpeg files and enable to select them
+
+ $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed.
+
+ $Arguments:		parent : pointer to the parent window.
+
+
+*******************************************************************************/
+static T_MFW_HND mmi_fv_test_select_file (T_MFW_HND parent_win)
+{
+	int 	j;
+	T_fv_menu	*data;
+	T_MFW_HND	win  = parent_win;
+	T_MFW_WIN	* win_data = ((T_MFW_HDR *) win)->data;
+	
+	
+	TRACE_FUNCTION ("mmi_fv_test_select_file()");
+	//Populate the jpeg files from ffs
+	mmi_fv_init(&file_count);
+
+	data = (T_fv_menu *)win_data->user;
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+	//set count to 0
+	data->fv_file_count = 0;
+	
+	//In case no files are present in ffs return info message
+		if(file_count == 0)
+	{
+		mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileNotLoaded, TxtNull, NULL);
+			return NULL;
+	}
+	else
+	{
+		/* Create the list menu to display the results	*/
+	    /* initialization of the dialog data */
+		data->fv_list_data.ListPosition   = 1;/* True cursor position in list menu. */
+		data->fv_list_data.Font           = 0;
+		data->fv_list_data.LeftSoftKey    = TxtSoftOptions; 
+		data->fv_list_data.RightSoftKey   = TxtSoftBack;
+		data->fv_list_data.KeyEvents      = KEY_CLEAR | KEY_RIGHT | KEY_LEFT | KEY_MNUUP | KEY_MNUDOWN |KEY_HUP;
+		data->fv_list_data.Reason         = 0;
+		data->fv_list_data.Strings        = TRUE;
+		data->fv_list_data.autoDestroy    = TRUE;
+		data->fv_list_data.Attr           = (MfwMnuAttr *)&menuFvSearchListAttr;
+		data->fv_list_data.Attr->hdrId	  = TxtFileViewer;
+			data->fv_list_data.Attr->nItems   = file_count;
+		data->fv_list_cb 				  = (ListCbFunc)mmi_fv_menu_listmnu_cb;
+			data->fv_list_data.ListLength 	  = file_count; /* actual number of entries in list menu.    */
+		data->fv_list_data.List 		  = (MfwMnuItem *)mfwAlloc(data->fv_list_data.ListLength * sizeof (MfwMnuItem));
+		if (data->fv_list_data.List != (MfwMnuItem *)0)
+		{
+			MfwMnuItem *listItem;
+			
+			/* Initialise the memory to 0x00 */
+			memset(data->fv_list_data.List, 0x00, data->fv_list_data.ListLength * sizeof (MfwMnuItem));
+			
+			for (j = 0; j <data->fv_list_data.ListLength; j++)
+			{
+				listItem 		   	=  &data->fv_list_data.List[j];
+				listItem->str 	   	=  (char*)jpegFiles[data->fv_file_count++];
+				listItem->func 	   	=  (MenuFunc)mmi_fv_item_mnu_cb;
+				listItem->flagFunc 	=  (FlagFunc)item_flag_none;
+			}
+			
+			/* Recreate the menu with the new details */
+			if (listDisplayListMenu(data->win, &data->fv_list_data, data->fv_list_cb, FALSE) != LISTS_FAIL)
+				return data->fv_list_data.win;
+			
+		}
+			return data->win;
+	}
+	
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_test_show_info
+
+ $Description:	This function displays a information screen with the textId's
+
+ $Returns: Dialog Window
+
+ $Arguments:parent- parent win
+ 			lsk- Left Softkey
+ 			rsk-Right Softkey
+ 			str1-String
+ 			str2-String
+ 			callback- Callback function
+
+*******************************************************************************/
+static MfwHnd mmi_fv_test_show_info(T_MFW_HND parent,int lsk, int rsk, int str1, int str2, T_VOID_FUNC callback)
+{
+	T_DISPLAY_DATA display_info;
+	
+    TRACE_FUNCTION ("mmi_fv_test_show_info()");
+	
+	/*
+	** Create a timed dialog to display the Message
+	*/
+	dlg_initDisplayData_TextId( &display_info, lsk, rsk, str1, str2, COLOUR_STATUS);
+	dlg_initDisplayData_events( &display_info, callback, FV_INFO_SCRN_TIMEOUT, KEY_LEFT | KEY_CLEAR | KEY_HUP);
+	
+	return info_dialog(parent, &display_info);
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_init
+
+ $Description:	Function retrieves the files present under the /JPG directory
+
+ $Returns: None
+
+ $Arguments: Filecount- count of files in FFS.
+
+*******************************************************************************/
+void mmi_fv_init(int* fileCount)
+{
+	
+	T_FFS_FD  	fd                   = 0;
+	char        dir_name_p[]         = FV_DIR_NAME;
+	T_FFS_DIR	dir                  = {0};
+	char		dest_name_p[FV_FILE_NAME_LENGTH]     = "";
+	int 		i, max_files_count = 0;
+	char *fileExt;
+
+	TRACE_FUNCTION("mmi_fv_init()");
+	
+	i	=	strlen(dir_name_p);
+	dir_name_p[i-1] = '\0';
+	
+	TRACE_EVENT_P1("the dir name = %s",dir_name_p);
+	
+    if ((max_files_count = ffs_opendir (dir_name_p, &dir)) <= 0)
+	{
+		return;
+	}
+
+	//Display only 10 files
+    if(max_files_count > FV_MAX_NUM_FILES) 
+	   max_files_count = FV_MAX_NUM_FILES;
+	
+    *fileCount = max_files_count;
+    TRACE_EVENT_P1("Number of files = %d",*fileCount);
+	
+    //read maximum of 10 file names
+	for (i = 0; (ffs_readdir (&dir, dest_name_p, 100) > 0x0) && (i<max_files_count); i++)
+	{
+		if(i >= FV_MAX_NUM_FILES)
+		 break;
+
+		//retrieve file extension
+      		fileExt  = mmi_fv_GetExtension(dest_name_p);	
+		//Store only jpeg file names in array
+		if ( (strcmp(fileExt, "jpg") == 0))
+			{
+				strcpy ((char*)jpegFiles[i], dest_name_p);
+			}
+		memset(dest_name_p,0,FV_FILE_NAME_LENGTH);
+    	}
+
+	 TRACE_EVENT_P1("Number of files after read = %d",*fileCount);
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_item_mnu_cb
+
+ $Description:	save index of currently selected file
+
+ $Returns:
+
+ $Arguments:		m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+static int  mmi_fv_item_mnu_cb(MfwMnu * mnu, MfwMnuItem * item)
+{
+	T_MFW_HND win = mfw_parent(mfw_header());
+	T_MFW_WIN		* win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_menu *data = (T_fv_menu *)win_data->user;
+	
+	TRACE_FUNCTION ("mmi_fv_item_mnu_cb()");
+	if (data EQ NULL)
+	{
+		return NULL;
+	}		
+	data->fv_list_idx = fv_menu_data.fv_list_idx = mnu->lCursor[mnu->level];
+	data->fv_option_win = mmi_fv_opt_start(data->win,(MfwMnuAttr*)&Mmi_fv_OPTAttrib);
+	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_menu_listmnu_cb
+
+ $Description:	destroy lists and menu in case of back softkey or menu exit
+
+ $Returns:None 
+
+ $Arguments:parent-
+ 			Listadata-
+
+*******************************************************************************/
+static void mmi_fv_menu_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData)
+{
+	T_MFW_WIN	*win_data	= ((T_MFW_HDR *)Parent)->data;
+	T_fv_menu	*data		= (T_fv_menu *)win_data->user;
+    
+	TRACE_FUNCTION ("mmi_fv_menu_listmnu_cb()");
+	
+	if ((ListData->Reason EQ LISTS_REASON_BACK) ||
+		(ListData->Reason EQ LISTS_REASON_CLEAR) ||
+		(ListData->Reason EQ LISTS_REASON_HANGUP))
+	{
+	
+		/* Free the memory set aside for ALL the devices to be listed.*/
+		mfwFree((U8 *)data->fv_list_data.List, (U16)(ListData->ListLength* sizeof(MfwMnuItem)));
+		listsDestroy(ListData->win);
+		data->fv_list_data.List = NULL;
+		mmi_fv_menu_destroy((MfwHnd)data->win);
+	}
+
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_menu_destroy
+
+ $Description:	destroy menu window
+
+ $Returns:None
+
+  $Arguments:		window : pointer to the parent window.
+
+*******************************************************************************/
+static void mmi_fv_menu_destroy(MfwHnd window)
+{
+	T_MFW_WIN     * win_data  = ((T_MFW_HDR *)window)->data;
+	T_fv_menu * data = (T_fv_menu *)win_data->user;
+	
+	TRACE_FUNCTION ("mmi_fv_menu_destroy()");
+	
+	if (window == NULL)
+	{
+		return;
+	}
+	
+	if (data)
+	{
+		win_delete(data->win);
+		/* Free Memory */
+		mfwFree((void *)data, sizeof (T_fv_menu));
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_set_rotate_90degree
+
+ $Description: Rotates the selected image by 90 degree.
+ $Returns: Status
+
+ $Arguments:m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int mmi_fv_set_rotate_90degree (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND       win  = mfwParent(mfw_header());
+	TRACE_FUNCTION ("mmi_fv_set_rotate_90degree()");
+	rotate_flag = FV_ROTATE_90;
+	mmi_fv_rotate_image_start(win);
+	 return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_set_rotate_180degree
+
+ $Description: Rotates the selected image by 180 degree.
+ $Returns: Status
+
+ $Arguments:m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int mmi_fv_set_rotate_180degree (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND       win  = mfwParent(mfw_header());
+	TRACE_FUNCTION ("mmi_fv_set_rotate_180degree()");
+	rotate_flag = FV_ROTATE_180;
+	mmi_fv_rotate_image_start(win);
+	 return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_set_rotate_270degree
+
+ $Description: Rotates the selected image  anti-clockwise.
+ $Returns:
+
+ $Arguments:		m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int mmi_fv_set_rotate_270degree (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND       win  = mfwParent(mfw_header());
+	TRACE_FUNCTION ("mmi_fv_set_rotate_270degree()");
+	rotate_flag = FV_ROTATE_270;
+	mmi_fv_rotate_image_start(win);
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_set_zoom_out
+
+ $Description: Zooms out the selected image
+ $Returns:
+
+ $Arguments:		m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int mmi_fv_set_zoom_out (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND       win  = mfwParent(mfw_header());
+	TRACE_FUNCTION ("mmi_fv_set_zoom_out()");
+	zoom_flag = FV_ZOOM_OUT;
+	mmi_fv_zoom_image_start(win);
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_set_zoom_in
+
+ $Description: Zooms in the selected image
+ $Returns:
+
+ $Arguments:		m 	- pointer to current menu
+ 				i 	- pointer to current menu item
+
+*******************************************************************************/
+GLOBAL int mmi_fv_set_zoom_in (MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND       win  = mfwParent(mfw_header());
+	TRACE_FUNCTION ("mmi_fv_set_zoom_in()");
+	zoom_flag = FV_ZOOM_IN;
+	mmi_fv_zoom_image_start(win);
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_view_image_start
+
+ $Description:	Create editor for viewing the image.
+ 
+ $Returns:		none
+ 
+ $Arguments:	m - menu handler
+ 				i - menu item selected.
+*******************************************************************************/
+
+
+int mmi_fv_view_image_start(MfwMnu* m, MfwMnuItem* i) 
+{
+	T_MFW_HND win;
+	T_MFW_HND parent_win = mfw_parent(mfw_header());
+	win = mmi_fv_view_image_create(parent_win);
+	TRACE_FUNCTION ("mmi_fv_view_image_start");
+	SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
+	return MFW_EVENT_CONSUMED;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_view_image_create
+
+ $Description:	Create a window for viewing the image.
+ 
+ $Returns:		window handle
+
+ $Arguments:	parent_window - parent window.
+ 				
+*******************************************************************************/
+
+static T_MFW_HND mmi_fv_view_image_create(MfwHnd parent_window)
+{
+	T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
+	T_MFW_WIN  * win;
+
+	TRACE_FUNCTION ("mmi_fv_view_image_create()");
+
+	// Create window handler
+	data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_view_win_cb);
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+
+	// connect the dialog data to the MFW-window
+	data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_view_exec_cb;
+	data->mmi_control.data   = data;
+	win                      = ((T_MFW_HDR *)data->win)->data;
+	win->user                = (MfwUserDataPtr)data;
+	data->parent             = parent_window;
+	//Create keyboard handler
+        data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_view_kbd_cb);
+	
+	return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_view_exec_cb
+
+ $Description:	Callback handler for events sent by the images editor
+
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				parameter - optional data.
+*******************************************************************************/
+
+static void mmi_fv_view_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
+{	
+	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_opt         * data = (T_fv_opt *)win_data->user;
+	int status;
+
+	TRACE_FUNCTION ("mmi_fv_view_exec_cb()");
+
+	switch (event)
+	{
+	case FV_INIT:
+		TRACE_EVENT("init");
+		status = mmi_fv_read_jpeg_file(fv_menu_data.fv_list_idx);
+		
+		//Display the decoded jpeg image in QCIF-RGB565 format on LCD.
+		if(status  == 1)
+			winShow(data->win);
+		else
+			mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileTooBig, TxtNull, NULL);
+	break;
+
+	case FV_RETURN:
+	break;
+	default:
+	TRACE_EVENT("Err: Default");
+	return;
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_start
+
+ $Description:	called when the user press  the Option menu
+ 
+ $Returns:		execution status
+
+ $Arguments:	parent_window -parent window handle
+ 				menuAttr - Menu attributes.
+ 
+*******************************************************************************/
+
+T_MFW_HND mmi_fv_opt_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
+{
+    T_MFW_HND win;
+
+    TRACE_FUNCTION ("mmi_fv_opt_start()");
+
+    fv_optwin = (T_MFW_HND)mmi_fv_opt_create ((MfwHnd)parent_window);
+
+    if (fv_optwin NEQ NULL)
+	{
+	    SEND_EVENT (fv_optwin, FV_INIT, NULL, (void *)menuAttr);
+	}
+    return fv_optwin;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_create
+
+ $Description:	Create the Option window
+ 
+ $Returns:		mfw window handle
+
+ $Arguments:	parent_window -parent window handle
+ 			
+*******************************************************************************/
+
+static T_MFW_HND mmi_fv_opt_create(MfwHnd parent_window)
+{
+    T_fv_opt      * data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
+    T_MFW_WIN  * win;
+
+    TRACE_FUNCTION ("mmi_fv_opt_create()");
+
+    /*
+     * Create window handler
+     */
+
+    data->win = 
+	win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_fv_opt_win_cb);
+    if (data->win EQ NULL)
+	{
+	    return NULL;
+	}
+    /* 
+     * connect the dialog data to the MFW-window
+     */
+
+    data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_opt_exec_cb;
+    data->mmi_control.data   = data;
+    win                      = ((T_MFW_HDR *)data->win)->data;
+    win->user                = (void *)data;
+    data->parent             = parent_window;
+
+    /*
+     * return window handle
+     */
+
+    return data->win;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_destroy
+
+ $Description:	Destroy the Option window
+ 
+ $Returns:		mfw window handle
+
+ $Arguments:	own_window - current window
+ 			
+*******************************************************************************/
+
+static void mmi_fv_opt_destroy(MfwHnd own_window)
+{
+    T_MFW_WIN * win_data;
+    T_fv_opt     * data;
+
+    TRACE_FUNCTION ("mmi_fv_opt_destroy()");
+
+    if (own_window)
+	{
+	    win_data = ((T_MFW_HDR *)own_window)->data;
+	    data = (T_fv_opt *)win_data->user;
+
+	    if (data)
+		{
+		    /*
+		     * Delete WIN handler
+		     */ 
+
+			if (data->kbd)
+			{
+				kbd_delete(data->kbd);
+				data->kbd = NULL;
+			}
+			if (data->kbd_long)
+			{
+				kbd_delete(data->kbd_long);
+				data->kbd_long = NULL;
+			}
+			if (data->menu)
+			{
+				mnuDelete(data->menu);
+				data->menu=NULL;
+			}
+			
+		    win_delete (data->win);
+
+		    /*     
+		     * Free Memory
+		     */
+		    FREE_MEMORY ((void *)data, sizeof (T_fv_opt));
+		}
+	    else
+		{
+		    TRACE_EVENT ("mmi_fv_opt_destroy() called twice");
+		}
+	}
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_win_cb
+
+ $Description:	Window callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				w - window handle 
+*******************************************************************************/
+
+static int mmi_fv_opt_win_cb (MfwEvt e, MfwWin *w)
+{
+    TRACE_FUNCTION ("mmi_fv_opt_win_cb()");
+
+    switch (e)
+	{
+        case MfwWinVisible:  /* window is visible  */
+		dspl_ClearAll();
+	    displaySoftKeys(TxtSoftSelect,TxtSoftBack);
+	    break;
+	case MfwWinFocussed: /* input focus / selected   */
+	case MfwWinDelete:   /* window will be deleted   */
+        default:
+	    return MFW_EVENT_REJECTED;
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_view_win_cb
+
+ $Description:	Window callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				w - window handle 
+*******************************************************************************/
+
+static int mmi_fv_view_win_cb (MfwEvt e, MfwWin w)
+{
+    TRACE_FUNCTION ("mmi_fv_view_win_cb()");
+
+    switch (e)
+	{
+        case MfwWinVisible:  /* window is visible  */
+		dspl_ClearAll();
+		displaySoftKeys(TxtSoftOptions,TxtSoftBack);
+		//Display the image now.
+		mmi_fv_display_image();		
+	    break;
+	case MfwWinFocussed: /* input focus / selected   */
+	case MfwWinDelete:   /* window will be deleted   */
+        default:
+	    return MFW_EVENT_REJECTED;
+	}
+    return MFW_EVENT_CONSUMED;
+}
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_exec_cb
+
+ $Description:	Exec callback function for the Option window
+ 
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				value - unique id
+ 				parameter - optional data.
+ 			
+*******************************************************************************/
+
+void mmi_fv_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+ {
+	T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_opt * data     = (T_fv_opt *)win_data->user;
+	T_MFW_HDR    * parent      =  data->parent;
+	T_MFW_WIN    * win_data2   =  ((T_MFW_HDR *)parent)->data;
+	T_fv_menu* parent_data =  (T_fv_menu *)win_data2->user;
+
+
+    TRACE_FUNCTION ("mmi_fv_opt_exec_cb()");
+
+
+    switch (event)
+	{
+	case FV_INIT:
+		
+		TRACE_EVENT("mmi_fv_opt_exec_cb() Event:5.FV_INIT");
+		/* initialization of administrative data */
+		data->parent_data = parent_data;		
+		data->id = value;
+		data->kbd =      kbdCreate(data->win,KEY_ALL,         (MfwCb)mmi_fv_opt_kbd_cb);
+		data->kbd_long = kbdCreate(data->win,KEY_ALL|KEY_LONG,(MfwCb)mmi_fv_opt_kbd_cb);
+		data->menu =     mnuCreate(data->win,(MfwMnuAttr*)parameter, E_MNU_ESCAPE, (MfwCb)mmi_fv_opt_mnu_cb);
+		mnuLang(data->menu,mainMmiLng);
+		/* put the (new) dialog window on top of the window stack */
+		mnuUnhide(data->menu);
+		winShow(win);
+	    break;
+	default:
+	    return;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_kbd_cb
+
+ $Description:	Exec callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				k - keyboard info
+*******************************************************************************/
+
+static int mmi_fv_opt_kbd_cb (MfwEvt e, MfwKbd *k)
+  {
+    T_MFW_HND    win  = mfwParent(mfw_header());
+    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt      * data = (T_fv_opt *)win_data->user;
+
+    TRACE_FUNCTION ("mmi_fv_opt_kbd_cb()");
+
+	if (e & KEY_LONG)
+	{
+		switch (k->code)
+		{
+		case KCD_HUP: /* back to previous menu */
+			mnuEscape(data->menu);
+		break;
+		case KCD_RIGHT: /* Power Down */
+			return MFW_EVENT_REJECTED; /* handled by idle */
+		default: /* no response to all other keys */
+			return MFW_EVENT_CONSUMED;
+		}
+	}
+    else
+	{
+	    switch (k->code)
+		{
+		case KCD_MNUUP: /* highlight previous entry */
+		    mnuUp(data->menu);
+		    break;
+		case KCD_MNUDOWN: /* highlight next entry */
+		    mnuDown(data->menu);
+		    break;
+		case KCD_MNUSELECT:
+		case KCD_LEFT: /* activate this entry */
+		    mnuSelect(data->menu);
+		    break;
+		case KCD_HUP: /* back to previous menu */
+		case KCD_RIGHT: /* back to previous menu */
+		    mnuEscape(data->menu);
+		    break;
+		default: /* no response to all other keys */
+		    return MFW_EVENT_CONSUMED;
+		}
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_view_kbd_cb
+
+ $Description:	Exec callback function for the view window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				k - keyboard info
+*******************************************************************************/
+
+static int mmi_fv_view_kbd_cb (MfwEvt e, MfwKbd *k)
+   {
+    T_MFW_HND    win  = mfwParent(mfw_header());
+    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt      * data = (T_fv_opt *)win_data->user;
+
+    TRACE_FUNCTION ("mmi_fv_view_kbd_cb()");
+
+	switch (k->code)
+	{
+	case KCD_LEFT:
+		TRACE_EVENT("mmi_fv_view_kbd_cb,INFO_KCD_LEFT ");
+		bookMenuStart(data->win, ViewOptionsMenuAttributes(),0);
+		break;
+  
+	case KCD_RIGHT:
+	case KCD_HUP:
+		TRACE_EVENT("mmi_fv_view_kbd_cb,INFO_KCD_RIGHT ");
+		mmi_fv_opt_destroy(data->win);
+		break;
+	default:
+		
+		break;
+	
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_opt_mnu_cb
+
+ $Description:	Menu callback function for the Option window
+ 
+ $Returns:		none
+
+ $Arguments:	e - event id
+ 				m - menu handle
+*******************************************************************************/
+
+static int mmi_fv_opt_mnu_cb (MfwEvt e, MfwMnu *m)
+    
+{
+    T_MFW_HND    win  = mfwParent(mfw_header());
+    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt      * data = (T_fv_opt *)win_data->user;
+  
+    TRACE_FUNCTION ("mmi_fv_opt_mnu_cb()");
+
+    switch (e)
+        {
+		case E_MNU_ESCAPE: /* back to previous menu */
+			mmi_fv_opt_destroy(data->win);
+		break;
+		default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
+			return MFW_EVENT_REJECTED;
+        }
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+  $Function:	  mmi_fv_rotate_start
+  
+  $Description:	  This function creates and displays the  Roate menu .
+	
+  $Returns:		  Execution status
+	  
+  $Arguments:	  m - menu handler
+				  i - Menu item selected
+		
+*******************************************************************************/
+
+ int mmi_fv_rotate_start(MfwMnu* m, MfwMnuItem* i)
+{
+	
+    T_MFW_HND       win  = mfwParent(mfw_header());
+    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt * data = (T_fv_opt *)win_data->user;
+	TRACE_FUNCTION("mmi_fv_rotate_start");
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+	
+	/* Create the  Rotate menu*/
+	bookMenuStart(data->win, rotateMenuAttributes(),0);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+  $Function:	  mmi_fv_zoom_start
+  
+  $Description:	  This function creates and displays the  Zoom menu .
+	
+  $Returns:		  Execution status
+	  
+  $Arguments:	  m - menu handler
+				  i - Menu item selected
+		
+*******************************************************************************/
+
+int mmi_fv_zoom_start(MfwMnu* m, MfwMnuItem* i)
+{
+	
+    T_MFW_HND       win  = mfwParent(mfw_header());
+    T_MFW_WIN     * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt * data = (T_fv_opt *)win_data->user;
+	TRACE_FUNCTION("mmi_fv_zoom_start");
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+	
+	/* Create the  Zoom menu*/
+	bookMenuStart(data->win, zoomMenuAttributes(),0);
+	
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_GetExtension
+
+ $Description: public function to retrieve the extension of a file
+
+ $Returns:Extention of the filename
+
+ $Arguments: scr- Filename
+
+*******************************************************************************/
+ char *mmi_fv_GetExtension(char *src)
+{
+    int i;
+		TRACE_FUNCTION("mmi_fv_GetExtension");
+    for(i = 0; i < strlen(src); i++){
+        if(src[i] == '.'){
+            return (src+i+1);
+        }
+    }
+    return (src+i);
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_delete_start
+
+ $Description:  This function is called when the user press Delete .
+
+ $Returns:    Execution status
+
+ $Arguments:  m - menu handler
+        i - Menu item selected
+
+*******************************************************************************/
+int mmi_fv_delete_start(MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND     	   win      = mfwParent(mfw_header());
+	 T_DISPLAY_DATA display_info;
+
+	TRACE_FUNCTION("mmi_fv_delete_start");
+	//Check whether files are present
+	if ( mmi_fv_get_file_count() == 0)
+		{	
+			/*tell user*/
+			mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtEmptyList, TxtNull, NULL);
+		}
+		else
+		{ 
+			TRACE_EVENT("files are present");
+			TRACE_EVENT_P1("delete_index is %d",fv_menu_data.fv_list_idx);
+			TRACE_EVENT_P1("The selected file = %s",jpegFiles[fv_menu_data.fv_list_idx]);
+			dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtSoftBack, TxtDeleteConfirm, TxtNull, COLOUR_STATUS);
+			dlg_initDisplayData_events( &display_info, (T_VOID_FUNC)mmi_fv_delete_cb, FOREVER, KEY_LEFT |KEY_RIGHT|KEY_CLEAR|KEY_HUP);
+			info_dialog (win, &display_info);
+				
+		}
+	return MFW_EVENT_CONSUMED;
+
+}
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_delete_cb
+
+ $Description:  Exec callback function for the delete window
+
+
+ $Returns:    none
+
+ $Arguments:  win - current win
+     			Identifier-
+     			reason-
+
+*******************************************************************************/
+static void mmi_fv_delete_cb (T_MFW_HND win, USHORT Identifier, SHORT reason)
+{
+	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_opt         * data = (T_fv_opt *)win_data->user;
+	int status;
+
+	TRACE_FUNCTION ("mmi_fv_delete_cb()");
+
+	switch (reason)
+	{
+		case INFO_KCD_LEFT:
+			TRACE_EVENT("file has been left");
+
+			//Delete the selected file from FFS.
+			status=mmi_fv_delete_jpeg_file((UBYTE)fv_menu_data.fv_list_idx);
+			if(status>0)
+				{
+					mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtDeleted, TxtNull, NULL);
+				}
+			SEND_EVENT(data->parent, FV_INIT, Identifier, NULL);
+		break;
+		case INFO_KCD_RIGHT:
+		case INFO_KCD_HUP:
+				TRACE_EVENT("file has been back");
+		break;
+		default:
+		break;
+	}
+	mmi_fv_opt_destroy(fv_optwin);
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_read_jpeg_file
+
+ $Description:	reads the contents of the file into the buffer .
+ $Returns: Status
+
+ $Arguments:index: Index of the file to be read from FFS.
+
+*******************************************************************************/
+GLOBAL int mmi_fv_read_jpeg_file(UBYTE index)
+{
+    T_FFS_FD	file_handle	= 0;
+    SHORT		readStatus	= 1;
+	//Aug 31, 2005    REF: SPR 34050 xdeepadh
+	//The filename will have the full path details
+     char		file_name[FV_DIR_PATH_LENGTH];
+    
+   	
+   	TRACE_FUNCTION ("mmi_fv_read_jpeg_file()");
+   	
+	strcpy((char*)file_name,FV_DIR_NAME);
+	strcat((char*)file_name, (const char*)jpegFiles[index]);
+	
+	TRACE_EVENT_P1("The selected file = %s",jpegFiles[index]);
+	
+	file_handle = ffs_open(file_name,FFS_O_RDONLY);
+	if(file_handle <0)
+	{
+		readStatus = -1;  
+		mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtFileNotLoaded, TxtNull, NULL);
+	}
+	else
+	{
+		UINT16 Ffs_stat;
+		struct stat_s  stat;
+		Ffs_stat = ffs_stat(file_name,&stat);
+		
+		TRACE_EVENT_P1("read jpg size: %d", stat.size);
+			if (Ffs_stat != 0)            
+				TRACE_EVENT_P1("read jpg size: %d", stat.size);	
+			if(stat.size   >=  FV_MAX_JPEG_SIZE )
+				{
+					TRACE_EVENT_P1("File zise too big: %d", stat.size);	
+					readStatus = -1;
+					//Aug 30, 2005    REF:SPR 34049 xdeepadh
+					//Close the file handle
+					ffs_close(file_handle);
+					return readStatus;
+				}
+			memset(jpeg_test_array,0,FV_MAX_JPEG_SIZE);	
+			Ffs_stat = ffs_read(file_handle, (UBYTE *)jpeg_test_array, stat.size);	
+			TRACE_EVENT_P1("read jpg file size: %d", Ffs_stat);	
+			ffs_close(file_handle);
+	}
+	return readStatus;
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_delete_jpeg_file
+
+ $Description:	delete the selected file  from FFS.
+ $Returns:Status
+
+ $Arguments:  index: Index of the file to be read from FFS.
+
+*******************************************************************************/
+GLOBAL int  mmi_fv_delete_jpeg_file(UBYTE index)
+{
+//Aug 31, 2005    REF: SPR 34050 xdeepadh
+//The filename will have the full path details
+    char		file_name[FV_DIR_PATH_LENGTH];
+    T_FFS_RET status;
+   	
+   	TRACE_FUNCTION ("mmi_fv_delete_jpeg_file()");
+   	
+	strcpy((char*)file_name,FV_DIR_NAME);
+	strcat((char*)file_name, (const char*)jpegFiles[index]);
+	
+	TRACE_EVENT_P1("The selected file = %s",jpegFiles[index]);
+	TRACE_EVENT_P1("The deleted file = %s",file_name);
+	
+	status = ffs_remove(file_name);
+	if (status == EFFS_OK)
+	{
+		//Populate the list again
+		file_count = 0;
+		mmi_fv_init(&file_count);
+	}
+	return status;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_display_image
+
+ $Description:	The decoded and color converted image is displayed onto the screen.
+
+ $Returns:Status
+
+ $Arguments:None
+
+*******************************************************************************/
+
+GLOBAL int mmi_fv_display_image()
+{
+	UBYTE status = 0;
+	TRACE_FUNCTION("mmi_fv_display_image()");
+
+	status = mfw_fv_decode_image(jpeg_test_array,sizeof(jpeg_test_array));
+	if(status)
+	{
+	TRACE_FUNCTION("mmi_fv_display_image()--OK");
+		//return MFW_EVENT_CONSUMED;
+	}
+	else
+	{
+	TRACE_FUNCTION("mmi_fv_display_image()--Fail");
+		//return MFW_EVENT_REJECTED;
+	}
+
+	return MFW_EVENT_CONSUMED;
+
+}
+
+/*******************************************************************************
+
+ $Function:     mmi_fv_reame_edit
+
+ $Description:  This function is called when the user press rename .
+
+ $Returns:    Execution status
+
+ $Arguments:  m - menu handler
+        i - Menu item selected
+
+*******************************************************************************/
+GLOBAL int mmi_fv_reame_edit(MfwMnu* m, MfwMnuItem* i)
+{
+	T_MFW_HND win = mfw_parent(mfw_header());
+	//T_MFW_WIN		* win_data = ((T_MFW_HDR *) win)->data;
+	T_MFW_HND win_temp;
+	//T_FV_Editor_Data * data = (T_FV_Editor_Data *)(win_data->user);
+
+    TRACE_FUNCTION ("mmi_fv_reame_edit()");
+
+	win_temp = mmi_fv_editor_create(win);
+
+	if (win_temp != NULL)
+	{
+	    SEND_EVENT(win_temp, FV_INIT, 0, (void *)NULL);
+	}
+	else
+	{
+	    TRACE_FUNCTION ("mmi_fv_reame_edit() : Unable to create Editor Win!");
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_editor_create
+
+ $Description:	Create a window for renaming the image file name
+ 
+ $Returns:		window handle
+
+ $Arguments:	parent - parent window.
+ 				
+*******************************************************************************/
+
+
+T_MFW_HND mmi_fv_editor_create(T_MFW_HND parent)
+{
+	T_FV_Editor_Data *data;
+	T_MFW_WIN * win;
+
+	TRACE_FUNCTION ("mmi_fv_editor_create");
+
+	data = (T_FV_Editor_Data *)mfwAlloc((U16)sizeof(T_FV_Editor_Data));
+
+	if (data == NULL)
+		return data;
+
+	data->win = winCreate(parent, 0, E_WIN_VISIBLE, NULL);
+
+	if (data->win == NULL)
+	{
+		/*
+		** Failed to start : Free Memory, and exit
+		*/
+		mfwFree((U8 *)data, (U16)sizeof(T_FV_Editor_Data));
+		data = NULL;
+		return data;
+	}
+	else
+	{
+		/*
+		** Setup the Dialog control functions
+		*/
+		data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_editor_cntrl;
+		data->mmi_control.data = data;
+		
+		win = ((T_MFW_HDR *)data->win)->data;
+		win->user = (void *)data;
+	}
+
+	return data->win;
+
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_editor_cntrl
+
+ $Description:	Exec callback function for the rename window
+ 
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				value - unique id
+ 				parameter - optional data.
+ 			
+*******************************************************************************/
+void mmi_fv_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
+{
+	T_MFW_WIN			* win_data = ((T_MFW_HDR *) win)->data;
+	T_FV_Editor_Data * data = (T_FV_Editor_Data *)win_data->user;
+	T_AUI_EDITOR_DATA	editor_data;
+//Aug 31, 2005    REF: SPR 34050 xdeepadh
+//The filename will have the full path details	
+	char  new_filename[FV_DIR_PATH_LENGTH];
+	char selected_file[FV_DIR_PATH_LENGTH];
+	int status = 0;
+
+	switch (event)
+	{
+		case FV_INIT:
+#ifdef NEW_EDITOR
+                      //Clear the editor buffer
+			memset(&editor_data,'\0',sizeof(editor_data));
+			// Get the name from FFS
+			TRACE_EVENT_P1("The file to be renamed file = %s",jpegFiles[fv_menu_data.fv_list_idx]);
+			strcpy((char *)data->fv_buffer, (const char*)jpegFiles[fv_menu_data.fv_list_idx]);
+			
+			/*
+			** Initialise the editor
+			*/
+			AUI_edit_SetDefault(&editor_data);
+			AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->fv_buffer, FV_FILE_NAME_LENGTH);
+			AUI_edit_SetTextStr(&editor_data, TxtSoftOK, TxtDelete, TxtRename, NULL);
+			AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtSoftBack);
+			AUI_edit_SetEvents(&editor_data, 0, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_rename_editor_cb);
+			data->fv_win_editor = AUI_edit_Start(data->win, &editor_data);
+#endif
+			break;
+
+		case FV_EDITOR_CANCEL:
+			/*
+			** The editor will have been destroyed. Reset the Window handler
+			*/
+			data->fv_win_editor = NULL;
+			/*
+			** Destroy the editor Window
+			*/
+			TRACE_FUNCTION ("mmi_fv_editor_cntrl cancel");
+			mmi_fv_editor_destroy(data->win);
+			mmi_fv_opt_destroy(fv_optwin);
+			break;
+
+		case FV_EDITOR_ERROR:		
+			//Aug 31, 2005    REF: SPR 34050 xdeepadh
+			//Display the error message to the user
+			mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtNoExtension, TxtNull, NULL);
+			/*
+			** The editor will have been destroyed. Reset the Window handler
+			*/
+			data->fv_win_editor = NULL;
+			/*
+			** Destroy the editor Window
+			*/
+			TRACE_FUNCTION ("mmi_fv_editor_cntrl cancel");
+			mmi_fv_editor_destroy(data->win);
+			mmi_fv_opt_destroy(fv_optwin);
+			break;
+
+		case FV_EDITOR_SELECT:
+			//copy the file name from the editor
+			strcpy(new_filename,FV_DIR_NAME);
+			strcat(new_filename,(char *)data->fv_buffer);
+			TRACE_EVENT_P1("new_filename %s",new_filename);	
+			
+			strcpy(selected_file,FV_DIR_NAME);
+			strcat(selected_file,(char*)jpegFiles[fv_menu_data.fv_list_idx]);
+			TRACE_EVENT_P1("selected_file %s",selected_file);	
+
+			// Rename the file in FFS.
+			status = ffs_rename(selected_file,new_filename);
+
+			TRACE_EVENT_P1("status is %d",status);	
+			//Jan 03, 2006    REF: SPR OMAPS00060036  xdeepadh
+			//While renaming the file,if the name already exists,  display a proper error message.
+			switch(status)
+				{
+
+				case EFFS_OK:
+					//Populate the list again
+					file_count = 0;
+					mmi_fv_init(&file_count);
+					break;
+					
+				case  EFFS_EXISTS:
+					mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtFileExists, TxtNull, NULL);
+					break;
+				default:
+					//Display the error message to the user
+					mmi_fv_test_show_info(0, TxtNull,TxtNull,TxtWrongFilename, TxtNull, NULL);
+				}
+			
+			/*
+			** Destroy the Editor Window
+			*/
+			mmi_fv_editor_destroy(data->win);
+			mmi_fv_opt_destroy(fv_optwin);
+						
+			break;
+
+		default:
+			TRACE_FUNCTION ("mmi_fv_editor_cntrl(), Unexpected Event!"); 
+			break;
+	}
+
+
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_editor_destroy
+
+ $Description:	Destroy the  rename editor window
+ 
+ $Returns:		mfw window handle
+
+ $Arguments:	own_window - current window
+ 			
+*******************************************************************************/
+MfwRes mmi_fv_editor_destroy(T_MFW_HND win)
+{
+	T_MFW_WIN * win_data;
+	T_FV_Editor_Data * data;
+			
+	TRACE_FUNCTION ("mmi_fv_editor_destroy");
+
+
+	if (win == NULL)
+		return MfwResIllHnd;
+
+	win_data = ((T_MFW_HDR *) win)->data;
+	data = (T_FV_Editor_Data *)win_data->user;
+
+	/*
+	** Destroy the Window
+	*/
+	win_delete(data->win);
+
+	/*
+	** Free the dynamically allocated memory
+	*/
+	mfwFree((U8 *)data, (U16)sizeof(T_FV_Editor_Data));
+
+	return MfwResOk;
+}
+
+/*******************************************************************************
+
+ $Function:		mmi_rename_editor_cb
+
+ $Description:		This function provides the callback functionality to an editor for file viewer
+
+ $Returns:		None
+
+ $Arguments:	win - current window
+        identifier -
+        reason -
+*******************************************************************************/
+
+static void mmi_rename_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason)
+{
+	T_MFW_WIN		* win_data = ((T_MFW_HDR *) win)->data;
+    T_FV_Editor_Data* dev_name_data = (T_FV_Editor_Data *)win_data->user;
+
+	UBYTE			* editor_buffer = NULL;
+	SHORT			max_edit_size = 0;
+	T_MFW_HND		editor_win;
+	T_MFW_HND		parent;
+	char * fileExt;
+
+    TRACE_FUNCTION ("mmi_rename_editor_cb()");
+
+		editor_buffer = dev_name_data->fv_buffer;
+		max_edit_size = FV_FILE_NAME_LENGTH - 1;
+		editor_win = dev_name_data->fv_win_editor;
+		parent = dev_name_data->win;
+	
+	switch (reason)
+	{
+		case INFO_KCD_LEFT:
+		{	
+			/*
+			** If there is no string entered, treat this as if it was a "Cancel"
+			*/
+			if (editor_buffer[0] == NULL)
+			{
+				/*
+				** Send a "Cancel" to the  window
+				*/
+				SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
+			}
+			else
+			{
+				//If the file extn is not jpg, send cancel event
+				fileExt = (char *)mmi_fv_GetExtension((char *)editor_buffer);
+				if ( (strcmp(fileExt, "jpg") != 0))
+				{
+					//Aug 31, 2005    REF: SPR 34050 xdeepadh
+					/*
+					** Send a "Error" to the  window
+					*/
+					SEND_EVENT(parent, FV_EDITOR_ERROR, identifier, NULL);
+				}
+				else
+				{
+					/*
+					** Send a "Select" to the  window
+					*/
+					SEND_EVENT(parent, FV_EDITOR_SELECT, identifier, NULL);
+				}
+			}
+		}
+		break;
+
+		case INFO_KCD_RIGHT:
+			if (strlen((char *)editor_buffer) == NULL)
+			{
+
+				/*
+				** Send a "Cancel" to the  window
+				*/
+				SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
+			}
+			break;
+
+		case INFO_KCD_HUP:
+			/*
+			** Set the buffer to NULLS
+			*/
+			memset(editor_buffer, NULL, max_edit_size);
+
+			/*
+			** Send a "Cancel" to the   window
+			*/
+			SEND_EVENT(parent, FV_EDITOR_CANCEL, identifier, NULL);
+			break;
+
+		default:
+			/* otherwise no action to be performed
+			*/
+			break;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_rotate_image_start
+
+ $Description:	Create window for displaying the rotated image.
+ 
+ $Returns:		none
+ 
+ $Arguments:	m - menu handler
+ 				i - menu item selected.
+*******************************************************************************/
+int mmi_fv_rotate_image_start(T_MFW_HND parent) 
+{
+	T_MFW_HND win;
+	win = (T_MFW_HND)mmi_fv_rotate_image_create((MfwHnd)parent);
+	TRACE_FUNCTION ("mmi_fv_rotate_image_start");
+	if (win NEQ NULL)
+	{
+		SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
+	}
+
+  	return MFW_EVENT_CONSUMED;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_rotate_image_create
+
+ $Description:	Create a window for rotating the image.
+ 
+ $Returns:		window handle
+
+ $Arguments:	parent_window - parent window.
+ 				
+*******************************************************************************/
+
+static T_MFW_HND mmi_fv_rotate_image_create(MfwHnd parent_window)
+{
+	T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
+	T_MFW_WIN  * win;
+
+	TRACE_FUNCTION ("mmi_fv_rotate_image_create()");
+
+	// Create window handler
+	data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_rotate_win_cb);
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+
+	// connect the dialog data to the MFW-window
+	data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_rotate_exec_cb;
+	data->mmi_control.data   = data;
+	win                      = ((T_MFW_HDR *)data->win)->data;
+	win->user                = (MfwUserDataPtr)data;
+	data->parent             = parent_window;
+	//Create keyboard handler
+        data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_rotate_kbd_cb);
+	winShow(data->win);
+	return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_rotate_exec_cb
+
+ $Description:	Callback handler for events sent by the images editor
+
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				parameter - optional data.
+*******************************************************************************/
+
+static void mmi_fv_rotate_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
+{	
+	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_opt         * data = (T_fv_opt *)win_data->user;
+	int status;
+
+	TRACE_FUNCTION ("mmi_fv_rotate_exec_cb()");
+
+	switch (event)
+	{
+	case FV_INIT:
+		TRACE_EVENT("init");
+		status = mfw_fv_rotate_image();
+		if(!status)
+		{
+			mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtError, TxtNull, NULL);
+		}	
+	break;
+
+	case FV_RETURN:
+				
+	break;
+	default:
+	TRACE_EVENT("Err: Default");
+	return;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_rotate_win_cb
+
+ $Description:	Window callback function for the rotate window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				w - window handle 
+*******************************************************************************/
+
+static int mmi_fv_rotate_win_cb (MfwEvt e, MfwWin w)
+{
+    TRACE_FUNCTION ("mmi_fv_rotate_win_cb()");
+
+    switch (e)
+	{
+        case MfwWinVisible:  /* window is visible  */
+		dspl_ClearAll();
+	    displaySoftKeys(TxtNull,TxtSoftBack);
+	    break;
+	case MfwWinFocussed: /* input focus / selected   */
+	case MfwWinDelete:   /* window will be deleted   */
+        default:
+	    return MFW_EVENT_REJECTED;
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_rotate_kbd_cb
+
+ $Description:	Exec callback function for the rotate window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				k - keyboard info
+*******************************************************************************/
+
+static int mmi_fv_rotate_kbd_cb (MfwEvt e, MfwKbd *k)
+   {
+    T_MFW_HND    win  = mfwParent(mfw_header());
+    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt      * data = (T_fv_opt *)win_data->user;
+
+    TRACE_FUNCTION ("mmi_fv_rotate_kbd_cb()");
+
+	switch (k->code)
+	{
+	case KCD_LEFT:
+		TRACE_EVENT("mmi_fv_rotate_kbd_cb,INFO_KCD_LEFT ");
+		break;
+  
+	case KCD_RIGHT:
+	case KCD_HUP:
+		TRACE_EVENT("mmi_fv_rotate_kbd_cb,INFO_KCD_RIGHT ");
+		mmi_fv_opt_destroy(data->win);
+		break;
+	default:
+		
+		break;
+
+	}
+		return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_zoom_image_start
+
+ $Description:	Create window for displaying the zoomed image.
+ 
+ $Returns:		none
+ 
+ $Arguments:	m - menu handler
+ 				i - menu item selected.
+*******************************************************************************/
+int mmi_fv_zoom_image_start(T_MFW_HND parent) 
+{
+	T_MFW_HND win;
+	win = (T_MFW_HND)mmi_fv_zoom_image_create((MfwHnd)parent);
+	TRACE_FUNCTION ("mmi_fv_zoom_image_start");
+	if (win NEQ NULL)
+	{
+		SEND_EVENT(win,FV_INIT,FV_OPT_ID,0);
+	}
+	return MFW_EVENT_CONSUMED;
+
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_zoom_image_create
+
+ $Description:	Create a window for zooming the image.
+ 
+ $Returns:		window handle
+
+ $Arguments:	parent_window - parent window.
+ 				
+*******************************************************************************/
+
+static T_MFW_HND mmi_fv_zoom_image_create(MfwHnd parent_window)
+{
+	T_fv_opt* data = (T_fv_opt *)ALLOC_MEMORY (sizeof (T_fv_opt));
+	T_MFW_WIN  * win;
+
+	TRACE_FUNCTION ("mmi_fv_zoom_image_create()");
+
+	// Create window handler
+	data->win = win_create (parent_window, 0, E_WIN_VISIBLE,(MfwCb)mmi_fv_zoom_win_cb);
+	if (data->win EQ NULL)
+	{
+		return NULL;
+	}
+
+	// connect the dialog data to the MFW-window
+	data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_fv_zoom_exec_cb;
+	data->mmi_control.data   = data;
+	win                      = ((T_MFW_HDR *)data->win)->data;
+	win->user                = (MfwUserDataPtr)data;
+	data->parent             = parent_window;
+	//Create keyboard handler
+        data->kbd = kbd_create (data->win,KEY_ALL,(T_MFW_CB)mmi_fv_zoom_kbd_cb);
+	winShow(data->win);
+	return data->win;
+}
+
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_zoom_exec_cb
+
+ $Description:	Callback handler for events sent by the images editor
+
+ $Returns:		none
+
+ $Arguments:	win - current window
+ 				event - event id
+ 				parameter - optional data.
+*******************************************************************************/
+
+static void mmi_fv_zoom_exec_cb(T_MFW_HND win, USHORT event, void *parameter)
+{	
+	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
+	T_fv_opt         * data = (T_fv_opt *)win_data->user;
+	int status;
+
+	TRACE_FUNCTION ("mmi_fv_zoom_exec_cb()");
+
+	switch (event)
+	{
+	case FV_INIT:
+		TRACE_EVENT("init");
+		status = mfw_fv_zoom_image();
+		if(!status)
+		{
+			mmi_fv_test_show_info(0,TxtNull,TxtNull, TxtError, TxtNull, NULL);
+		}	
+			
+	break;
+
+	case FV_RETURN:
+		
+	break;
+	default:
+	TRACE_EVENT("Err: Default");
+	return;
+	}
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_zoom_win_cb
+
+ $Description:	Window callback function for the Option window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				w - window handle 
+*******************************************************************************/
+
+static int mmi_fv_zoom_win_cb (MfwEvt e, MfwWin w)
+{
+    TRACE_FUNCTION ("mmi_fv_zoom_win_cb()");
+
+    switch (e)
+	{
+        case MfwWinVisible:  /* window is visible  */
+		dspl_ClearAll();
+	    displaySoftKeys(TxtNull,TxtSoftBack);
+	    break;
+	case MfwWinFocussed: /* input focus / selected   */
+	case MfwWinDelete:   /* window will be deleted   */
+        default:
+	    return MFW_EVENT_REJECTED;
+	}
+    return MFW_EVENT_CONSUMED;
+}
+
+/*******************************************************************************
+
+ $Function:    	mmi_fv_zoom_kbd_cb
+
+ $Description:	Exec callback function for the zoom window
+ 
+ $Returns:		execution status
+
+ $Arguments:	e - event id
+ 				k - keyboard info
+*******************************************************************************/
+
+static int mmi_fv_zoom_kbd_cb (MfwEvt e, MfwKbd *k)
+   {
+    T_MFW_HND    win  = mfwParent(mfw_header());
+    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
+    T_fv_opt      * data = (T_fv_opt *)win_data->user;
+
+    TRACE_FUNCTION ("mmi_fv_zoom_kbd_cb()");
+
+	switch (k->code)
+	{
+	case KCD_LEFT:
+		TRACE_EVENT("mmi_fv_zoom_kbd_cb,INFO_KCD_LEFT ");
+		break;
+  
+	case KCD_RIGHT:
+	case KCD_HUP:
+		TRACE_EVENT("mmi_fv_zoom_kbd_cb,INFO_KCD_RIGHT ");
+		mmi_fv_opt_destroy(data->win);
+		break;
+	default:
+		
+		break;
+	
+	}
+	return MFW_EVENT_CONSUMED;
+}
+
+