diff --git a/apps/SOURCES b/apps/SOURCES index 4755ad42c3..364faa3205 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -15,6 +15,7 @@ menu.c menus/menu_common.c menus/display_menu.c menus/theme_menu.c +menus/plugin_menu.c #if CONFIG_CODEC == SWCODEC #ifdef HAVE_WM8978 menus/audiohw_eq_menu.c diff --git a/apps/menus/plugin_menu.c b/apps/menus/plugin_menu.c new file mode 100644 index 0000000000..b554487dc3 --- /dev/null +++ b/apps/menus/plugin_menu.c @@ -0,0 +1,74 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2010 Thomas Martitz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include "config.h" +#include "lang.h" +#include "menu.h" +#include "settings.h" +#include "rbpaths.h" +#include "root_menu.h" +#include "tree.h" + + +enum { + APPS, + GAMES, + DEMOS, +}; + +static const struct { + const char *path; + int id; +} items[] = { + { PLUGIN_GAMES_DIR, LANG_PLUGIN_GAMES }, + { PLUGIN_APPS_DIR, LANG_PLUGIN_APPS }, + { PLUGIN_DEMOS_DIR, LANG_PLUGIN_DEMOS }, +}; + +static int plugins_menu(void* param) +{ + intptr_t item = (intptr_t)param; + struct browse_context browse; + int ret; + + browse_context_init(&browse, SHOW_PLUGINS, 0, str(items[item].id), + Icon_Plugin, items[item].path, NULL); + + ret = rockbox_browse(&browse); + if (ret == GO_TO_PREVIOUS) + return 0; + return ret; +} + +#define ITEM_FLAG (MENU_FUNC_USEPARAM|MENU_FUNC_CHECK_RETVAL) + +MENUITEM_FUNCTION(games_item, ITEM_FLAG, ID2P(LANG_PLUGIN_GAMES), + plugins_menu, (void*)GAMES, NULL, Icon_Folder); +MENUITEM_FUNCTION(apps_item, ITEM_FLAG, ID2P(LANG_PLUGIN_APPS), + plugins_menu, (void*)APPS, NULL, Icon_Folder); +MENUITEM_FUNCTION(demos_item, ITEM_FLAG, ID2P(LANG_PLUGIN_DEMOS), + plugins_menu, (void*)DEMOS, NULL, Icon_Folder); + +MAKE_MENU(plugin_menu, ID2P(LANG_PLUGINS), NULL, + Icon_Plugin, + &games_item, &apps_item, &demos_item); diff --git a/apps/root_menu.c b/apps/root_menu.c index ed7140fbe4..79b7afffe8 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c @@ -320,7 +320,8 @@ static int radio(void* param) static int miscscrn(void * param) { const struct menu_item_ex *menu = (const struct menu_item_ex*)param; - switch (do_menu(menu, NULL, NULL, false)) + int result = do_menu(menu, NULL, NULL, false); + switch (result) { case GO_TO_PLAYLIST_VIEWER: return GO_TO_PLAYLIST_VIEWER; @@ -350,44 +351,7 @@ static int load_bmarks(void* param) return GO_TO_WPS; return GO_TO_PREVIOUS; } -static int plugins_menu(void* param) -{ - (void)param; - MENUITEM_STRINGLIST(plugins_menu_items, ID2P(LANG_PLUGINS), NULL, - ID2P(LANG_PLUGIN_GAMES), - ID2P(LANG_PLUGIN_APPS), ID2P(LANG_PLUGIN_DEMOS)); - const char *folder; - struct browse_context browse; - char *title; - int retval = GO_TO_PREVIOUS; - int selection = 0, current = 0; - while (retval == GO_TO_PREVIOUS) - { - selection = do_menu(&plugins_menu_items, ¤t, NULL, false); - switch (selection) - { - case 0: - folder = PLUGIN_GAMES_DIR; - title = str(LANG_PLUGIN_GAMES); - break; - case 1: - folder = PLUGIN_APPS_DIR; - title = str(LANG_PLUGIN_APPS); - break; - case 2: - folder = PLUGIN_DEMOS_DIR; - title = str(LANG_PLUGIN_DEMOS); - break; - default: - return selection; - } - browse_context_init(&browse, SHOW_PLUGINS, 0, - title, Icon_Plugin, folder, NULL); - retval = rockbox_browse(&browse); - } - return retval; -} int time_screen(void* ignored); /* These are all static const'd from apps/menus/ *.c @@ -402,6 +366,7 @@ extern struct menu_item_ex recording_settings_menu, radio_settings_menu, bookmark_settings_menu, + plugin_menu, playlist_options, info_menu, system_menu; @@ -423,8 +388,8 @@ static const struct root_items items[] = { #endif [GO_TO_RECENTBMARKS] = { load_bmarks, NULL, &bookmark_settings_menu }, - [GO_TO_BROWSEPLUGINS] = { plugins_menu, NULL, NULL }, - [GO_TO_PLAYLISTS_SCREEN] = { miscscrn, &playlist_options, + [GO_TO_BROWSEPLUGINS] = { miscscrn, &plugin_menu, NULL }, + [GO_TO_PLAYLISTS_SCREEN] = { miscscrn, &playlist_options, &playlist_settings }, [GO_TO_PLAYLIST_VIEWER] = { playlist_view, NULL, NULL }, [GO_TO_SYSTEM_SCREEN] = { miscscrn, &info_menu, &system_menu },