📄 mmisymbol.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 + -