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

📄 mmisymbol.c

📁 是一个手机功能的模拟程序
💻 C
字号:
/*******************************************************************************

          Mobile Innovation (Shanghai)

********************************************************************************

 This software product is the property of Mobile Innovation (Shanghai) Ltd and may not be
 disclosed to any third party without the express permission of the owner.

********************************************************************************

 $Project name: Basic MMI
 $Project code: 
 $Module:   MMI
 $File:      mmisymbol.c
 $Revision:   1.0

 $Author:  Mobile Innovation (Shanghai)
 $Date:       2002/7/15

********************************************************************************

 Description:
 This file contains the Gloable variables defined by Engineer of Mobile Innovation. These variables are
 included in the mmisymbol.h


********************************************************************************

 $History: mmisymbol.c

  Date             Modification                             Author                                           
  -------------------------------------------------------------  
  05/09/2002       1.1                                    zhangxp
  15/07/2002       Original version                         zhangxp

 $End

*******************************************************************************/

#define ENTITY_MFW

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#if defined (NEW_FRAME)

    #include "typedefs.h"
    #include "vsi.h"
    #include "pei.h"
    #include "custom.h"
    #include "gsm.h"

#else

    #include "stddefs.h"
    #include "custom.h"
    #include "gsm.h"
    #include "vsi.h"

#endif

#include "dspl.h"
#include "mfw_mfw.h"
#include "mfw_lng.h"
#include "cus_aci.h"
#include "p_sim.h"


#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_tim.h"
#include "mfw_icn.h"
#include "mfw_edt.h"
#include "mfw_mnu.h"
#include "mfw_sat.h"
#include "mfw_ffs.h"

#include "drv_key.h"
#include "drv_tmr.h"


//#include "uniparad.h"
//#include "Uniassociate.h"
#include "Mmimmi.h"
#include "Mmidummy.h"
#include "Mmidialogs.h"
#include "MmiSoftKeys.h"
#include "Mmieditor.h"
#include "Mmieditor_i.h"
//#include "mmihz.h"
#include "mmisymbol.h"
#include "mmiusersymbolinput.h"
#include "mmisettings.h"
#include "mmitextinput.h"	/* 2003/12/04 sunsj add */

#define	LEFT_X			2	// 方框左上的X坐标
#define LEFT_Y			50	// 方框左上的Y坐标
#define	PIXEL_W			8	// 每个符号象素数宽度
#define PIXEL_H			16	// 每个符号象素数高度

/* 2004/03/30 sunsj modify symbol buffer */
static char AlphaBuf[]=
{
	',','.',';',':','!','?','&',0x22,'(',')','*','+',0x27,0x02,'-','/','#','<','=','>',0x25,0x40,0x5c,0x5b,0x5d,
	0x5e,0x5f,0x7b,0x7c,0x7d,0x7e,0x20,//0x00 WYJ modify
};

T_MFW_HND keystar_start (T_MFW_HND parent,T_MFW_KBD *kc);
static T_MFW_HND keystar_create (T_MFW_HND  parent);
static void star_exec_cb(T_MFW_HND win, USHORT event, SHORT value, T_MFW_KBD *kc);
static int StarEventWin(MfwEvt e, MfwWin *w);
static int StarEventKbd (MfwEvt e, MfwKbd *kc);

/*******************************************************************************

 $Function:     keystar_start

 $Description:  input especial symbol.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
T_MFW_HND keystar_start (T_MFW_HND parent,T_MFW_KBD *kc)
{
    T_MFW_HND win;

    TRACE_EVENT ("keystar_start()");

    win = keystar_create (parent);

    if( win NEQ NULL )
    {
        SEND_EVENT (win, INIT, 0, kc);
    }
    return win;
}

/*******************************************************************************

 $Function:     keystar_create

 $Description:  Creation of a win.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
static T_MFW_HND keystar_create (T_MFW_HND  parent)
{
    T_STAR_INFO*  data = (T_STAR_INFO *)ALLOC_MEMORY (sizeof (T_STAR_INFO));

    T_MFW_WIN     *  win;

    TRACE_EVENT ("keystar_create()");

    if(data EQ NULL)
        return;

    /*
     * Create window handler
     */

    data->star_win =winCreate( parent, 0, MfwWinVisible, (MfwCb) StarEventWin); 

    if( data->star_win EQ NULL )
    {
        return NULL;
    }

    /*
     * connect the dialog data to the MFW-window
     */


    data->mmi_control.dialog = (T_DIALOG_FUNC)star_exec_cb;
    data->mmi_control.data   = data;
    data->parent             = parent;
    win                      = ((T_MFW_HDR *)data->star_win)->data;
    win->user                = (void *)data;

    /*
     * return window handle
     */

    return data->star_win;
}

/*******************************************************************************

 $Function:     editor_exec_cb

 $Description:  Dialog function for star_win.

 $Returns:    None.

 $Arguments:  None.

*******************************************************************************/
static void star_exec_cb(T_MFW_HND win, USHORT event, SHORT value, T_MFW_KBD *kc)
{
    T_MFW_WIN      * win_data  = ((T_MFW_HDR *)win)->data;
    T_STAR_INFO  * data      = (T_STAR_INFO *)win_data->user;

    T_MFW_HND       parent_win = data->parent;
    T_MFW_WIN     *parentwin_data =((T_MFW_HDR *)parent_win)->data;
    T_TEXT_INPUT  *parentdata   =(T_TEXT_INPUT *)parentwin_data->user;


    TRACE_EVENT("star_exec_cb()");
    switch( event )
    {
    case INIT:
		// 初始化数据
		data->max_line_item = (SCREEN_SIZE_X - 2*LEFT_X)/(PIXEL_W);	
		data->max_line_item = (data->max_line_item+1)/2;
		data->max_line		= sizeof(AlphaBuf)/data->max_line_item; 
		data->last_line_item= sizeof(AlphaBuf)%data->max_line_item;
		data->px			= (SCREEN_SIZE_X-2*PIXEL_W*data->max_line_item+PIXEL_W)/2;
		data->py			= LEFT_Y;
		data->current_item  = 0;

		if(sizeof(AlphaBuf)%data->max_line_item)
			data->max_line++;

		if(data->last_line_item == 0)
			data->last_line_item = data->max_line_item;
			
        if( wstrlen(parentdata->editor_data.editor_attr.text)>=(parentdata->editor_data.editor_attr.size-3) )
        {
            keystar_destroy(data->star_win);
            return;
        }
        data->star_kbd = kbdCreate(data->star_win, KEY_ALL, (MfwCb) StarEventKbd);
		winShow(data->star_win);
        break;
    case EXIT:              
        keystar_destroy(data->star_win);
        break;
    }
}

/*******************************************************************************

 $Function:     keystar_destroy

 $Description:  Destroy the star_win.

 $Returns:    None.

 $Arguments:  None.

 $History:  2004/06/24 sunsj modify for bug of textinput editor

*******************************************************************************/
void keystar_destroy (T_MFW_HND window)
{
    T_MFW_WIN     * win  = ((T_MFW_HDR *)window)->data;
    T_STAR_INFO * data = (T_STAR_INFO *)win->user;
    T_MFW_HND   parent_win   = data->parent;
    T_MFW_WIN     *parentwin_data = ((T_MFW_HDR *)parent_win)->data;
    T_TEXT_INPUT  *parentdata   = (T_TEXT_INPUT *)parentwin_data->user;
    MfwHdr *edit_hdr=(MfwHdr *)parentdata->input_edt;
    MfwEdt *edit_controll=(MfwEdt *)edit_hdr->data;
    TRACE_EVENT ("keystar_destroy()");

    if( data )
    {
        parentdata->symbol_input = NULL;//zhangxp 2003-04-01
        kbd_delete (data->star_kbd);
        win_delete (data->star_win);
        edit_controll->cp_curr_x=0;//reset the flag.we set it in editkeycb before keystar_start.
        /*
         * Free Memory
         */
        FREE_MEMORY ((void *)data, sizeof (T_STAR_INFO));
    }
    else
    {
        return ;
    }
}

/*******************************************************************************

 $Function:     StarEventWin

 $Description:   window event handler.

 $Returns:    MFW_EVENT_CONSUMED.

 $Arguments:  None.

*******************************************************************************/
static int StarEventWin(MfwEvt e, MfwWin *w)
{
T_STAR_INFO *data       = (T_STAR_INFO *)w->user;
char		s[2]={0,0};
U8 			mode;
int			line;
int			i;

	mode=dspl_Enable(0);

    switch( e )
    {
    case MfwWinVisible: 
		dspl_ClearAll();

		for(i=0; i<sizeof(AlphaBuf); i++)
		{
			s[0] = AlphaBuf[i];
			line = i/data->max_line_item;
			
			dspl_TextOut(data->px + (i%data->max_line_item)*2*PIXEL_W, 
						data->py + line*PIXEL_H, 
						0, 
						s);
		}

		//画焦点
		if(data->current_item < sizeof(AlphaBuf))
		{
			s[0] = AlphaBuf[data->current_item];
			line = data->current_item/data->max_line_item;
				
			dspl_colorTextOut(data->px + (data->current_item%data->max_line_item)*2*PIXEL_W, 
							data->py + line*PIXEL_H, 
							DSPL_TXTATTR_INVERS, 
							s,
							0x008080);
		}
		dspl_DrawRect(data->px-1, data->py-1, SCREEN_SIZE_X-data->px+1, data->py+data->max_line*PIXEL_H);
	    displaySoftKeys(TxtSoftSelect, TxtSoftBack);
       	break;
    default:            
        return MFW_EVENT_REJECTED;
    } 


	dspl_Enable(mode);
    return MFW_EVENT_CONSUMED;
} 

/*******************************************************************************

 $Function:     StarEventKbd

 $Description:  keyboard event handler.

 $Returns:    MFW_EVENT_CONSUMED.

 $Arguments:  None.

*******************************************************************************/    
static int StarEventKbd (MfwEvt e, MfwKbd *kc) 
{    
T_MFW_HND       win        	= mfw_parent (mfw_header());
T_MFW_WIN     	*win_data   = ((T_MFW_HDR *)win)->data;
T_STAR_INFO 	*data       = (T_STAR_INFO *)win_data->user;
T_MFW_HND   	parent_win   =data->parent;
T_MFW_WIN     	*parentwin_data =((T_MFW_HDR *)parent_win)->data;
/* 2003/12/04 sunsj modify to text input editor */
//T_EDITOR_INFO  *parentdata   =(T_EDITOR_INFO *)parentwin_data->user;
T_TEXT_INPUT  	*parentdata      =(T_TEXT_INPUT *)parentwin_data->user;

MfwEvt     fKeyPressed = e & KEY_MAKE  ;

    if( !fKeyPressed )  return 0;
	
	switch(kc->code)
	{
    case KCD_MNUUP:
		if(data->current_item < data->max_line_item) //第一行
		{
			if(data->current_item < data->last_line_item)
				data->current_item += data->max_line_item*(data->max_line-1) ;
			else
			{
				data->current_item = data->current_item + (data->max_line-2) * data->max_line_item; 
			}
		}
		else
			data->current_item -= data->max_line_item;
		winShow(win);
       	break;

    case KCD_MNUDOWN:
		data->current_item += data->max_line_item;
		if(data->current_item >= sizeof(AlphaBuf)) 
		{
			if(data->current_item < data->max_line * data->max_line_item)
				data->current_item = (1-data->max_line) * data->max_line_item + data->current_item;
			else
				data->current_item = data->current_item - data->max_line * data->max_line_item ;
		
		}
		winShow(win);
        break;

    case KCD_MNULEFT:
		data->current_item--;
		if(data->current_item < 0)
			data->current_item = sizeof(AlphaBuf)-1;
		winShow(win);
        break;

    case KCD_MNURIGHT:
		data->current_item++;
		if(data->current_item >= sizeof(AlphaBuf))
			data->current_item = 0;
		winShow(win);
        break;

    case KCD_OK:
    case KCD_LEFT:
        /* 2003/12/04 sunsj modify for text input editor */
        if(data->current_item < sizeof(AlphaBuf))
            edtSymbol(parentdata->input_edt, AlphaBuf[data->current_item]);
        keystar_destroy(data->star_win);
        break;

    case KCD_HUP:
    case KCD_RIGHT:
        keystar_destroy(data->star_win);
        break;
    case KCD_STAR:
		/* 2004/03/29 sunsj modify for destroy star win */
		//if( data->star_flag )
		//{
		//	data->star_flag = FALSE;
		//	memset(data->symbolData.Buf,0,sizeof(data->symbolData.Buf));
		//	data->symbolData.memoryBuf=NULL;
		//	keystar_destroy(data->star_win);
		//}
		//else
		//{
		//	memset(data->symbolData.Buf,0,sizeof(data->symbolData.Buf));
		//	data->Cursx = 42;
		//	data->Cursy=16;
		//	SetBuf(&data->symbolData);
		//	DisplayBuf(win,1);
		//	data->star_flag = TRUE;
		//	return 1;
		//}
        break;
    default:
        break;
    }
    return MFW_EVENT_CONSUMED;
}           

⌨️ 快捷键说明

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