#include "includes.h" SUT_CHECK_BOX sut_check_box; /************************************************************************* CheckBoxInit ***************************************************************************/ void CheckBoxInit(struct SUT_CHECK_BOX *p,char **itemlist,char unicode,const char **iconlist,char *features,unsigned int type,unsigned char*check) { UI_STACKDEF *uiPtr=getStackStruct(); unsigned char i,ch,index; p->item = itemlist; i = 0; while(iitem[i][0]; if(ch==0)break; i ++; } i=i-1; p->itemnum = i+1; p->pgaenum=i/LIST_ROW; if(p->pgaenum%LIST_ROW)p->pgaenum+=1; i=0; p->icon=iconlist; while(iicon[i][0]; if(ch==0)break; i ++; } p->iconnum=i; for(i=0;iitemnum){ p->features[i]=features[i]; }else{ p->features[i]=0; } } for(i=0;iitemnum){ p->checkstatus[i]=check[i]; }else{ p->checkstatus[i]=0; } } p->unicode=unicode; p->page = 0; p->handle = type; CheckBoxShow(p); } /******************************************************************************** CheckBoxShowItem *******************************************************************************/ void CheckBoxShowItem(struct SUT_CHECK_BOX *p,unsigned short handle) { unsigned short len; unsigned short x,y,hand; unsigned char buf[LIST_ITEM_TEXT_LEN_MAX+3]; char str[LIST_ITEM_TEXT_LEN_MAX+1]; char f; hand=handle % LIST_ROW; x=LIST_TOPX; //y=LIST_TOPY+handle*LIST_ITEM_HEGH; y=LIST_TOPY+hand*LIST_ITEM_HEGH; guiClearArea(x,y,LIST_BAR_LEN+16,LIST_ITEM_HEGH,guiGetBackColor()); memset(buf,0,sizeof(buf)); if(p->unicode){ buf[LIST_ITEM_TEXT_LEN_MAX+2]=0; }else{ strncpy((char *)buf,p->item[handle],sizeof(buf)); buf[LIST_ITEM_TEXT_LEN_MAX+2]=0; } StrIntercept(str,(char *)buf,LIST_ITEM_TEXT_LEN_MAX); if(p->icon!=NULL){ f=p->checkstatus[handle]; guiShowBmp(x,y,p->icon[f+3]); x+=24; f= p->features[handle]; guiShowBmp(x,y,p->icon[f]); guiShowStr(x+24+2,y,str, FONT_MODE_16X16, REVERSED_NO, guiGetForeColor(),guiGetBackColor()); MSG_INFO(1,"str===%s,handler==%d,checkstatus==%d,features==%d",str,handle,p->checkstatus[handle],p->features[handle]); }else{ guiShowStr(x,y,str, FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor()); } } /******************************************************************************** * Function:CheckBoxShowBar * display a bar *******************************************************************************/ void CheckBoxShowBar(struct SUT_CHECK_BOX *p,REV_ENUM rev) { unsigned char x,y,h,handle; char str[LIST_ITEM_TEXT_LEN_MAX+1]; x=LIST_TOPX; if(p->icon!=NULL){ x+=24+2+24; } handle=p->handle%LIST_ROW; y=LIST_TOPY+handle*LIST_ITEM_HEGH; StrIntercept(str,p->item[p->handle],LIST_ITEM_TEXT_LEN_MAX); if(REVERSED_YES==rev) guiFillRect(x,y,LIST_BAR_LEN,y+32,guiGetBackColor()); else guiFillRect(x,y,LIST_BAR_LEN,y+32,COLOR_STATUS_BAR); if(REVERSED_YES==rev) guiShowStr(x,y,str, FONT_MODE_16X16, rev,guiGetBackColor(),guiGetForeColor()); else guiShowStr(x,y,str, FONT_MODE_16X16, rev,guiGetForeColor(), COLOR_STATUS_BAR);//COLOR_SEL_BAR } /******************************************************************************** * Function:CheckBoxShow * display CheckBox *******************************************************************************/ void CheckBoxShow(struct SUT_CHECK_BOX *p) { unsigned char i,j; unsigned short x,y; if(p->itemnum==0)return; j=p->page*LIST_ROW; for(i = j ; i = p->itemnum){ y=LIST_TOPY+(i % LIST_ROW)*LIST_ITEM_HEGH; guiClearArea(LIST_TOPX,y-1,LIST_BAR_LEN+18,LIST_ITEM_HEGH,guiGetBackColor()); }else{ CheckBoxShowItem(p,i); } } CheckBoxShowBar(p,REVERSED_NO); } /******************************************************************************** CheckBoxResponse CheckBox控件的键盘响应处? 底层 *******************************************************************************/ unsigned long CheckBoxResponse(struct SUT_CHECK_BOX *p) { unsigned char temp,i; unsigned long g_ulKeyValue=getKeyValue(); if(p->itemnum==0)return g_ulKeyValue; switch(g_ulKeyValue) { case MKEY_VALUE_UP: CheckBoxShowBar(p,REVERSED_YES); if(p->handle==0)p->handle=(p->itemnum-1); else p->handle --; temp=p->page; p->page=p->handle/LIST_ROW; if(temp!=p->page) CheckBoxShow(p); else CheckBoxShowBar(p,REVERSED_NO); break; case MKEY_VALUE_DOWN: CheckBoxShowBar(p,REVERSED_YES); p->handle ++; if(p->handle>=p->itemnum)p->handle=0; temp = p->page; p->page=p->handle/LIST_ROW; if(temp!=p->page) CheckBoxShow(p); else CheckBoxShowBar(p,REVERSED_NO); break; case MKEY_VALUE_MENU: if(p->handle==0&&p->checkstatus[0]==1){ for(i=0;icheckstatus[i]=1; } MSG_INFO(1,"ReFlashItemLeader1"); ReFlashItemLeader(3,0); }else if(p->handle==0&&p->checkstatus[0]==0){ for(i=0;icheckstatus[i]=1; } MSG_INFO(1,"ReFlashItemLeader0"); ReFlashItemLeader(2,0); }else{ MSG_INFO(1,"reshow,%d",p->handle); if(p->checkstatus[p->handle]==1)p->checkstatus[p->handle]=0; else p->checkstatus[p->handle]=1; if(p->page==0){ if(p->checkstatus[0]==1)p->checkstatus[0]=0; CheckBoxShowItem(p,0); } CheckBoxShowItem(p,p->handle); CheckBoxShowBar(p,REVERSED_NO); } break; default: return g_ulKeyValue; break; } return 0; }