static rt_bool_t rtgui_combobox_pulldown_hide(struct rtgui_object* object, struct rtgui_event* event) { struct rtgui_widget *widget; struct rtgui_combobox *box; RT_ASSERT(object != RT_NULL); RT_ASSERT(event != RT_NULL); widget = RTGUI_WIDGET(object); box = RTGUI_COMBOBOX(object); if (widget == RT_NULL) return RT_TRUE; box = (struct rtgui_combobox*) (((struct rtgui_win*)widget)->user_data); if (box == RT_NULL) return RT_TRUE; /* hide pull down window */ rtgui_win_hiden(RTGUI_WIN(box->pd_win)); /* clear pull down button state */ box->pd_pressed = RT_FALSE; rtgui_widget_update(RTGUI_WIDGET(box)); return RT_TRUE; }
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 ; }
rt_bool_t rtgui_combobox_event_handler(struct rtgui_object* object, struct rtgui_event* event) { struct rtgui_combobox *box; RTGUI_WIDGET_EVENT_HANDLER_PREPARE box = RTGUI_COMBOBOX(object); switch (event->type) { case RTGUI_EVENT_PAINT: #ifndef RTGUI_USING_SMALL_SIZE if (widget->on_draw != RT_NULL) widget->on_draw(RTGUI_OBJECT(widget), event); else #endif rtgui_combobox_ondraw(box); break; case RTGUI_EVENT_MOUSE_BUTTON: return rtgui_combobox_onmouse_button(box, (struct rtgui_event_mouse*)event); case RTGUI_EVENT_FOCUSED: { /* item focused */ struct rtgui_event_focused* focused; focused = (struct rtgui_event_focused*) event; if (focused->widget != RT_NULL) { /* hide pull down window */ rtgui_win_hiden(RTGUI_WIN(box->pd_win)); rtgui_combobox_ondraw(box); } } break; default: return rtgui_widget_event_handler(object, event); } return RT_FALSE; }
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; }