📄 listbox.txt
字号:
;;;870 */
;;;871 static int _AddKey(LISTBOX_Handle hObj, int Key) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4680 MOV r8,r0
000006 460c MOV r4,r1
;;;872 LISTBOX_Obj* pObj;
;;;873 pObj = LISTBOX_H2P(hObj);
000008 f7fffffe BL GUI_ALLOC_h2p
;;;874 switch (Key) {
00000c 2c12 CMP r4,#0x12
00000e d013 BEQ |L19.56|
000010 dc07 BGT |L19.34|
000012 2c10 CMP r4,#0x10
000014 d01c BEQ |L19.80|
000016 2c11 CMP r4,#0x11
000018 d128 BNE |L19.108|
;;;875 case ' ':
;;;876 _ToggleMultiSel(hObj, pObj, pObj->Sel);
;;;877 return 1; /* Key has been consumed */
;;;878 case GUI_KEY_RIGHT:
;;;879 if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v + pObj->Props.ScrollStepH)) {
;;;880 LISTBOX_UpdateScrollers(hObj);
;;;881 LISTBOX__InvalidateInsideArea(hObj);
;;;882 }
;;;883 return 1; /* Key has been consumed */
;;;884 case GUI_KEY_LEFT:
;;;885 if (WM_SetScrollValue(&pObj->ScrollStateH, pObj->ScrollStateH.v - pObj->Props.ScrollStepH)) {
;;;886 LISTBOX_UpdateScrollers(hObj);
;;;887 LISTBOX__InvalidateInsideArea(hObj);
;;;888 }
;;;889 return 1; /* Key has been consumed */
;;;890 case GUI_KEY_DOWN:
;;;891 LISTBOX_IncSel(hObj);
;;;892 return 1; /* Key has been consumed */
;;;893 case GUI_KEY_UP:
;;;894 LISTBOX_DecSel(hObj);
00001a 4640 MOV r0,r8
00001c f7fffffe BL LISTBOX_DecSel
;;;895 return 1; /* Key has been consumed */
000020 e051 B |L19.198|
|L19.34|
000022 2c13 CMP r4,#0x13 ;874
000024 d01e BEQ |L19.100|
000026 2c20 CMP r4,#0x20 ;874
000028 d120 BNE |L19.108|
00002a f9b02072 LDRSH r2,[r0,#0x72] ;876
00002e 4601 MOV r1,r0 ;876
000030 4640 MOV r0,r8 ;876
000032 f7fffffe BL _ToggleMultiSel
000036 e046 B |L19.198|
|L19.56|
000038 f8b0204c LDRH r2,[r0,#0x4c] ;879
00003c 6c01 LDR r1,[r0,#0x40] ;879
00003e 4411 ADD r1,r1,r2 ;879
000040 e00a B |L19.88|
|L19.66|
000042 4640 MOV r0,r8 ;880
000044 f7fffffe BL LISTBOX_UpdateScrollers
000048 4640 MOV r0,r8 ;881
00004a f7fffffe BL LISTBOX__InvalidateInsideArea
00004e e03a B |L19.198|
|L19.80|
000050 f8b0204c LDRH r2,[r0,#0x4c] ;885
000054 6c01 LDR r1,[r0,#0x40] ;885
000056 1a89 SUBS r1,r1,r2 ;885
|L19.88|
000058 303c ADDS r0,r0,#0x3c ;879
00005a f7fffffe BL WM_SetScrollValue
00005e 2800 CMP r0,#0 ;879
000060 d1ef BNE |L19.66|
000062 e030 B |L19.198|
|L19.100|
000064 4640 MOV r0,r8 ;891
000066 f7fffffe BL LISTBOX_IncSel
00006a e02c B |L19.198|
|L19.108|
;;;896 default:
;;;897 if(_IsAlphaNum(Key)) {
00006c 4620 MOV r0,r4
00006e f7fffffe BL _Tolower
000072 f1a00161 SUB r1,r0,#0x61
000076 2919 CMP r1,#0x19
000078 d905 BLS |L19.134|
00007a 3830 SUBS r0,r0,#0x30
00007c 2809 CMP r0,#9
00007e d902 BLS |L19.134|
;;;898 _SelectByKey(hObj, Key);
;;;899 return 1; /* Key has been consumed */
;;;900 }
;;;901 }
;;;902 return 0;
000080 2000 MOVS r0,#0
|L19.130|
;;;903 }
000082 e8bd81f0 POP {r4-r8,pc}
|L19.134|
000086 4640 MOV r0,r8
000088 f7fffffe BL GUI_ALLOC_h2p
00008c 4606 MOV r6,r0
00008e 4620 MOV r0,r4
000090 f7fffffe BL _Tolower
000094 4605 MOV r5,r0
000096 2400 MOVS r4,#0
000098 f1060728 ADD r7,r6,#0x28
00009c e00e B |L19.188|
|L19.158|
00009e 4621 MOV r1,r4
0000a0 4630 MOV r0,r6
0000a2 f7fffffe BL LISTBOX__GetpString
0000a6 7800 LDRB r0,[r0,#0]
0000a8 f7fffffe BL _Tolower
0000ac 42a8 CMP r0,r5
0000ae d104 BNE |L19.186|
0000b0 4621 MOV r1,r4
0000b2 4640 MOV r0,r8
0000b4 f7fffffe BL LISTBOX_SetSel
0000b8 e005 B |L19.198|
|L19.186|
0000ba 1c64 ADDS r4,r4,#1
|L19.188|
0000bc 4638 MOV r0,r7
0000be f7fffffe BL GUI_ARRAY_GetNumItems
0000c2 42a0 CMP r0,r4
0000c4 d8eb BHI |L19.158|
|L19.198|
0000c6 2001 MOVS r0,#1 ;899
0000c8 e7db B |L19.130|
;;;904
ENDP
AREA ||i._CallOwnerDraw||, CODE, READONLY, ALIGN=1
_CallOwnerDraw PROC
;;;119 */
;;;120 static int _CallOwnerDraw(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, int Cmd, int ItemIndex) {
000000 b500 PUSH {lr}
000002 b085 SUB sp,sp,#0x14
;;;121 WIDGET_ITEM_DRAW_INFO ItemInfo;
;;;122 int r;
;;;123 ItemInfo.Cmd = Cmd;
;;;124 ItemInfo.hWin = hObj;
000004 9201 STR r2,[sp,#4]
000006 f8ad0000 STRH r0,[sp,#0]
;;;125 ItemInfo.ItemIndex = ItemIndex;
;;;126 if (pObj->pfDrawItem) {
00000a 9302 STR r3,[sp,#8]
00000c 6ac9 LDR r1,[r1,#0x2c]
;;;127 r = pObj->pfDrawItem(&ItemInfo);
00000e 4668 MOV r0,sp
000010 b111 CBZ r1,|L20.24|
000012 4788 BLX r1
|L20.20|
;;;128 } else {
;;;129 r = LISTBOX_OwnerDraw(&ItemInfo);
;;;130 }
;;;131 return r;
;;;132 }
000014 b005 ADD sp,sp,#0x14
000016 bd00 POP {pc}
|L20.24|
000018 f7fffffe BL LISTBOX_OwnerDraw
00001c e7fa B |L20.20|
;;;133
ENDP
AREA ||i._GetContentsSizeX||, CODE, READONLY, ALIGN=1
_GetContentsSizeX PROC
;;;220 */
;;;221 static int _GetContentsSizeX(LISTBOX_Handle hObj) {
000000 e92d4ff8 PUSH {r3-r11,lr}
000004 4683 MOV r11,r0
;;;222 LISTBOX_Obj* pObj;
;;;223 int i, NumItems, SizeX;
;;;224 int Result = 0;
000006 2700 MOVS r7,#0
;;;225 pObj = LISTBOX_H2P(hObj);
000008 f7fffffe BL GUI_ALLOC_h2p
00000c 4680 MOV r8,r0
00000e 3028 ADDS r0,r0,#0x28
000010 9000 STR r0,[sp,#0]
000012 f7fffffe BL GUI_ARRAY_GetNumItems
;;;226 NumItems = LISTBOX__GetNumItems(pObj);
000016 4681 MOV r9,r0
;;;227 for (i = 0; i < NumItems; i++) {
000018 2600 MOVS r6,#0
00001a e01c B |L21.86|
|L21.28|
00001c 4631 MOV r1,r6
00001e 9800 LDR r0,[sp,#0]
000020 f7fffffe BL GUI_ARRAY_GetpItem
000024 0004 MOVS r4,r0
000026 d001 BEQ |L21.44|
000028 8825 LDRH r5,[r4,#0]
00002a b975 CBNZ r5,|L21.74|
|L21.44|
00002c f8d80048 LDR r0,[r8,#0x48]
000030 f7fffffe BL GUI_SetFont
000034 4682 MOV r10,r0
000036 4633 MOV r3,r6
000038 2201 MOVS r2,#1
00003a 4641 MOV r1,r8
00003c 4658 MOV r0,r11
00003e f7fffffe BL _CallOwnerDraw
000042 4605 MOV r5,r0
000044 4650 MOV r0,r10
000046 f7fffffe BL GUI_SetFont
|L21.74|
00004a b104 CBZ r4,|L21.78|
00004c 8025 STRH r5,[r4,#0]
|L21.78|
;;;228 SizeX = _GetItemSizeX(hObj, pObj, i);
;;;229 if (Result < SizeX) {
00004e 42af CMP r7,r5
000050 da00 BGE |L21.84|
;;;230 Result = SizeX;
000052 462f MOV r7,r5
|L21.84|
000054 1c76 ADDS r6,r6,#1 ;227
|L21.86|
000056 454e CMP r6,r9 ;227
000058 dbe0 BLT |L21.28|
;;;231 }
;;;232 }
;;;233 return Result;
00005a 4638 MOV r0,r7
;;;234 }
00005c e8bd8ff8 POP {r3-r11,pc}
;;;235
ENDP
AREA ||i._GetItemPosY||, CODE, READONLY, ALIGN=1
_GetItemPosY PROC
;;;239 */
;;;240 static int _GetItemPosY(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, unsigned Index) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4680 MOV r8,r0
000006 460f MOV r7,r1
000008 4616 MOV r6,r2
00000a f1010028 ADD r0,r1,#0x28
00000e f7fffffe BL GUI_ARRAY_GetNumItems
;;;241 if (Index < LISTBOX__GetNumItems(pObj)) {
000012 42b0 CMP r0,r6
000014 d910 BLS |L22.56|
;;;242 if ((int)Index >= pObj->ScrollStateV.v) {
000016 6b7c LDR r4,[r7,#0x34]
000018 42b4 CMP r4,r6
00001a dc0d BGT |L22.56|
;;;243 unsigned i;
;;;244 int PosY = 0;
00001c 2500 MOVS r5,#0
;;;245 for (i = pObj->ScrollStateV.v; i < Index; i++) {
00001e e006 B |L22.46|
|L22.32|
;;;246 PosY += _GetItemSizeY(hObj, pObj, i);
000020 4622 MOV r2,r4
000022 4639 MOV r1,r7
000024 4640 MOV r0,r8
000026 f7fffffe BL _GetItemSizeY
00002a 4405 ADD r5,r5,r0
00002c 1c64 ADDS r4,r4,#1 ;245
|L22.46|
00002e 42b4 CMP r4,r6 ;245
000030 d3f6 BCC |L22.32|
;;;247 }
;;;248 return PosY;
000032 4628 MOV r0,r5
|L22.52|
;;;249 }
;;;250 }
;;;251 return -1;
;;;252 }
000034 e8bd81f0 POP {r4-r8,pc}
|L22.56|
000038 f04f30ff MOV r0,#0xffffffff ;251
00003c e7fa B |L22.52|
;;;253
ENDP
AREA ||i._GetItemSizeY||, CODE, READONLY, ALIGN=1
_GetItemSizeY PROC
;;;197 */
;;;198 static int _GetItemSizeY(LISTBOX_Handle hObj, const LISTBOX_Obj* pObj, unsigned Index) {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 460e MOV r6,r1
000006 4680 MOV r8,r0
000008 4691 MOV r9,r2
;;;199 LISTBOX_ITEM* pItem;
;;;200 int ySize = 0;
;;;201 pItem = (LISTBOX_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
00000a 4611 MOV r1,r2
00000c f1060028 ADD r0,r6,#0x28
000010 f7fffffe BL GUI_ARRAY_GetpItem
000014 0004 MOVS r4,r0
;;;202 if (pItem) {
000016 d001 BEQ |L23.28|
;;;203 ySize = pItem->ySize;
000018 8865 LDRH r5,[r4,#2]
;;;204 }
;;;205 if (ySize == 0) {
00001a b96d CBNZ r5,|L23.56|
|L23.28|
;;;206 const GUI_FONT GUI_UNI_PTR* pOldFont;
;;;207 pOldFont = GUI_SetFont(pObj->Props.pFont);
00001c 6cb0 LDR r0,[r6,#0x48]
00001e f7fffffe BL GUI_SetFont
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -