static void watchfile_menu_init(void) { static _Bool ready = 0; if (!ready) { ready = 1; struct menu *menu = &watchfile_menu; menu_init(menu, MENU_NOVALUE, MENU_NOVALUE, MENU_NOVALUE); watchfile_return = menu_add_submenu(menu, 0, 0, NULL, "return"); watchfile_return->leave_proc = watchfile_leave_proc; struct gfx_texture *t_arrow = resource_get(RES_ICON_ARROW); menu_add_button_icon(menu, 0, 1, t_arrow, 0, 0xFFFFFF, scroll_up_proc, NULL); menu_add_button_icon(menu, 0, 1 + WATCHFILE_VIEW_ROWS - 1, t_arrow, 1, 0xFFFFFF, scroll_down_proc, NULL); for (int i = 0; i < WATCHFILE_VIEW_ROWS; ++i) { struct menu_item *item = menu_item_add(menu, 2, 1 + i, NULL, 0xFFFFFF); item->data = (void*)i; item->enter_proc = entry_enter_proc; item->draw_proc = entry_draw_proc; item->activate_proc = entry_activate_proc; watchfile_items[i] = item; } } }
struct menu_item *watchlist_create(struct menu *menu, struct menu *menu_release, int x, int y) { struct menu *imenu; struct menu_item *item = menu_add_imenu(menu, x, y, &imenu); struct item_data *data = malloc(sizeof(*data)); data->menu_release = menu_release; data->imenu = imenu; vector_init(&data->members, sizeof(struct member_data*)); if (!list_icons) list_icons = resource_load_grc_texture("list_icons"); data->add_button = menu_add_button_icon(imenu, 0, 0, list_icons, 0, 0x00FF00, add_button_proc, data); #ifndef WIIVC struct gfx_texture *file_icons = resource_get(RES_ICON_FILE); data->import_button = menu_add_button_icon(imenu, 2, 0, file_icons, 1, 0xFFFFFF, import_button_proc, data); #endif item->data = data; item->destroy_proc = destroy_proc; return item; }
void mem_menu_create(struct menu *menu) { /* initialize data */ vector_init(&domains, sizeof(struct mem_domain)); add_domain(0x80000000, 0x00C00000, "k0 rdram"); add_domain(0xA0000000, 0x00C00000, "k1 rdram"); add_domain(0xA3F00000, 0x00100000, "rdram regs"); add_domain(0xA4000000, 0x00100000, "sp regs"); add_domain(0xA4100000, 0x00100000, "dp com"); add_domain(0xA4200000, 0x00100000, "dp span"); add_domain(0xA4300000, 0x00100000, "mi regs"); add_domain(0xA4400000, 0x00100000, "vi regs"); add_domain(0xA4500000, 0x00100000, "ai regs"); add_domain(0xA4600000, 0x00100000, "pi regs"); add_domain(0xA4800000, 0x00100000, "si regs"); add_domain(0xA8000000, 0x08000000, "cart dom2"); add_domain(0xB0000000, 0x0FC00000, "cart dom1"); add_domain(0xBFC00000, 0x000007C0, "pif rom"); add_domain(0xBFC007C0, 0x00000040, "pif ram"); /* initialize menus */ menu_init(menu, MENU_NOVALUE, MENU_NOVALUE, MENU_NOVALUE); menu->selector = menu_add_submenu(menu, 0, 0, NULL, "return"); { view_address = menu_add_intinput(menu, 0, 1, 16, 8, address_proc, NULL); struct menu_item *data_size = menu_add_option(menu, 9, 1, "byte\0""halfword\0""word\0", data_size_proc, NULL); menu_option_set(data_size, 2); view_data_size = 4; menu_add_button(menu, 18, 1, "<", prev_domain_proc, NULL); menu_add_button(menu, 20, 1, ">", next_domain_proc, NULL); view_domain_name = menu_add_static(menu, 22, 1, NULL, 0xC0C0C0); view_domain_name->text = malloc(32); struct gfx_texture *t_arrow = resource_get(RES_ICON_ARROW); view_pageup = menu_add_button_icon(menu, 0, 2, t_arrow, 0, 0xFFFFFF, page_up_proc, NULL); view_pagedown = menu_add_button_icon(menu, 2, 2, t_arrow, 1, 0xFFFFFF, page_down_proc, NULL); menu_add_static(menu, 9, 2, "0 1 2 3 4 5 6 7", 0xC0C0C0); for (int y = 0; y < MEM_VIEW_ROWS; ++y) { view_rows[y] = menu_add_static(menu, 0, 3 + y, NULL, 0xC0C0C0); view_rows[y]->text = malloc(9); } make_cells(menu); goto_domain(0); } }
static int add_member(struct item_data *data, uint32_t address, enum watch_type type, int position, _Bool anchored, int x, int y, _Bool position_set) { if (data->members.size >= SETTINGS_WATCHES_MAX || position < 0 || position > data->members.size) return 0; ++data->add_button->y; #ifndef WIIVC ++data->import_button->y; #endif for (int i = position; i < data->members.size; ++i) { struct member_data *member_data = get_member(data, i); ++member_data->index; ++member_data->member->y; } struct menu *imenu; struct member_data *member_data = malloc(sizeof(*member_data)); member_data->data = data; member_data->index = position; member_data->member = menu_add_imenu(data->imenu, 0, position, &imenu); member_data->anchor_button = menu_item_add(imenu, 2, 0, NULL, 0xFFFFFF); member_data->anchor_button->enter_proc = anchor_button_enter_proc; member_data->anchor_button->draw_proc = anchor_button_draw_proc; member_data->anchor_button->activate_proc = anchor_button_activate_proc; member_data->anchor_button->data = member_data; member_data->positioning = menu_add_positioning(imenu, 4, 0, position_proc, member_data); member_data->userwatch = menu_add_userwatch(imenu, 6, 0, address, type); member_data->anchored = 1; member_data->anchor_anim_state = 0; member_data->x = x; member_data->y = y; member_data->position_set = 1; menu_add_button_icon(imenu, 0, 0, list_icons, 1, 0xFF0000, remove_button_proc, member_data); if (anchored) menu_item_disable(member_data->positioning); else release_member(member_data); member_data->position_set = position_set; vector_insert(&data->members, position, 1, &member_data); return 1; }