Add a CHOICE type to the settings system.

This is useful to let the user choose an option between a finite set of
valid alternatives.
This commit is contained in:
LemonBoy 2016-06-12 15:26:07 +02:00
commit bf9d9494db
4 changed files with 113 additions and 18 deletions

View file

@ -690,9 +690,20 @@ static void sig_complete_set(GList **list, WINDOW_REC *window,
else if (*line != '\0' && *word == '\0') {
SETTINGS_REC *rec = settings_get_record(line);
if (rec != NULL) {
char *value = settings_get_print(rec);
if (value != NULL)
*list = g_list_append(*list, value);
/* show the whole list of valid options */
if (rec->type == SETTING_TYPE_CHOICE) {
char **tmp = rec->choices;
while (*tmp)
*list = g_list_append(*list, g_strdup(*tmp++));
}
/* show the current option */
else {
char *value = settings_get_print(rec);
if (value != NULL)
*list = g_list_append(*list, value);
}
}
}

View file

@ -142,6 +142,11 @@ static void cmd_set(char *data)
else
set_int(key, value);
break;
case SETTING_TYPE_CHOICE:
settings_set_choice(key, clear ? "" :
set_default ? rec->choices[rec->default_value.v_int] :
value);
break;
case SETTING_TYPE_STRING:
settings_set_str(key, clear ? "" :
set_default ? rec->default_value.v_string :