2 * GNT - The GLib Ncurses Toolkit
4 * GNT is the legal property of its developers, whose names are too numerous
5 * to list here. Please refer to the COPYRIGHT file distributed with this
8 * This library is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
23 #include "gntinternal.h"
24 #include "gntcheckbox.h"
32 static GntButtonClass
*parent_class
= NULL
;
33 static guint signals
[SIGS
] = { 0 };
36 gnt_check_box_draw(GntWidget
*widget
)
38 GntCheckBox
*cb
= GNT_CHECK_BOX(widget
);
40 gboolean focus
= gnt_widget_has_focus(widget
);
43 type
= GNT_COLOR_HIGHLIGHT
;
45 type
= GNT_COLOR_NORMAL
;
47 wbkgdset(widget
->window
, '\0' | gnt_color_pair(type
));
49 mvwaddch(widget
->window
, 0, 0, '[');
50 mvwaddch(widget
->window
, 0, 1, (cb
->checked
? 'X' : ' ') | (focus
? A_UNDERLINE
: A_NORMAL
));
51 mvwaddch(widget
->window
, 0, 2, ']');
53 wbkgdset(widget
->window
, '\0' | gnt_color_pair(GNT_COLOR_NORMAL
));
54 mvwaddstr(widget
->window
, 0, 4, C_(GNT_BUTTON(cb
)->priv
->text
));
55 wmove(widget
->window
, 0, 1);
61 toggle_selection(GntWidget
*widget
)
63 GNT_CHECK_BOX(widget
)->checked
= !GNT_CHECK_BOX(widget
)->checked
;
64 g_signal_emit(widget
, signals
[SIG_TOGGLED
], 0);
65 gnt_widget_draw(widget
);
69 gnt_check_box_key_pressed(GntWidget
*widget
, const char *text
)
71 if (text
[0] == ' ' && text
[1] == '\0')
73 toggle_selection(widget
);
81 gnt_check_box_clicked(GntWidget
*widget
, GntMouseEvent event
, int x
, int y
)
83 if (event
== GNT_LEFT_MOUSE_DOWN
) {
84 toggle_selection(widget
);
91 gnt_check_box_class_init(GntCheckBoxClass
*klass
)
93 GntWidgetClass
*wclass
= GNT_WIDGET_CLASS(klass
);
95 parent_class
= GNT_BUTTON_CLASS(klass
);
96 /*parent_class->destroy = gnt_check_box_destroy;*/
97 wclass
->draw
= gnt_check_box_draw
;
98 /*parent_class->map = gnt_check_box_map;*/
99 /*parent_class->size_request = gnt_check_box_size_request;*/
100 wclass
->key_pressed
= gnt_check_box_key_pressed
;
101 wclass
->clicked
= gnt_check_box_clicked
;
103 signals
[SIG_TOGGLED
] =
104 g_signal_new("toggled",
105 G_TYPE_FROM_CLASS(klass
),
107 G_STRUCT_OFFSET(GntCheckBoxClass
, toggled
),
109 g_cclosure_marshal_VOID__VOID
,
115 gnt_check_box_init(GTypeInstance
*instance
, gpointer
class)
117 GntWidget
*widget
= GNT_WIDGET(instance
);
118 widget
->priv
.minh
= 1;
119 widget
->priv
.minw
= 4;
120 GNT_WIDGET_SET_FLAGS(widget
, GNT_WIDGET_NO_BORDER
| GNT_WIDGET_NO_SHADOW
);
124 /******************************************************************************
126 *****************************************************************************/
128 gnt_check_box_get_gtype(void)
130 static GType type
= 0;
134 static const GTypeInfo info
= {
135 sizeof(GntCheckBoxClass
),
136 NULL
, /* base_init */
137 NULL
, /* base_finalize */
138 (GClassInitFunc
)gnt_check_box_class_init
,
139 NULL
, /* class_finalize */
140 NULL
, /* class_data */
143 gnt_check_box_init
, /* instance_init */
144 NULL
/* value_table */
147 type
= g_type_register_static(GNT_TYPE_BUTTON
,
155 GntWidget
*gnt_check_box_new(const char *text
)
157 GntWidget
*widget
= g_object_new(GNT_TYPE_CHECK_BOX
, NULL
);
159 GNT_BUTTON(widget
)->priv
->text
= g_strdup(text
);
160 gnt_widget_set_take_focus(widget
, TRUE
);
165 void gnt_check_box_set_checked(GntCheckBox
*box
, gboolean set
)
167 if (set
!= box
->checked
)
170 g_signal_emit(box
, signals
[SIG_TOGGLED
], 0);
174 gboolean
gnt_check_box_get_checked(GntCheckBox
*box
)