int fgui_listbox_init(struct fgui_listbox *listbox, uint16_t x, uint16_t y, uint16_t w, uint16_t h, struct fgui_widget *parent) { int ret; ret = fgui_combobox_init(listbox, x, y, w, h, parent); fgui_widget_set_draw((struct fgui_widget *)listbox, fgui_listbox_draw); listbox->base.event_handler = fgui_listbox_event_handler; listbox->is_expanded = true; return ret; }
int main(int argc, char *argv[]) { int ret; SDL_Event event; struct fgui_event fgui_event; int button_clicks = 0; int button2_clicks = 0; struct btn_cb_data btn_cb_data = { &button, "hello button userdata", &button_clicks, }; struct btn_cb_data btn_cb_data2 = { &button2, "hello button2 userdata", &button2_clicks, }; fgui_application_init(&app); fgui_listbox_init(&listbox, 160, 4*LINEHEIGHT-6, 60, 15, NULL); fgui_checkbox_init(&checkbox, 160, 6*LINEHEIGHT+3, 82, 15, "check it!", NULL); fgui_button_init(&button, 160, 7*LINEHEIGHT, 82, 15, "hello world", NULL); fgui_button_init(&button2, 160, 8*LINEHEIGHT, 82, 15, "hello world 2", NULL); fgui_combobox_init(&combobox, 160, 9*LINEHEIGHT, 60, 15, NULL); fgui_label_init(&label, 160, 10*LINEHEIGHT, 150, 20, "hello fgui label", NULL); fgui_lineedit_init(&lineedit, 160, 11*LINEHEIGHT, 100, 15, NULL); fgui_combobox_add_item(&combobox, "item1"); fgui_combobox_add_item(&combobox, "item2"); fgui_combobox_add_item(&combobox, "item3"); fgui_combobox_set_index(&combobox, 0); fgui_listbox_add_item(&listbox, "item1"); fgui_listbox_add_item(&listbox, "item2"); fgui_listbox_add_item(&listbox, "item3"); fgui_listbox_set_index(&listbox, 0); fgui_application_add_widget(&app, (struct fgui_widget *)&listbox); fgui_application_add_widget(&app, (struct fgui_widget *)&checkbox); fgui_application_add_widget(&app, &button.base); fgui_application_add_widget(&app, &button2.base); fgui_application_add_widget(&app, (struct fgui_widget *)&label); fgui_application_add_widget(&app, (struct fgui_widget *)&combobox); fgui_application_add_widget(&app, (struct fgui_widget *)&lineedit); fgui_button_set_on_click_handler(&button, on_button_click, &btn_cb_data); fgui_button_set_on_click_handler(&button2, on_button_click, &btn_cb_data2); fgui_combobox_set_on_change_handler(&combobox, on_combobox_change, NULL); fgui_checkbox_set_on_click_handler(&checkbox, on_checkbox_change, NULL); fgui_dropmenu_init(&menubar, 0, 0, 80, 15, NULL); fgui_dropmenu_add_item(&dropmenu, "menuitem1"); fgui_dropmenu_add_item(&dropmenu, "menuitem2"); fgui_dropmenu_add_item(&dropmenu, "menuitem3"); fgui_dropmenu_set_index(&dropmenu, 0); fgui_menubar_init(&menubar, 0, 0, 320, 15, NULL); fgui_menubar_add_item(&menubar, "Menu1", (struct fgui_widget *)&dropmenu); fgui_menubar_add_item(&menubar, "Menu2", NULL); fgui_menubar_add_item(&menubar, "Help", NULL); fgui_application_add_widget(&app, (struct fgui_widget *)&menubar); if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); exit(1); } // make sure things are cleaned up when we quit atexit(SDL_Quit); // attempt to create a 640x480 window with 32bit pixels. gScreen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_SWSURFACE); if (gScreen == NULL) { fprintf(stderr, "Unable to set up video: %s\n", SDL_GetError()); exit(1); } SDL_EnableUNICODE(1); while (1) { render_stuff(); // update the whole screen SDL_UpdateRect(gScreen, 0, 0, 0, 0); // blocking wait (tip: SDL_PollEvent is non-blocking) ret = SDL_WaitEvent(&event); if (ret == 0) { fprintf(stderr, "ERROR: SDL_WaitEvent: %s\n", SDL_GetError()); exit(1); } switch (event.type) { case SDL_KEYDOWN: fgui_event.type = FGUI_EVENT_KEYDOWN; fgui_event.key.keycode = sdl_keysym_to_fgui_key(event.key.keysym.sym); if ((fgui_event.key.keycode >= 'a') && (fgui_event.key.keycode <= 'z')) { if (event.key.keysym.mod & KMOD_SHIFT) fgui_event.key.keycode = toupper(fgui_event.key.keycode); } fgui_application_process_event(&app, &fgui_event); break; case SDL_KEYUP: switch (event.key.keysym.sym) { case SDLK_ESCAPE: // return (and thus, quit) return 0; default: fgui_event.type = FGUI_EVENT_KEYUP; fgui_event.key.keycode = sdl_keysym_to_fgui_key(event.key.keysym.sym); fgui_application_process_event(&app, &fgui_event); break; } break; case SDL_QUIT: return 0; default: break; } } return 0; }