1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-07-04 02:35:29 +00:00
elinks/src/viewer/text/form.h

123 lines
4.5 KiB
C
Raw Normal View History

#ifndef EL__VIEWER_TEXT_FORM_H
#define EL__VIEWER_TEXT_FORM_H
#include "document/forms.h"
#include "util/lists.h" /* LIST_HEAD */
#include "viewer/action.h"
struct document;
struct document_view;
struct link;
struct session;
struct term_event;
struct terminal;
/* This struct looks a little embarrassing, yeah. */
struct form_view {
LIST_HEAD(struct form_view);
/* We can't just reference to {struct form} since we can potentially
* live much longer than that. */
int form_num;
#ifdef CONFIG_ECMASCRIPT
/* This holds the ECMAScript object attached to this structure. It can
* be NULL since the object is created on-demand at the first time some
* ECMAScript code accesses it. It is freed automatically by the
* garbage-collecting code when the ECMAScript context is over (usually
* when the document is destroyed). */
void *ecmascript_obj;
#endif
};
struct form_state {
struct form_view *form_view;
int g_ctrl_num;
int position;
enum form_type type;
/* For FC_TEXT, FC_PASSWORD, FC_FILE, and FC_TEXTAREA, @value
* is the text string that the user can edit. The string is
* null-terminated; its length is not stored separately. The
* size of the buffer is not stored anywhere; extending the
* string always requires calling realloc(). The string is
* not normally allowed to grow past @form_control.maxlength
* bytes (not counting the null), but there may be ways to get
* longer strings. The string is in the charset of the
* terminal (which can be UTF-8 only if CONFIG_UTF8 is
* defined, and is assumed to be unibyte otherwise). The
* charset of the document and the UTF-8 I/O option have no
* effect here. */
unsigned char *value;
/* For FC_TEXT, FC_PASSWORD, and FC_FILE, @state is the byte
* position of the insertion point in @value.
* For FC_CHECKBOX and FC_RADIO, @state is 1 or 0.
* For FC_SELECT, @state is the index of the selected item
* in @form_control.labels. */
int state;
#ifdef CONFIG_UTF8
/* For FC_TEXT, FC_PASSWORD, and FC_FILE, @state_cell is not
* used. */
int state_cell;
#endif /* CONFIG_UTF8 */
/* For FC_TEXT, FC_PASSWORD, and FC_FILE, @vpos is the index
* of the first displayed byte in @value. It should never be
* in the middle of a character. */
int vpos;
int vypos;
#ifdef CONFIG_ECMASCRIPT
/* This holds the ECMAScript object attached to this structure. It can
* be NULL since the object is created on-demand at the first time some
* ECMAScript code accesses it. It is freed automatically by the
* garbage-collecting code when the ECMAScript context is over (usually
* when the document is destroyed). */
void *ecmascript_obj;
#endif
};
struct submitted_value {
LIST_HEAD(struct submitted_value);
unsigned char *name;
unsigned char *value;
struct form_control *form_control;
enum form_type type;
int position;
};
struct submitted_value *init_submitted_value(unsigned char *name, unsigned char *value, enum form_type type, struct form_control *fc, int position);
void done_submitted_value(struct submitted_value *sv);
2007-07-26 19:39:08 +00:00
void done_submitted_value_list(LIST_OF(struct submitted_value) *list);
struct uri *get_form_uri(struct session *ses, struct document_view *doc_view, struct form_control *fc);
unsigned char *get_form_info(struct session *ses, struct document_view *doc_view);
void selected_item(struct terminal *term, void *item_, void *ses_);
int get_current_state(struct session *ses);
struct form_state *find_form_state(struct document_view *doc_view, struct form_control *fc);
struct form_control *find_form_control(struct document *document, struct form_state *fs);
struct form_view *find_form_view_in_vs(struct view_state *vs, int form_num);
struct form_view *find_form_view(struct document_view *doc_view, struct form *form);
struct form *find_form_by_form_view(struct document *document, struct form_view *fv);
enum frame_event_status field_op(struct session *ses, struct document_view *doc_view, struct link *link, struct term_event *ev);
void draw_form_entry(struct terminal *term, struct document_view *doc_view, struct link *link);
void draw_forms(struct terminal *term, struct document_view *doc_view);
enum frame_event_status reset_form(struct session *ses, struct document_view *doc_view, int a);
enum frame_event_status submit_form(struct session *ses, struct document_view *doc_view, int do_reload);
2006-01-28 10:17:22 +00:00
void submit_given_form(struct session *ses, struct document_view *doc_view, struct form *form, int do_reload);
void auto_submit_form(struct session *ses);
void do_reset_form(struct document_view *doc_view, struct form *form);
void link_form_menu(struct session *ses);
#endif