static void station_list_selected(struct rtgui_widget* widget, void* parameter) { rtgui_list_view_t *view; view = RTGUI_LIST_VIEW(parameter); if (view->current_item != 0) rtgui_view_end_modal(RTGUI_VIEW(view), RTGUI_MODAL_OK); else rtgui_view_end_modal(RTGUI_VIEW(view), RTGUI_MODAL_CANCEL); }
rt_bool_t rtgui_list_view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) { struct rtgui_list_view* view = RT_NULL; view = RTGUI_LIST_VIEW(widget); switch (event->type) { case RTGUI_EVENT_PAINT: rtgui_list_view_ondraw(view); return RT_FALSE; case RTGUI_EVENT_RESIZE: { struct rtgui_event_resize* resize; resize = (struct rtgui_event_resize*)event; /* recalculate page items */ view->page_items = resize->h / (2 + rtgui_theme_get_selected_height()); } break; case RTGUI_EVENT_MOUSE_BUTTON: { struct rtgui_event_mouse* emouse; emouse = (struct rtgui_event_mouse*)event; return rtgui_list_view_onmouse(view, emouse); } case RTGUI_EVENT_KBD: { struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event; if (ekbd->type == RTGUI_KEYDOWN) { rt_uint16_t old_item; old_item = view->current_item; switch (ekbd->key) { case RTGUIK_LEFT: if (view->flag == RTGUI_LIST_VIEW_LIST) { if (view->current_item - view->page_items >= 0) view->current_item -= view->page_items; rtgui_list_view_update_list(view, old_item); } else if (view->flag == RTGUI_LIST_VIEW_ICON) { if (view->current_item > 0) view->current_item --; rtgui_list_view_update_icon(view, old_item); } return RT_FALSE; case RTGUIK_UP: if (view->flag == RTGUI_LIST_VIEW_LIST) { if (view->current_item > 0) view->current_item --; rtgui_list_view_update_list(view, old_item); } else if (view->flag == RTGUI_LIST_VIEW_ICON) { if (view->current_item >= view->col_items) view->current_item -= view->col_items; else view->current_item = 0; rtgui_list_view_update_icon(view, old_item); } return RT_FALSE; case RTGUIK_RIGHT: if (view->flag == RTGUI_LIST_VIEW_LIST) { if (view->current_item + view->page_items < view->items_count - 1) view->current_item += view->page_items; rtgui_list_view_update_list(view, old_item); } else if (view->flag == RTGUI_LIST_VIEW_ICON) { if (view->current_item < view->items_count - 1) view->current_item ++; rtgui_list_view_update_icon(view, old_item); } return RT_FALSE; case RTGUIK_DOWN: if (view->flag == RTGUI_LIST_VIEW_LIST) { if (view->current_item < view->items_count - 1) view->current_item ++; rtgui_list_view_update_list(view, old_item); } else if (view->flag == RTGUI_LIST_VIEW_ICON) { if (view->current_item + view->col_items <= (view->items_count - 1)) view->current_item += view->col_items; else view->current_item = view->items_count - 1; rtgui_list_view_update_icon(view, old_item); } return RT_FALSE; case RTGUIK_RETURN: if (view->items[view->current_item].action != RT_NULL) { view->items[view->current_item].action(view->items[view->current_item].parameter); } return RT_FALSE; default: break; } } } return RT_FALSE; } /* use view event handler */ return rtgui_view_event_handler(widget, event); }