📄 ui_slider.s01
字号:
NAME ui_slider(17)
RSEG COM_CTRL(0)
RSEG CONST(0)
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetPenColor
EXTERN SetTextOutMode
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN file_name
EXTERN main_ResShowPic
PUBLIC slider_atoi4
EXTERN ui_auto_select
PUBLIC ui_slider
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_DIV_L02
EXTERN ?SS_MOD_L02
EXTERN ?S_MUL_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRLEN_L11
RSEG COM_CTRL
slider_atoi4:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * ap common lib, slider control file
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_slider.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #pragma codeseg(COM_CTRL)
; 13.
; 14. #include "ap_common.h"
; 15.
; 16. //为了不用bank切换而使用 ResShowPic()
; 17. extern res_entry_t res_entry;
; 18. extern region_t res_region;
; 19.
; 20.
; 21. void slider_atoi4(char *str, int count)
; 22. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH AF
PUSH AF
PUSH DE
POP IY
; 23. int tmp, level;
; 24. if(count < 0)
BIT 7,B
JR Z,?0003
?0002:
; 25. {
; 26. *str = '-';
LD (IY+0),45
; 27. count = 0 - count;
AND A
LD HL,0
SBC HL,BC
LD (IX-2),L
LD (IX-1),H
; 28. str++;
INC IY
?0003:
; 29. }
; 30. if(count >= 1000)level = 4;
LD BC,33768
LD L,(IX-2)
LD H,(IX-1)
LD A,128
XOR H
LD H,A
SBC HL,BC
JR C,?0005
?0004:
LD (IX-4),4
JR ?0083
?0005:
; 31. else if(count >= 100) level = 3;
LD BC,32868
LD L,(IX-2)
LD H,(IX-1)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0008
?0007:
LD (IX-4),3
JR ?0083
?0008:
; 32. else if(count >= 10) level = 2;
LD BC,32778
LD L,(IX-2)
LD H,(IX-1)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0011
?0010:
LD (IX-4),2
JR ?0083
?0011:
; 33. else level = 1;
LD (IX-4),1
?0083:
LD (IX-3),0
?0012:
?0009:
?0006:
; 34. if(level >= 4)
LD BC,32772
LD L,(IX-4)
LD H,(IX-3)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0014
?0013:
; 35. {
; 36. tmp = (count / 1000) % 10;
LD BC,1000
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_DIV_L02
LD BC,10
CALL LWRD ?0109
; 37. *str = tmp + '0';
; 38. str++;
?0014:
; 39. }
; 40. if(level >= 3)
LD BC,32771
LD L,(IX-4)
LD H,(IX-3)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0016
?0015:
; 41. {
; 42. tmp = (count / 100) % 10;
LD BC,100
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_DIV_L02
LD C,10
CALL LWRD ?0109
; 43. *str = tmp + '0';
; 44. str++;
?0016:
; 45. }
; 46. if(level >= 2)
LD BC,32770
LD L,(IX-4)
LD H,(IX-3)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0018
?0017:
; 47. {
; 48. tmp = (count / 10) % 10;
LD BC,10
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_DIV_L02
CALL LWRD ?0109
; 49. *str = tmp + '0';
; 50. str++;
?0018:
; 51. }
; 52. tmp = count % 10;
LD BC,10
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_MOD_L02
; 53. *str = tmp + '0';
LD A,E
ADD A,48
LD (IY+0),A
; 54. *(str + 1) = '\0';
LD (IY+1),B
; 55. }
LD SP,IX
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0109:
CALL LWRD ?SS_MOD_L02
LD A,E
ADD A,48
LD (IY+0),A
INC IY
RET
ui_slider:
; 56.
; 57.
; 58. /*
; 59. ********************************************************************************
; 60. * Description : 滑动杆控件
; 61. *
; 62. * Arguments : slider, 滑动杆结构
; 63. callback, 滑动杆的回调函数,=NULL 表示没有回调函数
; 64. *
; 65. * Returns : 结果消息, 或者0
; 66. *
; 67. * Notes : 控件本身没有重画功能, 因为控件不能重画背景
; 68. *
; 69. ********************************************************************************
; 70. */
; 71. int ui_slider(slider_t *slider, const void (*callback)(int res_id))
; 72. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65524
ADD HL,SP
LD SP,HL
PUSH DE
POP IY
; 73. int start, end; //x坐标
; 74. char buf[10]; //注意可能含符号 <<-0000>>
; 75. // char *p; //格式化buf时使用
; 76. BYTE StrLength;
; 77. char key;
; 78. BOOL need_draw=TRUE;
; 79. BOOL value_changed=TRUE; //值是否改变, 需要callback
; 80.
; 81. const region_t num_region={44, 16, 40, 16}; //数字区域
LD HL,6
ADD HL,SP
EX DE,HL
LD HL,?0019
LD BC,4
LDIR
; 82. WORD value; //to keep slider->value
; 83. BYTE hold_state=0; //按住状态,为了加快控件改变的速度
; 84. //0:normal; 1:holding up, 2:holding down
; 85.
; 86. ASSERT(slider->value <= slider->max);
; 87. ASSERT(slider->value >= slider->min);
; 88. ASSERT(slider->step > 0);
; 89. SetTextOutMode(1);
LD E,1
CALL LWRD SetTextOutMode
; 90. SetPenColor(Color_WHITE_def);
LD DE,65535
CALL LWRD SetPenColor
LD (IX-9),1
LD (IX-10),1
LD (IX-11),0
?0021:
; 91. //main_ResShowPic(SSBCK,0,0);
; 92.
; 93. //SetPenColor(Color_WHITE_def);
; 94. //SetTextOutMode(0);
; 95.
; 96.
; 97. while(1)
; 98. {
; 99. if(need_draw)
XOR A
OR (IX-9)
JP Z,?0024
?0023:
; 100. {
; 101.
; 102. // value = slider_pox_x_def + 2 +
; 103. // (slider_width_def-2) * (slider->value - slider->min) / (slider->max - slider->min);
; 104. value = slider_pox_x_def +
; 105. (slider_width_def-8) * (slider->value - slider->min) / (slider->max - slider->min);
LD C,(IY+2)
LD B,(IY+3)
LD L,(IY+6)
LD H,(IY+7)
SBC HL,BC
LD C,L
LD B,H
LD DE,120
CALL LWRD ?S_MUL_L02
LD C,(IY+2)
LD B,(IY+3)
LD L,(IY+4)
LD H,(IY+5)
AND A
SBC HL,BC
LD C,L
LD B,H
CALL LWRD ?SS_DIV_L02
LD HL,45
ADD HL,DE
LD (IX-8),L
; 106.
; 107. slider_atoi4 (file_name,slider->value);
LD C,(IY+6)
LD B,(IY+7)
LD DE,file_name
LD A,BYTE3 slider_atoi4
LD HL,LWRD slider_atoi4
CALL LWRD ?BANK_CALL_DIRECT_L08
; 108. StrLength=(BYTE)strlen(file_name);
LD HL,file_name
CALL LWRD ?STRLEN_L11
LD (IX-2),L
; 109.
; 110. ResShowPic(SSBCK,0,0);
LD C,0
PUSH BC
LD DE,221
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 111. ResShowMultiString(slider->title, slider->string_id, menuhead_s_pos_x_def, menuhead_s_pos_y_def);
LD C,148
PUSH BC
LD C,22
PUSH BC
LD C,(IY+10)
LD E,(IY+0)
LD D,(IY+1)
LD A,BYTE3 ResShowMultiString
LD HL,LWRD ResShowMultiString
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 112.
; 113. // 画滑动杆
; 114. main_ResShowPic(SSLIDER,slider_pox_x_def,slider_pox_y_def);
LD C,55
PUSH BC
LD C,45
LD DE,222
CALL LWRD ?0110
POP AF
; 115. // 画滑动游标
; 116. main_ResShowPic(SLIDPTR, value, slider_cursor_y_def);
LD C,55
PUSH BC
LD C,(IX-8)
LD DE,220
CALL LWRD ?0110
POP AF
; 117.
; 118. // 显示当前值
; 119. if(StrLength==1)
LD B,(IX-2)
DEC B
JR NZ,?0026
?0025:
; 120. main_ResShowPic(FMNUM0+file_name[0]-0x30,98,80);
LD C,80
PUSH BC
LD C,98
LD DE,(file_name)
JP LWRD ?0091
LD HL,9
JP LWRD ?0094
EX DE,HL
JP LWRD ?0108
LD HL,LWRD main_ResShowPic
JP LWRD ?0104
POP AF
JP LWRD ?0033
?0026:
; 121. else if(StrLength==2)
LD B,(IX-2)
DEC B
DEC B
JR NZ,?0029
?0028:
; 122. {
; 123. if(file_name[0]=='-')
LD A,(file_name)
CP 45
JR NZ,?0031
?0030:
; 124. {
; 125. main_ResShowPic(MENUNEG,90,83);
LD C,83
PUSH BC
LD C,90
LD DE,107
CALL LWRD ?0110
POP AF
; 126. main_ResShowPic(FMNUM0+file_name[1]-0x30,108,80);
LD C,80
PUSH BC
LD C,108
JR ?0090
LD D,0
JR ?0102
JR ?0094
EX DE,HL
JR ?0108
LD HL,LWRD main_ResShowPic
JR ?0104
POP AF
; 127. }
; 128. else
JR ?0033
?0031:
; 129. {
; 130. main_ResShowPic(FMNUM0+file_name[0]-0x30,83,80);
LD C,80
PUSH BC
LD C,83
LD DE,(file_name)
LD D,B
CALL LWRD ?0111
POP AF
; 131. main_ResShowPic(FMNUM0+file_name[1]-0x30,106,80);
LD C,80
PUSH BC
LD C,106
?0090:
LD DE,(file_name+1)
JR ?0091
JR ?0102
JR ?0094
EX DE,HL
JR ?0108
LD HL,LWRD main_ResShowPic
JR ?0104
POP AF
?0032:
; 132. }
; 133. }
; 134. else
JR ?0033
?0029:
; 135. {
; 136. main_ResShowPic(FMNUM0+file_name[0]-0x30,75,80);
LD C,80
PUSH BC
LD C,75
LD DE,(file_name)
CALL LWRD ?0112
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -