⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkbox.c

📁 一个很有名的浏览器
💻 C
字号:
/* Checkbox widget handlers. *//* $Id: checkbox.c,v 1.91.4.2 2005/04/06 08:50:39 jonas Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "elinks.h"#include "bfu/button.h"#include "bfu/checkbox.h"#include "bfu/dialog.h"#include "bfu/text.h"#include "intl/gettext/libintl.h"#include "terminal/draw.h"#include "terminal/mouse.h"#include "terminal/terminal.h"#define CHECKBOX_LEN 3	/* "[X]" or "(X)" */#define CHECKBOX_SPACING 1	/* "[X]" + " " + "Label" */#define CHECKBOX_LS (CHECKBOX_LEN + CHECKBOX_SPACING)	/* "[X] " */voidadd_dlg_radio_do(struct dialog *dlg, unsigned char *text,		 int groupid, int groupnum, void *data){	struct widget *widget;	widget = &dlg->widgets[dlg->number_of_widgets++];	widget->type = WIDGET_CHECKBOX;	widget->text = text;	widget->info.checkbox.gid = groupid;	widget->info.checkbox.gnum = groupnum;	widget->datalen = sizeof(int);	widget->data = data;}voiddlg_format_checkbox(struct terminal *term,		    struct widget_data *widget_data,		    int x, int *y, int w, int *rw,		    enum format_align align){	unsigned char *text = widget_data->widget->text;	set_box(&widget_data->box, x, *y, CHECKBOX_LS, 1);	if (w <= CHECKBOX_LS) return;	if (rw) *rw -= CHECKBOX_LS;	dlg_format_text_do(term, text, x + CHECKBOX_LS, y, w - CHECKBOX_LS, rw,			get_bfu_color(term, "dialog.checkbox-label"), align);	if (rw) *rw += CHECKBOX_LS;}static t_handler_event_statusdisplay_checkbox(struct dialog_data *dlg_data, struct widget_data *widget_data){	struct terminal *term = dlg_data->win->term;	struct color_pair *color;	unsigned char *text;	struct box *pos = &widget_data->box;	int selected = is_selected_widget(dlg_data, widget_data);	if (selected) {		color = get_bfu_color(term, "dialog.checkbox-selected");	} else {		color = get_bfu_color(term, "dialog.checkbox");	}	if (!color) return EVENT_PROCESSED;	if (widget_data->info.checkbox.checked)		text = widget_data->widget->info.checkbox.gid ? "(X)" : "[X]";	else		text = widget_data->widget->info.checkbox.gid ? "( )" : "[ ]";	draw_text(term, pos->x, pos->y, text, CHECKBOX_LEN, 0, color);	if (selected) {		set_cursor(term, pos->x + 1, pos->y, 1);		set_window_ptr(dlg_data->win, pos->x, pos->y);	}	return EVENT_PROCESSED;}static t_handler_event_statusinit_checkbox(struct dialog_data *dlg_data, struct widget_data *widget_data){	int *cdata = (int *) widget_data->cdata;	assert(cdata);	if (widget_data->widget->info.checkbox.gid) {		if (*cdata == widget_data->widget->info.checkbox.gnum)			widget_data->info.checkbox.checked = 1;	} else {		if (*cdata)			widget_data->info.checkbox.checked = 1;	}	return EVENT_PROCESSED;}static t_handler_event_statusmouse_checkbox(struct dialog_data *dlg_data, struct widget_data *widget_data){	struct terminal *term = dlg_data->win->term;	struct term_event *ev = dlg_data->term_event;	if (check_mouse_wheel(ev)	    || !check_mouse_position(ev, &widget_data->box))		return EVENT_NOT_PROCESSED;	select_widget(dlg_data, widget_data);	do_not_ignore_next_mouse_event(term);	if (check_mouse_action(ev, B_UP) && widget_data->widget->ops->select)		widget_data->widget->ops->select(dlg_data, widget_data);	return EVENT_PROCESSED;}static t_handler_event_statusselect_checkbox(struct dialog_data *dlg_data, struct widget_data *widget_data){	if (!widget_data->widget->info.checkbox.gid) {		/* Checkbox. */		int *cdata = (int *) widget_data->cdata;		assert(cdata);		widget_data->info.checkbox.checked = *cdata = !*cdata;	} else {		/* Group of radio buttons. */		struct widget_data *wdata;		foreach_widget(dlg_data, wdata) {			int *cdata = (int *) wdata->cdata;			if (wdata->widget->type != WIDGET_CHECKBOX)				continue;			if (wdata->widget->info.checkbox.gid			    != widget_data->widget->info.checkbox.gid)				continue;			assert(cdata);			*cdata = widget_data->widget->info.checkbox.gnum;			wdata->info.checkbox.checked = 0;			display_widget(dlg_data, wdata);		}		widget_data->info.checkbox.checked = 1;	}	display_widget(dlg_data, widget_data);	return EVENT_PROCESSED;}struct widget_ops checkbox_ops = {	display_checkbox,	init_checkbox,	mouse_checkbox,	NULL,	select_checkbox,	NULL,};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -