/* Creates menu and optionally button to pop it up. * If @ret_menu is TRUE, then a menu is returned. Otherwise, * button is created, linked to a menu and returned instead. */ static GtkWidget * menu_create_menu(xconf *xc, gboolean ret_menu, menu_priv *m) { GtkWidget *mi, *menu; GSList *w; xconf *nxc; if (!xc) return NULL; menu = gtk_menu_new (); gtk_container_set_border_width(GTK_CONTAINER(menu), 0); for (w = xc->sons; w ; w = g_slist_next(w)) { nxc = w->data; if (!strcmp(nxc->name, "separator")) mi = menu_create_separator(); else if (!strcmp(nxc->name, "item")) mi = menu_create_item(nxc, NULL, m); else if (!strcmp(nxc->name, "menu")) mi = menu_create_menu(nxc, FALSE, m); else continue; gtk_menu_shell_append(GTK_MENU_SHELL(menu), mi); } gtk_widget_show_all(menu); return (ret_menu) ? menu : menu_create_item(xc, menu, m); }
static void display_board_icon(GcomprisBoard *board, MenuItems *menuitems) { /* FIXME: Check board is available for the current profile */ if (board!=NULL && gc_board_check_file(board)) { menu_create_item(actualSectionItem, menuitems, board); } }
static void main_loop (void) { List *products; char input[INPUT_BUFFER_SIZE]; char *t; int invalid; products = db_load_products (); while (1) { menu_print_main (); fgets (input, INPUT_BUFFER_SIZE, stdin); /* Check if input is longer than one character */ invalid = 0; for (t = input + 1; t < input + INPUT_BUFFER_SIZE; t++) { if (*t == 0) break; if (*t > 20) { invalid = 1; break; } } if (invalid) { printf ("Invalid input string\n"); continue; } if (*input == 'q' || *input == 'Q') { break; } switch (*input) { case '1': products = menu_create_item (products); break; case '2': products = menu_edit_item (products); break; case '3': menu_view_item (products); break; case '4': products = menu_delete_item (products); break; case '5': menu_list_items (products); break; default: printf ("Invalid selection '%c'\n\n", *input); } } db_write_products (products); list_foreach (products, LIST_FUNC (product_free)); list_free (products); }