diff --git a/ROOM_CONF_TODO b/ROOM_CONF_TODO index a0f5ffdc..d2e53ace 100644 --- a/ROOM_CONF_TODO +++ b/ROOM_CONF_TODO @@ -1,3 +1,2 @@ -Help command for form fields Handle error on form submit Autocompelte values for set/add/remove diff --git a/src/command/command.c b/src/command/command.c index a60cf9e5..6e233238 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -2115,6 +2115,10 @@ _form_autocomplete(char *input, int *size) if (result != NULL) { return result; } + result = autocomplete_param_with_ac(input, size, "/form help", form->tag_ac, TRUE); + if (result != NULL) { + return result; + } } } diff --git a/src/ui/core.c b/src/ui/core.c index b3e3f94e..1d0970c0 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -2035,13 +2035,6 @@ _ui_show_form(ProfWin *window, const char * const room, DataForm *form) if (g_strcmp0(field->type, "hidden") != 0) { char *tag = g_hash_table_lookup(form->var_to_tag, field->var); _ui_handle_form_field(window, tag, field); - -/* -TODO add command to get help for a field - if (field->description != NULL) { - win_save_print(window, '-', NULL, 0, 0, "", field->description); - } -*/ } curr_field = g_slist_next(curr_field); @@ -2083,14 +2076,88 @@ _ui_handle_room_config_submit_result(void) static void _ui_show_form_field_help(ProfWin *window, DataForm *form, char *tag) { - win_save_println(window, "HELP FIELD"); + FormField *field = form_get_field_by_tag(form, tag); + if (field != NULL) { + win_save_print(window, '-', NULL, NO_EOL, 0, "", field->label); + if (field->required) { + win_save_print(window, '-', NULL, NO_DATE, 0, "", " (Required):"); + } else { + win_save_print(window, '-', NULL, NO_DATE, 0, "", ":"); + } + if (field->description != NULL) { + win_save_vprint(window, '-', NULL, 0, 0, "", " Description : %s", field->description); + } + win_save_vprint(window, '-', NULL, 0, 0, "", " Type : %s", field->type); + + int num_values = 0; + GSList *curr_option = NULL; + FormOption *option = NULL; + + switch (field->type_t) { + case FIELD_TEXT_SINGLE: + case FIELD_TEXT_PRIVATE: + win_save_vprint(window, '-', NULL, 0, 0, "", " Set : /form set %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is any text"); + break; + case FIELD_TEXT_MULTI: + num_values = form_get_value_count(form, tag); + win_save_vprint(window, '-', NULL, 0, 0, "", " Add : /form add %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is any text"); + if (num_values > 0) { + win_save_vprint(window, '-', NULL, 0, 0, "", " Remove : /form remove %s ", tag); + win_save_vprint(window, '-', NULL, 0, 0, "", " Where : between 'val1' and 'val%d'", num_values); + } + break; + case FIELD_BOOLEAN: + win_save_vprint(window, '-', NULL, 0, 0, "", " Set : /form set %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is either 'on' or 'off'"); + break; + case FIELD_LIST_SINGLE: + win_save_vprint(window, '-', NULL, 0, 0, "", " Set : /form set %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is one of"); + curr_option = field->options; + while (curr_option != NULL) { + option = curr_option->data; + win_save_vprint(window, '-', NULL, 0, 0, "", " %s", option->value); + curr_option = g_slist_next(curr_option); + } + break; + case FIELD_LIST_MULTI: + win_save_vprint(window, '-', NULL, 0, 0, "", " Add : /form add %s ", tag); + win_save_vprint(window, '-', NULL, 0, 0, "", " Remove : /form remove %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is one of"); + curr_option = field->options; + while (curr_option != NULL) { + option = curr_option->data; + win_save_vprint(window, '-', NULL, 0, 0, "", " %s", option->value); + curr_option = g_slist_next(curr_option); + } + break; + case FIELD_JID_SINGLE: + win_save_vprint(window, '-', NULL, 0, 0, "", " Set : /form set %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is a valid Jabber ID"); + break; + case FIELD_JID_MULTI: + win_save_vprint(window, '-', NULL, 0, 0, "", " Add : /form set %s ", tag); + win_save_vprint(window, '-', NULL, 0, 0, "", " Remove : /form set %s ", tag); + win_save_print(window, '-', NULL, 0, 0, "", " Where : is a valid Jabber ID"); + break; + case FIELD_FIXED: + case FIELD_UNKNOWN: + case FIELD_HIDDEN: + default: + break; + } + } else { + win_save_vprint(window, '-', NULL, 0, 0, "", "No such field %s", tag); + } } static void _ui_show_form_help(ProfWin *window, DataForm *form) { if (form->instructions != NULL) { - win_save_vprint(window, '-', NULL, 0, 0, "", "Instructions:"); + win_save_print(window, '-', NULL, 0, 0, "", "Instructions:"); win_save_print(window, '-', NULL, 0, 0, "", form->instructions); win_save_print(window, '-', NULL, 0, 0, "", ""); }