📄 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 TextOutRect
EXTERN ap_get_message
EXTERN ap_handle_hotkey
PUBLIC menu_pos_list
PUBLIC menulist_bck_pic
PUBLIC menuptr_height_list
EXTERN ui_auto_select
PUBLIC ui_popup_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?C_MUL_L01
EXTERN ?SS_DIV_L02
EXTERN ?SS_MOD_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG COM_CTRL
ui_popup_list:
; 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] = { 22,22+18,22+18*2,22+18*3,22+18*4,22+18*5};
; 17. const WORD menulist_bck_pic[LIST_NUM_ONE_PAGE]={ FILEBCK1,FILEBCK1,FILEBCK1,FILEBCK1,FILEBCK1,FILEBCK1 };
; 18. const char menuptr_height_list[9] = { 8*9,8*8,8*7,8*6,8*5,8*4,8*3,8*2,8*1, };
; 19. #pragma codeseg(COM_CTRL)
; 20. // 定义背景颜色
; 21. /*
; 22. void show_active_list1(pop_up_list_t *list,int old_active, int active)
; 23. {
; 24. int tmp;
; 25.
; 26. //---------------------//
; 27. //清除旧的活动菜单项
; 28. tmp = old_active%6;
; 29. if(list->total > LIST_NUM_ONE_PAGE)
; 30. ResShowPic(MENUBCK3, 0, menu_pos_list[tmp]-1);
; 31. else
; 32. ResShowPic(MENUBCK1, 0, menu_pos_list[tmp]-1);
; 33. SetPenColor(Color_BLACK_def);
; 34. SetBackgdColor(Color_MENU_def);
; 35. ResShowMultiString(list->strid[old_active],list->string_id, 3, menu_pos_list[tmp]);
; 36. if(list->total > LIST_NUM_ONE_PAGE)
; 37. ResShowPic(MENUARR, 153, menu_pos_list[tmp]-1);
; 38. else
; 39. ResShowPic(MENUARR, 163, menu_pos_list[tmp]-1);
; 40.
; 41.
; 42.
; 43. tmp = active%6;
; 44. if(list->total > LIST_NUM_ONE_PAGE)
; 45. {
; 46. ResShowPic(MENUBCK2, 0, menu_pos_list[tmp]-1);
; 47. ResShowPic(MENUARR1, 153, menu_pos_list[tmp]-1);
; 48. }
; 49. else
; 50. {
; 51. ResShowPic(MENUBCK, 0, menu_pos_list[tmp]-1);
; 52. ResShowPic(MENUARR1, 163, menu_pos_list[tmp]-1);
; 53. }
; 54.
; 55. SetPenColor(Color_WHITE_def);
; 56. SetBackgdColor(0x00003358);
; 57. ResShowMultiString(list->strid[active],list->string_id, 3, menu_pos_list[tmp]);
; 58. if(list->total > LIST_NUM_ONE_PAGE)
; 59. {
; 60. ResShowPic(MENUPTR, 166, 19);
; 61. tmp = 113-menuptr_height_list[(list->total-1)/LIST_NUM_ONE_PAGE]; //注意,最多九级!!!
; 62. if(tmp%(list->total-1)>=active)
; 63. ResShowPic(MENUPTR1, 166, 19+active+(tmp/(list->total-1))*active);
; 64. else
; 65. ResShowPic(MENUPTR1, 166, 19+(tmp/(list->total-1))*active);
; 66. }
; 67. //---------------------//
; 68. }
; 69. */
; 70. /*
; 71. ********************************************************************************
; 72. * Description : 弹出式列表选择窗体
; 73. *
; 74. * Arguments :
; 75. * list, 弹出式列表结构体指针
; 76. * list->string, 语言
; 77. *
; 78. * Returns : key
; 79. *
; 80. * Notes :
; 81. *
; 82. ********************************************************************************
; 83. */
; 84. int ui_popup_list(pop_up_list_t *list, const void (*callback)(int value))
; 85. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65504
ADD HL,SP
LD SP,HL
PUSH DE
POP IY
; 86. int i,active,old_active;
; 87. char key,constX;
; 88. WORD resID;
; 89. bool need_draw=FALSE;
; 90. bool need_drawall=TRUE;
; 91. bool value_changed=FALSE;
; 92. int cur_group; //list->active / LIST_NUM_ONE_PAGE
; 93. int n; //the item to show
; 94. int tmp;
; 95. DC oldDC_sav;
; 96. region_t tregion; //Jerry Xie Add for test
; 97.
; 98. active = list->active;
LD HL,4
ADD HL,DE
LD B,(HL)
LD (IX-32),B
INC HL
LD H,(HL)
LD (IX-31),H
; 99. GetDCStatus(&oldDC_sav);
LD HL,10
ADD HL,SP
EX DE,HL
CALL LWRD GetDCStatus
LD (IX-5),0
LD (IX-2),1
LD (IX-3),0
?0003:
; 100.
; 101. ///-SetTextOutMode(1); //设字体透明
; 102.
; 103. while(1)
; 104. {
; 105. tregion.x = 3;
LD (IX-28),3
; 106. tregion.y = 19;
LD (IX-27),19
; 107. ///-tregion.width = 160;
; 108. tregion.height = 157;
LD (IX-25),157
; 109.
; 110. if(need_drawall)
XOR A
OR (IX-2)
JR Z,?0006
?0005:
; 111. {
; 112. need_drawall=FALSE;
; 113. need_draw=TRUE;
LD (IX-2),0
LD (IX-5),1
?0006:
; 114. }
; 115. if(need_draw)
XOR A
OR (IX-5)
JP Z,?0008
?0007:
; 116. {
; 117. old_active=active;
; 118. cur_group = active / LIST_NUM_ONE_PAGE;
LD BC,6
LD E,(IX-32)
LD D,(IX-31)
CALL LWRD ?SS_DIV_L02
LD (IX-10),E
LD (IX-9),D
; 119. 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
; 120.
; 121. if(list->total > LIST_NUM_ONE_PAGE)
LD L,(IX-32)
LD H,(IX-31)
LD (IX-14),L
LD (IX-13),H
LD C,(IY+2)
LD B,(IY+3)
LD HL,6
OR 128
SBC HL,BC
JP PO,?0075
XOR H
?0075:
JP P,?0010
?0009:
; 122. {
; 123. tregion.width = 144;
LD (IX-26),144
; 124. constX = 153;
; 125. resID = MENUBCK2;
; 126. ResShowPic(MENUTWO,0,0);
LD C,0
PUSH BC
LD DE,195
CALL LWRD ?0095
POP AF
LD (IX-4),153
LD (IX-8),182
JR ?0086
; 127. }
; 128. else
?0010:
; 129. {
; 130. tregion.width = 160;
LD (IX-26),160
; 131. constX = 163;
; 132. resID = MENUBCK;
; 133. ResShowPic(MENUTWO1,0,0);
LD C,0
PUSH BC
LD DE,196
CALL LWRD ?0095
POP AF
LD (IX-4),163
LD (IX-8),180
?0086:
LD (IX-7),0
?0011:
; 134. }
; 135.
; 136. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 137. SetBackgdColor(0x0000df1c);
LD BC,0
LD DE,57116
CALL LWRD SetBackgdColor
; 138. ///-SetTextOutMode(1);
; 139. ResShowMultiString(list->headid, list->string_id,255, 1);
LD C,1
PUSH BC
LD C,255
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
; 140. ///-SetTextOutMode(0);
; 141. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 142.
; 143. if(callback != NULL)
LD A,(IX+10)
OR (IX+11)
OR (IX+12)
JR Z,?0013
?0012:
; 144. callback(active);
CALL LWRD ?0100
?0013:
; 145.
; 146. for(i=0; i<LIST_NUM_ONE_PAGE; i++)
XOR A
LD (IX-24),A
LD (IX-23),A
?0015:
LD BC,32774
LD L,(IX-24)
LD H,(IX-23)
LD A,B
XOR H
LD H,A
SBC HL,BC
JP NC,?0014
?0016:
; 147. {
; 148. if(n+i >= list->total) break; //处理不足LIST_NUM_ONE_PAGE个的情况
LD C,(IY+2)
LD B,(IY+3)
LD L,(IX-24)
LD H,(IX-23)
LD E,(IX-12)
LD D,(IX-11)
ADD HL,DE
OR 128
SBC HL,BC
JP PO,?0076
XOR H
?0076:
JP P,?0014
?0018:
?0019:
; 149. if(n+i==active)
LD L,(IX-24)
LD H,(IX-23)
LD C,E
LD B,D
ADD HL,BC
LD C,(IX-32)
LD B,(IX-31)
AND A
SBC HL,BC
JP NZ,?0021
?0020:
; 150. {
; 151. //======================================//
; 152. ResShowPic(resID, 0, menu_pos_list[i]-1);
LD HL,menu_pos_list
LD C,(IX-24)
LD B,(IX-23)
ADD HL,BC
LD A,(HL)
ADD A,255
LD E,A
PUSH DE
LD C,0
CALL LWRD ?0096
POP AF
; 153. ResShowPic(MENUARR1, constX, menu_pos_list[i]-1);
LD HL,menu_pos_list
LD C,(IX-24)
LD B,(IX-23)
ADD HL,BC
LD A,(HL)
ADD A,255
LD E,A
PUSH DE
LD C,(IX-4)
LD DE,179
CALL LWRD ?0095
POP AF
; 154.
; 155. SetPenColor(Color_WHITE_def);
CALL LWRD ?0097
; 156. SetBackgdColor(0x00003358);
; 157. TextOutRect(&tregion ,1);
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 158. ResShowMultiString(list->strid[active], list->string_id,3, menu_pos_list[i]);
LD HL,menu_pos_list
LD C,(IX-24)
LD B,(IX-23)
ADD HL,BC
LD C,(HL)
PUSH BC
LD C,3
PUSH BC
LD C,(IY+8)
LD L,(IY+0)
LD H,(IY+1)
PUSH HL
LD L,(IX-32)
LD H,(IX-31)
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
; 159. TextOutRect(&tregion ,0);
LD C,0
LD HL,4
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 160.
; 161. if(list->total > LIST_NUM_ONE_PAGE)
LD C,(IY+2)
LD B,(IY+3)
LD HL,6
OR 128
SBC HL,BC
JP PO,?0077
XOR H
?0077:
JP P,?0027
?0022:
; 162. {
; 163. key = (list->total-LIST_NUM_ONE_PAGE-1)/LIST_NUM_ONE_PAGE;
CALL LWRD ?0094
; 164. tmp = 113-menuptr_height_list[key]; //注意,最多九级!!!
; 165. if(tmp%(list->total-1)>=active)
JP PO,?0078
XOR H
?0078:
LD C,(IY+2)
LD B,(IY+3)
DEC BC
LD E,(IX-30)
LD D,(IX-29)
CALL LWRD ?SS_DIV_L02
LD B,E
LD A,(IX-32)
JP M,?0025
?0024:
; 166. ResShowPic(MENUPTR1+key, 166, 19+active+(tmp/(list->total-1))*active);
CALL LWRD ?C_MUL_L01
ADD A,(IX-32)
JR ?0087
; 167. else
?0025:
; 168. ResShowPic(MENUPTR1+key, 166, 19+tmp%(list->total-1)+(tmp/(list->total-1))*active);
CALL LWRD ?0101
?0087:
ADD A,19
LD C,A
PUSH BC
LD C,166
LD E,(IX-6)
LD D,0
LD HL,186
ADD HL,DE
EX DE,HL
JR ?0091
?0026:
?0023:
; 169. }
; 170. }
; 171. else
?0021:
; 172. {
; 173. SetPenColor(Color_BLACK_def);
CALL LWRD ?0098
; 174. SetBackgdColor(Color_MENU_def);
; 175. TextOutRect(&tregion ,1);
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 176. ResShowMultiString(list->strid[n+i], list->string_id,3, menu_pos_list[i]);
LD HL,menu_pos_list
LD C,(IX-24)
LD B,(IX-23)
ADD HL,BC
LD E,(HL)
PUSH DE
LD E,3
PUSH DE
LD C,(IY+8)
LD L,(IY+0)
LD H,(IY+1)
PUSH HL
LD L,(IX-24)
LD H,B
LD E,(IX-12)
LD D,(IX-11)
ADD HL,DE
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
; 177. TextOutRect(&tregion ,0);
LD C,0
LD HL,4
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 178.
; 179. ResShowPic(MENUARR, constX, menu_pos_list[i]-1);
LD HL,menu_pos_list
LD C,(IX-24)
LD B,(IX-23)
ADD HL,BC
LD A,(HL)
ADD A,255
LD C,A
PUSH BC
LD C,(IX-4)
LD DE,178
?0091:
CALL LWRD ?0095
POP AF
?0027:
INC (IX-24)
JP NZ,?0015
INC (IX-23)
JP LWRD ?0015
?0014:
; 180. }
; 181. }
; 182.
; 183. need_draw = FALSE;
LD (IX-5),0
?0008:
; 184. }//need draw
; 185. if(value_changed)
XOR A
OR (IX-3)
JP Z,?0029
?0028:
; 186. {
; 187. ///-show_active_list1(list,old_active,active);
; 188.
; 189. //---------------------//
; 190. //清除旧的活动菜单项
; 191. tmp = old_active%6;
LD BC,6
LD E,(IX-14)
LD D,(IX-13)
CALL LWRD ?SS_MOD_L02
LD (IX-30),E
LD (IX-29),D
; 192. if(list->total > LIST_NUM_ONE_PAGE)
LD C,(IY+2)
LD B,(IY+3)
LD HL,6
OR 128
SBC HL,BC
JP PO,?0080
XOR H
?0080:
LD HL,menu_pos_list
LD C,E
LD B,D
ADD HL,BC
LD A,(HL)
JP P,?0031
?0030:
; 193. ResShowPic(MENUBCK3, 0, menu_pos_list[tmp]-1);
ADD A,255
LD C,A
PUSH BC
LD C,0
LD DE,183
JR ?0088
; 194. else
?0031:
; 195. ResShowPic(MENUBCK1, 0, menu_pos_list[tmp]-1);
ADD A,255
LD C,A
PUSH BC
LD C,0
LD DE,181
?0088:
CALL LWRD ?0095
POP AF
?0032:
; 196.
; 197. SetPenColor(Color_BLACK_def);
CALL LWRD ?0098
; 198. SetBackgdColor(Color_MENU_def);
; 199.
; 200. TextOutRect(&tregion ,1);
ADD HL,SP
EX DE,HL
CALL LWRD TextOutRect
; 201. ResShowMultiString(list->strid[old_active],list->string_id, 3, menu_pos_list[tmp]);
LD HL,menu_pos_list
LD C,(IX-30)
LD B,(IX-29)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -