checkbox.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. #include "includes.h"
  2. SUT_CHECK_BOX sut_check_box;
  3. /*************************************************************************
  4. CheckBoxInit
  5. ***************************************************************************/
  6. void CheckBoxInit(struct SUT_CHECK_BOX *p,char **itemlist,char unicode,const char **iconlist,char *features,unsigned int type,unsigned char*check)
  7. {
  8. UI_STACKDEF *uiPtr=getStackStruct();
  9. unsigned char i,ch,index;
  10. p->item = itemlist;
  11. i = 0;
  12. while(i<LIST_ITEM_NUM_MAX)
  13. {
  14. ch=p->item[i][0];
  15. if(ch==0)break;
  16. i ++;
  17. }
  18. i=i-1;
  19. p->itemnum = i+1;
  20. p->pgaenum=i/LIST_ROW;
  21. if(p->pgaenum%LIST_ROW)p->pgaenum+=1;
  22. i=0;
  23. p->icon=iconlist;
  24. while(i<LIST_ITEM_NUM_MAX)
  25. {
  26. if(iconlist==NULL)break;
  27. ch=p->icon[i][0];
  28. if(ch==0)break;
  29. i ++;
  30. }
  31. p->iconnum=i;
  32. for(i=0;i<LIST_ITEM_NUM_MAX;i++){
  33. if(i<p->itemnum){
  34. p->features[i]=features[i];
  35. }else{
  36. p->features[i]=0;
  37. }
  38. }
  39. for(i=0;i<LIST_ITEM_NUM_MAX;i++){
  40. if(i<p->itemnum){
  41. p->checkstatus[i]=check[i];
  42. }else{
  43. p->checkstatus[i]=0;
  44. }
  45. }
  46. p->unicode=unicode;
  47. p->page = 0;
  48. p->handle = type;
  49. CheckBoxShow(p);
  50. }
  51. /********************************************************************************
  52. CheckBoxShowItem
  53. *******************************************************************************/
  54. void CheckBoxShowItem(struct SUT_CHECK_BOX *p,unsigned short handle)
  55. {
  56. unsigned short len;
  57. unsigned short x,y,hand;
  58. unsigned char buf[LIST_ITEM_TEXT_LEN_MAX+3];
  59. char str[LIST_ITEM_TEXT_LEN_MAX+1];
  60. char f;
  61. hand=handle % LIST_ROW;
  62. x=LIST_TOPX;
  63. //y=LIST_TOPY+handle*LIST_ITEM_HEGH;
  64. y=LIST_TOPY+hand*LIST_ITEM_HEGH;
  65. guiClearArea(x,y,LIST_BAR_LEN+16,LIST_ITEM_HEGH,guiGetBackColor());
  66. memset(buf,0,sizeof(buf));
  67. if(p->unicode){
  68. buf[LIST_ITEM_TEXT_LEN_MAX+2]=0;
  69. }else{
  70. strncpy((char *)buf,p->item[handle],sizeof(buf));
  71. buf[LIST_ITEM_TEXT_LEN_MAX+2]=0;
  72. }
  73. StrIntercept(str,(char *)buf,LIST_ITEM_TEXT_LEN_MAX);
  74. if(p->icon!=NULL){
  75. f=p->checkstatus[handle];
  76. guiShowBmp(x,y,p->icon[f+3]);
  77. x+=24;
  78. f= p->features[handle];
  79. guiShowBmp(x,y,p->icon[f]);
  80. guiShowStr(x+24+2,y,str, FONT_MODE_16X16, REVERSED_NO, guiGetForeColor(),guiGetBackColor());
  81. MSG_INFO(1,"str===%s,handler==%d,checkstatus==%d,features==%d",str,handle,p->checkstatus[handle],p->features[handle]);
  82. }else{
  83. guiShowStr(x,y,str, FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
  84. }
  85. }
  86. /********************************************************************************
  87. * Function:CheckBoxShowBar
  88. * display a bar
  89. *******************************************************************************/
  90. void CheckBoxShowBar(struct SUT_CHECK_BOX *p,REV_ENUM rev)
  91. {
  92. unsigned char x,y,h,handle;
  93. char str[LIST_ITEM_TEXT_LEN_MAX+1];
  94. x=LIST_TOPX;
  95. if(p->icon!=NULL){
  96. x+=24+2+24;
  97. }
  98. handle=p->handle%LIST_ROW;
  99. y=LIST_TOPY+handle*LIST_ITEM_HEGH;
  100. StrIntercept(str,p->item[p->handle],LIST_ITEM_TEXT_LEN_MAX);
  101. if(REVERSED_YES==rev) guiFillRect(x,y,LIST_BAR_LEN,y+32,guiGetBackColor());
  102. else guiFillRect(x,y,LIST_BAR_LEN,y+32,COLOR_STATUS_BAR);
  103. if(REVERSED_YES==rev) guiShowStr(x,y,str, FONT_MODE_16X16, rev,guiGetBackColor(),guiGetForeColor());
  104. else guiShowStr(x,y,str, FONT_MODE_16X16, rev,guiGetForeColor(), COLOR_STATUS_BAR);//COLOR_SEL_BAR
  105. }
  106. /********************************************************************************
  107. * Function:CheckBoxShow
  108. * display CheckBox
  109. *******************************************************************************/
  110. void CheckBoxShow(struct SUT_CHECK_BOX *p)
  111. {
  112. unsigned char i,j;
  113. unsigned short x,y;
  114. if(p->itemnum==0)return;
  115. j=p->page*LIST_ROW;
  116. for(i = j ; i <j+LIST_ROW ; i ++)
  117. {
  118. if(i >= p->itemnum){
  119. y=LIST_TOPY+(i % LIST_ROW)*LIST_ITEM_HEGH;
  120. guiClearArea(LIST_TOPX,y-1,LIST_BAR_LEN+18,LIST_ITEM_HEGH,guiGetBackColor());
  121. }else{
  122. CheckBoxShowItem(p,i);
  123. }
  124. }
  125. CheckBoxShowBar(p,REVERSED_NO);
  126. }
  127. /********************************************************************************
  128. CheckBoxResponse
  129. CheckBox控件的键盘�应处� 底层
  130. *******************************************************************************/
  131. unsigned long CheckBoxResponse(struct SUT_CHECK_BOX *p)
  132. {
  133. unsigned char temp,i;
  134. unsigned long g_ulKeyValue=getKeyValue();
  135. if(p->itemnum==0)return g_ulKeyValue;
  136. switch(g_ulKeyValue)
  137. {
  138. case MKEY_VALUE_UP:
  139. CheckBoxShowBar(p,REVERSED_YES);
  140. if(p->handle==0)p->handle=(p->itemnum-1);
  141. else p->handle --;
  142. temp=p->page;
  143. p->page=p->handle/LIST_ROW;
  144. if(temp!=p->page) CheckBoxShow(p);
  145. else CheckBoxShowBar(p,REVERSED_NO);
  146. break;
  147. case MKEY_VALUE_DOWN:
  148. CheckBoxShowBar(p,REVERSED_YES);
  149. p->handle ++;
  150. if(p->handle>=p->itemnum)p->handle=0;
  151. temp = p->page;
  152. p->page=p->handle/LIST_ROW;
  153. if(temp!=p->page) CheckBoxShow(p);
  154. else CheckBoxShowBar(p,REVERSED_NO);
  155. break;
  156. case MKEY_VALUE_MENU:
  157. if(p->handle==0&&p->checkstatus[0]==1){
  158. for(i=0;i<LIST_ITEM_NUM_MAX;i++){
  159. p->checkstatus[i]=1;
  160. }
  161. MSG_INFO(1,"ReFlashItemLeader1");
  162. ReFlashItemLeader(3,0);
  163. }else if(p->handle==0&&p->checkstatus[0]==0){
  164. for(i=0;i<LIST_ITEM_NUM_MAX;i++){
  165. p->checkstatus[i]=1;
  166. }
  167. MSG_INFO(1,"ReFlashItemLeader0");
  168. ReFlashItemLeader(2,0);
  169. }else{
  170. MSG_INFO(1,"reshow,%d",p->handle);
  171. if(p->checkstatus[p->handle]==1)p->checkstatus[p->handle]=0;
  172. else p->checkstatus[p->handle]=1;
  173. if(p->page==0){
  174. if(p->checkstatus[0]==1)p->checkstatus[0]=0;
  175. CheckBoxShowItem(p,0);
  176. }
  177. CheckBoxShowItem(p,p->handle);
  178. CheckBoxShowBar(p,REVERSED_NO);
  179. }
  180. break;
  181. default:
  182. return g_ulKeyValue;
  183. break;
  184. }
  185. return 0;
  186. }