1 /* Fo
2 * fo-unknown.c: Unknown datatype
3 *
4 * Copyright (C) 2001 Sun Microsystems
5 * Copyright (C) 2007 Menteith Consulting Ltd
6 *
7 * See COPYING for the status of this software.
8 */
9
10 #include "fo-utils.h"
11 #include "fo-datatype.h"
12 #include "fo-datatype-private.h"
13 #include "fo-unknown.h"
14
15
16 enum {
17 PROP_0,
18 PROP_VALUE
19 };
20
21 struct _FoUnknown
22 {
23 FoDatatype parent_instance;
24
25 gchar *value;
26 };
27
28 struct _FoUnknownClass
29 {
30 FoDatatypeClass parent_class;
31
32 };
33
34 static void fo_unknown_init (FoUnknown *unknown);
35 static void fo_unknown_class_init (FoUnknownClass *klass);
36 static void fo_unknown_set_property (GObject *object,
37 guint prop_id,
38 const GValue *value,
39 GParamSpec *pspec);
40 static void fo_unknown_get_property (GObject *object,
41 guint prop_id,
42 GValue *value,
43 GParamSpec *pspec);
44 static void fo_unknown_finalize (GObject *object);
45
46 FoDatatype* fo_unknown_copy (FoDatatype *datatype);
47 gchar* fo_unknown_sprintf (FoObject *datatype);
48
49 static gpointer parent_class;
50
51 GType
fo_unknown_get_type(void)52 fo_unknown_get_type (void)
53 {
54 static GType object_type = 0;
55
56 if (!object_type)
57 {
58 static const GTypeInfo object_info =
59 {
60 sizeof (FoUnknownClass),
61 (GBaseInitFunc) NULL,
62 (GBaseFinalizeFunc) NULL,
63 (GClassInitFunc) fo_unknown_class_init,
64 NULL, /* class_finalize */
65 NULL, /* class_data */
66 sizeof (FoUnknown),
67 0, /* n_preallocs */
68 (GInstanceInitFunc) fo_unknown_init,
69 NULL /* value_table */
70 };
71
72 object_type = g_type_register_static (FO_TYPE_DATATYPE,
73 "FoUnknown",
74 &object_info, 0);
75 }
76
77 return object_type;
78 }
79
80 static void
fo_unknown_init(FoUnknown * unknown)81 fo_unknown_init (FoUnknown *unknown)
82 {
83 unknown->value = NULL;
84 }
85
86 static void
fo_unknown_class_init(FoUnknownClass * klass)87 fo_unknown_class_init (FoUnknownClass *klass)
88 {
89 GObjectClass *object_class = G_OBJECT_CLASS (klass);
90
91 parent_class = g_type_class_peek_parent (klass);
92
93 object_class->finalize = fo_unknown_finalize;
94
95 object_class->set_property = fo_unknown_set_property;
96 object_class->get_property = fo_unknown_get_property;
97
98 g_object_class_install_property (object_class,
99 PROP_VALUE,
100 g_param_spec_string ("value",
101 _("Value"),
102 _("Unknown value"),
103 NULL,
104 G_PARAM_READWRITE));
105
106 FO_DATATYPE_CLASS (klass)->copy = fo_unknown_copy;
107 FO_OBJECT_CLASS (klass)->print_sprintf = fo_unknown_sprintf;
108 }
109
110 static void
fo_unknown_finalize(GObject * object)111 fo_unknown_finalize (GObject *object)
112 {
113 FoUnknown *unknown;
114
115 unknown = FO_UNKNOWN (object);
116
117 g_free(unknown->value);
118
119 G_OBJECT_CLASS (parent_class)->finalize (object);
120 }
121
122
123 static void
fo_unknown_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec)124 fo_unknown_set_property (GObject *object,
125 guint prop_id,
126 const GValue *value,
127 GParamSpec *pspec)
128 {
129 FoDatatype *unknown;
130
131 unknown = FO_DATATYPE (object);
132
133 switch (prop_id)
134 {
135 case PROP_VALUE:
136 fo_unknown_set_value (unknown, g_value_get_string (value));
137 break;
138 default:
139 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
140 break;
141 }
142 }
143
144 static void
fo_unknown_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec)145 fo_unknown_get_property (GObject *object,
146 guint prop_id,
147 GValue *value,
148 GParamSpec *pspec)
149 {
150 FoDatatype *unknown;
151
152 unknown = FO_DATATYPE (object);
153
154 switch (prop_id)
155 {
156 case PROP_VALUE:
157 g_value_set_string (value, fo_unknown_get_value (unknown));
158 break;
159 default:
160 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
161 break;
162 }
163 }
164
165 /**
166 * fo_unknown_new:
167 *
168 * Creates a new #FoUnknown initialized to default value.
169 *
170 * Return value: the new #FoUnknown
171 **/
172 FoDatatype *
fo_unknown_new(void)173 fo_unknown_new (void)
174 {
175 FoDatatype *unknown;
176
177 unknown = FO_DATATYPE (g_object_new (fo_unknown_get_type (), NULL));
178
179 return unknown;
180 }
181
182 /* value */
183 gchar*
fo_unknown_get_value(FoDatatype * unknown)184 fo_unknown_get_value (FoDatatype *unknown)
185 {
186 g_return_val_if_fail (unknown != NULL, NULL);
187 g_return_val_if_fail (FO_IS_UNKNOWN (unknown), NULL);
188
189 return g_strdup (FO_UNKNOWN (unknown)->value);
190 }
191
192 void
fo_unknown_set_value(FoDatatype * unknown,const gchar * new_value)193 fo_unknown_set_value (FoDatatype *unknown,
194 const gchar* new_value)
195 {
196 g_return_if_fail (unknown != NULL);
197 g_return_if_fail (FO_IS_UNKNOWN (unknown));
198
199 FO_UNKNOWN (unknown)->value = g_strdup (new_value);
200 /*g_object_notify (G_OBJECT (unknown), "value");*/
201 }
202
203 FoDatatype *
fo_unknown_copy(FoDatatype * datatype)204 fo_unknown_copy(FoDatatype *datatype)
205 {
206 FoDatatype* unknown;
207
208 g_return_val_if_fail (datatype != NULL, NULL);
209 g_return_val_if_fail (FO_IS_UNKNOWN (datatype), NULL);
210
211 unknown = fo_unknown_new ();
212 FO_UNKNOWN (unknown)->value = g_strdup (FO_UNKNOWN (datatype)->value);
213
214 return (FO_DATATYPE(unknown));
215 }
216
217 gchar*
fo_unknown_sprintf(FoObject * datatype)218 fo_unknown_sprintf (FoObject *datatype)
219 {
220 g_return_val_if_fail (datatype != NULL, NULL);
221 g_return_val_if_fail (FO_IS_UNKNOWN (datatype), NULL);
222
223 return (g_strdup_printf("%s", FO_UNKNOWN (datatype)->value));
224 }
225