Initial Import
[profile/ivi/clutter-toys.git] / object-store / foo-test-object.c
1 /*
2  * Copyright (c) 2010, Intel Corporation.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms and conditions of the GNU General Public License,
6  * version 2, as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12  *
13  * You should have received a copy of the GNU General Public License along with
14  * this program; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
16  *
17  * Author: Rob Staudinger <robsta@linux.intel.com>
18  */
19
20 #include "foo-test-object.h"
21
22 G_DEFINE_TYPE (FooTestObject, foo_test_object, G_TYPE_OBJECT)
23
24 #define GET_PRIVATE(o) \
25   (G_TYPE_INSTANCE_GET_PRIVATE ((o), FOO_TYPE_TEST_OBJECT, FooTestObjectPrivate))
26
27 enum
28 {
29   PROP_0,
30   PROP_NUMBER,
31   PROP_TEXT
32 };
33
34 typedef struct
35 {
36   int   number;
37   char *text;
38 } FooTestObjectPrivate;
39
40 static void
41 _get_property (GObject    *object,
42                unsigned    property_id,
43                GValue     *value,
44                GParamSpec *pspec)
45 {
46   switch (property_id)
47   {
48   case PROP_NUMBER:
49     g_value_set_int (value,
50                      foo_test_object_get_number (
51                         FOO_TEST_OBJECT (object)));
52     break;
53   case PROP_TEXT:
54     g_value_set_string (value,
55                         foo_test_object_get_text (
56                           FOO_TEST_OBJECT (object)));
57     break;
58   default:
59     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
60   }
61 }
62
63 static void
64 _set_property (GObject      *object,
65                unsigned      property_id,
66                const GValue *value,
67                GParamSpec   *pspec)
68 {
69   switch (property_id)
70   {
71   case PROP_NUMBER:
72     foo_test_object_set_number (FOO_TEST_OBJECT (object),
73                                 g_value_get_int (value));
74     break;
75   case PROP_TEXT:
76     foo_test_object_set_text (FOO_TEST_OBJECT (object),
77                               g_value_get_string (value));
78     break;
79   default:
80     G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
81   }
82 }
83
84 static void
85 _finalize (GObject *object)
86 {
87   G_OBJECT_CLASS (foo_test_object_parent_class)->finalize (object);
88 }
89
90 static void
91 foo_test_object_class_init (FooTestObjectClass *klass)
92 {
93   GObjectClass *object_class = G_OBJECT_CLASS (klass);
94
95   g_type_class_add_private (klass, sizeof (FooTestObjectPrivate));
96
97   object_class->get_property = _get_property;
98   object_class->set_property = _set_property;
99   object_class->finalize = _finalize;
100
101   g_object_class_install_property (object_class,
102                                    PROP_NUMBER,
103                                    g_param_spec_int ("number", "", "",
104                                                      G_MININT32, G_MAXINT32, 0,
105                                                      G_PARAM_READWRITE));
106
107   g_object_class_install_property (object_class,
108                                    PROP_TEXT,
109                                    g_param_spec_string ("text", "", "",
110                                                         NULL,
111                                                         G_PARAM_READWRITE));
112 }
113
114 static void
115 foo_test_object_init (FooTestObject *self)
116 {
117 }
118
119 FooTestObject *
120 foo_test_object_new (void)
121 {
122   return g_object_new (FOO_TYPE_TEST_OBJECT, NULL);
123 }
124
125 int
126 foo_test_object_get_number (FooTestObject *self)
127 {
128   FooTestObjectPrivate *priv = GET_PRIVATE (self);
129
130   g_return_val_if_fail (FOO_IS_TEST_OBJECT (self), 0);
131
132   return priv->number;
133 }
134
135 void
136 foo_test_object_set_number (FooTestObject *self,
137                             int            number)
138 {
139   FooTestObjectPrivate *priv = GET_PRIVATE (self);
140
141   g_return_if_fail (FOO_IS_TEST_OBJECT (self));
142
143   if (number != priv->number)
144   {
145     priv->number = number;
146
147     g_object_notify (G_OBJECT (self), "number");
148   }
149 }
150
151 char const *
152 foo_test_object_get_text (FooTestObject *self)
153 {
154   FooTestObjectPrivate *priv = GET_PRIVATE (self);
155
156   g_return_val_if_fail (FOO_IS_TEST_OBJECT (self), NULL);
157
158   return priv->text;
159 }
160
161 void
162 foo_test_object_set_text (FooTestObject *self,
163                           char const    *text)
164 {
165   FooTestObjectPrivate *priv = GET_PRIVATE (self);
166
167   g_return_if_fail (FOO_IS_TEST_OBJECT (self));
168
169   if (0 != g_strcmp0 (text, priv->text))
170   {
171     if (priv->text)
172     {
173       g_free (priv->text);
174       priv->text = NULL;
175     }
176
177     if (text)
178     {
179       priv->text = g_strdup (text);
180     }
181
182     g_object_notify (G_OBJECT (self), "text");
183   }
184 }