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

📄 formpage.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     :  FORMPAGE.C
* Programmer(s):  WuJingYu
* Description  : 
******************************************************************
*/

/*
*****************************************************************
*                  REVISION HISTORY
*                 
* Date:    2002-10-31
*****************************************************************
*/ 

#define FORMPAGE_GLOBALS 
#include "includes.h"
#include "LCD.H"
#include "zprint.h"

static INT8U CurFocus,FindFocus;                    //当前的焦点的控件索引号

//检测CurFoucus的有效性;
static BOOLEAN CheckKeyFocus(void)
{
    /* if (CurFocus >= formpage->controlcnt && CurFocus != 0FFH)  {
         ErrExit(ERR_FORMWIN_FOCUS);
     } */   
     return TRUE;
}    
//处理焦点控件
static void SetKeyFocus(FORMPAGE *formpage)
{
     formpage->focus = CurFocus;
     if (CurFocus == 0xFF) return;
     Control_SetFocus(&formpage->entity[CurFocus]);
}     
//将焦点从CurFocus设为FindFocus
static void ChangeKeyFocus(FORMPAGE *formpage)
{
     if (CurFocus != 0xFF) {
        Control_ReleaseFocus(&formpage->entity[CurFocus]);
        if (FindFocus != 0xFF) {
            Control_SetFocus(&formpage->entity[FindFocus]);
        }
     }
     CurFocus = FindFocus;
    
    
     formpage->focus = CurFocus;   
}

static INT8U SearchFocus(FORMPAGE *formpage)
{
     INT8U i;
     
     FindFocus = 0xFF;
     for (i=0;i<formpage->controlcnt;i++) {
        if (Control_HaveFocus(&formpage->entity[i]) == TRUE) {
            FindFocus = i;
            break;
        }    
     }   
     return FindFocus;
}    

void GotoNextFocus(FORMPAGE *formpage)
{
//y     CheckKeyFocus();
     if (CurFocus == 0xFF) {//如果当前无焦点
        CurFocus = SearchFocus(formpage);//此时FindFocus = CurFocus
      
      
        SetKeyFocus(formpage);
     } else {		//当前有焦点
        FindFocus = CurFocus + 1;
        while (1) {//从Cur一直找到Cur-1为止
           if (FindFocus >= formpage->controlcnt) FindFocus = 0;
           if (FindFocus == CurFocus ) return;
           if (Control_HaveFocus(&formpage->entity[FindFocus]) == TRUE) {
              ChangeKeyFocus(formpage);
              return;
           } else {
              FindFocus++; 
           }    
        }   
     }     
}    

static void InitAllControl(FORMPAGE *formpage)
{
     INT8U i;
     
     for (i=0;i<formpage->controlcnt;i++) 
     {
        InitControl(&formpage->entity[i]);
     }   
}

static void ShowAllControl(FORMPAGE *formpage)
{  
     INT8U i;
//??     考虑一下弹出式页面

     if (formpage->formattrib == POPFORMPAGE) 
     {
        ClearPopMenuArea((LISTBOX*)formpage->entity[0].ctlptr,0);  
     } 
     else 
     {
        ClearArea_Full();  
     }//先清屏
         
     for (i=0;i<formpage->controlcnt;i++) //再刷新
     {
           CreateControl(&formpage->entity[i]);
     }   
        LcdUpdate_Full();  
}    
#if 0 
static void DestroyAllControl(FORMPAGE *formpage)
{
     INT8U i;
     for (i=0;i<formpage->controlcnt;i++) {
        DestroyControl(&formpage->entity[i]);
     }    
}    
#endif 
//添加一个控件至页面;
INT8U AddControlToFormPage(FORMPAGE* formpage,INT8U ctlattrib,void *ctlptr)
{
      INT8U index;
      if (formpage->controlcnt >= FORMPAGEMAXCONTROL) {
         return FORMPAGEMAXCONTROL;
      } else {   
         index = formpage->controlcnt;
         formpage->entity[index].ctlattrib = ctlattrib;
         formpage->entity[index].ctlptr    = ctlptr;
         formpage->controlcnt++;
         return formpage->controlcnt;
      }   
}
    

void FormPageInitProc(FORMPAGE *formpage)
{
     void (*ExecFunc)(void);
      
     ExecFunc = formpage->initfunc;
     if (ExecFunc != NULL) (*ExecFunc)();
     
     InitAllControl(formpage);
     ShowAllControl(formpage);
     CurFocus = SearchFocus(formpage);
    
    
     SetKeyFocus(formpage);
     
     ExecFunc = formpage->createfunc;
     if (ExecFunc != NULL) (*ExecFunc)();
}    

void FormPageDestroyProc(FORMPAGE *formpage)
{
   INT8U i;
   void (*ExecFunc)(void);
   
   for (i=0;i<formpage->controlcnt;i++) 
   {
      DestroyControl(&formpage->entity[i]);     
   }
      
   ExecFunc = formpage->destroyfunc;
   
   if (ExecFunc != NULL) (*ExecFunc)();
}

void FormPageSuspendProc(FORMPAGE *formpage)
{
     void (*ExecFunc)(void);
     
     //CurFocus = formpage->focus;
     ExecFunc = formpage->suspendfunc;
     if (ExecFunc != NULL) (*ExecFunc)();
}
    

void FormPageResumeProc(FORMPAGE *formpage)
{
     void (*ExecFunc)(void);
     
     CurFocus = formpage->focus;
     
     
     ExecFunc = formpage->resuinitfunc;
     if (ExecFunc != NULL) (*ExecFunc)();
     
     ShowAllControl(formpage);
    
     if (CurFocus == 0xFF)
     { 
     	
     	  CurFocus = SearchFocus(formpage);
     
     }
     
     SetKeyFocus(formpage);
     ExecFunc = formpage->resumefunc;
    
     if (ExecFunc != NULL) (*ExecFunc)();
}
    

void FormPageHdlKeyProc(FORMPAGE *formpage)
{
     void (*HdlKeyFunc)(void);
     INT8U FocusTemp,RecvKey;
     
     RecvKey = GetCurLcdKey();
     CurFocus = formpage->focus;
    	   
     CheckKeyFocus();
     
     if (CurFocus != 0xFF) 
     {
        if (Control_HdlKey(&formpage->entity[CurFocus]))
        {
             return;
        }
        else 
        {
           FocusTemp = CurFocus;     
           GotoNextFocus(formpage);
           
           while (FocusTemp != CurFocus) 
           {
              if (Control_HdlKey(&formpage->entity[CurFocus])) return;     
              GotoNextFocus(formpage);
           }
           
           HdlKeyFunc = formpage->hdlkeyfunc;
           
           if (HdlKeyFunc != NULL) {
              (*HdlKeyFunc)();
              return ;
           }   
        }   
     } 
     else //formpage无焦点
     {
        HdlKeyFunc = formpage->hdlkeyfunc;
        
        if (HdlKeyFunc != NULL) 
        {
           (*HdlKeyFunc)();
           return ;
        }   
     }   
     if (RecvKey == KEY_NCK) 
     {
         PopFormStack();
     }
}


void SetFormPageLifeTime(FORMPAGE *formpage,INT8U lifetime)
{   
      formpage->lifetime = lifetime;
}
    
//创建页面
void CreateFormPage(void)
{
//     OS_ENTER_CRITICAL();
     PushFormStack();
//     OS_EXIT_CRITICAL();
}
    
//3.重新刷新当前页面
void RefreshFormPage(void)
{
     RefreshFormStack();
}

//4.关闭当前页面
void CloseFormPage(void)
{
     PopFormStack();
}    

//关闭当前的若干个页面
void CloseMultipleFormPage(INT8U closenum)
{
     INT8U curdepth;
     curdepth = GetFormPageDepth();
     if (curdepth <= closenum) {
        ReturnSpecifiedPage(0);
     }  else {
        curdepth -= closenum;
        ReturnSpecifiedPage(curdepth);	
     }
}

//清空页面参数
void ResetFormPage(FORMPAGE *formpage)
{
     memset((INT8U*)formpage,0,sizeof(FORMPAGE));
     formpage->lifetime = PAGELIFE_NORMAL;
     formpage->formattrib = NORMALFORMPAGE;
}     

⌨️ 快捷键说明

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