📄 ui_pop_up_list.s01
字号:
NAME ui_pop_up_list(17)
RSEG COM_CTRL(0)
RSEG CONST(0)
EXTERN GetDCStatus
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN SetTextOutMode
EXTERN ap_get_message
EXTERN ap_handle_hotkey
PUBLIC menu_pos_list
PUBLIC menulist_bck_pic
PUBLIC show_active_list1
EXTERN ui_auto_select
PUBLIC ui_popup_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_DIV_L02
EXTERN ?SS_MOD_L02
EXTERN ?SS_CMP_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG COM_CTRL
show_active_list1:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * ap common lib file
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_pop_up_list.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #include "ap_common.h"
; 13. #include "common.h"
; 14.
; 15. #define LIST_NUM_ONE_PAGE 6
; 16. const char menu_pos_list[LIST_NUM_ONE_PAGE] = { POSITION_MENU6,POSITION_MENU5,
; 17. POSITION_MENU4,POSITION_MENU3,POSITION_MENU2,POSITION_MENU1};
; 18. const WORD menulist_bck_pic[LIST_NUM_ONE_PAGE]={ MENUBCK6,MENUBCK5,MENUBCK4,MENUBCK3,MENUBCK2,MENUBCK1 };
; 19. #pragma codeseg(COM_CTRL)
; 20. // 定义背景颜色
; 21.
; 22. void show_active_list1(pop_up_list_t *list,int old_active, int active)
; 23. {
PUSH IY
PUSH IX
PUSH BC
PUSH DE
POP IY
; 24. int tmp;
; 25. //清除旧的活动菜单项
; 26. tmp = old_active%LIST_NUM_ONE_PAGE;
LD BC,6
LD L,B
LD H,B
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?SS_MOD_L02
; 27.
; 28. ResShowPic(menulist_bck_pic[tmp], menu_ptr_x_def, menu_pos_list[tmp]-4);
LD HL,menu_pos_list
ADD HL,DE
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
LD C,10
EX DE,HL
ADD HL,HL
LD DE,menulist_bck_pic
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?0067
POP AF
; 29.
; 30. tmp = active%LIST_NUM_ONE_PAGE;
LD BC,6
LD HL,10
ADD HL,SP
CALL LWRD ?0066
; 31. ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_list[tmp]-4);
LD A,(HL)
ADD A,252
LD C,A
PUSH BC
CALL LWRD ?0068
POP AF
; 32. ResShowPic(MENURARR, menu_ptr_x_def, menu_pos_list[tmp]);
LD HL,menu_pos_list
PUSH IX
POP BC
ADD HL,BC
LD E,(HL)
PUSH DE
LD C,10
LD DE,108
CALL LWRD ?0067
POP AF
; 33. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,45
CALL LWRD ?0067
POP AF
; 34. ResShowPic(DHTHK,194, menu_pos_list[tmp]+6);
LD HL,menu_pos_list
PUSH IX
POP BC
ADD HL,BC
LD A,(HL)
ADD A,6
LD E,A
PUSH DE
LD C,194
LD DE,46
CALL LWRD ?0067
POP AF
; 35.
; 36. SetPenColor(Color_WHITE_def);
CALL LWRD ?0069
; 37. ResShowMultiString(list->strid[active], list->string_id, menu_str_x_def, menu_pos_list[tmp]-3);
LD HL,menu_pos_list
PUSH IX
POP BC
ADD HL,BC
LD A,(HL)
ADD A,253
LD E,A
PUSH DE
LD E,32
PUSH DE
LD C,(IY+8)
LD L,(IY+0)
LD H,(IY+1)
PUSH HL
LD HL,16
ADD HL,SP
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
ADD HL,HL
EX DE,HL
POP HL
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 38.
; 39. //重新显示旧的活动菜单
; 40. SetPenColor(Color_WHITE_def);
CALL LWRD ?0069
; 41.
; 42. tmp = old_active%LIST_NUM_ONE_PAGE;
LD BC,6
LD L,B
LD H,B
ADD HL,SP
CALL LWRD ?0066
; 43. ResShowPic(MENUARR1+tmp, menu_ptr_x_def, menu_pos_list[tmp]);
LD C,(HL)
PUSH BC
LD C,10
LD HL,94
ADD HL,DE
EX DE,HL
CALL LWRD ?0067
POP AF
; 44. ResShowMultiString(list->strid[old_active], list->string_id, menu_str_x_def, menu_pos_list[tmp]-3);
LD HL,menu_pos_list
PUSH IX
POP BC
ADD HL,BC
LD A,(HL)
ADD A,253
LD C,A
PUSH BC
LD C,32
PUSH BC
LD C,(IY+8)
LD L,(IY+0)
LD H,(IY+1)
PUSH HL
LD HL,6
ADD HL,SP
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
ADD HL,HL
EX DE,HL
POP HL
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 45. }
POP HL
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0066:
LD E,(HL)
INC HL
LD D,(HL)
CALL LWRD ?SS_MOD_L02
PUSH DE
POP IX
LD HL,menu_pos_list
ADD HL,DE
RET
?0068:
LD C,9
LD DE,100
?0067:
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
JP LWRD ?BANK_CALL_DIRECT_L08
?0069:
LD BC,0
LD DE,65535
JP LWRD SetPenColor
ui_popup_list:
; 46.
; 47. /*
; 48. ********************************************************************************
; 49. * Description : 弹出式列表选择窗体
; 50. *
; 51. * Arguments :
; 52. * list, 弹出式列表结构体指针
; 53. * list->string, 语言
; 54. *
; 55. * Returns : key
; 56. *
; 57. * Notes :
; 58. *
; 59. ********************************************************************************
; 60. */
; 61. int ui_popup_list(pop_up_list_t *list, const void (*callback)(int value))
; 62. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65512
PUSH IY
LD L,(IX+2)
LD H,(IX+3)
PUSH HL
POP IY
; 63. int i,active,old_active;
; 64. char key;
; 65. bool need_draw=FALSE;
; 66. bool need_drawall=TRUE;
; 67. bool value_changed=FALSE;
; 68. int max_group; // list->total / 7
; 69. int cur_group; //list->active / LIST_NUM_ONE_PAGE
; 70. int n; //the item to show
; 71. DC oldDC_sav;
; 72.
; 73. active = list->active;
LD L,(IY+4)
LD (IX-24),L
LD H,(IY+5)
LD (IX-23),H
; 74.
; 75. if((list->total % LIST_NUM_ONE_PAGE) == 0) max_group--;
LD (IX-4),0
LD (IX-1),1
LD (IX-2),0
LD E,(IY+2)
LD D,(IY+3)
LD BC,6
CALL LWRD ?SS_MOD_L02
?0002:
?0003:
; 76. GetDCStatus(&oldDC_sav);
LD L,C
LD H,B
ADD HL,SP
EX DE,HL
CALL LWRD GetDCStatus
; 77.
; 78. SetTextOutMode(1); //设字体透明
LD E,1
CALL LWRD SetTextOutMode
?0005:
; 79.
; 80. while(1)
; 81. {
; 82. if(need_drawall)
XOR A
OR (IX-1)
JR Z,?0008
?0007:
; 83. {
; 84.
; 85. need_drawall=FALSE;
; 86. need_draw=TRUE;
LD (IX-1),0
LD (IX-4),1
?0008:
; 87. }
; 88.
; 89. if(need_draw)
XOR A
OR (IX-4)
JP Z,?0010
?0009:
; 90. {
; 91. old_active=active;
; 92. cur_group = active / LIST_NUM_ONE_PAGE;
LD BC,6
LD E,(IX-24)
LD D,(IX-23)
CALL LWRD ?SS_DIV_L02
LD (IX-10),E
LD (IX-9),D
; 93. n = cur_group*LIST_NUM_ONE_PAGE;
EX DE,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD (IX-12),L
LD (IX-11),H
; 94. ResShowPic(MENUTWO,0,0);
LD C,0
PUSH BC
LD DE,109
CALL LWRD ?0067
POP AF
; 95. ResShowPic(DHT,194,8);
LD C,8
PUSH BC
LD C,194
LD DE,45
CALL LWRD ?0067
POP AF
; 96. SetPenColor(Color_WHITE_def);
CALL LWRD ?0069
; 97. ResShowMultiString(list->headid, list->string_id,
; 98. list_str_x_def, list_str_y_def);
LD C,148
PUSH BC
LD C,22
PUSH BC
LD C,(IY+8)
LD E,(IY+6)
LD D,(IY+7)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 99.
; 100. SetPenColor(Color_WHITE_def);
CALL LWRD ?0069
; 101. if(callback != NULL)
LD L,(IX-24)
LD H,(IX-23)
LD (IX-8),L
LD (IX-7),H
LD A,(IX+10)
OR (IX+11)
OR (IX+12)
JR Z,?0012
?0011:
; 102. callback(active);
EX DE,HL
CALL LWRD ?0072
?0012:
; 103.
; 104. for(i=0; i<LIST_NUM_ONE_PAGE; i++)
XOR A
LD (IX-22),A
LD (IX-21),A
?0014:
LD BC,32774
LD L,(IX-22)
LD H,(IX-21)
LD A,B
XOR H
LD H,A
SBC HL,BC
JP NC,?0013
?0015:
; 105. {
; 106. if(n+i >= list->total) break; //处理不足LIST_NUM_ONE_PAGE个的情况
LD C,(IY+2)
LD B,(IY+3)
LD L,(IX-22)
LD H,(IX-21)
LD E,(IX-12)
LD D,(IX-11)
ADD HL,DE
CALL LWRD ?SS_CMP_L02
JP NC,?0013
?0017:
?0018:
; 107. if(n+i==active)
LD L,(IX-22)
LD H,(IX-21)
LD C,E
LD B,D
ADD HL,BC
LD C,(IX-24)
LD B,(IX-23)
AND A
SBC HL,BC
LD HL,menu_pos_list
LD C,(IX-22)
LD B,(IX-21)
ADD HL,BC
JR NZ,?0020
?0019:
; 108. {
; 109. {
; 110. ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_list[i]-4);
LD A,(HL)
ADD A,252
LD E,A
PUSH DE
CALL LWRD ?0068
POP AF
; 111. ResShowPic(DHTHK,194, menu_pos_list[i]+6);
LD HL,menu_pos_list
LD C,(IX-22)
LD B,(IX-21)
ADD HL,BC
LD A,(HL)
ADD A,6
LD E,A
PUSH DE
LD C,194
LD DE,46
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -