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;
}
Esempio n. 2
0
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;
}