pokeheartgold/include/list_menu.h
Adrienn Tindall 496ccfbb32 Decompile scrcmd_pokemon_misc, 12
Also cleaned up list_menu.h and list_menu.c since I'll need them for my next PR
2022-10-16 06:32:17 -04:00

91 lines
2.8 KiB
C

#ifndef POKEHEARTGOLD_LIST_MENU_H
#define POKEHEARTGOLD_LIST_MENU_H
#include "list_menu_cursor.h"
#include "list_menu_items.h"
#include "window.h"
struct ListMenu;
enum ListMenuAttr {
LISTMENUATTR_MOVECURSORFUNC,
LISTMENUATTR_ITEMPRINTFUNC,
LISTMENUATTR_TOTALITEMS,
LISTMENUATTR_MAXSHOWED,
LISTMENUATTR_UNUSED_4,
LISTMENUATTR_HEADERX,
LISTMENUATTR_ITEMX,
LISTMENUATTR_CURSORX,
LISTMENUATTR_UPTEXTY,
LISTMENUATTR_TEXTHEIGHT,
LISTMENUATTR_CURSORPAL,
LISTMENUATTR_FILLVALUE,
LISTMENUATTR_CURSORSHADOWPAL,
LISTMENUATTR_LETTERSSPACING,
LISTMENUATTR_ITEMVERTICALPADDING,
LISTMENUATTR_SCROLLMULTIPLE,
LISTMENUATTR_FONTID,
LISTMENUATTR_CURSORKIND,
LISTMENUATTR_WINDOW,
LISTMENUATTR_UNK_1C,
};
typedef void (*LM_MoveCursorFunc_t)(struct ListMenu *list, s32 index, u8 onInit);
typedef void (*LM_ItemPrintFunc_t)(struct ListMenu *list, s32 index, u8 y);
struct ListMenuTemplate {
/*0x00*/ LISTMENUITEM *items;
/*0x04*/ LM_MoveCursorFunc_t moveCursorFunc;
/*0x08*/ LM_ItemPrintFunc_t itemPrintFunc;
/*0x0C*/ WINDOW *window;
/*0x10*/ u16 totalItems;
/*0x12*/ u16 maxShowed;
/*0x14*/ u8 header_X;
/*0x15*/ u8 item_X;
/*0x16*/ u8 cursor_X;
/*0x17*/ u8 upText_Y:4;
u8 cursorPal:4;
/*0x18*/ u8 fillValue:4;
u8 cursorShadowPal:4;
/*0x1A*/ u16 lettersSpacing:3;
u16 itemVerticalPadding:4;
u16 scrollMultiple:2;
u16 fontId:6;
u16 cursorKind:1;
/*0x1C*/ u32 unk_1C;
};
struct ListMenu
{
/*0x00*/ struct ListMenuTemplate template;
// ListMenuOverride from gen 3
/*0x20*/ u8 cursorPal:4;
u8 fillValue:4;
/*0x21*/ u8 cursorShadowPal:4;
u8 unk_21_4:4;
/*0x22*/ u8 lettersSpacing:6;
/*0x23*/ u8 unk_23;
/*0x24*/ u8 fontId:7;
u8 overrideEnabled:1;
/*0x28*/ struct ListMenuCursor *cursor;
/*0x2c*/ u16 cursorPos;
/*0x2e*/ u16 itemsAbove;
/*0x30*/ u8 unk_30;
/*0x31*/ u8 unk_31;
/*0x32*/ u8 taskId;
/*0x33*/ u8 unk_33;
/*0x34*/ u8 heap_id;
};
struct ListMenu *ListMenuInit(const struct ListMenuTemplate *template, u16 cursorPos, u16 itemsAbove, HeapID heap_id);
s32 ListMenu_ProcessInput(struct ListMenu *list);
void DestroyListMenu(struct ListMenu *list, u16 * cursorPos, u16 * itemsAbove);
void RedrawListMenu(struct ListMenu *list);
void ListMenuOverrideSetColors(struct ListMenu *list, u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
void ListMenuGetCurrentItemArrayId(struct ListMenu *list, u16 *index_p);
void ListMenuGetScrollAndRow(struct ListMenu *list, u16 *cursorPos_p, u16 *itemsAbove_p);
s32 ListMenuGetValueByArrayId(struct ListMenu *list, s32 index);
s32 ListMenuGetTemplateField(struct ListMenu *list, enum ListMenuAttr attr);
#endif //POKEHEARTGOLD_LIST_MENU_H