1package glib
2
3// #include <gio/gio.h>
4// #include <glib.h>
5// #include <glib-object.h>
6// #include "glib.go.h"
7import "C"
8import "unsafe"
9
10// Settings is a representation of GSettings.
11type Settings struct {
12	*Object
13}
14
15// native() returns a pointer to the underlying GSettings.
16func (v *Settings) native() *C.GSettings {
17	if v == nil || v.GObject == nil {
18		return nil
19	}
20	return C.toGSettings(unsafe.Pointer(v.GObject))
21}
22
23func (v *Settings) Native() uintptr {
24	return uintptr(unsafe.Pointer(v.native()))
25}
26
27func marshalSettings(p uintptr) (interface{}, error) {
28	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
29	return wrapSettings(wrapObject(unsafe.Pointer(c))), nil
30}
31
32func wrapSettings(obj *Object) *Settings {
33	return &Settings{obj}
34}
35
36func wrapFullSettings(obj *C.GSettings) *Settings {
37	if obj == nil {
38		return nil
39	}
40	return wrapSettings(wrapObject(unsafe.Pointer(obj)))
41}
42
43// SettingsNew is a wrapper around g_settings_new().
44func SettingsNew(schemaID string) *Settings {
45	cstr := (*C.gchar)(C.CString(schemaID))
46	defer C.free(unsafe.Pointer(cstr))
47
48	return wrapFullSettings(C.g_settings_new(cstr))
49}
50
51// SettingsNewWithPath is a wrapper around g_settings_new_with_path().
52func SettingsNewWithPath(schemaID, path string) *Settings {
53	cstr1 := (*C.gchar)(C.CString(schemaID))
54	defer C.free(unsafe.Pointer(cstr1))
55
56	cstr2 := (*C.gchar)(C.CString(path))
57	defer C.free(unsafe.Pointer(cstr2))
58
59	return wrapFullSettings(C.g_settings_new_with_path(cstr1, cstr2))
60}
61
62// SettingsNewWithBackend is a wrapper around g_settings_new_with_backend().
63func SettingsNewWithBackend(schemaID string, backend *SettingsBackend) *Settings {
64	cstr1 := (*C.gchar)(C.CString(schemaID))
65	defer C.free(unsafe.Pointer(cstr1))
66
67	return wrapFullSettings(C.g_settings_new_with_backend(cstr1, backend.native()))
68}
69
70// SettingsNewWithBackendAndPath is a wrapper around g_settings_new_with_backend_and_path().
71func SettingsNewWithBackendAndPath(schemaID string, backend *SettingsBackend, path string) *Settings {
72	cstr1 := (*C.gchar)(C.CString(schemaID))
73	defer C.free(unsafe.Pointer(cstr1))
74
75	cstr2 := (*C.gchar)(C.CString(path))
76	defer C.free(unsafe.Pointer(cstr2))
77
78	return wrapFullSettings(C.g_settings_new_with_backend_and_path(cstr1, backend.native(), cstr2))
79}
80
81// SettingsNewFull is a wrapper around g_settings_new_full().
82func SettingsNewFull(schema *SettingsSchema, backend *SettingsBackend, path string) *Settings {
83	cstr1 := (*C.gchar)(C.CString(path))
84	defer C.free(unsafe.Pointer(cstr1))
85
86	return wrapFullSettings(C.g_settings_new_full(schema.native(), backend.native(), cstr1))
87}
88
89// SettingsSync is a wrapper around g_settings_sync().
90func SettingsSync() {
91	C.g_settings_sync()
92}
93
94// IsWritable is a wrapper around g_settings_is_writable().
95func (v *Settings) IsWritable(name string) bool {
96	cstr1 := (*C.gchar)(C.CString(name))
97	defer C.free(unsafe.Pointer(cstr1))
98
99	return gobool(C.g_settings_is_writable(v.native(), cstr1))
100}
101
102// Delay is a wrapper around g_settings_delay().
103func (v *Settings) Delay() {
104	C.g_settings_delay(v.native())
105}
106
107// Apply is a wrapper around g_settings_apply().
108func (v *Settings) Apply() {
109	C.g_settings_apply(v.native())
110}
111
112// Revert is a wrapper around g_settings_revert().
113func (v *Settings) Revert() {
114	C.g_settings_revert(v.native())
115}
116
117// GetHasUnapplied is a wrapper around g_settings_get_has_unapplied().
118func (v *Settings) GetHasUnapplied() bool {
119	return gobool(C.g_settings_get_has_unapplied(v.native()))
120}
121
122// GetChild is a wrapper around g_settings_get_child().
123func (v *Settings) GetChild(name string) *Settings {
124	cstr1 := (*C.gchar)(C.CString(name))
125	defer C.free(unsafe.Pointer(cstr1))
126
127	return wrapFullSettings(C.g_settings_get_child(v.native(), cstr1))
128}
129
130// Reset is a wrapper around g_settings_reset().
131func (v *Settings) Reset(name string) {
132	cstr1 := (*C.gchar)(C.CString(name))
133	defer C.free(unsafe.Pointer(cstr1))
134
135	C.g_settings_reset(v.native(), cstr1)
136}
137
138// ListChildren is a wrapper around g_settings_list_children().
139func (v *Settings) ListChildren() []string {
140	return toGoStringArray(C.g_settings_list_children(v.native()))
141}
142
143// GetBoolean is a wrapper around g_settings_get_boolean().
144func (v *Settings) GetBoolean(name string) bool {
145	cstr1 := (*C.gchar)(C.CString(name))
146	defer C.free(unsafe.Pointer(cstr1))
147
148	return gobool(C.g_settings_get_boolean(v.native(), cstr1))
149}
150
151// SetBoolean is a wrapper around g_settings_set_boolean().
152func (v *Settings) SetBoolean(name string, value bool) bool {
153	cstr1 := (*C.gchar)(C.CString(name))
154	defer C.free(unsafe.Pointer(cstr1))
155
156	return gobool(C.g_settings_set_boolean(v.native(), cstr1, gbool(value)))
157}
158
159// GetInt is a wrapper around g_settings_get_int().
160func (v *Settings) GetInt(name string) int {
161	cstr1 := (*C.gchar)(C.CString(name))
162	defer C.free(unsafe.Pointer(cstr1))
163
164	return int(C.g_settings_get_int(v.native(), cstr1))
165}
166
167// SetInt is a wrapper around g_settings_set_int().
168func (v *Settings) SetInt(name string, value int) bool {
169	cstr1 := (*C.gchar)(C.CString(name))
170	defer C.free(unsafe.Pointer(cstr1))
171
172	return gobool(C.g_settings_set_int(v.native(), cstr1, C.gint(value)))
173}
174
175// GetUInt is a wrapper around g_settings_get_uint().
176func (v *Settings) GetUInt(name string) uint {
177	cstr1 := (*C.gchar)(C.CString(name))
178	defer C.free(unsafe.Pointer(cstr1))
179
180	return uint(C.g_settings_get_uint(v.native(), cstr1))
181}
182
183// SetUInt is a wrapper around g_settings_set_uint().
184func (v *Settings) SetUInt(name string, value uint) bool {
185	cstr1 := (*C.gchar)(C.CString(name))
186	defer C.free(unsafe.Pointer(cstr1))
187
188	return gobool(C.g_settings_set_uint(v.native(), cstr1, C.guint(value)))
189}
190
191// GetDouble is a wrapper around g_settings_get_double().
192func (v *Settings) GetDouble(name string) float64 {
193	cstr1 := (*C.gchar)(C.CString(name))
194	defer C.free(unsafe.Pointer(cstr1))
195
196	return float64(C.g_settings_get_double(v.native(), cstr1))
197}
198
199// SetDouble is a wrapper around g_settings_set_double().
200func (v *Settings) SetDouble(name string, value float64) bool {
201	cstr1 := (*C.gchar)(C.CString(name))
202	defer C.free(unsafe.Pointer(cstr1))
203
204	return gobool(C.g_settings_set_double(v.native(), cstr1, C.gdouble(value)))
205}
206
207// GetString is a wrapper around g_settings_get_string().
208func (v *Settings) GetString(name string) string {
209	cstr1 := (*C.gchar)(C.CString(name))
210	defer C.free(unsafe.Pointer(cstr1))
211
212	return C.GoString((*C.char)(C.g_settings_get_string(v.native(), cstr1)))
213}
214
215// SetString is a wrapper around g_settings_set_string().
216func (v *Settings) SetString(name string, value string) bool {
217	cstr1 := (*C.gchar)(C.CString(name))
218	defer C.free(unsafe.Pointer(cstr1))
219
220	cstr2 := (*C.gchar)(C.CString(value))
221	defer C.free(unsafe.Pointer(cstr2))
222
223	return gobool(C.g_settings_set_string(v.native(), cstr1, cstr2))
224}
225
226// GetEnum is a wrapper around g_settings_get_enum().
227func (v *Settings) GetEnum(name string) int {
228	cstr1 := (*C.gchar)(C.CString(name))
229	defer C.free(unsafe.Pointer(cstr1))
230
231	return int(C.g_settings_get_enum(v.native(), cstr1))
232}
233
234// GetStrv is a wrapper around g_settings_get_strv().
235func (v *Settings) GetStrv(name string) []string {
236	cstr1 := (*C.gchar)(C.CString(name))
237	defer C.free(unsafe.Pointer(cstr1))
238	return toGoStringArray(C.g_settings_get_strv(v.native(), cstr1))
239}
240
241// SetStrv is a wrapper around g_settings_set_strv().
242func (v *Settings) SetStrv(name string, values []string) bool {
243	cstr1 := (*C.gchar)(C.CString(name))
244	defer C.free(unsafe.Pointer(cstr1))
245
246	cvalues := make([]*C.gchar, len(values))
247	for i, accel := range values {
248		cvalues[i] = (*C.gchar)(C.CString(accel))
249		defer C.free(unsafe.Pointer(cvalues[i]))
250	}
251	cvalues = append(cvalues, nil)
252
253	return gobool(C.g_settings_set_strv(v.native(), cstr1, &cvalues[0]))
254}
255
256// SetEnum is a wrapper around g_settings_set_enum().
257func (v *Settings) SetEnum(name string, value int) bool {
258	cstr1 := (*C.gchar)(C.CString(name))
259	defer C.free(unsafe.Pointer(cstr1))
260
261	return gobool(C.g_settings_set_enum(v.native(), cstr1, C.gint(value)))
262}
263
264// GetFlags is a wrapper around g_settings_get_flags().
265func (v *Settings) GetFlags(name string) uint {
266	cstr1 := (*C.gchar)(C.CString(name))
267	defer C.free(unsafe.Pointer(cstr1))
268
269	return uint(C.g_settings_get_flags(v.native(), cstr1))
270}
271
272// SetFlags is a wrapper around g_settings_set_flags().
273func (v *Settings) SetFlags(name string, value uint) bool {
274	cstr1 := (*C.gchar)(C.CString(name))
275	defer C.free(unsafe.Pointer(cstr1))
276
277	return gobool(C.g_settings_set_flags(v.native(), cstr1, C.guint(value)))
278}
279
280func (v *Settings) GetValue(name string) *Variant {
281	cstr := (*C.gchar)(C.CString(name))
282	defer C.free(unsafe.Pointer(cstr))
283	return newVariant(C.g_settings_get_value(v.native(), cstr))
284}
285
286// GVariant * 	g_settings_get_value ()
287// gboolean 	g_settings_set_value ()
288// GVariant * 	g_settings_get_user_value ()
289// GVariant * 	g_settings_get_default_value ()
290// const gchar * const * 	g_settings_list_schemas ()
291// const gchar * const * 	g_settings_list_relocatable_schemas ()
292// gchar ** 	g_settings_list_keys ()
293// GVariant * 	g_settings_get_range ()
294// gboolean 	g_settings_range_check ()
295// void 	g_settings_get ()
296// gboolean 	g_settings_set ()
297// gpointer 	g_settings_get_mapped ()
298// void 	g_settings_bind ()
299// void 	g_settings_bind_with_mapping ()
300// void 	g_settings_bind_writable ()
301// void 	g_settings_unbind ()
302// gaction * 	g_settings_create_action ()
303// gchar ** 	g_settings_get_strv ()
304// gboolean 	g_settings_set_strv ()
305