mmicamera.c
来自「是一个手机功能的模拟程序」· C语言 代码 · 共 2,245 行 · 第 1/5 页
C
2,245 行
data->edit_win = text_input(win, &(data->edit_data));
else
data->edit_win = editor_start(win, &(data->edit_data));
data->winstate = CAM_B_EDITOR;
bookMenuDestroy(data->menu_win);
data->menu_win = NULL;
return 1;
}
static void Set_Modify_Editor(T_MFW_HND win)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_BROWSE *data = (T_CAM_BROWSE *)win_data->user;
memcpy((char*)data->name, cam_control.cam_file[data->pic_index].file_name, MAX_CAM_NAME);
editor_attr_init_fullscr(&((data->edit_data).editor_attr), 1, TxtChange, (char*)data->name, MAX_CAM_NAME, edtCurBar1);
data->edit_data.hide = FALSE;
data->edit_data.min_enter = 1; // Avoid returning empty strings
data->edit_data.Identifier = 0xFFFF ;
data->edit_data.TextString = NULL;
data->edit_data.timeout = FOREVER; // Avoid returning empty strings
data->edit_data.destroyEditor = TRUE;
data->edit_data.TextId = '\0';
data->edit_data.LeftSoftKey = TxtSoftConfirm;
data->edit_data.AlternateLeftSoftKey = TxtSoftConfirm;
data->edit_data.RightSoftKey = TxtDelete;
data->edit_data.mode = TEXTINPUT_MODE;
data->edit_data.InputMode = PINYIN_INPUT_MODE;
}
int Cam_Browse_Delete(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
Delete_One_Record(data->pic_index);
if(data->pic_index == cam_control.file_sum)
data->pic_index = 0;
data->winstate = CAM_B_PIC;
bookMenuDestroy(data->menu_win);
data->menu_win = NULL;
return 1;
}
int Cam_Browse_Property(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
data->winstate = CAM_B_PROPERTY;
bookMenuDestroy(data->menu_win);
data->menu_win = NULL;
return 1;
}
/*
* 描述: camera工作的时候,来电闹钟等激活时,需调用此函数退出窗口
*
*/
void CamExit(void)
{
T_MFW_WIN *win;
T_CAM_DATA *data;
TRACE(("CamExit"));
if(cam_main_win==NULL && cam_browse_win==NULL)
return;
if(cam_browse_win)
{
M2C_Control_Refresh(R2D_REFRESH_ENABLE);
Exit_Camera_Mode();
return;
}
else if(cam_main_win)
{
win = ((T_MFW_HDR *)cam_main_win)->data;
data = (T_CAM_DATA*)win->user;
// 在窗口销毁时不做显示
data->winstate = M2C_STOP_PREVIEW;
if(data->menu_win)
bookMenuDestroy(data->menu_win);
if(data->edit_win)
text_input_destroy(data->edit_win);
Cam_Main_Destroy(cam_main_win);
}
}
/***********************************************************************************
*
* 模块: 内存状态窗口模块
*
* 描述: 负责内存状态菜单的实现
*
* 历史: 2004.7.1 WYJ 创建
*
***********************************************************************************/
/* 内存状态窗口 */
typedef struct
{
T_MMI_CONTROL mmi_control;
T_MFW_HND parent_win;
T_MFW_HND win;
T_MFW_HND kbd;
}T_CAM_STATUS;
/* 内存状态窗口 */
static T_MFW_HND Cam_Status_Create (T_MFW_HND parent_win);
static void Cam_Status_DialogCB (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int Cam_Status_win_cb(T_MFW_EVENT event, T_MFW_WIN * win);
static int Cam_Status_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard);
static int Cam_Status_Destroy (T_MFW_HND win);
int Cam_Memory_State(struct MfwMnuTag* m, struct MfwMnuItemTag* i)
{
T_MFW_HND parent = mfwParent( mfw_header());
T_MFW_HND win;
win = Cam_Status_Create(parent);
if(win NEQ NULL)
{
SEND_EVENT(win, CAM_INIT, 0, 0);
}
return 1;
}
static T_MFW_HND Cam_Status_Create (T_MFW_HND parent_win)
{
T_MFW_WIN *win;
T_CAM_STATUS *data = (T_CAM_STATUS *)ALLOC_MEMORY (sizeof (T_CAM_STATUS));
if(data EQ 0)
return 0;
data->win = win_create(parent_win, 0, MfwWinVisible, (T_MFW_CB)Cam_Status_win_cb);
if (data->win EQ 0)
return 0;
data->kbd = kbd_create (data->win, KEY_ALL, (T_MFW_CB)Cam_Status_kbd_cb);
/* Create window handler */
data->mmi_control.dialog = (T_DIALOG_FUNC)Cam_Status_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_Status_DialogCB(T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_STATUS *data = (T_CAM_STATUS *)win_data->user;
switch(event)
{
case CAM_INIT:
winShow(data->win);
break;
case CAM_DESTROY:
Cam_Status_Destroy(win);
break;
}
}
static int Cam_Status_win_cb(T_MFW_EVENT event, T_MFW_WIN * win)
{
T_CAM_STATUS *data = (T_CAM_STATUS *)win->user;
game_Rectangle param;
char buffer[40];
//T_DISPLAY_DATA display_info;
switch(event)
{
case MfwWinVisible:
dspl_ClearAll();
//yangx Modify
displayTitle( 0, (char *)MmiRsrcGetText(TxtMemoryState), NULL, TITLE_MIDDLE, 0x000000, 0x000000);
dspl_TextOut(7, 23, 0, (char *)MmiRsrcGetText((USHORT)TxtPhotoCapacity));
drawSolidRectangle(86,42,114,55,3,0x5AC7FF,0x5AC7FF);
sprintf(buffer,"%d",cam_control.file_sum);
dspl_colorTextOut(90, 41,DSPL_TXTATTR_TRANSPARENT, (char*)buffer,0x000000 );
dspl_TextOut(7, 41, 0, (char*)GET_TEXT(TxtPhbkUse));
drawSolidRectangle(86,59,114,72,3,0x5AC7FF,0x5AC7FF);
sprintf(buffer,"%d",MAX_CAM_FILE);
dspl_colorTextOut(90, 58, DSPL_TXTATTR_TRANSPARENT, (char*)buffer,0xffffff );
dspl_TextOut(7, 58, 0, (char*)GET_TEXT(TxtTotalCount));
param.color=0xB9D9EA;
param.fillcolor=0xB9D9EA;
param.x1=7;
param.x2=113;
param.y1=79;
param.y2=82;
DrawRectagle(param);
param.color=0x5474A7;
param.fillcolor=0x5474A7;
param.x1=6;
param.x2=114;
param.y1=80;
param.y2=81;
DrawRectagle( param);
dspl_TextOut(7, 87, 0, (char *)MmiRsrcGetText((USHORT)TxtMemoryCapacity));
drawSolidRectangle(60,106,114,119,3,0x5AC7FF,0x5AC7FF);
sprintf(buffer,"%d",cam_control.capacity);
dspl_colorTextOut(64, 105,DSPL_TXTATTR_TRANSPARENT, (char*)buffer,0x000000 );
dspl_TextOut(7, 105, 0, (char*)GET_TEXT(TxtPhbkUse));
drawSolidRectangle(60,123,114,137,3,0x5AC7FF,0x5AC7FF);
sprintf(buffer, "%d",MAX_CAM_CAPACITY);
dspl_colorTextOut(64, 123, DSPL_TXTATTR_TRANSPARENT, (char*)buffer,0xffffff );
dspl_TextOut(7, 123, 0, (char*)GET_TEXT(TxtTotalCount));
//end yangx Modify
/*
ShowSmsPbkMemory(cam_control.file_sum, MAX_CAM_FILE,
cam_control.capacity, MAX_CAM_CAPACITY,
(USHORT)TxtPhotoCapacity, (USHORT)TxtMemoryCapacity);
dspl_Clear(6, 24, 20, 38);
dspl_Clear(6, 87, 20, 101);
*/
displaySoftKeys(TxtSoftConfirm, TxtSoftBack); //yangx Modify
}
return 1;
}
static int Cam_Status_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_STATUS *data = (T_CAM_STATUS*)win_data->user;
switch (keyboard->code)
{
case KCD_RIGHT: case KCD_HUP: case KCD_LEFT:
Cam_Status_Destroy(win);
break;
default:
return MFW_EVENT_REJECTED;
}
return MFW_EVENT_CONSUMED;
}
static int Cam_Status_Destroy (T_MFW_HND win)
{
T_MFW_WIN *win_data = ((T_MFW_HDR *)win)->data;
T_CAM_STATUS *data = (T_CAM_STATUS *)win_data->user;
if(data)
{
kbd_delete(data->kbd); // Delete keyboard handlers
win_delete(win); // Delete window
FREE_MEMORY((UBYTE *)data, sizeof(T_CAM_STATUS)); // Destroy data structure
}
return 1;
}
/***********************************************************************************
*
* 模块: 全部删除窗口模块
*
* 描述: 负责全部删除窗口的实现
*
* 历史: 2004.7.1 WYJ 创建
*
***********************************************************************************/
/* 函数声明 */
static int DeleteAll_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
int Cam_Delete_All(struct MfwMnuTag* m, struct MfwMnuItemTag* i)
{
T_MFW_HND parent_win = mfwParent( mfw_header());
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_win, &DisplayInfo);
}
else // 删除确认
{
DisplayInfo.TextId2 = TxtDeleteAll;
DisplayInfo.Time = FOREVER;
DisplayInfo.KeyEvents = KEY_RIGHT|KEY_LEFT;
DisplayInfo.Identifier = NULL;
DisplayInfo.LeftSoftKey = TxtSoftOK;
DisplayInfo.RightSoftKey= TxtSoftBack;
DisplayInfo.iconindex = REMIND_REQUIRE;
DisplayInfo.Callback = (T_VOID_FUNC)DeleteAll_cb;
info_dialog(parent_win, &DisplayInfo);
}
return 1;
}
static int DeleteAll_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason)
{
T_MFW_WIN *win_data = ( (T_MFW_HDR *) win )->data; //yangx Add
tBookStandard *data =(tBookStandard *)win_data->user; //yangx Add
switch( Reason )
{
case INFO_KCD_LEFT:
Delete_All();
bookShowInformation( data->win, TxtDelSucceed,NULL, NULL ); //yangx Add
break;
case INFO_KCD_RIGHT:
break;
}
return 1;
}
/***********************************************************************************
*
* 模块: 设定选项模块
*
* 描述: 负责菜单设定
*
* 历史: 2004.7.1 WYJ 创建
*
***********************************************************************************/
// 设定->图片大小
USHORT Cam_Size_Check( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str == TxtCamVGA) && (CamExt.m_nCurSize == VGA))
|| (((int)mi->str == TxtCamQVGA) && (CamExt.m_nCurSize == QVGA))
|| (((int)mi->str == TxtCamQQVGA) && (CamExt.m_nCurSize == QQVGA))
|| (((int)mi->str == TxtCamMobile) && (CamExt.m_nCurSize == S128120)))
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
// 设定->图片大小
int Cam_Size_Set(MfwMnu* m, MfwMnuItem* i)
{
int status;
if(((int)i->str) == TxtCamVGA)
CamExt.m_nCurSize = VGA;
if(((int)i->str) == TxtCamQVGA)
CamExt.m_nCurSize = QVGA;
if(((int)i->str) == TxtCamQQVGA)
CamExt.m_nCurSize = QQVGA;
if(((int)i->str) == TxtCamMobile)
CamExt.m_nCurSize = S128120;
mnuUpdate(m);
cam_option.m_nCurSize = CamExt.m_nCurSize;
status = ffs_fwrite(CAM_OPTION_FILE, &cam_option, sizeof(Flash_CAM_OPTION));
TRACE(("ffs_fread return:%d", status));
return 1;
}
// 设定->图片质量
USHORT Cam_Quality_Check( struct MfwMnuTag *m, struct MfwMnuAttrTag *ma, struct MfwMnuItemTag *mi )
{
if( (((int)mi->str == TxtCamFine) && (CamExt.m_nJPEGQFactor == IQ_HIGH))
|| (((int)mi->str == TxtCamNor) && (CamExt.m_nJPEGQFactor == IQ_MIDIUM))
|| (((int)mi->str == TxtCamEco) && (CamExt.m_nJPEGQFactor == IQ_LOW)))
return FLAGFUNC_TRUE_ICON;
else
return FLAGFUNC_FALSE_ICON;
}
// 设定->图片质量
int Cam_Quality_Set(MfwMnu* m, MfwMnuItem* i)
{
int status;
if(((int)i->str) == TxtCamFine)
CamExt.m_nJPEGQFactor = IQ_HIGH;
if(((int)i->str) == TxtCamNor)
CamExt.m_nJPEGQFactor = IQ_MIDIUM;
if(((int)i->str) == TxtCamEco)
CamExt.m_nJPEGQFactor = IQ_LOW;
mnuUpdate(m);
cam_option.m_nJPEGQFactor = CamExt.m_nJPEGQFactor;
status = ffs_fwrite(CA
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?