⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_pop_up_list.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	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 + -