diff --git a/ROOM_CONF_TODO b/ROOM_CONF_TODO index 39463466..2ca358a7 100644 --- a/ROOM_CONF_TODO +++ b/ROOM_CONF_TODO @@ -4,3 +4,4 @@ Don't allow form windows to be closed without submitting/cancelling Help command for form fields Command to show current form Handle error on form submit +Show field after setting/adding/removing diff --git a/src/command/commands.c b/src/command/commands.c index 57687ea9..fc3e5298 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -2021,7 +2021,29 @@ cmd_room(gchar **args, struct cmd_help_t help) if (!form_tag_exists(current->form, tag)) { ui_current_print_line("Form does not contain a field with tag %s", tag); } else { - ui_current_print_line("Remove Tag: %s, Value: %s", tag, value); + form_field_type_t field_type = form_get_field_type(current->form, tag); + gboolean valid = FALSE; + switch (field_type) { + case FIELD_LIST_MULTI: + valid = form_field_contains_option(current->form, tag, value); + if (valid == TRUE) { + form_remove_value(current->form, tag, value); + ui_current_print_line("Removed %s from %s", value, tag); + } else { + ui_current_print_line("Value %s not a valid option for field: %s", value, tag); + } + break; + case FIELD_TEXT_MULTI: + ui_current_print_line("TODO"); + break; + case FIELD_JID_MULTI: + form_remove_value(current->form, tag, value); + ui_current_print_line("Removed %s from %s", value, tag); + break; + default: + ui_current_print_line("Remove command not valid for field: %s", tag); + break; + } } } diff --git a/src/ui/core.c b/src/ui/core.c index 5a83c485..df9ba106 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -1903,9 +1903,10 @@ _ui_handle_form_field(ProfWin *window, FormField *field) break; case FIELD_TEXT_MULTI: win_save_newline(window); + int index = 1; while (curr_value != NULL) { char *value = curr_value->data; - win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " %s", value); + win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " [%d] %s", index++, value); curr_value = g_slist_next(curr_value); } break; @@ -1934,9 +1935,9 @@ _ui_handle_form_field(ProfWin *window, FormField *field) while (curr_option != NULL) { FormOption *option = curr_option->data; if (g_strcmp0(option->value, value) == 0) { - win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " %s (%s)", option->label, option->value); + win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " [%s] %s", option->value, option->label); } else { - win_save_vprint(window, '-', NULL, 0, 0, "", " %s (%s)", option->label, option->value); + win_save_vprint(window, '-', NULL, 0, COLOUR_OFFLINE, "", " [%s] %s", option->value, option->label); } curr_option = g_slist_next(curr_option); } @@ -1950,9 +1951,9 @@ _ui_handle_form_field(ProfWin *window, FormField *field) while (curr_option != NULL) { FormOption *option = curr_option->data; if (g_slist_find_custom(curr_value, option->value, (GCompareFunc)g_strcmp0) != NULL) { - win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " %s (%s)", option->label, option->value); + win_save_vprint(window, '-', NULL, 0, COLOUR_ONLINE, "", " [%s] %s", option->value, option->label); } else { - win_save_vprint(window, '-', NULL, 0, 0, "", " %s (%s)", option->label, option->value); + win_save_vprint(window, '-', NULL, 0, COLOUR_OFFLINE, "", " [%s] %s", option->value, option->label); } curr_option = g_slist_next(curr_option); } @@ -2021,12 +2022,13 @@ _ui_handle_room_configuration(const char * const room, DataForm *form) FormField *field = curr_field->data; if (g_strcmp0(field->type, "hidden") != 0) { - win_save_vprint(window, '-', NULL, NO_EOL, 0, "", "%s (", field->label); - win_save_print(window, '-', NULL, NO_DATE | NO_EOL, COLOUR_AWAY, "", g_hash_table_lookup(form->var_to_tag, field->var)); + char *tag = g_hash_table_lookup(form->var_to_tag, field->var); + win_save_vprint(window, '-', NULL, NO_EOL, COLOUR_AWAY, "", "[%s] ", tag); + win_save_vprint(window, '-', NULL, NO_EOL | NO_DATE, 0, "", "%s", field->label); if (field->required) { - win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", ") Required: "); + win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", " (required): "); } else { - win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", "): "); + win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", ": "); } _ui_handle_form_field(window, field); diff --git a/src/xmpp/form.c b/src/xmpp/form.c index b2192b61..f67fe9ae 100644 --- a/src/xmpp/form.c +++ b/src/xmpp/form.c @@ -470,6 +470,12 @@ _form_add_value(DataForm *form, const char * const tag, char *value) } } +static void +_form_remove_value(DataForm *form, const char * const tag, char *value) +{ + // TODO +} + static gboolean _form_field_contains_option(DataForm *form, const char * const tag, char *value) { @@ -503,6 +509,7 @@ form_init_module(void) form_get_field_type = _form_get_field_type; form_set_value = _form_set_value; form_add_value = _form_add_value; + form_remove_value = _form_remove_value; form_field_contains_option = _form_field_contains_option; form_tag_exists = _form_tag_exists; } diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index aa5d912f..d11bb202 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -210,6 +210,7 @@ void (*form_destroy)(DataForm *form); char * (*form_get_form_type_field)(DataForm *form); void (*form_set_value)(DataForm *form, const char * const tag, char *value); void (*form_add_value)(DataForm *form, const char * const tag, char *value); +void (*form_remove_value)(DataForm *form, const char * const tag, char *value); gboolean (*form_tag_exists)(DataForm *form, const char * const tag); form_field_type_t (*form_get_field_type)(DataForm *form, const char * const tag); gboolean (*form_field_contains_option)(DataForm *form, const char * const tag, char *value);