Example #1
0
/* 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;
}
Example #2
0
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();
		}
	}
}
Example #3
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 ;
}
Example #4
0
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);
}