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; } } }
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 gboolean self_update(ObMenuFrame *frame, gpointer data) { ObMenu *menu = frame->menu; guint i; menu_clear_entries(menu); while (desktop_menus) { menu_free(desktop_menus->data); desktop_menus = g_slist_delete_link(desktop_menus, desktop_menus); } for (i = 0; i < screen_num_desktops; ++i) { ObMenu *submenu; gchar *name = g_strdup_printf("%s-%u", MENU_NAME, i); DesktopData *ddata = g_slice_new(DesktopData); ddata->desktop = i; submenu = menu_new(name, screen_desktop_names[i], FALSE, ddata); menu_set_update_func(submenu, desk_menu_update); menu_set_execute_func(submenu, desk_menu_execute); menu_set_destroy_func(submenu, desk_menu_destroy); menu_add_submenu(menu, i, name); g_free(name); desktop_menus = g_slist_append(desktop_menus, submenu); } if (config_menu_manage_desktops) { menu_add_separator(menu, SEPARATOR, NULL); menu_add_normal(menu, ADD_DESKTOP, _("_Add new desktop"), NULL, TRUE); menu_add_normal(menu, REMOVE_DESKTOP, _("_Remove last desktop"), NULL, TRUE); } return TRUE; /* always show */ }
static void parse_menu(xmlNodePtr node, gpointer data) { ObMenuParseState *state = data; gchar *name = NULL, *title = NULL, *script = NULL; ObMenu *menu; if (!obt_xml_attr_string(node, "id", &name)) goto parse_menu_fail; if (!g_hash_table_lookup(menu_hash, name)) { if (!obt_xml_attr_string(node, "label", &title)) goto parse_menu_fail; if ((menu = menu_new(name, title, TRUE, NULL))) { menu->pipe_creator = state->pipe_creator; if (obt_xml_attr_string(node, "execute", &script)) { menu->execute = obt_paths_expand_tilde(script); } else { ObMenu *old; old = state->parent; state->parent = menu; obt_xml_tree(menu_parse_inst, node->children); state->parent = old; } } } if (state->parent) menu_add_submenu(state->parent, -1, name); parse_menu_fail: g_free(name); g_free(title); g_free(script); }