Mercurial > pidgin
annotate finch/libgnt/gntcheckbox.c @ 32751:6b80dbe29e0c
I'm really going to try to release Tuesday night. I'm going to try to
confirm that we still build on windows... but if anyone else wants to
test it, that would be good, too
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 12 Mar 2012 08:56:12 +0000 |
parents | a8cc50c2279f |
children |
rev | line source |
---|---|
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18873
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
17928
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
15817
diff
changeset
|
22 |
28603
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
23 #include "gntinternal.h" |
15817 | 24 #include "gntcheckbox.h" |
25 | |
26 enum | |
27 { | |
28 SIG_TOGGLED = 1, | |
29 SIGS, | |
30 }; | |
31 | |
32 static GntButtonClass *parent_class = NULL; | |
33 static guint signals[SIGS] = { 0 }; | |
34 | |
35 static void | |
36 gnt_check_box_draw(GntWidget *widget) | |
37 { | |
38 GntCheckBox *cb = GNT_CHECK_BOX(widget); | |
39 GntColorType type; | |
28603
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
40 gboolean focus = gnt_widget_has_focus(widget); |
15817 | 41 |
28603
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
42 if (focus) |
15817 | 43 type = GNT_COLOR_HIGHLIGHT; |
44 else | |
45 type = GNT_COLOR_NORMAL; | |
26439
c67d43408daa
Update hardware cursor correctly.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
46 |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
47 wbkgdset(widget->window, '\0' | gnt_color_pair(type)); |
15817 | 48 |
28603
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
49 mvwaddch(widget->window, 0, 0, '['); |
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
50 mvwaddch(widget->window, 0, 1, (cb->checked ? 'X' : ' ') | (focus ? A_UNDERLINE : A_NORMAL)); |
8356e2f2486a
Underline the selection in a checkbox.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26439
diff
changeset
|
51 mvwaddch(widget->window, 0, 2, ']'); |
15817 | 52 |
21250
9187d331aebe
Add gnt_color_pair, which will replace color codes with 'appropriate' text
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19681
diff
changeset
|
53 wbkgdset(widget->window, '\0' | gnt_color_pair(GNT_COLOR_NORMAL)); |
28604
a18f421696dc
Fix showing umlauts etc. on non-utf8 locales.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
28603
diff
changeset
|
54 mvwaddstr(widget->window, 0, 4, C_(GNT_BUTTON(cb)->priv->text)); |
26439
c67d43408daa
Update hardware cursor correctly.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
55 wmove(widget->window, 0, 1); |
c67d43408daa
Update hardware cursor correctly.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21250
diff
changeset
|
56 |
15817 | 57 GNTDEBUG; |
58 } | |
59 | |
60 static void | |
61 toggle_selection(GntWidget *widget) | |
62 { | |
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); | |
66 } | |
67 | |
68 static gboolean | |
69 gnt_check_box_key_pressed(GntWidget *widget, const char *text) | |
70 { | |
71 if (text[0] == ' ' && text[1] == '\0') | |
72 { | |
73 toggle_selection(widget); | |
74 return TRUE; | |
75 } | |
76 | |
77 return FALSE; | |
78 } | |
79 | |
80 static gboolean | |
81 gnt_check_box_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) | |
82 { | |
83 if (event == GNT_LEFT_MOUSE_DOWN) { | |
84 toggle_selection(widget); | |
85 return TRUE; | |
86 } | |
87 return FALSE; | |
88 } | |
89 | |
90 static void | |
91 gnt_check_box_class_init(GntCheckBoxClass *klass) | |
92 { | |
93 GntWidgetClass *wclass = GNT_WIDGET_CLASS(klass); | |
94 | |
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; | |
102 | |
31086
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
28604
diff
changeset
|
103 signals[SIG_TOGGLED] = |
15817 | 104 g_signal_new("toggled", |
105 G_TYPE_FROM_CLASS(klass), | |
106 G_SIGNAL_RUN_LAST, | |
107 G_STRUCT_OFFSET(GntCheckBoxClass, toggled), | |
108 NULL, NULL, | |
109 g_cclosure_marshal_VOID__VOID, | |
110 G_TYPE_NONE, 0); | |
111 GNTDEBUG; | |
112 } | |
113 | |
114 static void | |
115 gnt_check_box_init(GTypeInstance *instance, gpointer class) | |
116 { | |
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); | |
121 GNTDEBUG; | |
122 } | |
123 | |
124 /****************************************************************************** | |
125 * GntCheckBox API | |
126 *****************************************************************************/ | |
127 GType | |
128 gnt_check_box_get_gtype(void) | |
129 { | |
130 static GType type = 0; | |
131 | |
132 if(type == 0) | |
133 { | |
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 */ | |
141 sizeof(GntCheckBox), | |
142 0, /* n_preallocs */ | |
143 gnt_check_box_init, /* instance_init */ | |
144 NULL /* value_table */ | |
145 }; | |
146 | |
147 type = g_type_register_static(GNT_TYPE_BUTTON, | |
148 "GntCheckBox", | |
149 &info, 0); | |
150 } | |
151 | |
152 return type; | |
153 } | |
154 | |
155 GntWidget *gnt_check_box_new(const char *text) | |
156 { | |
157 GntWidget *widget = g_object_new(GNT_TYPE_CHECK_BOX, NULL); | |
158 | |
159 GNT_BUTTON(widget)->priv->text = g_strdup(text); | |
160 gnt_widget_set_take_focus(widget, TRUE); | |
161 | |
162 return widget; | |
163 } | |
164 | |
165 void gnt_check_box_set_checked(GntCheckBox *box, gboolean set) | |
166 { | |
167 if (set != box->checked) | |
168 { | |
169 box->checked = set; | |
170 g_signal_emit(box, signals[SIG_TOGGLED], 0); | |
171 } | |
172 } | |
173 | |
174 gboolean gnt_check_box_get_checked(GntCheckBox *box) | |
175 { | |
176 return box->checked; | |
177 } | |
178 | |
179 | |
180 |