Esempio n. 1
0
static struct dfui_response *
response_construct_from_curses_form_single(const struct dfui_form *f,
					   const struct curses_form *cf,
					   const struct curses_widget *cw)
{
	struct dfui_response *r = NULL;
	struct dfui_action *selected = NULL;
	struct dfui_dataset *ds = NULL;
	const char *id;
	const char *value;

	selected = cw->userdata;
	r = dfui_response_new(dfui_form_get_id(f),
			      dfui_action_get_id(selected));
	ds = dfui_dataset_new();
	for (cw = cf->widget_head; cw != NULL; cw = cw->next) {
		if (cw->user_id > 0) {
			id = dfui_field_get_id((struct dfui_field *)cw->userdata);
			value = curses_widget_xlat_value(cw);
			dfui_dataset_celldata_add(ds, id, value);
		}
	}
	dfui_response_dataset_add(r, ds);

	return(r);
}
Esempio n. 2
0
struct dfui_response *
dfui_decode_response(struct aura_buffer *e)
{
	char *form_id;
	char *action_id;
	struct dfui_response *r;

	if (!aura_buffer_expect(e, "R{")) return(NULL);

	form_id = dfui_decode_string(e);
	action_id = dfui_decode_string(e);
	r = dfui_response_new(form_id, action_id);
	r->dataset_head = dfui_decode_datasets(e);
	free(form_id);
	free(action_id);

	aura_buffer_expect(e, "}");

	return(r);
}
Esempio n. 3
0
static struct dfui_response *
response_construct_from_curses_form_multiple(const struct dfui_form *f,
					     const struct curses_form *cf,
					     const struct curses_widget *cw)
{
	struct dfui_response *r = NULL;
	struct dfui_action *selected = NULL;
	struct dfui_dataset *ds = NULL;
	const char *id;
	const char *value;
	int row = 0;
	int rows = 100; /* XXX obviously we'd prefer something more efficient here! */
	int cds_added = 0;

	selected = cw->userdata;
	r = dfui_response_new(dfui_form_get_id(f),
			      dfui_action_get_id(selected));

	/* Create one dataset per row. */
	for (row = 1; row < rows; row++) {
		ds = dfui_dataset_new();
		cds_added = 0;
		for (cw = cf->widget_head; cw != NULL; cw = cw->next) {
			if (cw->user_id == row &&
			    (cw->type == CURSES_TEXTBOX || cw->type == CURSES_CHECKBOX)) {
				id = dfui_field_get_id((struct dfui_field *)cw->userdata);
				value = curses_widget_xlat_value(cw);
				dfui_dataset_celldata_add(ds, id, value);
				cds_added += 1;
			}
		}
		if (cds_added > 0) {
			dfui_response_dataset_add(r, ds);
		} else {
			dfui_dataset_free(ds);
		}
	}

	return(r);
}