Lines Matching refs:form
44 #include "form.h"
49 * the form is first posted.
114 add_tab(FORM *form, _FORMI_FIELD_LINES *row, unsigned int i, char c);
369 * Set the form's current field to the first valid field on the page.
373 _formi_pos_first_field(FORM *form)
378 old_page = form->page;
381 while (form->page_starts[form->page].in_use == 0) {
382 form->page++;
383 if (form->page > form->max_page) {
384 form->page = old_page;
390 cur = form->fields[form->page_starts[form->page].first];
395 form->page = old_page;
400 form->cur_field = cur->index;
411 _formi_pos_new_field(FORM *form, unsigned direction, unsigned use_sorted)
416 i = form->cur_field;
417 cur = form->fields[i];
422 if ((form->wrap == FALSE) &&
423 (cur == TAILQ_LAST(&form->sorted_fields,
429 if ((form->wrap == FALSE) &&
430 ((i + 1) >= form->field_count))
433 if (i >= form->field_count)
438 if ((form->wrap == FALSE) &&
439 (cur == TAILQ_FIRST(&form->sorted_fields)))
444 if ((form->wrap == FALSE) && (i <= 0))
448 i = form->field_count - 1;
452 if ((form->fields[i]->opts & (O_VISIBLE | O_ACTIVE))
454 form->cur_field = i;
458 while (i != form->cur_field);
1087 _formi_top_left(FORM *form, int a, int b)
1090 if (form->fields[a]->form_row < form->fields[b]->form_row)
1093 if (form->fields[a]->form_row > form->fields[b]->form_row)
1097 if (form->fields[a]->form_col < form->fields[b]->form_col)
1100 if (form->fields[a]->form_col > form->fields[b]->form_col)
1112 _formi_bottom_right(FORM *form, int a, int b)
1115 if (form->fields[a]->form_row > form->fields[b]->form_row)
1117 if (form->fields[a]->form_row < form->fields[b]->form_row)
1121 if (form->fields[a]->form_col > form->fields[b]->form_col)
1123 if (form->fields[a]->form_col < form->fields[b]->form_col)
1460 * Find the different pages in the form fields and assign the form
1464 _formi_find_pages(FORM *form)
1468 if ((form->page_starts = calloc((form->max_page + 1),
1469 sizeof(*form->page_starts))) == NULL)
1472 for (i = 0; i < form->field_count; i++) {
1473 if (form->fields[i]->page_break == 1)
1475 if (form->page_starts[cur_page].in_use == 0) {
1476 form->page_starts[cur_page].in_use = 1;
1477 form->page_starts[cur_page].first = i;
1478 form->page_starts[cur_page].last = i;
1479 form->page_starts[cur_page].top_left = i;
1480 form->page_starts[cur_page].bottom_right = i;
1482 form->page_starts[cur_page].last = i;
1483 form->page_starts[cur_page].top_left =
1484 _formi_top_left(form,
1485 form->page_starts[cur_page].top_left,
1487 form->page_starts[cur_page].bottom_right =
1488 _formi_bottom_right(form,
1489 form->page_starts[cur_page].bottom_right,
1498 * Completely redraw the field of the given form.
1501 _formi_redraw_field(FORM *form, int field)
1512 cur = form->fields[field];
1520 wmove(form->scrwin, (int) (cur->form_row + line),
1629 wattrset(form->scrwin, cur->back);
1632 waddch(form->scrwin, cur->pad);
1636 wattrset(form->scrwin, cur->fore);
1646 tab = add_tab(form, row, cpos,
1649 wattrset(form->scrwin, cur->back);
1650 waddch(form->scrwin, cur->pad);
1651 wattrset(form->scrwin, cur->fore);
1655 tab = add_tab(form, row, cpos, ' ');
1657 waddch(form->scrwin, c);
1660 tab = add_tab(form, row, cpos, ' ');
1662 waddch(form->scrwin, ' ');
1674 wattrset(form->scrwin, cur->back);
1676 waddch(form->scrwin, cur->pad);
1680 wmove(form->scrwin, (int) (cur->form_row + i),
1683 wattrset(form->scrwin, cur->back);
1686 waddch(form->scrwin, cur->pad);
1690 wattrset(form->scrwin, cur->back);
1692 cur = form->fields[form->cur_field];
1693 wmove(form->scrwin, cur->form_row + cur->cursor_ypos,
1695 wcursyncup(form->scrwin);
1705 add_tab(FORM *form, _FORMI_FIELD_LINES *row, unsigned int i, char c)
1716 waddch(form->scrwin, c);
1723 * Display the fields attached to the form that are on the current page
1728 _formi_draw_page(FORM *form)
1732 if (form->page_starts[form->page].in_use == 0)
1735 wclear(form->scrwin);
1737 for (i = form->page_starts[form->page].first;
1738 i <= form->page_starts[form->page].last; i++)
1739 _formi_redraw_field(form, i);
1896 * we ran out of room, let the form driver know this.
2049 * Manipulate the text in a field, this takes the given form and performs
2054 _formi_manipulate_field(FORM *form, int c)
2064 cur = form->fields[form->cur_field];
2983 _formi_validate_field(FORM *form)
2989 if ((form == NULL) || (form->fields == NULL) ||
2990 (form->fields[0] == NULL))
2993 cur = form->fields[form->cur_field];
3073 _formi_field_choice(FORM *form, int c)
3078 if ((form == NULL) || (form->fields == NULL) ||
3079 (form->fields[0] == NULL) ||
3080 (form->fields[form->cur_field]->type == NULL))
3083 field = form->fields[form->cur_field];
3109 * the driver. Return 1 if the form page needs updating.
3113 _formi_update_field(FORM *form, int old_field)
3117 cur = form->cur_field;
3120 if (!((cur >= form->page_starts[form->page].first) &&
3121 (cur <= form->page_starts[form->page].last))) {
3123 for (i = 0; i < form->max_page; i++) {
3124 if ((form->page_starts[i].in_use == 1) &&
3125 (form->page_starts[i].first <= cur) &&
3126 (form->page_starts[i].last >= cur)) {
3127 form->page = i;
3134 _formi_redraw_field(form, old_field);
3135 _formi_redraw_field(form, form->cur_field);
3175 * Sort the fields in a form ready for driver traversal.
3178 _formi_sort_fields(FORM *form)
3183 TAILQ_INIT(&form->sorted_fields);
3185 if ((sort_area = malloc(sizeof(*sort_area) * form->field_count))
3189 memcpy(sort_area, form->fields, sizeof(*sort_area) * form->field_count);
3190 qsort(sort_area, (size_t) form->field_count, sizeof(FIELD *),
3193 for (i = 0; i < form->field_count; i++)
3194 TAILQ_INSERT_TAIL(&form->sorted_fields, sort_area[i], glue);
3200 * Set the neighbours for all the fields in the given form.
3203 _formi_stitch_fields(FORM *form)
3212 if (TAILQ_EMPTY(&form->sorted_fields))
3221 cur = TAILQ_FIRST(&form->sorted_fields);
3241 if (cur == TAILQ_FIRST(&form->sorted_fields))
3246 if (cur == TAILQ_LAST(&form->sorted_fields, _formi_sort_head))
3282 TAILQ_FIRST(&form->sorted_fields);
3290 above = TAILQ_FIRST(&form->sorted_fields);