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

📄 infield.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 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 + -