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

📄 gntcheckbox.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
字号:
#include "gntcheckbox.h"enum{	SIG_TOGGLED = 1,	SIGS,};static GntButtonClass *parent_class = NULL;static guint signals[SIGS] = { 0 };static voidgnt_check_box_draw(GntWidget *widget){	GntCheckBox *cb = GNT_CHECK_BOX(widget);	GntColorType type;	char *text;	if (gnt_widget_has_focus(widget))		type = GNT_COLOR_HIGHLIGHT;	else		type = GNT_COLOR_NORMAL;		wbkgdset(widget->window, '\0' | COLOR_PAIR(type));	text = g_strdup_printf("[%c]", cb->checked ? 'X' : ' ');	mvwaddstr(widget->window, 0, 0, text);	g_free(text);	wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL));	mvwaddstr(widget->window, 0, 4, GNT_BUTTON(cb)->priv->text);		GNTDEBUG;}static voidtoggle_selection(GntWidget *widget){	GNT_CHECK_BOX(widget)->checked = !GNT_CHECK_BOX(widget)->checked;	g_signal_emit(widget, signals[SIG_TOGGLED], 0);	gnt_widget_draw(widget);}static gbooleangnt_check_box_key_pressed(GntWidget *widget, const char *text){	if (text[0] == ' ' && text[1] == '\0')	{		toggle_selection(widget);		return TRUE;	}	return FALSE;}static gbooleangnt_check_box_clicked(GntWidget *widget, GntMouseEvent event, int x, int y){	if (event == GNT_LEFT_MOUSE_DOWN) {		toggle_selection(widget);		return TRUE;	}	return FALSE;}static voidgnt_check_box_class_init(GntCheckBoxClass *klass){	GntWidgetClass *wclass = GNT_WIDGET_CLASS(klass);	parent_class = GNT_BUTTON_CLASS(klass);	/*parent_class->destroy = gnt_check_box_destroy;*/	wclass->draw = gnt_check_box_draw;	/*parent_class->map = gnt_check_box_map;*/	/*parent_class->size_request = gnt_check_box_size_request;*/	wclass->key_pressed = gnt_check_box_key_pressed;	wclass->clicked = gnt_check_box_clicked;	signals[SIG_TOGGLED] = 		g_signal_new("toggled",					 G_TYPE_FROM_CLASS(klass),					 G_SIGNAL_RUN_LAST,					 G_STRUCT_OFFSET(GntCheckBoxClass, toggled),					 NULL, NULL,					 g_cclosure_marshal_VOID__VOID,					 G_TYPE_NONE, 0);	GNTDEBUG;}static voidgnt_check_box_init(GTypeInstance *instance, gpointer class){	GntWidget *widget = GNT_WIDGET(instance);	widget->priv.minh = 1;	widget->priv.minw = 4;	GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW);	GNTDEBUG;}/****************************************************************************** * GntCheckBox API *****************************************************************************/GTypegnt_check_box_get_gtype(void){	static GType type = 0;	if(type == 0)	{		static const GTypeInfo info = {			sizeof(GntCheckBoxClass),			NULL,					/* base_init		*/			NULL,					/* base_finalize	*/			(GClassInitFunc)gnt_check_box_class_init,			NULL,					/* class_finalize	*/			NULL,					/* class_data		*/			sizeof(GntCheckBox),			0,						/* n_preallocs		*/			gnt_check_box_init,			/* instance_init	*/			NULL					/* value_table		*/		};		type = g_type_register_static(GNT_TYPE_BUTTON,									  "GntCheckBox",									  &info, 0);	}	return type;}GntWidget *gnt_check_box_new(const char *text){	GntWidget *widget = g_object_new(GNT_TYPE_CHECK_BOX, NULL);	GNT_BUTTON(widget)->priv->text = g_strdup(text);	gnt_widget_set_take_focus(widget, TRUE);	return widget;}void gnt_check_box_set_checked(GntCheckBox *box, gboolean set){	if (set != box->checked)	{		box->checked = set;		g_signal_emit(box, signals[SIG_TOGGLED], 0);	}}gboolean gnt_check_box_get_checked(GntCheckBox *box){	return box->checked;}

⌨️ 快捷键说明

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