/* return item index */ rt_bool_t rtgui_combo_onitem(pvoid wdt, rtgui_event_t* event) { rtgui_listbox_t* box = RTGUI_LISTBOX(wdt); if(box != RT_NULL && box->ispopup) { char *str; rtgui_combo_t* cbo=box->widget_link; if(cbo==RT_NULL)return RT_FALSE; str = rtgui_combo_get_string(cbo); rtgui_textbox_set_value(cbo->tbox,str); } return RT_TRUE; }
static void player_play_list_onitem(rtgui_widget_t* widget, rtgui_event_t* event) { rtgui_listbox_t* box; box = RTGUI_LISTBOX(widget); if (box->current_item == play_list_get_current()) { struct play_item* item; /* stop or start current item */ if (player_mode == PLAYER_STOP) { /* start */ item = play_list_current(); if (item != RT_NULL) { player_play_item(item); next_step = PLAYER_STEP_NEXT; player_update_tag_info(); } } else { /* send stop request */ next_step = PLAYER_STEP_STOP; player_stop_req(); } } else { play_list_set_current(box->current_item); if (player_mode == PLAYER_STOP) { player_play_item(play_list_current()); next_step = PLAYER_STEP_NEXT; player_update_tag_info(); } else { /* send stop request */ next_step = PLAYER_STEP_SEEK; player_stop_req(); } } }
void rtgui_combobox_pdwin_onitem(struct rtgui_widget* widget, struct rtgui_event* event) { rtgui_win_t* pd_win; rtgui_combobox_t* combo; rtgui_listbox_t* list; list = RTGUI_LISTBOX(widget); pd_win = RTGUI_WIN(rtgui_widget_get_toplevel(widget)); combo = RTGUI_COMBOBOX(pd_win->user_data); combo->current_item = list->current_item; if (combo->on_selected != RT_NULL) combo->on_selected(RTGUI_WIDGET(combo), RT_NULL); rtgui_win_hiden(pd_win); rtgui_widget_update(RTGUI_WIDGET(combo)); return ; }
static rt_bool_t rtgui_filelist_view_on_folder_item(rtgui_object_t *object, struct rtgui_event *event) { rtgui_win_t *menu; rtgui_listbox_t *listbox; rtgui_filelist_view_t *view; listbox = RTGUI_LISTBOX(object); menu = RTGUI_WIN(rtgui_widget_get_toplevel(RTGUI_WIDGET(object))); view = RTGUI_FILELIST_VIEW(menu->user_data); /* hide window */ rtgui_win_hide(menu); switch (listbox->current_item) { case 0: { char *dir_ptr; /* destroy menu window */ rtgui_win_destroy(menu); dir_ptr = (char *) rtgui_malloc(256); rtgui_filelist_view_get_fullpath(view, dir_ptr, 256); rtgui_filelist_view_set_directory(view, dir_ptr); rtgui_free(dir_ptr); } break; case 1: /* destroy menu window */ rtgui_win_destroy(menu); break; default: /* destroy menu window */ rtgui_win_destroy(menu); break; } return RT_TRUE; }
rt_bool_t rtgui_combobox_pdwin_onitem(struct rtgui_object* object, struct rtgui_event* event) { struct rtgui_widget *widget; rtgui_win_t* pd_win; rtgui_combobox_t* combo; rtgui_listbox_t* list; RT_ASSERT(object != RT_NULL); widget = RTGUI_WIDGET(object); list = RTGUI_LISTBOX(widget); pd_win = RTGUI_WIN(rtgui_widget_get_toplevel(widget)); combo = RTGUI_COMBOBOX(pd_win->user_data); combo->current_item = list->current_item; if (combo->on_selected != RT_NULL) combo->on_selected(RTGUI_OBJECT(combo), RT_NULL); rtgui_win_hiden(pd_win); rtgui_widget_update(RTGUI_WIDGET(combo)); return RT_FALSE; }
rt_bool_t rtgui_listbox_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { struct rtgui_listbox* box = RT_NULL; box = RTGUI_LISTBOX(widget); switch (event->type) { case RTGUI_EVENT_PAINT: rtgui_listbox_ondraw(box); return RT_FALSE; case RTGUI_EVENT_RESIZE: { struct rtgui_event_resize* resize; resize = (struct rtgui_event_resize*)event; /* recalculate page items */ box->page_items = resize->h / (2 + rtgui_theme_get_selected_height()); } break; case RTGUI_EVENT_MOUSE_BUTTON: { rtgui_rect_t rect; struct rtgui_event_mouse* emouse; emouse = (struct rtgui_event_mouse*)event; /* calculate selected item */ /* get physical extent information */ rtgui_widget_get_rect(widget, &rect); rtgui_widget_rect_to_device(widget, &rect); if ((rtgui_rect_contains_point(&rect, emouse->x, emouse->y) == RT_EOK) && (box->items_count > 0)) { rt_uint16_t index; index = (emouse->y - rect.y1) / (2 + rtgui_theme_get_selected_height()); /* set focus */ rtgui_widget_focus(widget); { struct rtgui_rect rect; struct rtgui_dc* dc; dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(box)); if (dc != RT_NULL) { /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(box), &rect); /* update focus border */ rect.x2 -= 1; rect.y2 -= 1; /* draw focused border */ if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(box))) rtgui_dc_draw_focus_rect(dc, &rect); rtgui_dc_end_drawing(dc); } } if ((index < box->items_count) && (index < box->page_items)) { rt_uint16_t old_item; old_item = box->current_item; /* set selected item */ box->current_item = (box->current_item/box->page_items) * box->page_items + index; if (emouse->button & RTGUI_MOUSE_BUTTON_DOWN) { /* down event */ rtgui_listbox_update_current(box, old_item); } else { /* up event */ if (box->on_item != RT_NULL) { box->on_item(RTGUI_WIDGET(box), RT_NULL); } } } } return RT_TRUE; } case RTGUI_EVENT_KBD: { struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event; if ((ekbd->type == RTGUI_KEYDOWN) && (box->items_count > 0)) { rt_uint16_t old_item; old_item = box->current_item; switch (ekbd->key) { case RTGUIK_LEFT: if (box->current_item - box->page_items >= 0) box->current_item -= box->page_items; rtgui_listbox_update_current(box, old_item); return RT_FALSE; case RTGUIK_UP: if (box->current_item > 0) box->current_item --; rtgui_listbox_update_current(box, old_item); return RT_FALSE; case RTGUIK_RIGHT: if (box->current_item + box->page_items < box->items_count - 1) box->current_item += box->page_items; rtgui_listbox_update_current(box, old_item); return RT_FALSE; case RTGUIK_DOWN: if (box->current_item < box->items_count - 1) box->current_item ++; rtgui_listbox_update_current(box, old_item); return RT_FALSE; case RTGUIK_RETURN: if (box->on_item != RT_NULL) { box->on_item(RTGUI_WIDGET(box), RT_NULL); } return RT_FALSE; default: break; } } } return RT_FALSE; } /* use box event handler */ return rtgui_widget_event_handler(widget, event); }