Example #1
0
static int itunes_do_keystroke(GR_EVENT * event)
{
	int ret = 0;
	struct menulist *oldml;

	switch (event->type) {
	case GR_EVENT_TYPE_TIMER:
		menu_draw_timer(currentml->itunes_menu);
		break;
	case GR_EVENT_TYPE_KEY_DOWN:
		switch (event->keystroke.ch) {
		case '\r':		/* action key */
		case '\n':
			currentml->select(currentml);
			break;

		case 'm':		/* menu key */
			ret = 1;
			pz_close_window(currentml->wid);
			oldml = currentml;
			currentml->itunes_menu = menu_destroy(currentml->itunes_menu);
			currentml = currentml->prevml;
			free(oldml);
			if (currentml) itunes_draw(currentml);
			break;

		case 'r':
			if(currentml->get_next(currentml))
			{
				menu_shift_selected(currentml->itunes_menu, 1);
				itunes_do_draw();
				ret |= KEY_CLICK;
			}
			break;

		case 'l':
			if(currentml->get_prev(currentml))
			{
				menu_shift_selected(currentml->itunes_menu, -1);
				itunes_do_draw();
				ret |= KEY_CLICK;
			}
			break;
		}
		break;
	}
	return ret;
}
Example #2
0
/* removes the referenced item from the menu */
void menu_delete_item(menu_st *menulist, int num)
{
	int i, tmp;
	/* if num is off the end either way, do nothing */
	if(num > menulist->num_items - 1 || num < 0) {
		Dprintf("menu_delete_item::Invalid item\n");
		return;
	}
	if(menulist->alloc_items == 0) {
		Dprintf("menu_delete_item::Deleting from a static menu causes "
				"undefined behavior\n");
		return;
	}

	/* assume removed item is onscreen */
	tmp = menulist->pixmap_pos[num-menulist->top_item];
	for(i = 0; i < (menulist->screen_items-(num-menulist->top_item))-1;
			i++) {
		menulist->pixmap_pos[(num-menulist->top_item) + i] =
			menulist->pixmap_pos[(num-menulist->top_item) + (i+1)];
		menu_draw_item(menulist, num-menulist->top_item + i);
	}
	menulist->pixmap_pos[menulist->screen_items - 1] = tmp;
	
	/* actually remove the item */
	for(i = num; i < menulist->num_items - 1; i++)
		menulist->items[i] = menulist->items[i + 1];
	menulist->num_items--;
	/* if last item was selected, shift selected */
	if(menulist->sel == menulist->num_items)
		menu_shift_selected(menulist, -1);

	/* erase pixmaps that are off the bottom of the list */
	if(menulist->top_item + (menulist->screen_items - 1) >
			menulist->num_items - 1)
		menu_clear_pixmap(menulist, menulist->screen_items - 1);

	/* draw appropriate text to the bottom pixmap */
	else
		menu_retext_pixmap(menulist, menulist->screen_items -
				1, &menulist->items[menulist->top_item +
				(menulist->screen_items - 1)]);

	/* specify if scrollbar should draw */
	if(menulist->num_items <= menulist->screen_items)
		menulist->scrollbar = 0;

}
static int browser_do_keystroke(GR_EVENT * event)
{
	int ret = 0;

	switch(event->type) {
	case GR_EVENT_TYPE_TIMER:
		if(((GR_EVENT_TIMER *)event)->tid == browser_key_timer) {
			GrDestroyTimer(browser_key_timer);
			browser_key_timer = 0;
			menu_handle_timer(browser_menu, 1);
			browser_action(browser_menu->items[browser_menu->sel].orig_pos);
			browser_do_draw();
		}
		else
			menu_draw_timer(browser_menu);
		break;

	case GR_EVENT_TYPE_KEY_DOWN:
		switch (event->keystroke.ch) {
		case '\r':
		case '\n':
			if(browser_menu->parent == NULL)
				browser_key_timer = GrCreateTimer(browser_wid,
						500);
			else {
				menu_handle_timer(browser_menu, 1);
				browser_menu = menu_handle_item(browser_menu, 
						browser_menu->sel);
				if(browser_menu_overlay) {
					browser_menu = browser_menu_overlay;
					browser_menu_overlay = 0;
				}
				browser_do_draw();
			}	
			break;

		case 'm':
		case 'q':
			browser_menu = menu_destroy(browser_menu);
			ret |= KEY_CLICK;
			if(browser_menu != NULL) {
				browser_do_draw();
				break;
			}
			browser_exit();
			GrDestroyGC(browser_gc);
			pz_close_window(browser_wid);
			break;

		case 'r':
			if (menu_shift_selected(browser_menu, 1)) {
				menu_draw(browser_menu);
				ret |= KEY_CLICK;
			}
			break;

		case 'l':
			if (menu_shift_selected(browser_menu, -1)) {
				menu_draw(browser_menu);
				ret |= KEY_CLICK;
			}
			break;
		default:
			ret |= KEY_UNUSED;
		}
		break;
	case GR_EVENT_TYPE_KEY_UP:
		switch (event->keystroke.ch) {
		case '\r':
		case '\n':
			if(browser_key_timer) {
				GrDestroyTimer(browser_key_timer);
				browser_key_timer = 0;
				menu_handle_timer(browser_menu, 1);
				browser_selection_activated(browser_menu->items[browser_menu->sel].orig_pos);
				browser_do_draw();
			}
			break;
		}
		break;
	default:
		ret |= EVENT_UNUSED;
		break;
	}
	return ret;
}