rockbox/apps/plugins/mpegplayer/mpeg_settings.c

122 lines
3.3 KiB
C
Raw Normal View History

#include "plugin.h"
#include "lib/configfile.h"
#include "lib/oldmenuapi.h"
#include "mpeg_settings.h"
extern struct plugin_api* rb;
struct mpeg_settings settings;
static struct mpeg_settings old_settings;
#define SETTINGS_VERSION 1
#define SETTINGS_MIN_VERSION 1
#define SETTINGS_FILENAME "mpegplayer.cfg"
static char* showfps_options[] = {"No", "Yes"};
static char* limitfps_options[] = {"No", "Yes"};
static char* skipframes_options[] = {"No", "Yes"};
static struct configdata config[] =
{
{TYPE_ENUM, 0, 2, &settings.showfps, "Show FPS", showfps_options, NULL},
{TYPE_ENUM, 0, 2, &settings.limitfps, "Limit FPS", limitfps_options, NULL},
{TYPE_ENUM, 0, 2, &settings.skipframes, "Skip frames", skipframes_options, NULL},
};
bool mpeg_menu(void)
{
int m;
int result;
int menu_quit=0;
static const struct opt_items noyes[2] = {
{ "No", -1 },
{ "Yes", -1 },
};
static const struct menu_item items[] = {
{ "Display FPS", NULL },
{ "Limit FPS", NULL },
{ "Skip frames", NULL },
{ "Quit mpegplayer", NULL },
};
m = menu_init(rb, items, sizeof(items) / sizeof(*items),
NULL, NULL, NULL, NULL);
rb->button_clear_queue();
while (!menu_quit) {
result=menu_show(m);
switch(result)
{
case 0: /* Show FPS */
rb->set_option("Display FPS",&settings.showfps,INT,
noyes, 2, NULL);
break;
case 1: /* Limit FPS */
rb->set_option("Limit FPS",&settings.limitfps,INT,
noyes, 2, NULL);
break;
case 2: /* Skip frames */
rb->set_option("Skip frames",&settings.skipframes,INT,
noyes, 2, NULL);
break;
default:
menu_quit=1;
if (result == MENU_ATTACHED_USB)
result = 3;
break;
}
}
menu_exit(m);
rb->lcd_clear_display();
rb->lcd_update();
return (result==3);
}
void init_settings(void)
{
/* Set the default settings */
settings.showfps = 0; /* Do not show FPS */
settings.limitfps = 1; /* Limit FPS */
settings.skipframes = 1; /* Skip frames */
configfile_init(rb);
if (configfile_load(SETTINGS_FILENAME, config,
sizeof(config)/sizeof(*config),
SETTINGS_MIN_VERSION
) < 0)
{
/* If the loading failed, save a new config file (as the disk is
already spinning) */
configfile_save(SETTINGS_FILENAME, config,
sizeof(config)/sizeof(*config),
SETTINGS_VERSION);
}
/* Keep a copy of the saved version of the settings - so we can check if
the settings have changed when we quit */
old_settings = settings;
}
void save_settings(void)
{
/* Save the user settings if they have changed */
if (rb->memcmp(&settings,&old_settings,sizeof(settings))!=0) {
configfile_save(SETTINGS_FILENAME, config,
sizeof(config)/sizeof(*config),
SETTINGS_VERSION);
/* Store the settings in old_settings - to check for future changes */
old_settings = settings;
}
}