📄 mmicamera.c
字号:
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 + -