1 /* foo-person.c
2 *
3 * Copyright (C) 2009 Christian Hergert <chris@dronelabs.com>
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 *
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA
18 * 02110-1301 USA
19 */
20
21 #include "foo-person.h"
22
23 G_DEFINE_TYPE (FooPerson, foo_person, G_TYPE_OBJECT)
24
25 enum
26 {
27 PROP_0,
28 PROP_NAME,
29 PROP_AGE,
30 PROP_GENDER,
31 };
32
33 enum
34 {
35 CHANGED,
36 LAST_SIGNAL
37 };
38
39 static guint signals [LAST_SIGNAL] = {0,};
40
41 struct _FooPersonPrivate
42 {
43 gchar* name;
44 guint age;
45 gchar gender;
46 };
47
48 static void
49 foo_person_get_property (GObject *object,
50 guint property_id,
51 GValue *value,
52 GParamSpec *pspec)
53 {
54 switch (property_id) {
55 case PROP_NAME:
56 g_value_set_string (value, FOO_PERSON (object)->priv->name);
57 break;
58 case PROP_AGE:
59 g_value_set_uint (value, FOO_PERSON (object)->priv->age);
60 break;
61 case PROP_GENDER:
62 g_value_set_char (value, FOO_PERSON (object)->priv->gender);
63 break;
64 default:
65 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
66 }
67 }
68
69 static void
70 foo_person_set_property (GObject *object,
71 guint property_id,
72 const GValue *value,
73 GParamSpec *pspec)
74 {
75 switch (property_id) {
76 case PROP_NAME:
77 g_free (FOO_PERSON (object)->priv->name);
78 FOO_PERSON (object)->priv->name = g_value_dup_string (value);
79 break;
80 case PROP_AGE:
81 FOO_PERSON (object)->priv->age = g_value_get_uint (value);
82 break;
83 case PROP_GENDER:
84 FOO_PERSON (object)->priv->gender = g_value_get_char (value);
85 break;
86 default:
87 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
88 }
89 }
90
91 static void
92 foo_person_finalize (GObject *object)
93 {
94 G_OBJECT_CLASS (foo_person_parent_class)->finalize (object);
95 }
96
97 static void
98 foo_person_dispose (GObject *object)
99 {
100 }
101
102 static void
103 foo_person_class_init (FooPersonClass *klass)
104 {
105 GObjectClass *object_class;
106
107 object_class = G_OBJECT_CLASS (klass);
108 object_class->set_property = foo_person_set_property;
109 object_class->get_property = foo_person_get_property;
110 object_class->finalize = foo_person_finalize;
111 object_class->dispose = foo_person_dispose;
112
113 /**
114 * FooPerson::changed:
115 *
116 * The changed signal.
117 */
118 signals [CHANGED] = g_signal_new ("changed",
119 FOO_TYPE_PERSON,
120 G_SIGNAL_RUN_FIRST,
121 G_STRUCT_OFFSET (FooPersonClass, changed),
122 NULL,
123 NULL,
124 g_cclosure_marshal_VOID__VOID,
125 G_TYPE_NONE,
126 0);
127
128 /**
129 * FooPerson::name:
130 *
131 * The "name" property.
132 */
133 g_object_class_install_property (object_class,
134 PROP_NAME,
135 g_param_spec_string ("name",
136 "Name",
137 "Persons name",
138 NULL,
139 G_PARAM_READWRITE));
140
141 /**
142 * FooPerson::age:
143 *
144 * The "age" property.
145 */
146 g_object_class_install_property (object_class,
147 PROP_AGE,
148 g_param_spec_uint ("age",
149 "Age",
150 "Persons age",
151 0,
152 G_MAXUINT,
153 0,
154 G_PARAM_READWRITE));
155
156 /**
157 * FooPerson::gender:
158 *
159 * The "gender" property.
160 */
161 g_object_class_install_property (object_class,
162 PROP_GENDER,
163 g_param_spec_char ("gender",
164 "Gender",
165 "Perons gender",
166 G_MININT8,
167 G_MAXINT8,
168 'M',
169 G_PARAM_READWRITE));
170 }
171
172 static void
173 foo_person_init (FooPerson *person)
174 {
175 person->priv = G_TYPE_INSTANCE_GET_PRIVATE (person,
176 FOO_TYPE_PERSON,
177 FooPersonPrivate);
178 }
179
180 /**
181 * foo_person_new:
182 *
183 * Return value:
184 */
185 FooPerson*
186 foo_person_new (void)
187 {
188 return g_object_new (FOO_TYPE_PERSON, NULL);
189 }
190
191 /**
192 * foo_person_get_name:
193 * @person: A #FooPerson
194 *
195 * Return value:
196 */
197 G_CONST_RETURN gchar*
198 foo_person_get_name (FooPerson *person)
199 {
200 g_return_val_if_fail (FOO_IS_PERSON (person), NULL);
201 return FOO_PERSON (person)->priv->name;
202 }
203
204 /**
205 * foo_person_set_name:
206 * @person: A #FooPerson
207 * @name: A #const gchar
208 */
209 void
210 foo_person_set_name (FooPerson *person,
211 const gchar* name)
212 {
213 g_return_if_fail (FOO_IS_PERSON (person));
214 g_free (FOO_PERSON (person)->priv->name);
215 FOO_PERSON (person)->priv->name = g_strdup (name);
216 }
217
218 /**
219 * foo_person_get_age:
220 * @person: A #FooPerson
221 *
222 * Return value:
223 */
224 guint
225 foo_person_get_age (FooPerson *person)
226 {
227 g_return_val_if_fail (FOO_IS_PERSON (person), 0);
228 return FOO_PERSON (person)->priv->age;
229 }
230
231 /**
232 * foo_person_set_age:
233 * @person: A #FooPerson
234 * @age: A #guint
235 */
236 void
237 foo_person_set_age (FooPerson *person,
238 guint age)
239 {
240 g_return_if_fail (FOO_IS_PERSON (person));
241 FOO_PERSON (person)->priv->age = age;
242 }
243
244 /**
245 * foo_person_get_gender:
246 * @person: A #FooPerson
247 *
248 * Return value:
249 */
250 gchar
251 foo_person_get_gender (FooPerson *person)
252 {
253 g_return_val_if_fail (FOO_IS_PERSON (person), 0);
254 return FOO_PERSON (person)->priv->gender;
255 }
256
257 /**
258 * foo_person_set_gender:
259 * @person: A #FooPerson
260 * @gender: A #gchar
261 */
262 void
263 foo_person_set_gender (FooPerson *person,
264 gchar gender)
265 {
266 g_return_if_fail (FOO_IS_PERSON (person));
267 FOO_PERSON (person)->priv->gender = gender;
268 }
269
270 /**
271 * foo_person_copy:
272 * @person: A #FooPerson
273 *
274 * Return value:
275 */
276 FooPerson*
277 foo_person_copy (FooPerson *person)
278 {
279 FooPersonPrivate *priv;
280
281 g_return_val_if_fail (FOO_IS_PERSON (person), NULL);
282
283 priv = person->priv;
284
285 return NULL;
286 }
287