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 + -
显示快捷键?