📄 ui_slider.lst
字号:
206 case AP_KEY_PLAY | AP_KEY_UP:
207 return 0; //ok and return
\ 03AB 1818 JR ?0093
208
209
210 case AP_MSG_WAIT_TIMEOUT:
\ 03AD 1824 JR ?0081
\ 03AF ?0048:
211 if(ui_auto_select) return 0;
\ 03AF 3A0000 LD A,(ui_auto_select)
\ 03B2 B7 OR A
\ 03B3 2828 JR Z,?0055
\ 03B5 ?0049:
\ 03B5 180E JR ?0093
212
213 break;
\ 03B7 181A JR ?0081
\ 03B9 ?0050:
\ 03B9 1822 JR ?0055
\ 03BB ?0051:
214
215
216 default:
217 key = ap_handle_hotkey(key);
\ 03BB CD0000 CALL LWRD ap_handle_hotkey
\ 03BE DD77F2 LD (IX-14),A
218 if(key == RESULT_REDRAW) //need_draw = TRUE;
\ 03C1 FE32 CP 50
\ 03C3 2005 JR NZ,?0053
\ 03C5 ?0052:
219 {
220 //直接退出,因为控件不能重画背景
221 return 0;
\ 03C5 ?0093:
\ 03C5 210000 LD HL,0
222 }
\ 03C8 1809 JR ?0081
\ 03CA ?0053:
223 else if(key != 0) return key;
\ 03CA AF XOR A
\ 03CB DDB6F2 OR (IX-14)
\ 03CE 280D JR Z,?0055
\ 03D0 ?0054:
\ 03D0 6F LD L,A
\ 03D1 2600 LD H,0
224 }
\ 03D3 ?0081:
\ 03D3 DDF9 LD SP,IX
\ 03D5 DDE1 POP IX
\ 03D7 FDE1 POP IY
\ 03D9 C1 POP BC
\ 03DA C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 03DD ?0055:
\ 03DD ?0033:
225 //ASSERT(slider->value <= slider->max);
226 //ASSERT(slider->value >= slider->min);
227
228 //check if holding
229 if(hold_state == 1) //holding up
\ 03DD DD46F3 LD B,(IX-13)
\ 03E0 05 DEC B
\ 03E1 2058 JR NZ,?0057
\ 03E3 ?0056:
230 {
231 if((slider->value + slider->step) <= slider->max)
\ 03E3 FD6E06 LD L,(IY+6)
\ 03E6 FD6607 LD H,(IY+7)
\ 03E9 FD4E04 LD C,(IY+4)
\ 03EC FD4605 LD B,(IY+5)
\ 03EF 09 ADD HL,BC
\ 03F0 4D LD C,L
\ 03F1 44 LD B,H
\ 03F2 FD6E02 LD L,(IY+2)
\ 03F5 FD6603 LD H,(IY+3)
\ 03F8 F680 OR 128
\ 03FA ED42 SBC HL,BC
\ 03FC E20004 JP PO,?0087
\ 03FF AC XOR H
\ 0400 ?0087:
\ 0400 FA9604 JP M,?0070
\ 0403 ?0058:
232 {
233 slider->value += slider->step;
\ 0403 210400 LD HL,4
\ 0406 FDE5 PUSH IY
\ 0408 C1 POP BC
\ 0409 09 ADD HL,BC
\ 040A 7E LD A,(HL)
\ 040B FD8606 ADD A,(IY+6)
\ 040E 77 LD (HL),A
\ 040F 23 INC HL
\ 0410 7E LD A,(HL)
\ 0411 FD8E07 ADC A,(IY+7)
\ 0414 77 LD (HL),A
234 value_changed = TRUE;
235 need_draw = TRUE;
\ 0415 DD36F401 LD (IX-12),1
\ 0419 DD36F501 LD (IX-11),1
\ 041D ?0061:
236 //while(key != NULL && (key & AP_KEY_UP) == NULL)key = ap_get_message();
237 while(key != NULL)
\ 041D AF XOR A
\ 041E DDB6F2 OR (IX-14)
\ 0421 2877 JR Z,?0076
\ 0423 ?0062:
238 {
239 if((key & AP_KEY_UP) != NULL)
\ 0423 DDCBF26E BIT 5,(IX-14)
\ 0427 2804 JR Z,?0064
\ 0429 ?0063:
240 hold_state = 0;
\ 0429 DD36F300 LD (IX-13),0
\ 042D ?0064:
241 key = ap_get_message();
\ 042D CD0000 CALL LWRD ap_get_message
\ 0430 DD77F2 LD (IX-14),A
242 }
243 }
\ 0433 18E8 JR ?0061
\ 0435 ?0060:
\ 0435 1863 JR ?0076
\ 0437 ?0059:
244 else hold_state = 0; //disable holding
\ 0437 185D JR ?0070
\ 0439 ?0065:
\ 0439 185F JR ?0076
\ 043B ?0057:
245 }
246 else if(hold_state == 2) //holding down
\ 043B DD46F3 LD B,(IX-13)
\ 043E 05 DEC B
\ 043F 05 DEC B
\ 0440 2058 JR NZ,?0076
\ 0442 ?0067:
247 {
248 if((slider->value - slider->step) >= slider->min)
\ 0442 FD4E00 LD C,(IY+0)
\ 0445 FD4601 LD B,(IY+1)
\ 0448 FD5E06 LD E,(IY+6)
\ 044B FD5607 LD D,(IY+7)
\ 044E FD6E04 LD L,(IY+4)
\ 0451 FD6605 LD H,(IY+5)
\ 0454 A7 AND A
\ 0455 ED52 SBC HL,DE
\ 0457 F680 OR 128
\ 0459 ED42 SBC HL,BC
\ 045B E25F04 JP PO,?0088
\ 045E AC XOR H
\ 045F ?0088:
\ 045F FA9604 JP M,?0070
\ 0462 ?0069:
249 {
250 slider->value -= slider->step;
\ 0462 210400 LD HL,4
\ 0465 FDE5 PUSH IY
\ 0467 C1 POP BC
\ 0468 09 ADD HL,BC
\ 0469 7E LD A,(HL)
\ 046A FD9606 SUB (IY+6)
\ 046D 77 LD (HL),A
\ 046E 23 INC HL
\ 046F 7E LD A,(HL)
\ 0470 FD9E07 SBC A,(IY+7)
\ 0473 77 LD (HL),A
251 value_changed = TRUE;
252 need_draw = TRUE;
\ 0474 DD36F401 LD (IX-12),1
\ 0478 DD36F501 LD (IX-11),1
\ 047C ?0072:
253 //while(key != NULL && (key & AP_KEY_UP) == NULL)key = ap_get_message();
254 while(key != NULL)
\ 047C AF XOR A
\ 047D DDB6F2 OR (IX-14)
\ 0480 2818 JR Z,?0076
\ 0482 ?0073:
255 {
256 if((key & AP_KEY_UP) != NULL)
\ 0482 DDCBF26E BIT 5,(IX-14)
\ 0486 2804 JR Z,?0075
\ 0488 ?0074:
257 hold_state = 0;
\ 0488 DD36F300 LD (IX-13),0
\ 048C ?0075:
258 key = ap_get_message();
\ 048C CD0000 CALL LWRD ap_get_message
\ 048F DD77F2 LD (IX-14),A
259 }
260 }
\ 0492 18E8 JR ?0072
\ 0494 ?0071:
\ 0494 1804 JR ?0076
\ 0496 ?0070:
261 else hold_state = 0; //disable holding
\ 0496 DD36F300 LD (IX-13),0
\ 049A ?0076:
\ 049A ?0068:
\ 049A ?0066:
262 }
263
264 //handle callback
265 if(callback != NULL && value_changed)
\ 049A DD7E0A LD A,(IX+10)
\ 049D DDB60B OR (IX+11)
\ 04A0 DDB60C OR (IX+12)
\ 04A3 CADC00 JP Z,?0010
\ 04A6 AF XOR A
\ 04A7 DDB6F4 OR (IX-12)
\ 04AA CADC00 JP Z,?0010
\ 04AD ?0080:
\ 04AD ?0079:
\ 04AD ?0077:
266 {
267 callback(slider->value);
\ 04AD FD5E04 LD E,(IY+4)
\ 04B0 FD5605 LD D,(IY+5)
\ 04B3 DD7E0C LD A,(IX+12)
\ 04B6 DD6E0A LD L,(IX+10)
\ 04B9 DD660B LD H,(IX+11)
\ 04BC CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
268 value_changed = FALSE;
\ 04BF DD36F400 LD (IX-12),0
\ 04C3 ?0078:
269 }
270
271 }//while(1)
272 //return 0;
273 }
\ 04C3 C3DC00 JP LWRD ?0010
274
275
\ 0000 RSEG CONST
\ 0000 ?0007:
\ 0000 00 DEFB 0
\ 0001 10 DEFB 16
\ 0002 80 DEFB 128
\ 0003 10 DEFB 16
\ 0004 ?0008:
\ 0004 2C DEFB ','
\ 0005 08 DEFB 8
\ 0006 28 DEFB '('
\ 0007 08 DEFB 8
\ 0008 END
Errors: none
Warnings: none
Code size: 1222
Constant size: 8
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -