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