📄 infield.c
字号:
/*
******************************************************************
* XIAMEN YAXON NETWORK CO.LTD.
* XINXI BUILDING,HULI,XIAMEN
* (c) Copyright 2002,XIAMEN YAXON NETWORK CO.LTD. ,XIAMEN
* All Rights Reserved
*
* FileName : InField.C
* Programmer(s): YangLei
* Description :
******************************************************************
*/
/*
*****************************************************************
* REVISION HISTORY
*
* Date: 2003-3-15
*****************************************************************
*/
#define INFIELD_GLOBALS
#include "includes.h"
#include "stdio.h"
#include "Lcd.H"
#include "PinYin.H"
#include "Infield.h"
//#include "SELEBOX.H"
//#include "GpMenu.h"
//#include "Tools.H"
#include "zprint.h"
static INT8U Tempdata[6];
/*
******************************************************************
Chinese Input Control
******************************************************************
*/
static OUTBOX pyboxout = {64,14,1,8,1,BORDER_NONE,SCROLLBAR_NONE}; //显示拼音的
static OUTBOX editout = {7,6,3,18,1,BORDER_3D,SCROLLBAR_NONE}; //显示文本内容
static OUTBOX textout = {64,120,1,4,1,BORDER_NONE,SCROLLBAR_NONE};//显示输入法状态
static OUTBOX selectout = {82,14,1,16,0,BORDER_NONE,SCROLLBAR_LEFTRIGHT};//显示备选字
static INT8U CurInputMode[][] = {{"中文"},{"数字"},{"英文"}};
static TEXTBOX FieldModeText;
static EDITBOX FieldEdit;
static SELECTBOX FieldSelect;
static TEXTBOX FieldPy;
static INT8U ENG_SPACE[] = {" "};
/*
******************************************************************
Digital Input Control
******************************************************************
*/
static OUTBOX digitexttout = {4,6,1,14,1,BORDER_NONE,SCROLLBAR_NONE};
static OUTBOX digieditout = {35,6,3,18,1,BORDER_3D,SCROLLBAR_NONE};
static BEELINE DigiLine = {25,0,25,159,LINE_DASHED};
static INT8U DigiHitText[]= {"请输入号码:"};
static EDITBOX DigiEdit;
static TEXTBOX DigiText;
/*
******************************************************************
Chinese Input Page
******************************************************************
*/
static FORMPAGE *FieldForm;
static FORMPAGE *SoftInputPg;
static void DsplayHZText(void)
{
DplyHZText(&FieldSelect);
}
static void DsplayPHRASE(void)
{
DplyPHRText(&FieldSelect);
}
static void DsplayPHRASE2(void)
{
DplyPHRText2(&FieldSelect);
}
void DplyLetter(void)//供selebox显示英文调用
{
EditBoxInsertChar(&FieldEdit, GetSelectedText(&FieldSelect));
UnIndicateSelectBox(&FieldSelect);
}
BOOLEAN DplySpace(void)
{
if(KeyFlag==RepeatKey) {
EditBoxInsertChar(&FieldEdit, GetSelectedText(&FieldSelect));
UnIndicateSelectBox(&FieldSelect);
StopTmr(KeyInTmr);
KeyFlag = FirstKey;
EditBoxInsertChar(&FieldEdit, ENG_SPACE);
Printu("GotoNextFocus_02");
GotoNextFocus(FieldForm);//焦点切换
return TRUE;
}
EditBoxInsertChar(&FieldEdit, ENG_SPACE);
return FALSE;
}
static void FieldInputEmptyFunc(void)
{
UnIndicateSelectBox(&FieldSelect);
ClearTextBox(&FieldPy);
}
void ClearPyBox(void)
{
memset(FieldPy.text,0x20,6);
RefreshTextBox(&FieldPy);
}
static void FieldSelectOptFunc(void)
{
if (FieldSelect.selmode == ASCIISELECTMODE) {//英文
//y AddDplyTextToSelectBox(&FieldSelect,FieldInput.asciichar,FieldInput.charlen,ASCIISELECTMODE);
//y RefreshSelectBox(&FieldSelect);
//y ClearInputBox(&FieldInput);
return;
} else {
IndicateSelectBox(&FieldSelect);//refresh
if(INPUTSTATE==PHRASESELECTSTATE) {
ClearPyBox();
}else{
ShowPYBoxText(&FieldSelect, &FieldPy);
}
}
}
static void FieldSelBoxExecFunc(void)
{
/*y if (FieldEdit.cursor == 0) {
if (IsASCII(GetSelectedText(&FieldSelect)) == TRUE) { //ASCII码
FirstCharIndex[0] = *GetSelectedText(&FieldSelect);
memset(&FirstCharIndex[1],0x00,5);
} else {
}
}英文*/
if (INPUTSTATE==PINYININPUTSTATE) {
DsplayHZText();
INPUTSTATE = PINYINSELECTSTATE;
IndicateSelectBox(&FieldSelect);//显示selebox
} else {
memset(FieldPy.text,0x20,6);
RefreshTextBox(&FieldPy);
EditBoxInsertChar(&FieldEdit, GetSelectedText(&FieldSelect));
if(INPUTSTATE==PHRASESELECTSTATE) {
DsplayPHRASE2();
IndicateSelectBox(&FieldSelect);
}
if(INPUTSTATE == PINYINSELECTSTATE) {
DsplayPHRASE();
INPUTSTATE = PHRASESELECTSTATE;
IndicateSelectBox(&FieldSelect);
}
}
}
static void FieldEditModeChangeFunc(void)
{
ClearTextBox(&FieldPy);
FieldModeText.textlen = strlen((INT8S*)CurInputMode[FieldEdit.editmode]);
FieldModeText.text = CurInputMode[FieldEdit.editmode];
INPUTSTATE = EDITINPUTSTATE;
SWITCHFLAG = FALSE;
KeyFlag = FirstKey;
StopTmr(KeyInTmr);
RefreshTextBox(&FieldModeText);
if(FieldEdit.editmode==CHARMODE) {
FieldSelect.selmode = ASCIISELECTMODE;
}
if(FieldEdit.editmode==CHINESEMODE) {
FieldSelect.selmode = CHINESESELECTMODE;
}
}
static void FieldEditSuspendFunc(void)
{
UnIndicateEditBox(&FieldEdit);
}
static void InFieldInitFunc(void)
{
FieldPy.text = Tempdata;
FieldEdit.box = &editout;
FieldEdit.editattrib = CHINESEEDITBOX;
FieldEdit.editmode = CHINESEMODE;//Y
FieldEdit.execfunc = ChinaEditEntry.execfunc;
FieldEdit.modechangefunc = FieldEditModeChangeFunc;
if ((ChinaEditEntry.initlen > 0) && (ChinaEditEntry.initlen <=160)) {
memcpy(FieldEdit.editbuf,ChinaEditEntry.initdata,ChinaEditEntry.initlen);
FieldEdit.editlen = ChinaEditEntry.initlen;
FieldEdit.cursor = FieldEdit.editlen;//y
}
FieldPy.box = &pyboxout;
FieldPy.textlen = 6;
memset(FieldPy.text,0x20,FieldPy.textlen);
FieldSelect.box = &selectout;
FieldSelect.selmode = CHINESESELECTMODE;
FieldSelect.execfunc = FieldSelBoxExecFunc;
FieldSelect.optfunc = FieldSelectOptFunc;
FieldSelect.emptyfunc= FieldInputEmptyFunc;
memset(FieldSelect.asciichar, 0, sizeof(FieldSelect.asciichar));
FieldModeText.box = &textout;
FieldModeText.textlen = strlen((INT8S*)CurInputMode[0]);
FieldModeText.text = CurInputMode[0];
}
static void InFieldHdlKeyFunc(void)
{
INT8U key;
void (*ExecFunc)(void);
key = GetCurLcdKey();
switch (key) {
case KEY_ACK:
ExecFunc = ChinaEditEntry.execfunc;
if (ExecFunc != NULL) {
(*ExecFunc)();
}
break;
case KEY_NCK:
ClearTextBox(&FieldPy);
CloseFormPage();
break;
default:
break;
}
}
void InFieldFocusChange(void)
{
Printu("GotoNextFocus_03");
GotoNextFocus(FieldForm);
}
void CreateChinaInputPage(void)
{
FieldForm = AllocateFormPage();
AddControlToFormPage(FieldForm,CTL_EDITBOX,(void*)&FieldEdit);
AddControlToFormPage(FieldForm,CTL_SELECTBOX,(void*)&FieldSelect);
AddControlToFormPage(FieldForm,CTL_TEXTBOX,(void*)&FieldPy);
AddControlToFormPage(FieldForm,CTL_TEXTBOX,(void*)&FieldModeText);
INPUTSTATE = EDITINPUTSTATE;
SWITCHFLAG = FALSE;
FieldForm->initfunc = InFieldInitFunc;
//FieldForm->hdlkeyfunc = InFieldHdlKeyFunc;
FieldForm->suspendfunc = FieldEditSuspendFunc;
FieldForm->formattrib = NORMALFORMPAGE;
SetFormPageLifeTime(FieldForm,80);
CreateFormPage();
}
void InitChinaInputPage(INT8U* initdata,INT8U datalen,void (*execfunc)(void))
{
ChinaEditEntry.initlen = datalen;
ChinaEditEntry.initdata = initdata;
ChinaEditEntry.execfunc = execfunc;
}
INT8U *GetChinaInputData(void)
{
return FieldEdit.editbuf;
}
INT8U GetChinaInputDataLen(void)
{
return FieldEdit.editlen;
}
void RefreshCurPY(void)
{
ShowPYBoxText(&FieldSelect, &FieldPy);
}
/*
******************************************************************
Digital Page
******************************************************************
*/
static void DigitalSuspendFunc(void)
{
UnIndicateEditBox(&DigiEdit);
}
static void DigitalInitFunc(void)
{
DigiEdit.box = &digieditout;
DigiEdit.editattrib = DIGITALEDITBOX;
DigiEdit.execfunc = DigitalEditEntry.execfunc;
DigiEdit.modechangefunc = NULL;
if (DigitalEditEntry.initlen > 0) {
memcpy(DigiEdit.editbuf,DigitalEditEntry.initdata,DigitalEditEntry.initlen);
DigiEdit.editlen = DigitalEditEntry.initlen;
MovEditCursorToTail(&DigiEdit,0);
}
DigiText.box = &digitexttout;
DigiText.textlen = strlen((INT8S*)DigiHitText);
DigiText.text = DigiHitText;
}
void CreateDigitalInputPage(void)
{
FieldForm = AllocateFormPage();
AddControlToFormPage(FieldForm,CTL_EDITBOX,(void*)&DigiEdit);
AddControlToFormPage(FieldForm,CTL_TEXTBOX,(void*)&DigiText);
AddControlToFormPage(FieldForm,CTL_BEELINE,(void*)&DigiLine);
FieldForm->initfunc = DigitalInitFunc;
//FieldForm->createfunc = InFieldCreateFunc;
FieldForm->suspendfunc = DigitalSuspendFunc;
FieldForm->formattrib = NORMALFORMPAGE;
CreateFormPage();
}
void InitDigitalInputPage(INT8U* initdata,INT8U datalen,void (*execfunc)(void))
{
DigitalEditEntry.initlen = datalen;
DigitalEditEntry.initdata = initdata;
DigitalEditEntry.execfunc = execfunc;
}
INT8U *GetDigitalInputData(void)
{
return DigiEdit.editbuf;
}
INT8U GetDigitalInputDataLen(void)
{
return DigiEdit.editlen;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -