glib2 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. data/ChangeLog +3023 -0
  2. data/README +28 -0
  3. data/Rakefile +87 -0
  4. data/extconf.rb +61 -0
  5. data/sample/bookmarkfile.rb +66 -0
  6. data/sample/completion.rb +45 -0
  7. data/sample/idle.rb +41 -0
  8. data/sample/iochannel.rb +44 -0
  9. data/sample/keyfile.rb +62 -0
  10. data/sample/shell.rb +36 -0
  11. data/sample/spawn.rb +25 -0
  12. data/sample/timeout.rb +28 -0
  13. data/sample/timeout2.rb +35 -0
  14. data/sample/timer.rb +40 -0
  15. data/sample/type-register.rb +103 -0
  16. data/sample/type-register2.rb +104 -0
  17. data/sample/utils.rb +54 -0
  18. data/src/glib-enum-types.c +1032 -0
  19. data/src/glib-enum-types.h +140 -0
  20. data/src/lib/glib-mkenums.rb +199 -0
  21. data/src/lib/glib2.rb +220 -0
  22. data/src/lib/mkmf-gnome2.rb +390 -0
  23. data/src/lib/pkg-config.rb +137 -0
  24. data/src/rbgcompat.h +30 -0
  25. data/src/rbglib.c +320 -0
  26. data/src/rbglib.h +96 -0
  27. data/src/rbglib_bookmarkfile.c +595 -0
  28. data/src/rbglib_completion.c +192 -0
  29. data/src/rbglib_convert.c +195 -0
  30. data/src/rbglib_error.c +95 -0
  31. data/src/rbglib_fileutils.c +83 -0
  32. data/src/rbglib_i18n.c +44 -0
  33. data/src/rbglib_int64.c +157 -0
  34. data/src/rbglib_iochannel.c +883 -0
  35. data/src/rbglib_keyfile.c +846 -0
  36. data/src/rbglib_maincontext.c +917 -0
  37. data/src/rbglib_mainloop.c +87 -0
  38. data/src/rbglib_messages.c +150 -0
  39. data/src/rbglib_pollfd.c +111 -0
  40. data/src/rbglib_shell.c +68 -0
  41. data/src/rbglib_source.c +190 -0
  42. data/src/rbglib_spawn.c +345 -0
  43. data/src/rbglib_threads.c +51 -0
  44. data/src/rbglib_timer.c +127 -0
  45. data/src/rbglib_unicode.c +611 -0
  46. data/src/rbglib_utils.c +386 -0
  47. data/src/rbglib_win32.c +136 -0
  48. data/src/rbgobj_boxed.c +251 -0
  49. data/src/rbgobj_closure.c +337 -0
  50. data/src/rbgobj_convert.c +167 -0
  51. data/src/rbgobj_enums.c +961 -0
  52. data/src/rbgobj_fundamental.c +30 -0
  53. data/src/rbgobj_object.c +892 -0
  54. data/src/rbgobj_param.c +390 -0
  55. data/src/rbgobj_paramspecs.c +305 -0
  56. data/src/rbgobj_signal.c +963 -0
  57. data/src/rbgobj_strv.c +61 -0
  58. data/src/rbgobj_type.c +851 -0
  59. data/src/rbgobj_typeinstance.c +121 -0
  60. data/src/rbgobj_typeinterface.c +148 -0
  61. data/src/rbgobj_typemodule.c +66 -0
  62. data/src/rbgobj_typeplugin.c +49 -0
  63. data/src/rbgobj_value.c +313 -0
  64. data/src/rbgobj_valuearray.c +59 -0
  65. data/src/rbgobj_valuetypes.c +298 -0
  66. data/src/rbgobject.c +406 -0
  67. data/src/rbgobject.h +265 -0
  68. data/src/rbgprivate.h +88 -0
  69. data/src/rbgutil.c +222 -0
  70. data/src/rbgutil.h +82 -0
  71. data/src/rbgutil_callback.c +231 -0
  72. data/test/glib-test-init.rb +6 -0
  73. data/test/glib-test-utils.rb +12 -0
  74. data/test/run-test.rb +25 -0
  75. data/test/test_enum.rb +99 -0
  76. data/test/test_file_utils.rb +15 -0
  77. data/test/test_glib2.rb +120 -0
  78. data/test/test_iochannel.rb +275 -0
  79. data/test/test_key_file.rb +38 -0
  80. data/test/test_mkenums.rb +25 -0
  81. data/test/test_signal.rb +20 -0
  82. data/test/test_timeout.rb +28 -0
  83. data/test/test_unicode.rb +369 -0
  84. data/test/test_utils.rb +37 -0
  85. data/test/test_win32.rb +13 -0
  86. metadata +165 -0
@@ -0,0 +1,390 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /**********************************************************************
3
+
4
+ rbgobj_param.c -
5
+
6
+ $Author: ggc $
7
+ $Date: 2007/07/13 16:07:28 $
8
+ created at: Sun Jun 9 20:31:47 JST 2002
9
+
10
+ Copyright (C) 2002,2003 Masahiro Sakai
11
+
12
+ **********************************************************************/
13
+
14
+ #include "rbgprivate.h"
15
+
16
+ VALUE rbgobj_cParam;
17
+ static GQuark qparamspec;
18
+
19
+ static VALUE pspec_s_allocate(VALUE klass);
20
+
21
+ typedef struct {
22
+ GParamSpec* instance;
23
+ const RGObjClassInfo* cinfo;
24
+ } pspec_holder;
25
+
26
+ static void
27
+ pspec_mark(holder)
28
+ pspec_holder* holder;
29
+ {
30
+ if (holder->instance)
31
+ rbgobj_instance_call_cinfo_mark(holder->instance);
32
+ }
33
+
34
+ static void
35
+ pspec_free(holder)
36
+ pspec_holder* holder;
37
+ {
38
+ if (holder->instance){
39
+ rbgobj_instance_call_cinfo_free(holder->instance);
40
+ g_param_spec_set_qdata(holder->instance, qparamspec, NULL);
41
+ g_param_spec_unref(holder->instance);
42
+ }
43
+ free(holder);
44
+ }
45
+
46
+ GParamSpec*
47
+ rbgobj_get_param_spec(VALUE obj)
48
+ {
49
+ pspec_holder* holder;
50
+ Data_Get_Struct(obj, pspec_holder, holder);
51
+ return G_PARAM_SPEC(holder->instance);
52
+ }
53
+
54
+ void
55
+ rbgobj_param_spec_initialize(self, pspec)
56
+ VALUE self;
57
+ GParamSpec* pspec;
58
+ {
59
+ pspec_holder* holder;
60
+ Data_Get_Struct(self, pspec_holder, holder);
61
+
62
+ pspec = g_param_spec_ref(pspec);
63
+ g_param_spec_sink(pspec);
64
+
65
+ holder->instance = pspec;
66
+ holder->cinfo = GTYPE2CINFO(G_PARAM_SPEC_TYPE(pspec));
67
+ g_param_spec_set_qdata(pspec, qparamspec, (gpointer)self);
68
+ }
69
+
70
+ VALUE
71
+ rbgobj_get_ruby_object_from_param_spec(GParamSpec* pspec, gboolean alloc)
72
+ {
73
+ gpointer data = g_param_spec_get_qdata(pspec, qparamspec);
74
+ if (data)
75
+ return (VALUE)data;
76
+ else if (alloc) {
77
+ VALUE result = pspec_s_allocate(GTYPE2CLASS(G_PARAM_SPEC_TYPE(pspec)));
78
+ rbgobj_param_spec_initialize(result, pspec);
79
+ return result;
80
+ } else
81
+ return Qnil;
82
+ }
83
+
84
+ /**********************************************************************/
85
+
86
+ static VALUE
87
+ pspec_s_allocate(VALUE klass)
88
+ {
89
+ const RGObjClassInfo* cinfo = rbgobj_lookup_class(klass);
90
+ if (G_TYPE_IS_ABSTRACT(cinfo->gtype))
91
+ rb_raise(rb_eTypeError, "abstract class");
92
+
93
+ {
94
+ pspec_holder* holder;
95
+ VALUE result;
96
+
97
+ result = Data_Make_Struct(klass, pspec_holder, pspec_mark, pspec_free,
98
+ holder);
99
+ holder->instance = NULL;
100
+ holder->cinfo = NULL;
101
+
102
+ return result;
103
+ }
104
+ }
105
+
106
+ static VALUE
107
+ inspect(VALUE self)
108
+ {
109
+ GParamSpec* pspec = rbgobj_get_param_spec(self);
110
+ VALUE v = rb_inspect(GTYPE2CLASS(pspec->owner_type));
111
+ gchar* str = g_strdup_printf("#<%s: %s#%s>",
112
+ rb_class2name(CLASS_OF(self)),
113
+ StringValuePtr(v),
114
+ g_param_spec_get_name(pspec));
115
+ VALUE result = rb_str_new2(str);
116
+ g_free(str);
117
+ return result;
118
+ }
119
+
120
+ static VALUE
121
+ get_name(VALUE self)
122
+ {
123
+ return rb_str_new2(g_param_spec_get_name(rbgobj_get_param_spec(self)));
124
+ }
125
+
126
+ static VALUE
127
+ get_nick(VALUE self)
128
+ {
129
+ const gchar* str = g_param_spec_get_nick(rbgobj_get_param_spec(self));
130
+ return str ? rb_str_new2(str) : Qnil;
131
+ }
132
+
133
+ static VALUE
134
+ get_blurb(VALUE self)
135
+ {
136
+ const gchar* str = g_param_spec_get_blurb(rbgobj_get_param_spec(self));
137
+ return str ? rb_str_new2(str) : Qnil;
138
+ }
139
+
140
+ static VALUE
141
+ get_flags(VALUE self)
142
+ {
143
+ return INT2NUM(rbgobj_get_param_spec(self)->flags);
144
+ }
145
+
146
+ static VALUE
147
+ get_value_type(VALUE self)
148
+ {
149
+ return rbgobj_gtype_new(G_PARAM_SPEC_VALUE_TYPE(rbgobj_get_param_spec(self)));
150
+ }
151
+
152
+ static VALUE
153
+ get_owner_type(VALUE self)
154
+ {
155
+ return rbgobj_gtype_new(rbgobj_get_param_spec(self)->owner_type);
156
+ }
157
+
158
+ static VALUE
159
+ get_owner(VALUE self)
160
+ {
161
+ return GTYPE2CLASS(rbgobj_get_param_spec(self)->owner_type);
162
+ }
163
+
164
+ static VALUE
165
+ value_default(VALUE self)
166
+ {
167
+ GValue tmp = {0,};
168
+ VALUE result;
169
+
170
+ g_value_init(&tmp,
171
+ G_PARAM_SPEC_VALUE_TYPE(rbgobj_get_param_spec(self)));
172
+ g_param_value_set_default(rbgobj_get_param_spec(self), &tmp);
173
+ result = rbgobj_gvalue_to_rvalue(&tmp);
174
+ g_value_unset(&tmp);
175
+
176
+ return result;
177
+ }
178
+
179
+ #if 0
180
+ static VALUE
181
+ value_defaults(VALUE self, VALUE val)
182
+ {
183
+ GValue tmp = {0,};
184
+ gboolean result;
185
+
186
+ /* FIXME: use rb_ensure to ensure following g_value_unset() call*/
187
+ g_value_init(&tmp,
188
+ G_PARAM_SPEC_VALUE_TYPE(rbgobj_get_param_spec(self)));
189
+ rbgobj_rvalue_to_gvalue(val, &tmp);
190
+ result = g_param_value_defaults(rbgobj_get_param_spec(self), &tmp);
191
+ g_value_unset(&tmp);
192
+
193
+ return CBOOL2RVAL(result);
194
+ }
195
+ #endif
196
+
197
+
198
+ struct validate_arg{
199
+ GParamSpec* pspec;
200
+ GValue* value;
201
+ VALUE obj;
202
+ };
203
+
204
+ static VALUE
205
+ value_validate_body(struct validate_arg* arg)
206
+ {
207
+ VALUE ret;
208
+ gboolean b;
209
+
210
+ rbgobj_rvalue_to_gvalue(arg->obj, arg->value);
211
+ b = g_param_value_validate(arg->pspec, arg->value);
212
+ ret = rbgobj_gvalue_to_rvalue(arg->value);
213
+ return rb_ary_new3(2, CBOOL2RVAL(b), ret);
214
+ }
215
+
216
+ static VALUE
217
+ value_validate_ensure(struct validate_arg* arg)
218
+ {
219
+ g_value_unset(arg->value);
220
+ return Qnil;
221
+ }
222
+
223
+ static VALUE
224
+ value_validate(self, obj)
225
+ VALUE self, obj;
226
+ {
227
+ struct validate_arg arg;
228
+ GValue value = {0,};
229
+
230
+ arg.pspec = rbgobj_get_param_spec(self);
231
+ arg.value = &value;
232
+ arg.obj = obj;
233
+
234
+ g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(arg.pspec));
235
+
236
+ return rb_ensure(value_validate_body, (VALUE)&arg,
237
+ value_validate_ensure, (VALUE)&arg);
238
+ }
239
+
240
+
241
+ static VALUE
242
+ value_convert(int argc, VALUE* argv, VALUE self)
243
+ {
244
+ GParamSpec* pspec = rbgobj_get_param_spec(self);
245
+ VALUE src, strict_validation;
246
+ VALUE src_type;
247
+ VALUE result = Qnil;
248
+ GValue src_value = {0,};
249
+ GValue dest_value = {0,};
250
+ gboolean b;
251
+
252
+ rb_scan_args(argc, argv, "21", &src, &src_type, &strict_validation);
253
+
254
+ /* FIXME: use rb_ensure to ensure following g_value_unset() call*/
255
+ g_value_init(&src_value, rbgobj_gtype_get(src_type));
256
+ g_value_init(&dest_value, G_PARAM_SPEC_VALUE_TYPE(pspec));
257
+
258
+ rbgobj_rvalue_to_gvalue(src, &src_value);
259
+
260
+ b = g_param_value_convert(rbgobj_get_param_spec(self),
261
+ &src_value, &dest_value,
262
+ RVAL2CBOOL(strict_validation));
263
+
264
+ if (b)
265
+ result = rbgobj_gvalue_to_rvalue(&dest_value);
266
+
267
+ g_value_unset(&src_value);
268
+ g_value_unset(&dest_value);
269
+
270
+ if (b)
271
+ return result;
272
+ else
273
+ rb_raise(rb_eTypeError, "can't convert");
274
+ }
275
+
276
+ static VALUE
277
+ values_compare(self, a, b)
278
+ VALUE self, a, b;
279
+ {
280
+ GParamSpec* pspec = rbgobj_get_param_spec(self);
281
+ GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
282
+ GValue v1 = {0,};
283
+ GValue v2 = {0,};
284
+ gint result;
285
+
286
+ g_value_init(&v1, type);
287
+ g_value_init(&v2, type);
288
+
289
+ /* FIXME: use rb_ensure to ensure following g_value_unset() call*/
290
+ rbgobj_rvalue_to_gvalue(a, &v1);
291
+ rbgobj_rvalue_to_gvalue(b, &v2);
292
+
293
+ result = g_param_values_cmp(pspec, &v1, &v2);
294
+
295
+ g_value_unset(&v1);
296
+ g_value_unset(&v2);
297
+
298
+ return INT2NUM(result);
299
+ }
300
+
301
+
302
+ static VALUE
303
+ get_ref_count(self)
304
+ VALUE self;
305
+ {
306
+ return INT2NUM(G_PARAM_SPEC(rbgobj_get_param_spec(self))->ref_count);
307
+ }
308
+
309
+
310
+ #define param_is_flag(flag) \
311
+ static VALUE \
312
+ param_is_##flag(self) \
313
+ VALUE self; \
314
+ { \
315
+ GParamSpec* pspec = G_PARAM_SPEC(rbgobj_get_param_spec(self)); \
316
+ return CBOOL2RVAL(pspec->flags & flag); \
317
+ }
318
+
319
+ param_is_flag(G_PARAM_READABLE)
320
+ param_is_flag(G_PARAM_WRITABLE)
321
+ param_is_flag(G_PARAM_CONSTRUCT)
322
+ param_is_flag(G_PARAM_CONSTRUCT_ONLY)
323
+ param_is_flag(G_PARAM_LAX_VALIDATION)
324
+ param_is_flag(G_PARAM_PRIVATE)
325
+ param_is_flag(G_PARAM_READWRITE)
326
+
327
+ /**********************************************************************/
328
+
329
+ static void
330
+ Init_gobject_gparam_spec()
331
+ {
332
+ VALUE cParamSpec;
333
+
334
+ qparamspec = g_quark_from_static_string("__ruby_gobject_param_spec__");
335
+ rbgobj_cParam = G_DEF_CLASS(G_TYPE_PARAM, "Param", mGLib);
336
+ cParamSpec = rbgobj_cParam;
337
+
338
+ /* GParamFlags */
339
+ rb_define_const(cParamSpec, "READABLE", INT2FIX(G_PARAM_READABLE));
340
+ rb_define_const(cParamSpec, "WRITABLE", INT2FIX(G_PARAM_WRITABLE));
341
+ rb_define_const(cParamSpec, "CONSTRUCT", INT2FIX(G_PARAM_CONSTRUCT));
342
+ rb_define_const(cParamSpec, "CONSTRUCT_ONLY", INT2FIX(G_PARAM_CONSTRUCT_ONLY));
343
+ rb_define_const(cParamSpec, "LAX_VALIDATION", INT2FIX(G_PARAM_LAX_VALIDATION));
344
+ rb_define_const(cParamSpec, "PRIVATE", INT2FIX(G_PARAM_PRIVATE));
345
+ rb_define_const(cParamSpec, "READWRITE", INT2FIX(G_PARAM_READWRITE));
346
+ rb_define_const(cParamSpec, "MASK", INT2FIX(G_PARAM_MASK));
347
+ rb_define_const(cParamSpec, "USER_SHIFT", INT2FIX(G_PARAM_USER_SHIFT));
348
+
349
+ rb_define_alloc_func(cParamSpec, pspec_s_allocate);
350
+
351
+ rb_define_method(cParamSpec, "inspect", inspect, 0);
352
+
353
+ rb_define_method(cParamSpec, "name", get_name, 0);
354
+ rb_define_method(cParamSpec, "nick", get_nick, 0);
355
+ rb_define_method(cParamSpec, "blurb", get_blurb, 0);
356
+
357
+ rb_define_method(cParamSpec, "flags", get_flags, 0);
358
+ rb_define_method(cParamSpec, "value_type", get_value_type, 0);
359
+ rb_define_method(cParamSpec, "owner_type", get_owner_type, 0);
360
+ rb_define_method(cParamSpec, "owner", get_owner, 0);
361
+
362
+ rb_define_method(cParamSpec, "value_default", value_default, 0);
363
+ rb_define_alias(cParamSpec, "default", "value_default");
364
+
365
+ // FIXME: better name
366
+ #if 0
367
+ rb_define_method(cParamSpec, "value_defaults?", value_defaults, 1);
368
+ #endif
369
+ rb_define_method(cParamSpec, "value_validate", value_validate, 1);
370
+ rb_define_method(cParamSpec, "value_convert", value_convert, -1);
371
+ rb_define_method(cParamSpec, "value_compare", values_compare, 2);
372
+
373
+ /* for debugging */
374
+ rb_define_method(cParamSpec, "ref_count", get_ref_count, 0);
375
+
376
+ rb_define_method(cParamSpec, "readable?", param_is_G_PARAM_READABLE, 0);
377
+ rb_define_method(cParamSpec, "writable?", param_is_G_PARAM_WRITABLE, 0);
378
+ rb_define_method(cParamSpec, "construct?", param_is_G_PARAM_CONSTRUCT, 0);
379
+ rb_define_method(cParamSpec, "construct_only?", param_is_G_PARAM_CONSTRUCT_ONLY, 0);
380
+ rb_define_method(cParamSpec, "lax_validation?", param_is_G_PARAM_LAX_VALIDATION, 0);
381
+ rb_define_method(cParamSpec, "private?", param_is_G_PARAM_PRIVATE, 0);
382
+ rb_define_method(cParamSpec, "readwrite?", param_is_G_PARAM_READWRITE, 0);
383
+ }
384
+
385
+ /**********************************************************************/
386
+
387
+ void Init_gobject_gparam()
388
+ {
389
+ Init_gobject_gparam_spec();
390
+ }
@@ -0,0 +1,305 @@
1
+ /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
+ /**********************************************************************
3
+
4
+ rbgobj_paramspecs.c -
5
+
6
+ $Author: ggc $
7
+ $Date: 2007/07/13 16:07:28 $
8
+ created at: Sun Jul 26 14:31:33 JST 2002
9
+
10
+ Copyright (C) 2004 Ruby-GNOME2 Project Team
11
+ Copyright (C) 2002,2003 Masahiro Sakai
12
+
13
+ **********************************************************************/
14
+
15
+ #include "rbgprivate.h"
16
+
17
+ #define DEF_NUMERIC_PSPEC_METHODS_FUNC(pspec_type, typename, from_ruby, to_ruby, pspec_cast) \
18
+ static VALUE \
19
+ typename##_initialize(self, name, nick, blurb, minimum, maximum, default_value, flags) \
20
+ VALUE self, name, nick, blurb, minimum, maximum, default_value, flags; \
21
+ { \
22
+ GParamSpec* pspec; \
23
+ pspec = g_param_spec_##typename(StringValuePtr(name), \
24
+ StringValuePtr(nick), \
25
+ StringValuePtr(blurb), \
26
+ from_ruby(minimum), \
27
+ from_ruby(maximum), \
28
+ from_ruby(default_value), \
29
+ NUM2UINT(flags)); \
30
+ rbgobj_param_spec_initialize(self, pspec); \
31
+ return Qnil; \
32
+ } \
33
+ \
34
+ static \
35
+ VALUE typename##_minimum(self) \
36
+ { \
37
+ return to_ruby(pspec_cast(RVAL2GOBJ(self))->minimum); \
38
+ } \
39
+ \
40
+ static \
41
+ VALUE typename##_maximum(self) \
42
+ { \
43
+ return to_ruby(pspec_cast(RVAL2GOBJ(self))->maximum); \
44
+ } \
45
+ \
46
+ static \
47
+ VALUE typename##_range(self) \
48
+ { \
49
+ pspec_type* pspec = pspec_cast(RVAL2GOBJ(self)); \
50
+ return rb_range_new(pspec->minimum, pspec->maximum, 0); \
51
+ }
52
+
53
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecChar, char, NUM2INT, INT2FIX, G_PARAM_SPEC_CHAR)
54
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecUChar, uchar, NUM2UINT, INT2FIX, G_PARAM_SPEC_UCHAR)
55
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecInt, int, NUM2INT, INT2NUM, G_PARAM_SPEC_INT)
56
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecUInt, uint, NUM2UINT, UINT2NUM, G_PARAM_SPEC_UINT)
57
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecLong, long, NUM2LONG, INT2NUM, G_PARAM_SPEC_LONG)
58
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecULong, ulong, NUM2ULONG, UINT2NUM, G_PARAM_SPEC_ULONG)
59
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecInt64, int64, rbglib_num_to_int64, rbglib_int64_to_num, G_PARAM_SPEC_INT64)
60
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecUInt64, uint64, rbglib_num_to_uint64, rbglib_uint64_to_num, G_PARAM_SPEC_UINT64)
61
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecFloat, float, NUM2DBL, rb_float_new, G_PARAM_SPEC_FLOAT)
62
+ DEF_NUMERIC_PSPEC_METHODS_FUNC(GParamSpecDouble, double, NUM2DBL, rb_float_new, G_PARAM_SPEC_DOUBLE)
63
+
64
+ static VALUE
65
+ float_epsilon(self)
66
+ VALUE self;
67
+ {
68
+ return rb_float_new(G_PARAM_SPEC_FLOAT(RVAL2GOBJ(self))->epsilon);
69
+ }
70
+
71
+ static VALUE
72
+ double_epsilon(self)
73
+ VALUE self;
74
+ {
75
+ return rb_float_new(G_PARAM_SPEC_DOUBLE(RVAL2GOBJ(self))->epsilon);
76
+ }
77
+
78
+
79
+ static VALUE
80
+ boolean_initialize(self, name, nick, blurb, default_value, flags)
81
+ VALUE self, name, nick, blurb, default_value, flags;
82
+ {
83
+ GParamSpec* pspec;
84
+ pspec = g_param_spec_boolean(StringValuePtr(name),
85
+ StringValuePtr(nick),
86
+ StringValuePtr(blurb),
87
+ RVAL2CBOOL(default_value),
88
+ NUM2UINT(flags));
89
+ rbgobj_param_spec_initialize(self, pspec);
90
+ return Qnil;
91
+ }
92
+
93
+ static VALUE
94
+ unichar_initialize(self, name, nick, blurb, default_value, flags)
95
+ VALUE self, name, nick, blurb, default_value, flags;
96
+ {
97
+ GParamSpec* pspec;
98
+ pspec = g_param_spec_unichar(StringValuePtr(name),
99
+ StringValuePtr(nick),
100
+ StringValuePtr(blurb),
101
+ NUM2UINT(default_value),
102
+ NUM2UINT(flags));
103
+ rbgobj_param_spec_initialize(self, pspec);
104
+ return Qnil;
105
+ }
106
+
107
+ static VALUE
108
+ enum_initialize(self, name, nick, blurb, enum_type, default_value, flags)
109
+ VALUE self, name, nick, blurb, enum_type, default_value, flags;
110
+ {
111
+ GParamSpec* pspec;
112
+ GType gtype = rbgobj_gtype_get(enum_type);
113
+
114
+ pspec = g_param_spec_enum(StringValuePtr(name),
115
+ StringValuePtr(nick),
116
+ StringValuePtr(blurb),
117
+ gtype,
118
+ RVAL2GENUM(default_value, gtype),
119
+ NUM2UINT(flags));
120
+ rbgobj_param_spec_initialize(self, pspec);
121
+ return Qnil;
122
+ }
123
+
124
+ static VALUE
125
+ flags_initialize(self, name, nick, blurb, flags_type, default_value, flags)
126
+ VALUE self, name, nick, blurb, flags_type, default_value, flags;
127
+ {
128
+ GParamSpec* pspec;
129
+ GType gtype = rbgobj_gtype_get(flags_type);
130
+
131
+ pspec = g_param_spec_flags(StringValuePtr(name),
132
+ StringValuePtr(nick),
133
+ StringValuePtr(blurb),
134
+ gtype,
135
+ RVAL2GFLAGS(default_value, gtype),
136
+ NUM2UINT(flags));
137
+ rbgobj_param_spec_initialize(self, pspec);
138
+ return Qnil;
139
+ }
140
+
141
+ static VALUE
142
+ string_initialize(self, name, nick, blurb, default_value, flags)
143
+ VALUE self, name, nick, blurb, default_value, flags;
144
+ {
145
+ GParamSpec* pspec;
146
+ pspec = g_param_spec_string(StringValuePtr(name),
147
+ StringValuePtr(nick),
148
+ StringValuePtr(blurb),
149
+ NIL_P(default_value) ? NULL : StringValuePtr(default_value),
150
+ NUM2UINT(flags));
151
+ rbgobj_param_spec_initialize(self, pspec);
152
+ return Qnil;
153
+ }
154
+
155
+ static VALUE
156
+ param_initialize(self, name, nick, blurb, param_type, flags)
157
+ VALUE self, name, nick, blurb, param_type, flags;
158
+ {
159
+ GParamSpec* pspec;
160
+ pspec = g_param_spec_param(StringValuePtr(name),
161
+ StringValuePtr(nick),
162
+ StringValuePtr(blurb),
163
+ rbgobj_gtype_get(param_type),
164
+ NUM2UINT(flags));
165
+ rbgobj_param_spec_initialize(self, pspec);
166
+ return Qnil;
167
+ }
168
+
169
+ static VALUE
170
+ boxed_initialize(self, name, nick, blurb, boxed_type, flags)
171
+ VALUE self, name, nick, blurb, boxed_type, flags;
172
+ {
173
+ GParamSpec* pspec;
174
+ pspec = g_param_spec_boxed(StringValuePtr(name),
175
+ StringValuePtr(nick),
176
+ StringValuePtr(blurb),
177
+ rbgobj_gtype_get(boxed_type),
178
+ NUM2UINT(flags));
179
+ rbgobj_param_spec_initialize(self, pspec);
180
+ return Qnil;
181
+ }
182
+
183
+ static VALUE
184
+ pointer_initialize(self, name, nick, blurb, flags)
185
+ VALUE self, name, nick, blurb, flags;
186
+ {
187
+ GParamSpec* pspec;
188
+ pspec = g_param_spec_pointer(StringValuePtr(name),
189
+ StringValuePtr(nick),
190
+ StringValuePtr(blurb),
191
+ NUM2UINT(flags));
192
+ rbgobj_param_spec_initialize(self, pspec);
193
+ return Qnil;
194
+ }
195
+
196
+ static VALUE
197
+ value_array_initialize(self, name, nick, blurb, element_spec, flags)
198
+ VALUE self, name, nick, blurb, element_spec, flags;
199
+ {
200
+ GParamSpec* pspec;
201
+ pspec = g_param_spec_value_array(StringValuePtr(name),
202
+ StringValuePtr(nick),
203
+ StringValuePtr(blurb),
204
+ RVAL2GOBJ(element_spec),
205
+ NUM2UINT(flags));
206
+ rbgobj_param_spec_initialize(self, pspec);
207
+ return Qnil;
208
+ }
209
+
210
+ static VALUE
211
+ object_initialize(self, name, nick, blurb, object_type, flags)
212
+ VALUE self, name, nick, blurb, object_type, flags;
213
+ {
214
+ GParamSpec* pspec;
215
+ pspec = g_param_spec_object(StringValuePtr(name),
216
+ StringValuePtr(nick),
217
+ StringValuePtr(blurb),
218
+ rbgobj_gtype_get(object_type),
219
+ NUM2UINT(flags));
220
+ rbgobj_param_spec_initialize(self, pspec);
221
+ return Qnil;
222
+ }
223
+
224
+ void
225
+ Init_gobject_gparamspecs()
226
+ {
227
+ VALUE cParamSpec = GTYPE2CLASS(G_TYPE_PARAM);
228
+ VALUE c;
229
+
230
+ #define DEF_NUMERIC_PSPEC_METHODS(c, typename) \
231
+ G_STMT_START {\
232
+ rb_define_method(c, "initialize", typename##_initialize, 7); \
233
+ rb_define_method(c, "minimum", typename##_minimum, 0); \
234
+ rb_define_method(c, "maximum", typename##_maximum, 0); \
235
+ rb_define_method(c, "range", typename##_range, 0); \
236
+ } G_STMT_END
237
+
238
+ #if 0
239
+ rb_define_method(c, "default_value", typename##_default_value, 0); \
240
+ rb_define_alias(c, "default", "default_value"); \
241
+
242
+ #endif
243
+
244
+ c = G_DEF_CLASS(G_TYPE_PARAM_CHAR, "Char", cParamSpec);
245
+ DEF_NUMERIC_PSPEC_METHODS(c, char);
246
+
247
+ c = G_DEF_CLASS(G_TYPE_PARAM_UCHAR, "UChar", cParamSpec);
248
+ DEF_NUMERIC_PSPEC_METHODS(c, uchar);
249
+
250
+ c = G_DEF_CLASS(G_TYPE_PARAM_INT, "Int", cParamSpec);
251
+ DEF_NUMERIC_PSPEC_METHODS(c, int);
252
+
253
+ c = G_DEF_CLASS(G_TYPE_PARAM_UINT, "UInt", cParamSpec);
254
+ DEF_NUMERIC_PSPEC_METHODS(c, uint);
255
+
256
+ c = G_DEF_CLASS(G_TYPE_PARAM_LONG, "Long", cParamSpec);
257
+ DEF_NUMERIC_PSPEC_METHODS(c, long);
258
+
259
+ c = G_DEF_CLASS(G_TYPE_PARAM_ULONG, "ULong", cParamSpec);
260
+ DEF_NUMERIC_PSPEC_METHODS(c, ulong);
261
+
262
+ c = G_DEF_CLASS(G_TYPE_PARAM_INT64, "Int64", cParamSpec);
263
+ DEF_NUMERIC_PSPEC_METHODS(c, int64);
264
+
265
+ c = G_DEF_CLASS(G_TYPE_PARAM_UINT64, "UInt64", cParamSpec);
266
+ DEF_NUMERIC_PSPEC_METHODS(c, uint64);
267
+
268
+ c = G_DEF_CLASS(G_TYPE_PARAM_FLOAT, "Float", cParamSpec);
269
+ DEF_NUMERIC_PSPEC_METHODS(c, float);
270
+ rb_define_method(c, "epsilon", float_epsilon, 0);
271
+
272
+ c = G_DEF_CLASS(G_TYPE_PARAM_DOUBLE, "Double", cParamSpec);
273
+ DEF_NUMERIC_PSPEC_METHODS(c, double);
274
+ rb_define_method(c, "epsilon", double_epsilon, 0);
275
+
276
+ c = G_DEF_CLASS(G_TYPE_PARAM_BOOLEAN, "Boolean", cParamSpec);
277
+ rb_define_method(c, "initialize", boolean_initialize, 5);
278
+
279
+ c = G_DEF_CLASS(G_TYPE_PARAM_UNICHAR, "UniChar", cParamSpec);
280
+ rb_define_method(c, "initialize", unichar_initialize, 5);
281
+
282
+ c = G_DEF_CLASS(G_TYPE_PARAM_ENUM, "Enum", cParamSpec);
283
+ rb_define_method(c, "initialize", enum_initialize, 6);
284
+
285
+ c = G_DEF_CLASS(G_TYPE_PARAM_FLAGS, "Flags", cParamSpec);
286
+ rb_define_method(c, "initialize", flags_initialize, 6);
287
+
288
+ c = G_DEF_CLASS(G_TYPE_PARAM_STRING, "String", cParamSpec);
289
+ rb_define_method(c, "initialize", string_initialize, 5);
290
+
291
+ c = G_DEF_CLASS(G_TYPE_PARAM_PARAM, "Param", cParamSpec);
292
+ rb_define_method(c, "initialize", param_initialize, 5);
293
+
294
+ c = G_DEF_CLASS(G_TYPE_PARAM_BOXED, "Boxed", cParamSpec);
295
+ rb_define_method(c, "initialize", boxed_initialize, 5);
296
+
297
+ c = G_DEF_CLASS(G_TYPE_PARAM_POINTER, "Pointer", cParamSpec);
298
+ rb_define_method(c, "initialize", pointer_initialize, 4);
299
+
300
+ c = G_DEF_CLASS(G_TYPE_PARAM_VALUE_ARRAY, "ValueArray", cParamSpec);
301
+ rb_define_method(c, "initialize", value_array_initialize, 5);
302
+
303
+ c = G_DEF_CLASS(G_TYPE_PARAM_OBJECT, "Object", cParamSpec);
304
+ rb_define_method(c, "initialize", object_initialize, 5);
305
+ }