📄 ui_slider.s01
字号:
NAME ui_slider(17)
RSEG COM_CTRL(0)
EXTERN EarProtectThreshold
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN file_name
EXTERN g_EarProtect_flag
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. #ifdef EAR_PROTECT
; 20. extern byte g_EarProtect_flag;
; 21. extern byte EarProtectThreshold;
; 22. #endif
; 23.
; 24. void slider_atoi4(char *str, int count)
; 25. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH AF
PUSH AF
PUSH DE
POP IY
; 26. int tmp, level;
; 27. if(count < 0)
BIT 7,B
JR Z,?0003
?0002:
; 28. {
; 29. *str = '-';
LD (IY+0),45
; 30. count = 0 - count;
AND A
LD HL,0
SBC HL,BC
LD (IX-2),L
LD (IX-1),H
; 31. str++;
INC IY
?0003:
; 32. }
; 33. 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 ?0091
?0005:
; 34. 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 ?0091
?0008:
; 35. 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 ?0091
?0011:
; 36. else level = 1;
LD (IX-4),1
?0091:
LD (IX-3),0
?0012:
?0009:
?0006:
; 37. 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:
; 38. {
; 39. 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
; 40. *str = tmp + '0';
; 41. str++;
?0014:
; 42. }
; 43. 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:
; 44. {
; 45. 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
; 46. *str = tmp + '0';
; 47. str++;
?0016:
; 48. }
; 49. 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:
; 50. {
; 51. tmp = (count / 10) % 10;
LD BC,10
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_DIV_L02
CALL LWRD ?0109
; 52. *str = tmp + '0';
; 53. str++;
?0018:
; 54. }
; 55. tmp = count % 10;
LD BC,10
LD E,(IX-2)
LD D,(IX-1)
CALL LWRD ?SS_MOD_L02
; 56. *str = tmp + '0';
LD A,E
ADD A,48
LD (IY+0),A
; 57. *(str + 1) = '\0';
LD (IY+1),B
; 58. }
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:
; 59.
; 60.
; 61. /*
; 62. ********************************************************************************
; 63. * Description : 滑动杆控件
; 64. *
; 65. * Arguments : slider, 滑动杆结构
; 66. callback, 滑动杆的回调函数,=NULL 表示没有回调函数
; 67. *
; 68. * Returns : 结果消息, 或者0
; 69. *
; 70. * Notes : 控件本身没有重画功能, 因为控件不能重画背景
; 71. *
; 72. ********************************************************************************
; 73. */
; 74. int ui_slider(slider_t *slider, const void (*callback)(int res_id))
; 75. {
PUSH BC
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH AF
PUSH AF
PUSH AF
PUSH AF
PUSH DE
POP IY
; 76. int start, end; //x坐标
; 77. char buf[10]; //注意可能含符号 <<-0000>>
; 78. BYTE StrLength;
; 79. char key;
; 80. BOOL need_draw=TRUE;
; 81. BOOL value_changed=TRUE; //值是否改变, 需要callback
; 82.
; 83. ///const region_t num_region={44, 16, 40, 16}; //数字区域
; 84. WORD value; //to keep slider->value
; 85. BYTE hold_state=0; //按住状态,为了加快控件改变的速度
; 86. //0:normal; 1:holding up, 2:holding down
; 87.
; 88. ASSERT(slider->value <= slider->max);
; 89. ASSERT(slider->value >= slider->min);
; 90. ASSERT(slider->step > 0);
; 91. ///-SetTextOutMode(1);
; 92. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
LD (IX-5),1
LD (IX-6),1
LD (IX-7),0
?0020:
; 93. while(1)
; 94. {
; 95. if(need_draw)
XOR A
OR (IX-5)
JP Z,?0023
?0022:
; 96. {
; 97. value = slider_pox_x_def +
; 98. (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,24
ADD HL,DE
LD (IX-4),L
; 99.
; 100. 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
; 101. StrLength=(BYTE)strlen(file_name);
LD HL,file_name
CALL LWRD ?STRLEN_L11
LD (IX-2),L
; 102.
; 103. ResShowPic(SSBCK,0,0);
LD C,0
PUSH BC
LD DE,254
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 104. SetBackgdColor(0x0000df1c);
LD BC,0
LD DE,57116
CALL LWRD SetBackgdColor
; 105. ///-SetTextOutMode(1);
; 106. ResShowMultiString(slider->title, slider->string_id, 255, 1);
LD C,1
PUSH BC
LD C,255
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
; 107. ///-SetTextOutMode(0);
; 108. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 109.
; 110. // 画滑动杆
; 111. #ifdef EAR_PROTECT
; 112. if (g_EarProtect_flag)
LD A,(g_EarProtect_flag)
OR A
JR Z,?0025
?0024:
; 113. {
; 114. if (EarProtectThreshold == 22)
LD A,(EarProtectThreshold)
CP 22
JR NZ,?0027
?0026:
; 115. {
; 116. main_ResShowPic(SSLIDER1,slider_pox_x_def,slider_pox_y_def);
LD C,55
PUSH BC
LD C,24
LD DE,256
JR ?0105
?0027:
; 117. }
; 118. else if (EarProtectThreshold == 25)
CP 25
LD C,55
PUSH BC
LD C,24
JR NZ,?0030
?0029:
; 119. {
; 120. main_ResShowPic(SSLIDER2,slider_pox_x_def,slider_pox_y_def);
LD DE,257
JR ?0105
; 121. }
; 122. else
?0030:
; 123. {
; 124. main_ResShowPic(SSLIDER3,slider_pox_x_def,slider_pox_y_def);
LD DE,258
JR ?0105
?0031:
?0028:
; 125. }
; 126. }
; 127. else
?0025:
; 128. {
; 129. main_ResShowPic(SSLIDER,slider_pox_x_def,slider_pox_y_def);
LD C,55
PUSH BC
LD C,24
LD DE,255
?0105:
CALL LWRD ?0110
POP AF
?0032:
; 130. }
; 131. #else
; 132. main_ResShowPic(SSLIDER,slider_pox_x_def,slider_pox_y_def);
; 133. #endif
; 134. // 画滑动游标
; 135. main_ResShowPic(SLIDPTR, value, slider_cursor_y_def);
LD C,55
PUSH BC
LD C,(IX-4)
LD DE,253
CALL LWRD ?0110
POP AF
; 136.
; 137. // 显示当前值
; 138. if(StrLength==1)
LD B,(IX-2)
DEC B
JR NZ,?0034
?0033:
; 139. main_ResShowPic(FMNUM0+file_name[0]-0x30,98-22,80);
LD C,80
PUSH BC
LD C,76
LD DE,(file_name)
JR ?0102
?0034:
; 140. else if(StrLength==2)
LD B,(IX-2)
DEC B
DEC B
JR NZ,?0037
?0036:
; 141. {
; 142. if(file_name[0]=='-')
LD A,(file_name)
CP 45
JR NZ,?0039
?0038:
; 143. {
; 144. main_ResShowPic(MENUNEG,90,83);
LD C,83
PUSH BC
LD C,90
LD DE,184
CALL LWRD ?0110
POP AF
; 145. main_ResShowPic(FMNUM0+file_name[1]-0x30,108-22,80);
LD C,80
PUSH BC
LD C,86
JR ?0101
; 146. }
; 147. else
?0039:
; 148. {
; 149. main_ResShowPic(FMNUM0+file_name[0]-0x30,83-22,80);
LD C,80
PUSH BC
LD C,61
LD DE,(file_name)
LD D,B
CALL LWRD ?0111
POP AF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -