summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2007-02-10 07:08:25 +0000
committerMichael Sevakis <jethead71@rockbox.org>2007-02-10 07:08:25 +0000
commitc7a1cec2198815b695cdda927cdda73a5249e5a2 (patch)
tree28b799aec4c49aea87e85e4a021d8f7bed75f112
parent69c40d7e84eef3aba68321bf8c3e6196ff04a926 (diff)
Recording Menus: Make statusbar update correctly when exiting an encoder setting.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12251 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/enc_config.c93
1 files changed, 51 insertions, 42 deletions
diff --git a/apps/enc_config.c b/apps/enc_config.c
index f4ea1cc4b5..2fc9fb74e7 100644
--- a/apps/enc_config.c
+++ b/apps/enc_config.c
@@ -43,8 +43,9 @@
if (fn) fn(__VA_ARGS__)
static bool enc_run_menu(int m, const struct menu_item items[],
- struct encoder_config *cfg);
-static bool enc_no_config_menu(struct encoder_config *cfg);
+ struct encoder_config *cfg, bool global);
+static bool enc_no_config_menu(struct encoder_config *cfg, bool global);
+static void enc_rec_settings_changed(struct encoder_config *cfg);
/** Function definitions for each codec - add these to enc_data
list following the definitions **/
@@ -98,20 +99,20 @@ static void mp3_enc_default_config(struct encoder_config *cfg)
} /* mp3_enc_default_config */
static void mp3_enc_convert_config(struct encoder_config *cfg,
- bool to_encoder)
+ bool global)
{
- if (to_encoder)
- {
- if ((unsigned)global_settings.mp3_enc_config.bitrate > MP3_ENC_NUM_BITR)
- global_settings.mp3_enc_config.bitrate = MP3_ENC_BITRATE_CFG_DEFAULT;
- cfg->mp3_enc.bitrate = mp3_enc_bitr[global_settings.mp3_enc_config.bitrate];
- }
- else
+ if (global)
{
global_settings.mp3_enc_config.bitrate =
round_value_to_list32(cfg->mp3_enc.bitrate, mp3_enc_bitr,
MP3_ENC_NUM_BITR, false);
}
+ else
+ {
+ if ((unsigned)global_settings.mp3_enc_config.bitrate > MP3_ENC_NUM_BITR)
+ global_settings.mp3_enc_config.bitrate = MP3_ENC_BITRATE_CFG_DEFAULT;
+ cfg->mp3_enc.bitrate = mp3_enc_bitr[global_settings.mp3_enc_config.bitrate];
+ }
} /* mp3_enc_convert_config */
/* mp3_enc: show the bitrate setting options */
@@ -175,7 +176,7 @@ static bool mp3_enc_bitrate(struct encoder_config *cfg)
} /* mp3_enc_bitrate */
/* mp3_enc: show the configuration menu */
-static bool mp3_enc_menu(struct encoder_config *cfg)
+static bool mp3_enc_menu(struct encoder_config *cfg, bool global)
{
static const struct menu_item items[] =
{
@@ -184,7 +185,7 @@ static bool mp3_enc_menu(struct encoder_config *cfg)
bool result;
int m = menu_init(items, ARRAYLEN(items), NULL, NULL, NULL, NULL);
- result = enc_run_menu(m, items, cfg);
+ result = enc_run_menu(m, items, cfg, global);
menu_exit(m);
return result;
} /* mp3_enc_menu */
@@ -192,23 +193,23 @@ static bool mp3_enc_menu(struct encoder_config *cfg)
/** wav_enc.codec **/
/* wav_enc: show the configuration menu */
#if 0
-static bool wav_enc_menu(struct encoder_config *cfg);
+static bool wav_enc_menu(struct encoder_config *cfg, bool global);
#endif
/** wavpack_enc.codec **/
/* wavpack_enc: show the configuration menu */
#if 0
-static bool wavpack_enc_menu(struct encoder_config *cfg);
+static bool wavpack_enc_menu(struct encoder_config *cfg, bool global);
#endif
/** config function pointers and/or data for each codec **/
static const struct encoder_data
{
- void (*get_caps)(const struct encoder_config *, struct encoder_caps *,
- bool);
- void (*default_cfg)(struct encoder_config *);
- void (*convert_cfg)(struct encoder_config *, bool to_encoder);
- bool (*menu)(struct encoder_config *);
+ void (*get_caps)(const struct encoder_config *cfg,
+ struct encoder_caps *caps, bool for_config);
+ void (*default_cfg)(struct encoder_config *cfg);
+ void (*convert_cfg)(struct encoder_config *cfg , bool global);
+ bool (*menu)(struct encoder_config *cfg , bool global);
} enc_data[REC_NUM_FORMATS] =
{
/* aiff_enc.codec */
@@ -247,12 +248,13 @@ static inline bool rec_format_ok(int rec_format)
}
static bool enc_run_menu(int m, const struct menu_item items[],
- struct encoder_config *cfg)
+ struct encoder_config *cfg, bool global)
{
- int selected;
while (1)
{
- switch (selected=menu_show(m))
+ int selected = menu_show(m);
+
+ switch (selected)
{
case MENU_SELECTED_EXIT:
return false;
@@ -261,16 +263,31 @@ static bool enc_run_menu(int m, const struct menu_item items[],
return true;
default:
- if (items[selected].function &&
- ENC_MENU_ITEM_FN(items[selected].function)(cfg))
- return true;
+ if (items[selected].function == NULL)
+ break;
+
+ /* If the setting being configured is global, it must be placed
+ in global_settings before updating the status bar for the
+ change to show upon exiting the item. */
+ if (global)
+ global_to_encoder_config(cfg);
+
+ if (ENC_MENU_ITEM_FN(items[selected].function)(cfg))
+ return true;
+
+ if (global)
+ {
+ enc_rec_settings_changed(cfg);
+ encoder_config_to_global(cfg);
+ }
+
gui_syncstatusbar_draw(&statusbars, true);
}
}
} /* enc_run_menu */
/* menu created when encoder has no configuration options */
-static bool enc_no_config_menu(struct encoder_config *cfg)
+static bool enc_no_config_menu(struct encoder_config *cfg, bool global)
{
static const struct menu_item items[] =
{
@@ -280,11 +297,12 @@ static bool enc_no_config_menu(struct encoder_config *cfg)
bool result;
m = menu_init(items, ARRAYLEN(items), NULL, NULL, NULL, NULL);
- result = enc_run_menu(m, items, NULL);
+ result = enc_run_menu(m, items, NULL, false);
menu_exit(m);
return result;
(void)cfg;
+ (void)global;
} /* enc_no_config_menu */
/* update settings dependent upon encoder settings */
@@ -333,13 +351,13 @@ static void enc_rec_settings_changed(struct encoder_config *cfg)
void global_to_encoder_config(struct encoder_config *cfg)
{
const struct encoder_data *data = &enc_data[cfg->rec_format];
- CALL_FN_(data->convert_cfg, cfg, true);
+ CALL_FN_(data->convert_cfg, cfg, false);
} /* global_to_encoder_config */
void encoder_config_to_global(const struct encoder_config *cfg)
{
const struct encoder_data *data = &enc_data[cfg->rec_format];
- CALL_FN_(data->convert_cfg, (struct encoder_config *)cfg, false);
+ CALL_FN_(data->convert_cfg, (struct encoder_config *)cfg, true);
} /* encoder_config_to_global */
bool enc_get_caps(const struct encoder_config *cfg,
@@ -376,12 +394,14 @@ bool enc_init_config(struct encoder_config *cfg)
} /* enc_init_config */
/** Encoder Menus **/
+#if 0
bool enc_config_menu(struct encoder_config *cfg)
{
if (!rec_format_ok(cfg->rec_format))
return false;
- return enc_data[cfg->rec_format].menu(cfg);
+ return enc_data[cfg->rec_format].menu(cfg, false);
} /* enc_config_menu */
+#endif
/** Global Settings **/
@@ -421,21 +441,10 @@ bool enc_global_config_menu(void)
{
struct encoder_config cfg;
- bool res;
-
if (!rec_format_ok(global_settings.rec_format))
global_settings.rec_format = REC_FORMAT_DEFAULT;
cfg.rec_format = global_settings.rec_format;
- global_to_encoder_config(&cfg);
-
- res = enc_config_menu(&cfg);
- if (!res)
- {
- enc_rec_settings_changed(&cfg);
- encoder_config_to_global(&cfg);
- }
-
- return res;
+ return enc_data[cfg.rec_format].menu(&cfg, true);
} /* enc_global_config_menu */