Mercurial > pidgin
annotate finch/libgnt/gntcheckbox.c @ 19408:cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Fri, 24 Aug 2007 19:43:41 +0000 |
parents | 7066896f6628 |
children | 44b4e8bd759b |
rev | line source |
---|---|
18049
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
1 /** |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
3 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
6 * source distribution. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
7 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
11 * (at your option) any later version. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
12 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
16 * GNU General Public License for more details. |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
17 * |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
21 */ |
1cedd520cd18
Doxygen skeleton and license info for gnt files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15817
diff
changeset
|
22 |
15817 | 23 #include "gntcheckbox.h" |
24 | |
25 enum | |
26 { | |
27 SIG_TOGGLED = 1, | |
28 SIGS, | |
29 }; | |
30 | |
31 static GntButtonClass *parent_class = NULL; | |
32 static guint signals[SIGS] = { 0 }; | |
33 | |
34 static void | |
35 gnt_check_box_draw(GntWidget *widget) | |
36 { | |
37 GntCheckBox *cb = GNT_CHECK_BOX(widget); | |
38 GntColorType type; | |
39 char *text; | |
40 | |
41 if (gnt_widget_has_focus(widget)) | |
42 type = GNT_COLOR_HIGHLIGHT; | |
43 else | |
44 type = GNT_COLOR_NORMAL; | |
45 | |
46 wbkgdset(widget->window, '\0' | COLOR_PAIR(type)); | |
47 | |
48 text = g_strdup_printf("[%c]", cb->checked ? 'X' : ' '); | |
49 mvwaddstr(widget->window, 0, 0, text); | |
50 g_free(text); | |
51 | |
52 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); | |
53 mvwaddstr(widget->window, 0, 4, GNT_BUTTON(cb)->priv->text); | |
54 | |
55 GNTDEBUG; | |
56 } | |
57 | |
58 static void | |
59 toggle_selection(GntWidget *widget) | |
60 { | |
61 GNT_CHECK_BOX(widget)->checked = !GNT_CHECK_BOX(widget)->checked; | |
62 g_signal_emit(widget, signals[SIG_TOGGLED], 0); | |
63 gnt_widget_draw(widget); | |
64 } | |
65 | |
66 static gboolean | |
67 gnt_check_box_key_pressed(GntWidget *widget, const char *text) | |
68 { | |
69 if (text[0] == ' ' && text[1] == '\0') | |
70 { | |
71 toggle_selection(widget); | |
72 return TRUE; | |
73 } | |
74 | |
75 return FALSE; | |
76 } | |
77 | |
78 static gboolean | |
79 gnt_check_box_clicked(GntWidget *widget, GntMouseEvent event, int x, int y) | |
80 { | |
81 if (event == GNT_LEFT_MOUSE_DOWN) { | |
82 toggle_selection(widget); | |
83 return TRUE; | |
84 } | |
85 return FALSE; | |
86 } | |
87 | |
88 static void | |
89 gnt_check_box_class_init(GntCheckBoxClass *klass) | |
90 { | |
91 GntWidgetClass *wclass = GNT_WIDGET_CLASS(klass); | |
92 | |
93 parent_class = GNT_BUTTON_CLASS(klass); | |
94 /*parent_class->destroy = gnt_check_box_destroy;*/ | |
95 wclass->draw = gnt_check_box_draw; | |
96 /*parent_class->map = gnt_check_box_map;*/ | |
97 /*parent_class->size_request = gnt_check_box_size_request;*/ | |
98 wclass->key_pressed = gnt_check_box_key_pressed; | |
99 wclass->clicked = gnt_check_box_clicked; | |
100 | |
101 signals[SIG_TOGGLED] = | |
102 g_signal_new("toggled", | |
103 G_TYPE_FROM_CLASS(klass), | |
104 G_SIGNAL_RUN_LAST, | |
105 G_STRUCT_OFFSET(GntCheckBoxClass, toggled), | |
106 NULL, NULL, | |
107 g_cclosure_marshal_VOID__VOID, | |
108 G_TYPE_NONE, 0); | |
109 GNTDEBUG; | |
110 } | |
111 | |
112 static void | |
113 gnt_check_box_init(GTypeInstance *instance, gpointer class) | |
114 { | |
115 GntWidget *widget = GNT_WIDGET(instance); | |
116 widget->priv.minh = 1; | |
117 widget->priv.minw = 4; | |
118 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); | |
119 GNTDEBUG; | |
120 } | |
121 | |
122 /****************************************************************************** | |
123 * GntCheckBox API | |
124 *****************************************************************************/ | |
125 GType | |
126 gnt_check_box_get_gtype(void) | |
127 { | |
128 static GType type = 0; | |
129 | |
130 if(type == 0) | |
131 { | |
132 static const GTypeInfo info = { | |
133 sizeof(GntCheckBoxClass), | |
134 NULL, /* base_init */ | |
135 NULL, /* base_finalize */ | |
136 (GClassInitFunc)gnt_check_box_class_init, | |
137 NULL, /* class_finalize */ | |
138 NULL, /* class_data */ | |
139 sizeof(GntCheckBox), | |
140 0, /* n_preallocs */ | |
141 gnt_check_box_init, /* instance_init */ | |
142 NULL /* value_table */ | |
143 }; | |
144 | |
145 type = g_type_register_static(GNT_TYPE_BUTTON, | |
146 "GntCheckBox", | |
147 &info, 0); | |
148 } | |
149 | |
150 return type; | |
151 } | |
152 | |
153 GntWidget *gnt_check_box_new(const char *text) | |
154 { | |
155 GntWidget *widget = g_object_new(GNT_TYPE_CHECK_BOX, NULL); | |
156 | |
157 GNT_BUTTON(widget)->priv->text = g_strdup(text); | |
158 gnt_widget_set_take_focus(widget, TRUE); | |
159 | |
160 return widget; | |
161 } | |
162 | |
163 void gnt_check_box_set_checked(GntCheckBox *box, gboolean set) | |
164 { | |
165 if (set != box->checked) | |
166 { | |
167 box->checked = set; | |
168 g_signal_emit(box, signals[SIG_TOGGLED], 0); | |
169 } | |
170 } | |
171 | |
172 gboolean gnt_check_box_get_checked(GntCheckBox *box) | |
173 { | |
174 return box->checked; | |
175 } | |
176 | |
177 | |
178 |