⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmicamera.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
halWriteDisplay8(addr2+128*16, 0x01, 128*96);//设置透明区域
halWriteData(sizeof(UInt16),addr1, background,128*96*2);//在主窗口上显示一幅图
clStartOneFrameTransfer();//刷屏
//end overlay

#endif
}


/***********************************************************************************
 *
 *  模块:   浏览记录模块 
 *
 *  描述:   负责对ffs里照片的浏览和改名等
 *
 *  历史:   2004.7.1 WYJ 创建
 *  
 ***********************************************************************************/
 
/* 模块内部使用的宏 */

/* 浏览窗口状态 */
#define CAM_B_LIST          1
#define CAM_B_PIC           2
#define CAM_B_OPTION        3
#define CAM_B_EDITOR        4
#define CAM_B_PROPERTY      5

/* Cam_Browse_Destroy 里用到的参数 */ 
#define MAIN_WIN            0x0001
#define LIST_WIN            0x0002
#define ALL_WIN             0xFF


/* 浏览窗口数据*/
typedef struct
{
	T_MMI_CONTROL   mmi_control;
	T_MFW_HND       parent_win;
	T_MFW_HND       win;
	T_MFW_HND       kbd;
    ListMenuData    *menu_list_data;		// 按名称浏览列表
	int				winstate;				// 窗口状态
	int				pic_index;				// 当前显示的图片序号
	T_MFW_HND       menu_win;				// 图片菜单
	T_MFW_HND       edit_win;				// 文件名编辑框
    T_EDITOR_DATA   edit_data;				// 编辑框 
    char			name[MAX_CAM_NAME];		// 文件名
}T_CAM_BROWSE;


T_MFW_HND  cam_browse_win = NULL;


/* 浏览记录窗口(当前list实现,可以考虑缩略图) */
static 	T_MFW_HND 	Cam_Browse_Create (T_MFW_HND parent_win);
static 	void 		Cam_Browse_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static 	int 		Cam_Browse_win_cb(T_MFW_EVENT event, T_MFW_WIN * win);
static 	int 		Cam_Browse_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard);
static 	int 		Cam_Browse_Destroy (T_MFW_HND win, int reason);

/* list */
static void 		Cam_Browse_List_cb(T_MFW_HND * Parent, ListMenuData * ListData);

/* 内部函数声明 */
static  void        Modify_EditorCB( T_MFW_HND win,USHORT Identifier,UBYTE reason);
static  void        Set_Modify_Editor(T_MFW_HND win);



static MfwMnuAttr Cam_menuAttrib =
{
    0,
    &menuViewListArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    NULL,                               /* with these items         */
    0                                  /* number of items			*/
};



/* 浏览记录 */
int Cam_Book_Browse(struct MfwMnuTag* m, struct MfwMnuItemTag* i)
{
T_MFW_HND 	parent 	= mfwParent( mfw_header());
T_MFW_HND 	win;
T_DISPLAY_DATA  DisplayInfo;


	dialog_info_init(&DisplayInfo);                    

	if(cam_control.file_sum == 0)		// 提示没有记录
	{
        DisplayInfo.TextId2     = TxtNorecord;                  
        DisplayInfo.Time      	= FOREVER;                 
        DisplayInfo.iconindex 	= REMIND_NORECORD;
		DisplayInfo.Callback	= NULL;
        info_dialog(parent, &DisplayInfo);
		return 1;
	}

	win	= Cam_Browse_Create(parent);

   	if(win NEQ NULL)
   	{
   	  	SEND_EVENT(win, CAM_INIT, 0, 0);
   	}
   	return 1;
}


static 	T_MFW_HND 	Cam_Browse_Create (T_MFW_HND parent_win)
{
T_MFW_WIN		*win;
T_CAM_BROWSE	*data = (T_CAM_BROWSE *)ALLOC_MEMORY (sizeof (T_CAM_BROWSE));

    if(data EQ 0)
        return 0;
    
	data->win = win_create(parent_win, 0, MfwWinVisible, (T_MFW_CB)Cam_Browse_win_cb);
	
	if (data->win EQ 0)
		return 0;

    cam_browse_win = data->win;

	data->kbd = kbd_create (data->win, KEY_ALL, (T_MFW_CB)Cam_Browse_kbd_cb);

	data->menu_list_data = NULL;
	
	/* Create window handler */
	data->mmi_control.dialog    = (T_DIALOG_FUNC)Cam_Browse_DialogCB;/* dialog main function    */
	data->mmi_control.data      = data;
	data->parent_win 			= parent_win;
	win                         = ((T_MFW_HDR *)data->win)->data;
	win->user                   = (void *) data;
	
	/* return window handle	*/
	return data->win;
}

static 	void 		Cam_Browse_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN       *win_data       = ((T_MFW_HDR *)win)->data;
T_CAM_BROWSE	*data           = (T_CAM_BROWSE *)win_data->user;
int				i;

	switch(event)
	{
	case  	CAM_INIT:
		if (cam_control.file_sum == 0) 
		{
			// 显示无数据
			Cam_Browse_Destroy(win, MAIN_WIN);
			return;
		}
		
		// 为了解决置flags, 其实什么也没画 
		winShow(data->win);

		// 创建一个浏览用的list
		data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData));
		  
	  	if(!data->menu_list_data)
		{
			Cam_Browse_Destroy(win, MAIN_WIN);
			return;  
		}
		  
		data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY(cam_control.file_sum * sizeof(T_MFW_MNU_ITEM) );
		  
		if(!data->menu_list_data->List)
		{
			FREE_MEMORY((void *)data->menu_list_data,sizeof(ListMenuData));
			Cam_Browse_Destroy(win, MAIN_WIN);
			return;   
		}

		for (i=0; i<cam_control.file_sum; i++)
		{	    
		  	data->menu_list_data->List[i].icon = GET_ICONATTR(ICON_LISTCOMMON, 0);//&colist						
		  	data->menu_list_data->List[i].exta = 0;
			data->menu_list_data->List[i].edit = 0;
			data->menu_list_data->List[i].menu = 0;
			data->menu_list_data->List[i].func = 0;
		 	data->menu_list_data->List[i].str  =(char *)cam_control.cam_file[cam_control.index[i]].file_name;
		 	data->menu_list_data->List[i].flagFunc = item_flag_none; 
		}
		data->menu_list_data->ListLength	= cam_control.file_sum;
		data->menu_list_data->ListPosition  = 1;
		data->menu_list_data->CursorPosition= 1;
		data->menu_list_data->SnapshotSize	= cam_control.file_sum;
		data->menu_list_data->Font			= 0;
		data->menu_list_data->LeftSoftKey	= TxtSelect;
		data->menu_list_data->RightSoftKey	= TxtSoftBack;
		data->menu_list_data->KeyEvents		= KEY_ALL;
		data->menu_list_data->Reason		= 0;
		data->menu_list_data->Strings		= TRUE;
		data->menu_list_data->Attr			= &Cam_menuAttrib; 
		data->menu_list_data->autoDestroy	= TRUE;
		data->menu_list_data->ListMenuFlag  = 1;
		data->menu_list_data->ListMenuHeadStr	= (char *) MmiRsrcGetText(TxtCamBook);

		data->winstate = CAM_B_LIST;	//窗口状态切换
		
		listDisplayListMenu(win, data->menu_list_data, (ListCbFunc)Cam_Browse_List_cb,0);
		break;	

	case	CAM_DESTROY:
		Cam_Browse_Destroy(win, MAIN_WIN);
		break;
	}

}

static void Cam_Browse_List_cb(T_MFW_HND * Parent, ListMenuData * ListData)
{
	T_MFW_WIN       *win_data       = ((T_MFW_HDR *)Parent)->data;
	T_CAM_BROWSE      *data           = (T_CAM_BROWSE *)win_data->user;				

	switch (ListData->Reason)
	{
	case LISTS_REASON_SEND:
	case LISTS_REASON_SELECT:                                   
	case LISTS_REASON_OK:
		data->pic_index	= ListData->CursorPosition;
		data->winstate 	= CAM_B_PIC;		
		Cam_Browse_Destroy(data->win, LIST_WIN);	
		break;

	case LISTS_REASON_BACK:													
		Cam_Browse_Destroy(data->win, LIST_WIN | MAIN_WIN);											
		break;
	}
	return;

}

static 	int 	Cam_Browse_win_cb(T_MFW_EVENT event, T_MFW_WIN * win)
{
T_CAM_BROWSE	*data = (T_CAM_BROWSE *)win->user;  
char			s[64];

	if(data->winstate == CAM_B_PIC)
	{
		switch(event)
		{
		case  MfwWinVisible:
			dspl_ClearAll();
			if (cam_control.file_sum == 0) 
			{
				//Cam_Browse_Destroy(data->win, MAIN_WIN);
				dspl_colorTextOut(0, 0, DSPL_TXTATTR_TRANSPARENT, "no record", 0x0);
				displaySoftKeys(0, TxtCancel);
				return MFW_EVENT_CONSUMED;
			}

            sprintf(s, "%02d/%02d", data->pic_index+1, cam_control.file_sum);
            dspl_colorTextOut(0, 2, DSPL_TXTATTR_TRANSPARENT, s, 0x0);
            dspl_colorTextOut(42, 2, DSPL_TXTATTR_TRANSPARENT, cam_control.cam_file[cam_control.index[data->pic_index]].file_name, 0x0);
            displaySoftKeys(TxtSoftOptions, TxtSoftBack);
//Marked by Cathy
            Overlay_Windows_Update(0, 0, 128, 16);//Marked by Cathy
            Overlay_Windows_Update(0, 112, 128, 16);//Marked by Cathy
			

            M2C_Control_Refresh(R2D_REFRESH_DISABLE);
	    Enter_Camera_Mode();
            TRACE(("M2C: to call Disp_Saved_Pic"));
			M2C_Disp_Saved_Pic(data->pic_index);

			break;

		default:
			return MFW_EVENT_REJECTED;
		}
	}
	else if(data->winstate == CAM_B_PROPERTY)
	{
		switch(event)
		{
		int     index;
        
		case  MfwWinVisible:
			dspl_ClearAll();
//2004-7-29 yangx Modify
			displayTitle( 0, (char *)MmiRsrcGetText(TxtPhotoProperty), NULL, TITLE_MIDDLE, 0x000000, 0x000000);
			dspl_TextOut(7, 23, 0, (char*)GET_TEXT(TxtPhotoSize));
			drawSolidRectangle(7,45,125,60,3,0x5AC7FF,0x5AC7FF);
			sprintf(s, "%d", cam_control.cam_file[cam_control.index[data->pic_index]].size);
			dspl_colorTextOut(11, 46, DSPL_TXTATTR_TRANSPARENT, s, 0x0);
			dspl_TextOut(7, 70, 0, (char*)GET_TEXT(TxtPhotoType));
            
			drawSolidRectangle(7,90,125,105,3,0x5AC7FF,0x5AC7FF);

			index = cam_control.cam_file[cam_control.index[data->pic_index]].jpg_type;
			sprintf(s, "%s", MmiRsrcGetText(TxtCamVGA+3-index));
			dspl_colorTextOut(11, 91, DSPL_TXTATTR_TRANSPARENT, s, 0x0);
//end yangx Modify
			
/*         
			sprintf(s, "size:%d", cam_control.cam_file[cam_control.index[data->pic_index]].size);
			dspl_colorTextOut(0, 0, DSPL_TXTATTR_TRANSPARENT, s, 0x0);

            index = cam_control.cam_file[cam_control.index[data->pic_index]].jpg_type;
            sprintf(s, "jpg type:%s", MmiRsrcGetText(TxtCamVGA+index));//
            dspl_colorTextOut(0, 20, DSPL_TXTATTR_TRANSPARENT, s, 0x0);
*/          
			displaySoftKeys(0, TxtCancel);
			break;

		default:
			return MFW_EVENT_REJECTED;
		}
}
	return MFW_EVENT_CONSUMED;
}

static 	int 	Cam_Browse_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
T_MFW_HND		win			= mfw_parent(mfw_header());
T_MFW_WIN		*win_data	= ((T_MFW_HDR *)win)->data;
T_CAM_BROWSE	*data		= (T_CAM_BROWSE*)win_data->user; 


	if(data->winstate == CAM_B_PIC)		//大图浏览
	{
		switch (keyboard->code)
		{
		case KCD_MNURIGHT:	case KCD_MNUDOWN:
			if(cam_control.file_sum)
				data->pic_index = (data->pic_index+1)%cam_control.file_sum;
			if(cam_control.file_sum >1 )
				winShow(win); 
			break;
			
		case KCD_MNULEFT:	case KCD_MNUUP:
			if(cam_control.file_sum)
				data->pic_index = (data->pic_index-1+cam_control.file_sum)%cam_control.file_sum;
			if(cam_control.file_sum >1 )
				winShow(win); 
			break;

		case KCD_LEFT:
            		M2C_Control_Refresh(R2D_REFRESH_ENABLE);
			Exit_Camera_Mode();
			if(cam_control.file_sum)
				data->menu_win = bookMenuStart(data->win, (MfwMnuAttr *)menuCamBOptionAttributes(), 0);//begin option menu
			break;
			
		case KCD_HUP:		case KCD_RIGHT:          
            		M2C_Control_Refresh(R2D_REFRESH_ENABLE);
			Exit_Camera_Mode();
			Cam_Browse_Destroy(data->win, MAIN_WIN);
			break;

		default:
			return MFW_EVENT_REJECTED;
		}
	}
	else if(data->winstate == CAM_B_PROPERTY)
	{
		switch (keyboard->code)
		{
		case KCD_HUP:		case KCD_RIGHT:
			data->winstate = CAM_B_PIC;
		}
		winShow(win); 
	}
	return MFW_EVENT_CONSUMED;
}

static 	int 	Cam_Browse_Destroy (T_MFW_HND win, int reason)
{
T_MFW_WIN        *win_data   = ((T_MFW_HDR *)win)->data;
T_CAM_BROWSE     *data       = (T_CAM_BROWSE *)win_data->user;			

	if(reason & LIST_WIN)
	{
		if(data->menu_list_data)
		{
			FREE_MEMORY((void *)data->menu_list_data->List, cam_control.file_sum * sizeof(T_MFW_MNU_ITEM));
	
			if(data->menu_list_data->List)
				FREE_MEMORY((void *)data->menu_list_data,sizeof(ListMenuData));		     		
		}
	}

//	if(reason & MENU_WIN)
//	{
//		bookMenuDestroy(data->menu_win);
//	}
	
	if(reason & MAIN_WIN)
	{
		
		kbd_delete(data->kbd);				// Delete keyboard handlers
		win_delete(win);					// Delete window
		FREE_MEMORY((UBYTE *)data, sizeof(T_CAM_BROWSE));		// Destroy data structure
        cam_browse_win = NULL;
	}

	return 1;
}

static 	void	Modify_EditorCB( T_MFW_HND win,USHORT Identifier,UBYTE reason)
{
T_MFW_WIN       *win_data   = ((T_MFW_HDR *)win)->data;
T_CAM_BROWSE	*data       = (T_CAM_BROWSE *)win_data->user; 
int				status;

    switch( reason )
    {
    case INFO_KCD_LEFT: 
		memcpy(cam_control.cam_file[data->pic_index].file_name, data->name, MAX_CAM_NAME);
		status = ffs_fwrite(CAM_CONFFILE, &cam_control, sizeof(Flash_CAM));
		TRACE(("ffs_fwrite return:%d", status));
		data->winstate = CAM_B_PIC;
        data->edit_win=0;				// edit窗口会自动销毁
		break;

    case INFO_KCD_RIGHT:
    case INFO_KCD_HUP:
        // 开启预览
		data->winstate = CAM_B_PIC;
        data->edit_win=0;				// edit窗口会自动销毁
		break;
    }

}

// 浏览->选项
int Cam_Browse_Rename(struct MfwMnuTag* m, struct MfwMnuItemTag* i)
{
T_MFW_HND       parent_win      = mfwParent( mfw_header());
T_MFW_WIN       *win_data       = ((T_MFW_HDR *)parent_win)->data;
tBookStandard   *parent_data    = (tBookStandard *)win_data->user;	
T_MFW_HND       win             = parent_data->parent_win;						// browse data window
T_CAM_BROWSE    *data;

	win_data    = ((T_MFW_HDR *)win)->data;
	data        = (T_CAM_BROWSE *)win_data->user;									// browse data

	/* 启动重命名编辑窗口 */
	Set_Modify_Editor(data->win);
    data->edit_data.Callback          = (T_EDIT_CB)Modify_EditorCB;

	if( data->edit_data.mode == TEXTINPUT_MODE )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -