1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-10-01 03:36:26 -04:00
elinks/src/bfu/widget.h
Kalle Olavi Niemitalo 45d1750d03 Bug 914: Don't let UTF-8 I/O affect internal representations.
Use it for the actual I/O only.  Previously, defining CONFIG_UTF8 and
enabling UTF-8 used to force many strings to the UTF-8 charset
regardless of the terminal charset option.  Now, those strings always
follow the terminal charset.  This fixes bug 914 which was caused
because _() returned strings in the terminal charset and functions
then assumed they were in UTF-8.  This reduction in the effects of
UTF-8 I/O may also simplify future testing.
2007-05-20 15:31:02 +03:00

90 lines
2.0 KiB
C

#ifndef EL__BFU_WIDGET_H
#define EL__BFU_WIDGET_H
/* XXX: Include common definitions first */
#include "bfu/common.h"
#include "bfu/button.h"
#include "bfu/checkbox.h"
#include "bfu/group.h"
#include "bfu/inpfield.h"
#include "bfu/inphist.h"
#include "bfu/leds.h"
#include "bfu/listbox.h"
#include "bfu/msgbox.h"
#include "bfu/text.h"
#include "util/lists.h"
#include "util/box.h"
struct dialog_data;
struct widget_ops {
/* XXX: Order matters here. --Zas */
widget_handler_T *display;
widget_handler_T *init;
widget_handler_T *mouse;
widget_handler_T *kbd;
widget_handler_T *select;
widget_handler_T *clear;
};
struct widget {
const struct widget_ops *ops;
unsigned char *text;
widget_handler_T *handler;
void *data;
int datalen; /* 0 = no alloc/copy to cdata. */
union {
struct widget_info_checkbox checkbox;
struct widget_info_field field;
struct widget_info_button button;
struct widget_info_text text;
} info;
enum widget_type type;
};
struct widget_data {
struct widget *widget;
/* For WIDGET_FIELD: @cdata is in the charset of the terminal.
* (That charset can be UTF-8 only if CONFIG_UTF8 is defined,
* and is assumed to be unibyte otherwise.) The UTF-8 I/O
* option has no effect here.
*
* For WIDGET_TEXT: @cdata is cast from/to an unsigned char **
* that points to the first element of an array. Each element
* in this array corresponds to one line of text, and is an
* unsigned char * that points to the first character of that
* line. The array has @widget_data.info.text.lines elements. */
unsigned char *cdata;
struct box box;
union {
struct widget_data_info_field field;
struct widget_data_info_checkbox checkbox;
struct widget_data_info_text text;
} info;
};
void display_widget(struct dialog_data *, struct widget_data *);
static inline int
widget_is_focusable(struct widget_data *widget_data)
{
switch (widget_data->widget->type) {
case WIDGET_LISTBOX: return 0;
case WIDGET_TEXT: return text_is_scrollable(widget_data);
default: return 1;
}
}
#endif