Lines Matching defs:menu

1 /* $OpenBSD: menu.c,v 1.54 2024/10/17 17:10:41 nicm Exp $ */
41 struct menu *menu;
49 menu_add_items(struct menu *menu, const struct menu_item *items,
55 menu_add_item(menu, loop, qitem, c, fs);
59 menu_add_item(struct menu *menu, const struct menu_item *item,
70 if (line && menu->count == 0)
72 if (line && menu->items[menu->count - 1].name == NULL)
75 menu->items = xreallocarray(menu->items, menu->count + 1,
76 sizeof *menu->items);
77 new_item = &menu->items[menu->count++];
88 menu->count--;
138 if (width > menu->width)
139 menu->width = width;
142 struct menu *
145 struct menu *menu;
147 menu = xcalloc(1, sizeof *menu);
148 menu->title = xstrdup(title);
149 menu->width = format_width(title);
151 return (menu);
155 menu_free(struct menu *menu)
159 for (i = 0; i < menu->count; i++) {
160 free((void *)menu->items[i].name);
161 free((void *)menu->items[i].command);
163 free(menu->items);
165 free((void *)menu->title);
166 free(menu);
183 /* Return parts of the input range which are not obstructed by the menu. */
189 struct menu *menu = md->menu;
191 server_client_overlay_range(md->px, md->py, menu->width + 4,
192 menu->count + 2, px, py, nx, r);
202 struct menu *menu = md->menu;
210 screen_write_box(&ctx, menu->width + 4, menu->count + 2,
211 md->border_lines, &md->border_style, menu->title);
214 screen_write_menu(&ctx, menu, md->choice, md->border_lines,
219 tty_draw_line(tty, s, 0, i, menu->width + 4, px, py + i,
233 md->cb(md->menu, UINT_MAX, KEYC_NONE, md->data);
236 menu_free(md->menu);
244 struct menu *menu = md->menu;
247 int count = menu->count, old = md->choice;
261 m->x > md->px + 4 + menu->width ||
292 name = menu->items[i].name;
295 if (event->key == menu->items[i].key) {
310 name = menu->items[md->choice].name;
333 name = menu->items[md->choice].name;
345 name = menu->items[md->choice].name;
358 name = menu->items[md->choice].name;
363 name = menu->items[md->choice].name;
373 name = menu->items[md->choice].name;
380 name = menu->items[md->choice].name;
383 name = menu->items[md->choice].name;
390 name = menu->items[md->choice].name;
393 name = menu->items[md->choice].name;
412 item = &menu->items[md->choice];
419 md->cb(md->menu, md->choice, item->key, md->data);
459 menu_prepare(struct menu *menu, int flags, int starting_choice,
470 if (c->tty.sx < menu->width + 4 || c->tty.sy < menu->count + 2)
472 if (px + menu->width + 4 > c->tty.sx)
473 px = c->tty.sx - menu->width - 4;
474 if (py + menu->count + 2 > c->tty.sy)
475 py = c->tty.sy - menu->count - 2;
478 lines = options_get_number(o, "menu-border-lines");
485 menu_set_style(c, &md->style, style, "menu-style");
487 "menu-selected-style");
488 menu_set_style(c, &md->border_style, border_style, "menu-border-style");
492 screen_init(&md->s, menu->width + 4, menu->count + 2, 0);
500 md->menu = menu;
504 if (starting_choice >= (int)menu->count) {
505 starting_choice = menu->count - 1;
508 name = menu->items[choice - 1].name;
514 choice = menu->count;
521 name = menu->items[choice].name;
526 if (++choice == (int)menu->count)
540 menu_display(struct menu *menu, int flags, int starting_choice,
548 md = menu_prepare(menu, flags, starting_choice, item, px, py, c, lines,