summaryrefslogtreecommitdiff
path: root/render/form.c
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2004-12-12 21:51:01 +0000
committerJames Bursa <james@netsurf-browser.org>2004-12-12 21:51:01 +0000
commit9995dbad578947656f08e58ec873de85a90b606d (patch)
tree0a70a9c69a1b6f79e44df01d53431288c2c107fd /render/form.c
parentde508f98a705d2b2a0887be1ac0d55a213c99f80 (diff)
downloadnetsurf-9995dbad578947656f08e58ec873de85a90b606d.tar.gz
netsurf-9995dbad578947656f08e58ec873de85a90b606d.tar.bz2
[project @ 2004-12-12 21:49:23 by bursa]
Add form_new() and form_add_option(). svn path=/import/netsurf/; revision=1400
Diffstat (limited to 'render/form.c')
-rw-r--r--render/form.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/render/form.c b/render/form.c
index b52e5add5..119fa968b 100644
--- a/render/form.c
+++ b/render/form.c
@@ -24,6 +24,29 @@ static char *form_textarea_value(struct form_control *textarea);
/**
+ * Create a struct form.
+ *
+ * \param action URL to submit form to, used directly (not copied)
+ * \param method method and enctype
+ * \return a new structure, or 0 on memory exhaustion
+ */
+
+struct form *form_new(char *action, form_method method)
+{
+ struct form *form;
+
+ form = malloc(sizeof *form);
+ if (!form)
+ return 0;
+ form->action = action;
+ form->method = method;
+ form->controls = 0;
+ form->last_control = 0;
+ return form;
+}
+
+
+/**
* Create a struct form_control.
*
* \param type control type
@@ -99,6 +122,53 @@ void form_free_control(struct form_control *control)
/**
+ * Add an option to a form select control.
+ *
+ * \param control form control of type GADGET_SELECT
+ * \param value value of option, used directly (not copied)
+ * \param text text for option, used directly (not copied)
+ * \param selected this option is selected
+ * \return true on success, false on memory exhaustion
+ */
+
+bool form_add_option(struct form_control *control, char *value, char *text,
+ bool selected)
+{
+ struct form_option *option;
+
+ assert(control);
+ assert(control->type == GADGET_SELECT);
+
+ option = malloc(sizeof *option);
+ if (!option)
+ return false;
+ option->selected = option->initial_selected = false;
+ option->value = value;
+ option->text = text;
+ option->next = 0;
+
+ /* add to linked list */
+ if (control->data.select.items == 0)
+ control->data.select.items = option;
+ else
+ control->data.select.last_item->next = option;
+ control->data.select.last_item = option;
+
+ /* set selected */
+ if (selected && (control->data.select.num_selected == 0 ||
+ control->data.select.multiple)) {
+ option->selected = option->initial_selected = true;
+ control->data.select.num_selected++;
+ control->data.select.current = option;
+ }
+
+ control->data.select.num_items++;
+
+ return true;
+}
+
+
+/**
* Identify 'successful' controls.
*
* \param form form to search for successful controls