1package gtk
2
3// #include <gtk/gtk.h>
4// #include "gtk.go.h"
5// #include "print.go.h"
6import "C"
7import (
8	"errors"
9	"runtime"
10	"unsafe"
11
12	"github.com/gotk3/gotk3/cairo"
13	"github.com/gotk3/gotk3/glib"
14	"github.com/gotk3/gotk3/internal/callback"
15	"github.com/gotk3/gotk3/pango"
16)
17
18func init() {
19	tm := []glib.TypeMarshaler{
20		// Enums
21		{glib.Type(C.gtk_page_orientation_get_type()), marshalPageOrientation},
22		{glib.Type(C.gtk_print_error_get_type()), marshalPrintError},
23		{glib.Type(C.gtk_print_operation_action_get_type()), marshalPrintOperationAction},
24		{glib.Type(C.gtk_print_operation_result_get_type()), marshalPrintOperationResult},
25		{glib.Type(C.gtk_print_status_get_type()), marshalPrintStatus},
26		{glib.Type(C.gtk_unit_get_type()), marshalUnit},
27
28		// Objects/Interfaces
29		{glib.Type(C.gtk_number_up_layout_get_type()), marshalNumberUpLayout},
30		{glib.Type(C.gtk_page_orientation_get_type()), marshalPageOrientation},
31		{glib.Type(C.gtk_page_set_get_type()), marshalPageSet},
32		{glib.Type(C.gtk_page_setup_get_type()), marshalPageSetup},
33		{glib.Type(C.gtk_print_context_get_type()), marshalPrintContext},
34		{glib.Type(C.gtk_print_duplex_get_type()), marshalPrintDuplex},
35		{glib.Type(C.gtk_print_operation_get_type()), marshalPrintOperation},
36		{glib.Type(C.gtk_print_operation_preview_get_type()), marshalPrintOperationPreview},
37		{glib.Type(C.gtk_print_pages_get_type()), marshalPrintPages},
38		{glib.Type(C.gtk_print_quality_get_type()), marshalPrintQuality},
39		{glib.Type(C.gtk_print_settings_get_type()), marshalPrintSettings},
40
41		// Boxed
42		{glib.Type(C.gtk_paper_size_get_type()), marshalPaperSize},
43	}
44
45	glib.RegisterGValueMarshalers(tm)
46
47	WrapMap["GtkPageSetup"] = wrapPageSetup
48	WrapMap["GtkPrintContext"] = wrapPrintContext
49	WrapMap["GtkPrintOperation"] = wrapPrintOperation
50	WrapMap["GtkPrintOperationPreview"] = wrapPrintOperationPreview
51	WrapMap["GtkPrintSettings"] = wrapPrintSettings
52}
53
54/*
55 * Constants
56 */
57
58// NumberUpLayout is a representation of GTK's GtkNumberUpLayout.
59type NumberUpLayout int
60
61const (
62	NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM
63	NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP
64	NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM
65	NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP
66	NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT
67	NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT
68	NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT
69	NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT NumberUpLayout = C.GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT
70)
71
72func marshalNumberUpLayout(p uintptr) (interface{}, error) {
73	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
74	return NumberUpLayout(c), nil
75}
76
77// PageOrientation is a representation of GTK's GtkPageOrientation.
78type PageOrientation int
79
80const (
81	PAGE_ORIENTATION_PORTRAIT          PageOrientation = C.GTK_PAGE_ORIENTATION_PORTRAIT
82	PAGE_ORIENTATION_LANDSCAPE         PageOrientation = C.GTK_PAGE_ORIENTATION_LANDSCAPE
83	PAGE_ORIENTATION_REVERSE_PORTRAIT  PageOrientation = C.GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT
84	PAGE_ORIENTATION_REVERSE_LANDSCAPE PageOrientation = C.GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE
85)
86
87func marshalPageOrientation(p uintptr) (interface{}, error) {
88	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
89	return PageOrientation(c), nil
90}
91
92// PrintDuplex is a representation of GTK's GtkPrintDuplex.
93type PrintDuplex int
94
95const (
96	PRINT_DUPLEX_SIMPLEX    PrintDuplex = C.GTK_PRINT_DUPLEX_SIMPLEX
97	PRINT_DUPLEX_HORIZONTAL PrintDuplex = C.GTK_PRINT_DUPLEX_HORIZONTAL
98	PRINT_DUPLEX_VERTICAL   PrintDuplex = C.GTK_PRINT_DUPLEX_VERTICAL
99)
100
101func marshalPrintDuplex(p uintptr) (interface{}, error) {
102	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
103	return PrintDuplex(c), nil
104}
105
106// PrintPages is a representation of GTK's GtkPrintPages.
107type PrintPages int
108
109const (
110	PRINT_PAGES_ALL       PrintPages = C.GTK_PRINT_PAGES_ALL
111	PRINT_PAGES_CURRENT   PrintPages = C.GTK_PRINT_PAGES_CURRENT
112	PRINT_PAGES_RANGES    PrintPages = C.GTK_PRINT_PAGES_RANGES
113	PRINT_PAGES_SELECTION PrintPages = C.GTK_PRINT_PAGES_SELECTION
114)
115
116func marshalPrintPages(p uintptr) (interface{}, error) {
117	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
118	return PrintPages(c), nil
119}
120
121// PageSet is a representation of GTK's GtkPageSet.
122type PageSet int
123
124const (
125	PAGE_SET_ALL  PageSet = C.GTK_PAGE_SET_ALL
126	PAGE_SET_EVEN PageSet = C.GTK_PAGE_SET_EVEN
127	PAGE_SET_ODD  PageSet = C.GTK_PAGE_SET_ODD
128)
129
130func marshalPageSet(p uintptr) (interface{}, error) {
131	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
132	return PageSet(c), nil
133}
134
135// PrintOperationAction is a representation of GTK's GtkPrintError.
136type PrintError int
137
138const (
139	PRINT_ERROR_GENERAL        PrintError = C.GTK_PRINT_ERROR_GENERAL
140	PRINT_ERROR_INTERNAL_ERROR PrintError = C.GTK_PRINT_ERROR_INTERNAL_ERROR
141	PRINT_ERROR_NOMEM          PrintError = C.GTK_PRINT_ERROR_NOMEM
142	PRINT_ERROR_INVALID_FILE   PrintError = C.GTK_PRINT_ERROR_INVALID_FILE
143)
144
145func marshalPrintError(p uintptr) (interface{}, error) {
146	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
147	return PrintError(c), nil
148}
149
150// PrintOperationAction is a representation of GTK's GtkPrintOperationAction.
151type PrintOperationAction int
152
153const (
154	PRINT_OPERATION_ACTION_PRINT_DIALOG PrintOperationAction = C.GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
155	PRINT_OPERATION_ACTION_PRINT        PrintOperationAction = C.GTK_PRINT_OPERATION_ACTION_PRINT
156	PRINT_OPERATION_ACTION_PREVIEW      PrintOperationAction = C.GTK_PRINT_OPERATION_ACTION_PREVIEW
157	PRINT_OPERATION_ACTION_EXPORT       PrintOperationAction = C.GTK_PRINT_OPERATION_ACTION_EXPORT
158)
159
160func marshalPrintOperationAction(p uintptr) (interface{}, error) {
161	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
162	return PrintOperationAction(c), nil
163}
164
165// PrintOperationResult is a representation of GTK's GtkPrintOperationResult.
166type PrintOperationResult int
167
168const (
169	PRINT_OPERATION_RESULT_ERROR       PrintOperationResult = C.GTK_PRINT_OPERATION_RESULT_ERROR
170	PRINT_OPERATION_RESULT_APPLY       PrintOperationResult = C.GTK_PRINT_OPERATION_RESULT_APPLY
171	PRINT_OPERATION_RESULT_CANCEL      PrintOperationResult = C.GTK_PRINT_OPERATION_RESULT_CANCEL
172	PRINT_OPERATION_RESULT_IN_PROGRESS PrintOperationResult = C.GTK_PRINT_OPERATION_RESULT_IN_PROGRESS
173)
174
175func marshalPrintOperationResult(p uintptr) (interface{}, error) {
176	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
177	return PrintOperationResult(c), nil
178}
179
180// PrintStatus is a representation of GTK's GtkPrintStatus.
181type PrintStatus int
182
183const (
184	PRINT_STATUS_INITIAL          PrintStatus = C.GTK_PRINT_STATUS_INITIAL
185	PRINT_STATUS_PREPARING        PrintStatus = C.GTK_PRINT_STATUS_PREPARING
186	PRINT_STATUS_GENERATING_DATA  PrintStatus = C.GTK_PRINT_STATUS_GENERATING_DATA
187	PRINT_STATUS_SENDING_DATA     PrintStatus = C.GTK_PRINT_STATUS_SENDING_DATA
188	PRINT_STATUS_PENDING          PrintStatus = C.GTK_PRINT_STATUS_PENDING
189	PRINT_STATUS_PENDING_ISSUE    PrintStatus = C.GTK_PRINT_STATUS_PENDING_ISSUE
190	PRINT_STATUS_PRINTING         PrintStatus = C.GTK_PRINT_STATUS_PRINTING
191	PRINT_STATUS_FINISHED         PrintStatus = C.GTK_PRINT_STATUS_FINISHED
192	PRINT_STATUS_FINISHED_ABORTED PrintStatus = C.GTK_PRINT_STATUS_FINISHED_ABORTED
193)
194
195func marshalPrintStatus(p uintptr) (interface{}, error) {
196	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
197	return PrintStatus(c), nil
198}
199
200// PrintQuality is a representation of GTK's GtkPrintQuality.
201type PrintQuality int
202
203const (
204	PRINT_QUALITY_LOW    PrintQuality = C.GTK_PRINT_QUALITY_LOW
205	PRINT_QUALITY_NORMAL PrintQuality = C.GTK_PRINT_QUALITY_NORMAL
206	PRINT_QUALITY_HIGH   PrintQuality = C.GTK_PRINT_QUALITY_HIGH
207	PRINT_QUALITY_DRAFT  PrintQuality = C.GTK_PRINT_QUALITY_DRAFT
208)
209
210func marshalPrintQuality(p uintptr) (interface{}, error) {
211	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
212	return PrintQuality(c), nil
213}
214
215// Unit is a representation of GTK's GtkUnit.
216type Unit int
217
218const (
219	GTK_UNIT_NONE   Unit = C.GTK_UNIT_NONE
220	GTK_UNIT_POINTS Unit = C.GTK_UNIT_POINTS
221	GTK_UNIT_INCH   Unit = C.GTK_UNIT_INCH
222	GTK_UNIT_MM     Unit = C.GTK_UNIT_MM
223)
224
225func marshalUnit(p uintptr) (interface{}, error) {
226	c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
227	return Unit(c), nil
228}
229
230/*
231 * GtkPageSetup
232 */
233type PageSetup struct {
234	*glib.Object
235}
236
237func (ps *PageSetup) native() *C.GtkPageSetup {
238	if ps == nil || ps.GObject == nil {
239		return nil
240	}
241	p := unsafe.Pointer(ps.GObject)
242	return C.toGtkPageSetup(p)
243}
244
245func marshalPageSetup(p uintptr) (interface{}, error) {
246	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
247	obj := glib.Take(unsafe.Pointer(c))
248	return wrapPageSetup(obj), nil
249}
250
251func wrapPageSetup(obj *glib.Object) *PageSetup {
252	if obj == nil {
253		return nil
254	}
255
256	return &PageSetup{obj}
257}
258
259// PageSetupNew() is a wrapper around gtk_page_setup_new().
260func PageSetupNew() (*PageSetup, error) {
261	c := C.gtk_page_setup_new()
262	if c == nil {
263		return nil, nilPtrErr
264	}
265	obj := glib.Take(unsafe.Pointer(c))
266	return wrapPageSetup(obj), nil
267}
268
269// Copy() is a wrapper around gtk_page_setup_copy().
270func (ps *PageSetup) Copy() (*PageSetup, error) {
271	c := C.gtk_page_setup_copy(ps.native())
272	if c == nil {
273		return nil, nilPtrErr
274	}
275	obj := glib.Take(unsafe.Pointer(c))
276	return wrapPageSetup(obj), nil
277}
278
279// GetOrientation() is a wrapper around gtk_page_setup_get_orientation().
280func (ps *PageSetup) GetOrientation() PageOrientation {
281	c := C.gtk_page_setup_get_orientation(ps.native())
282	return PageOrientation(c)
283}
284
285// SetOrientation() is a wrapper around gtk_page_setup_set_orientation().
286func (ps *PageSetup) SetOrientation(orientation PageOrientation) {
287	C.gtk_page_setup_set_orientation(ps.native(), C.GtkPageOrientation(orientation))
288}
289
290// GetPaperSize() is a wrapper around gtk_page_setup_get_paper_size().
291func (ps *PageSetup) GetPaperSize() *PaperSize {
292	c := C.gtk_page_setup_get_paper_size(ps.native())
293	p := &PaperSize{c}
294	runtime.SetFinalizer(p, (*PaperSize).free)
295	return p
296}
297
298// SetPaperSize() is a wrapper around gtk_page_setup_set_paper_size().
299func (ps *PageSetup) SetPaperSize(size *PaperSize) {
300	C.gtk_page_setup_set_paper_size(ps.native(), size.native())
301}
302
303// GetTopMargin() is a wrapper around gtk_page_setup_get_top_margin().
304func (ps *PageSetup) GetTopMargin(unit Unit) float64 {
305	c := C.gtk_page_setup_get_top_margin(ps.native(), C.GtkUnit(unit))
306	return float64(c)
307}
308
309// SetTopMargin() is a wrapper around gtk_page_setup_set_top_margin().
310func (ps *PageSetup) SetTopMargin(margin float64, unit Unit) {
311	C.gtk_page_setup_set_top_margin(ps.native(), C.gdouble(margin), C.GtkUnit(unit))
312}
313
314// GetBottomMargin() is a wrapper around gtk_page_setup_get_bottom_margin().
315func (ps *PageSetup) GetBottomMargin(unit Unit) float64 {
316	c := C.gtk_page_setup_get_bottom_margin(ps.native(), C.GtkUnit(unit))
317	return float64(c)
318}
319
320// SetBottomMargin() is a wrapper around gtk_page_setup_set_bottom_margin().
321func (ps *PageSetup) SetBottomMargin(margin float64, unit Unit) {
322	C.gtk_page_setup_set_bottom_margin(ps.native(), C.gdouble(margin), C.GtkUnit(unit))
323}
324
325// GetLeftMargin() is a wrapper around gtk_page_setup_get_left_margin().
326func (ps *PageSetup) GetLeftMargin(unit Unit) float64 {
327	c := C.gtk_page_setup_get_left_margin(ps.native(), C.GtkUnit(unit))
328	return float64(c)
329}
330
331// SetLeftMargin() is a wrapper around gtk_page_setup_set_left_margin().
332func (ps *PageSetup) SetLeftMargin(margin float64, unit Unit) {
333	C.gtk_page_setup_set_left_margin(ps.native(), C.gdouble(margin), C.GtkUnit(unit))
334}
335
336// GetRightMargin() is a wrapper around gtk_page_setup_get_right_margin().
337func (ps *PageSetup) GetRightMargin(unit Unit) float64 {
338	c := C.gtk_page_setup_get_right_margin(ps.native(), C.GtkUnit(unit))
339	return float64(c)
340}
341
342// SetRightMargin() is a wrapper around gtk_page_setup_set_right_margin().
343func (ps *PageSetup) SetRightMargin(margin float64, unit Unit) {
344	C.gtk_page_setup_set_right_margin(ps.native(), C.gdouble(margin), C.GtkUnit(unit))
345}
346
347// SetPaperSizeAndDefaultMargins() is a wrapper around gtk_page_setup_set_paper_size_and_default_margins().
348func (ps *PageSetup) SetPaperSizeAndDefaultMargins(size *PaperSize) {
349	C.gtk_page_setup_set_paper_size_and_default_margins(ps.native(), size.native())
350}
351
352// GetPaperWidth() is a wrapper around gtk_page_setup_get_paper_width().
353func (ps *PageSetup) GetPaperWidth(unit Unit) float64 {
354	c := C.gtk_page_setup_get_paper_width(ps.native(), C.GtkUnit(unit))
355	return float64(c)
356}
357
358// GetPaperHeight() is a wrapper around gtk_page_setup_get_paper_height().
359func (ps *PageSetup) GetPaperHeight(unit Unit) float64 {
360	c := C.gtk_page_setup_get_paper_height(ps.native(), C.GtkUnit(unit))
361	return float64(c)
362}
363
364// GetPageWidth() is a wrapper around gtk_page_setup_get_page_width().
365func (ps *PageSetup) GetPageWidth(unit Unit) float64 {
366	c := C.gtk_page_setup_get_page_width(ps.native(), C.GtkUnit(unit))
367	return float64(c)
368}
369
370// GetPageHeight() is a wrapper around gtk_page_setup_get_page_height().
371func (ps *PageSetup) GetPageHeight(unit Unit) float64 {
372	c := C.gtk_page_setup_get_page_height(ps.native(), C.GtkUnit(unit))
373	return float64(c)
374}
375
376// PageSetupNewFromFile() is a wrapper around gtk_page_setup_new_from_file().
377func PageSetupNewFromFile(fileName string) (*PageSetup, error) {
378	cstr := C.CString(fileName)
379	defer C.free(unsafe.Pointer(cstr))
380	var err *C.GError = nil
381	c := C.gtk_page_setup_new_from_file((*C.gchar)(cstr), &err)
382	if c == nil {
383		defer C.g_error_free(err)
384		return nil, errors.New(C.GoString((*C.char)(err.message)))
385	}
386	obj := glib.Take(unsafe.Pointer(c))
387	return &PageSetup{obj}, nil
388
389}
390
391// PageSetupNewFromKeyFile() is a wrapper around gtk_page_setup_new_from_key_file().
392
393// PageSetupLoadFile() is a wrapper around gtk_page_setup_load_file().
394func (ps *PageSetup) PageSetupLoadFile(name string) error {
395	cstr := C.CString(name)
396	defer C.free(unsafe.Pointer(cstr))
397	var err *C.GError = nil
398	res := C.gtk_page_setup_load_file(ps.native(), cstr, &err)
399	if !gobool(res) {
400		defer C.g_error_free(err)
401		return errors.New(C.GoString((*C.char)(err.message)))
402	}
403	return nil
404}
405
406// PageSetupLoadKeyFile() is a wrapper around gtk_page_setup_load_key_file().
407
408// PageSetupToFile() is a wrapper around gtk_page_setup_to_file().
409func (ps *PageSetup) PageSetupToFile(name string) error {
410	cstr := C.CString(name)
411	defer C.free(unsafe.Pointer(cstr))
412	var err *C.GError = nil
413	res := C.gtk_page_setup_to_file(ps.native(), cstr, &err)
414	if !gobool(res) {
415		defer C.g_error_free(err)
416		return errors.New(C.GoString((*C.char)(err.message)))
417	}
418	return nil
419}
420
421// PageSetupToKeyFile() is a wrapper around gtk_page_setup_to_key_file().
422
423/*
424 * GtkPaperSize
425 */
426
427// PaperSize is a representation of GTK's GtkPaperSize
428type PaperSize struct {
429	GtkPaperSize *C.GtkPaperSize
430}
431
432// native returns a pointer to the underlying GtkPaperSize.
433func (ps *PaperSize) native() *C.GtkPaperSize {
434	if ps == nil {
435		return nil
436	}
437	return ps.GtkPaperSize
438}
439
440func marshalPaperSize(p uintptr) (interface{}, error) {
441	c := C.g_value_get_boxed((*C.GValue)(unsafe.Pointer(p)))
442	return &PaperSize{(*C.GtkPaperSize)(unsafe.Pointer(c))}, nil
443}
444
445const (
446	UNIT_PIXEL           int    = C.GTK_UNIT_PIXEL
447	PAPER_NAME_A3        string = C.GTK_PAPER_NAME_A3
448	PAPER_NAME_A4        string = C.GTK_PAPER_NAME_A4
449	PAPER_NAME_A5        string = C.GTK_PAPER_NAME_A5
450	PAPER_NAME_B5        string = C.GTK_PAPER_NAME_B5
451	PAPER_NAME_LETTER    string = C.GTK_PAPER_NAME_LETTER
452	PAPER_NAME_EXECUTIVE string = C.GTK_PAPER_NAME_EXECUTIVE
453	PAPER_NAME_LEGAL     string = C.GTK_PAPER_NAME_LEGAL
454)
455
456// PaperSizeNew() is a wrapper around gtk_paper_size_new().
457func PaperSizeNew(name string) (*PaperSize, error) {
458	cstr := C.CString(name)
459	defer C.free(unsafe.Pointer(cstr))
460	var gName *C.gchar
461
462	if name == "" {
463		gName = nil
464	} else {
465		gName = (*C.gchar)(cstr)
466	}
467
468	c := C.gtk_paper_size_new(gName)
469	if c == nil {
470		return nil, nilPtrErr
471	}
472
473	t := &PaperSize{c}
474	runtime.SetFinalizer(t, (*PaperSize).free)
475	return t, nil
476}
477
478// PaperSizeNewFromPPD() is a wrapper around gtk_paper_size_new_from_ppd().
479func PaperSizeNewFromPPD(name, displayName string, width, height float64) (*PaperSize, error) {
480	cName := C.CString(name)
481	defer C.free(unsafe.Pointer(cName))
482	cDisplayName := C.CString(displayName)
483	defer C.free(unsafe.Pointer(cDisplayName))
484	c := C.gtk_paper_size_new_from_ppd((*C.gchar)(cName), (*C.gchar)(cDisplayName),
485		C.gdouble(width), C.gdouble(height))
486	if c == nil {
487		return nil, nilPtrErr
488	}
489	t := &PaperSize{c}
490	runtime.SetFinalizer(t, (*PaperSize).free)
491	return t, nil
492}
493
494// PaperSizeNewCustom() is a wrapper around gtk_paper_size_new_custom().
495func PaperSizeNewCustom(name, displayName string, width, height float64, unit Unit) (*PaperSize, error) {
496	cName := C.CString(name)
497	defer C.free(unsafe.Pointer(cName))
498	cDisplayName := C.CString(displayName)
499	defer C.free(unsafe.Pointer(cDisplayName))
500	c := C.gtk_paper_size_new_custom((*C.gchar)(cName), (*C.gchar)(cDisplayName),
501		C.gdouble(width), C.gdouble(height), C.GtkUnit(unit))
502	if c == nil {
503		return nil, nilPtrErr
504	}
505	t := &PaperSize{c}
506	runtime.SetFinalizer(t, (*PaperSize).free)
507	return t, nil
508}
509
510// Copy() is a wrapper around gtk_paper_size_copy().
511func (ps *PaperSize) Copy() (*PaperSize, error) {
512	c := C.gtk_paper_size_copy(ps.native())
513	if c == nil {
514		return nil, nilPtrErr
515	}
516	t := &PaperSize{c}
517	runtime.SetFinalizer(t, (*PaperSize).free)
518	return t, nil
519}
520
521// free() is a wrapper around gtk_paper_size_free().
522func (ps *PaperSize) free() {
523	C.gtk_paper_size_free(ps.native())
524}
525
526// IsEqual() is a wrapper around gtk_paper_size_is_equal().
527func (ps *PaperSize) IsEqual(other *PaperSize) bool {
528	c := C.gtk_paper_size_is_equal(ps.native(), other.native())
529	return gobool(c)
530}
531
532// PaperSizeGetPaperSizes() is a wrapper around gtk_paper_size_get_paper_sizes().
533func PaperSizeGetPaperSizes(includeCustom bool) *glib.List {
534	clist := C.gtk_paper_size_get_paper_sizes(gbool(includeCustom))
535	if clist == nil {
536		return nil
537	}
538
539	glist := glib.WrapList(uintptr(unsafe.Pointer(clist)))
540	glist.DataWrapper(func(ptr unsafe.Pointer) interface{} {
541		return &PaperSize{(*C.GtkPaperSize)(ptr)}
542	})
543
544	runtime.SetFinalizer(glist, func(glist *glib.List) {
545		glist.FreeFull(func(item interface{}) {
546			ps := item.(*PaperSize)
547			C.gtk_paper_size_free(ps.GtkPaperSize)
548		})
549	})
550
551	return glist
552}
553
554// GetName() is a wrapper around gtk_paper_size_get_name().
555func (ps *PaperSize) GetName() string {
556	c := C.gtk_paper_size_get_name(ps.native())
557	return C.GoString((*C.char)(c))
558}
559
560// GetDisplayName() is a wrapper around gtk_paper_size_get_display_name().
561func (ps *PaperSize) GetDisplayName() string {
562	c := C.gtk_paper_size_get_display_name(ps.native())
563	return C.GoString((*C.char)(c))
564}
565
566// GetPPDName() is a wrapper around gtk_paper_size_get_ppd_name().
567func (ps *PaperSize) GetPPDName() (string, error) {
568	c := C.gtk_paper_size_get_ppd_name(ps.native())
569	if c == nil {
570		return "", nilPtrErr
571	}
572	return C.GoString((*C.char)(c)), nil
573}
574
575// GetWidth() is a wrapper around gtk_paper_size_get_width().
576func (ps *PaperSize) GetWidth(unit Unit) float64 {
577	c := C.gtk_paper_size_get_width(ps.native(), C.GtkUnit(unit))
578	return float64(c)
579}
580
581// GetHeight() is a wrapper around gtk_paper_size_get_height().
582func (ps *PaperSize) GetHeight(unit Unit) float64 {
583	c := C.gtk_paper_size_get_width(ps.native(), C.GtkUnit(unit))
584	return float64(c)
585}
586
587// IsCustom() is a wrapper around gtk_paper_size_is_custom().
588func (ps *PaperSize) IsCustom() bool {
589	c := C.gtk_paper_size_is_custom(ps.native())
590	return gobool(c)
591}
592
593// SetSize() is a wrapper around gtk_paper_size_set_size().
594func (ps *PaperSize) SetSize(width, height float64, unit Unit) {
595	C.gtk_paper_size_set_size(ps.native(), C.gdouble(width), C.gdouble(height), C.GtkUnit(unit))
596}
597
598// GetDefaultTopMargin() is a wrapper around gtk_paper_size_get_default_top_margin().
599func (ps *PaperSize) GetDefaultTopMargin(unit Unit) float64 {
600	c := C.gtk_paper_size_get_default_top_margin(ps.native(), C.GtkUnit(unit))
601	return float64(c)
602}
603
604// GetDefaultBottomMargin() is a wrapper around gtk_paper_size_get_default_bottom_margin().
605func (ps *PaperSize) GetDefaultBottomMargin(unit Unit) float64 {
606	c := C.gtk_paper_size_get_default_bottom_margin(ps.native(), C.GtkUnit(unit))
607	return float64(c)
608}
609
610// GetDefaultLeftMargin() is a wrapper around gtk_paper_size_get_default_left_margin().
611func (ps *PaperSize) GetDefaultLeftMargin(unit Unit) float64 {
612	c := C.gtk_paper_size_get_default_left_margin(ps.native(), C.GtkUnit(unit))
613	return float64(c)
614}
615
616// GetDefaultRightMargin() is a wrapper around gtk_paper_size_get_default_right_margin().
617func (ps *PaperSize) GetDefaultRightMargin(unit Unit) float64 {
618	c := C.gtk_paper_size_get_default_right_margin(ps.native(), C.GtkUnit(unit))
619	return float64(c)
620}
621
622// PaperSizeGetDefault() is a wrapper around gtk_paper_size_get_default().
623func PaperSizeGetDefaultRightMargin(unit Unit) string {
624	c := C.gtk_paper_size_get_default()
625	return C.GoString((*C.char)(c))
626}
627
628// PaperSizeNewFromKeyFile() is a wrapper around gtk_paper_size_new_from_key_file().
629// PaperSizeToKeyFile() is a wrapper around gtk_paper_size_to_key_file().
630
631/*
632 * GtkPrintContext
633 */
634
635// PrintContext is a representation of GTK's GtkPrintContext.
636type PrintContext struct {
637	*glib.Object
638}
639
640// native() returns a pointer to the underlying GtkPrintContext.
641func (pc *PrintContext) native() *C.GtkPrintContext {
642	if pc == nil || pc.GObject == nil {
643		return nil
644	}
645	p := unsafe.Pointer(pc.GObject)
646	return C.toGtkPrintContext(p)
647}
648
649func marshalPrintContext(p uintptr) (interface{}, error) {
650	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
651	obj := glib.Take(unsafe.Pointer(c))
652	return wrapPrintContext(obj), nil
653}
654
655func wrapPrintContext(obj *glib.Object) *PrintContext {
656	if obj == nil {
657		return nil
658	}
659
660	return &PrintContext{obj}
661}
662
663// GetCairoContext() is a wrapper around gtk_print_context_get_cairo_context().
664func (pc *PrintContext) GetCairoContext() *cairo.Context {
665	c := C.gtk_print_context_get_cairo_context(pc.native())
666	return cairo.WrapContext(uintptr(unsafe.Pointer(c)))
667}
668
669// SetCairoContext() is a wrapper around gtk_print_context_set_cairo_context().
670func (pc *PrintContext) SetCairoContext(cr *cairo.Context, dpiX, dpiY float64) {
671	C.gtk_print_context_set_cairo_context(pc.native(),
672		(*C.cairo_t)(unsafe.Pointer(cr.Native())),
673		C.double(dpiX), C.double(dpiY))
674}
675
676// GetPageSetup() is a wrapper around gtk_print_context_get_page_setup().
677func (pc *PrintContext) GetPageSetup() *PageSetup {
678	c := C.gtk_print_context_get_page_setup(pc.native())
679	obj := glib.Take(unsafe.Pointer(c))
680	return wrapPageSetup(obj)
681}
682
683// GetWidth() is a wrapper around gtk_print_context_get_width().
684func (pc *PrintContext) GetWidth() float64 {
685	c := C.gtk_print_context_get_width(pc.native())
686	return float64(c)
687}
688
689// GetHeight() is a wrapper around gtk_print_context_get_height().
690func (pc *PrintContext) GetHeight() float64 {
691	c := C.gtk_print_context_get_height(pc.native())
692	return float64(c)
693}
694
695// GetDpiX() is a wrapper around gtk_print_context_get_dpi_x().
696func (pc *PrintContext) GetDpiX() float64 {
697	c := C.gtk_print_context_get_dpi_x(pc.native())
698	return float64(c)
699}
700
701// GetDpiY() is a wrapper around gtk_print_context_get_dpi_y().
702func (pc *PrintContext) GetDpiY() float64 {
703	c := C.gtk_print_context_get_dpi_y(pc.native())
704	return float64(c)
705}
706
707// GetPangoFontMap() is a wrapper around gtk_print_context_get_pango_fontmap().
708func (pc *PrintContext) GetPangoFontMap() *pango.FontMap {
709	c := C.gtk_print_context_get_pango_fontmap(pc.native())
710	return pango.WrapFontMap(uintptr(unsafe.Pointer(c)))
711}
712
713// CreatePangoContext() is a wrapper around gtk_print_context_create_pango_context().
714func (pc *PrintContext) CreatePangoContext() *pango.Context {
715	c := C.gtk_print_context_create_pango_context(pc.native())
716	return pango.WrapContext(uintptr(unsafe.Pointer(c)))
717}
718
719// CreatePangoLayout() is a wrapper around gtk_print_context_create_pango_layout().
720func (pc *PrintContext) CreatePangoLayout() *pango.Layout {
721	c := C.gtk_print_context_create_pango_layout(pc.native())
722	return pango.WrapLayout(uintptr(unsafe.Pointer(c)))
723}
724
725// GetHardMargins() is a wrapper around gtk_print_context_get_hard_margins().
726func (pc *PrintContext) GetHardMargins() (float64, float64, float64, float64, error) {
727	var top, bottom, left, right C.gdouble
728	c := C.gtk_print_context_get_hard_margins(pc.native(), &top, &bottom, &left, &right)
729	if gobool(c) == false {
730		return 0.0, 0.0, 0.0, 0.0, errors.New("unable to retrieve hard margins")
731	}
732	return float64(top), float64(bottom), float64(left), float64(right), nil
733}
734
735/*
736 * GtkPrintOperation
737 */
738type PrintOperation struct {
739	*glib.Object
740
741	// Interfaces
742	PrintOperationPreview
743}
744
745func (po *PrintOperation) native() *C.GtkPrintOperation {
746	if po == nil || po.GObject == nil {
747		return nil
748	}
749	p := unsafe.Pointer(po.GObject)
750	return C.toGtkPrintOperation(p)
751}
752
753func (v *PrintOperation) toPrintOperationPreview() *C.GtkPrintOperationPreview {
754	if v == nil {
755		return nil
756	}
757	return C.toGtkPrintOperationPreview(unsafe.Pointer(v.GObject))
758}
759
760func marshalPrintOperation(p uintptr) (interface{}, error) {
761	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
762	obj := glib.Take(unsafe.Pointer(c))
763	return wrapPrintOperation(obj), nil
764}
765
766func wrapPrintOperation(obj *glib.Object) *PrintOperation {
767	if obj == nil {
768		return nil
769	}
770
771	pop := wrapPrintOperationPreview(obj)
772	return &PrintOperation{obj, *pop}
773}
774
775// PrintOperationNew() is a wrapper around gtk_print_operation_new().
776func PrintOperationNew() (*PrintOperation, error) {
777	c := C.gtk_print_operation_new()
778	if c == nil {
779		return nil, nilPtrErr
780	}
781	obj := glib.Take(unsafe.Pointer(c))
782	return wrapPrintOperation(obj), nil
783}
784
785// SetAllowAsync() is a wrapper around gtk_print_operation_set_allow_async().
786func (po *PrintOperation) PrintOperationSetAllowAsync(allowSync bool) {
787	C.gtk_print_operation_set_allow_async(po.native(), gbool(allowSync))
788}
789
790// GetError() is a wrapper around gtk_print_operation_get_error().
791func (po *PrintOperation) PrintOperationGetError() error {
792	var err *C.GError = nil
793	C.gtk_print_operation_get_error(po.native(), &err)
794	defer C.g_error_free(err)
795	return errors.New(C.GoString((*C.char)(err.message)))
796}
797
798// SetDefaultPageSetup() is a wrapper around gtk_print_operation_set_default_page_setup().
799func (po *PrintOperation) SetDefaultPageSetup(ps *PageSetup) {
800	C.gtk_print_operation_set_default_page_setup(po.native(), ps.native())
801}
802
803// GetDefaultPageSetup() is a wrapper around gtk_print_operation_get_default_page_setup().
804func (po *PrintOperation) GetDefaultPageSetup() (*PageSetup, error) {
805	c := C.gtk_print_operation_get_default_page_setup(po.native())
806	if c == nil {
807		return nil, nilPtrErr
808	}
809	obj := glib.Take(unsafe.Pointer(c))
810	return wrapPageSetup(obj), nil
811}
812
813// SetPrintSettings() is a wrapper around gtk_print_operation_set_print_settings().
814func (po *PrintOperation) SetPrintSettings(ps *PrintSettings) {
815	C.gtk_print_operation_set_print_settings(po.native(), ps.native())
816}
817
818// GetPrintSettings() is a wrapper around gtk_print_operation_get_print_settings().
819func (po *PrintOperation) GetPrintSettings(ps *PageSetup) (*PrintSettings, error) {
820	c := C.gtk_print_operation_get_print_settings(po.native())
821	if c == nil {
822		return nil, nilPtrErr
823	}
824	obj := glib.Take(unsafe.Pointer(c))
825	return wrapPrintSettings(obj), nil
826}
827
828// SetJobName() is a wrapper around gtk_print_operation_set_job_name().
829func (po *PrintOperation) SetJobName(name string) {
830	cstr := C.CString(name)
831	defer C.free(unsafe.Pointer(cstr))
832	C.gtk_print_operation_set_job_name(po.native(), (*C.gchar)(cstr))
833}
834
835// SetNPages() is a wrapper around gtk_print_operation_set_n_pages().
836func (po *PrintOperation) SetNPages(pages int) {
837	C.gtk_print_operation_set_n_pages(po.native(), C.gint(pages))
838}
839
840// GetNPagesToPrint() is a wrapper around gtk_print_operation_get_n_pages_to_print().
841func (po *PrintOperation) GetNPagesToPrint() int {
842	c := C.gtk_print_operation_get_n_pages_to_print(po.native())
843	return int(c)
844}
845
846// SetCurrentPage() is a wrapper around gtk_print_operation_set_current_page().
847func (po *PrintOperation) SetCurrentPage(page int) {
848	C.gtk_print_operation_set_current_page(po.native(), C.gint(page))
849}
850
851// SetUseFullPage() is a wrapper around gtk_print_operation_set_use_full_page().
852func (po *PrintOperation) SetUseFullPage(full bool) {
853	C.gtk_print_operation_set_use_full_page(po.native(), gbool(full))
854}
855
856// SetUnit() is a wrapper around gtk_print_operation_set_unit().
857func (po *PrintOperation) SetUnit(unit Unit) {
858	C.gtk_print_operation_set_unit(po.native(), C.GtkUnit(unit))
859}
860
861// SetExportFilename() is a wrapper around gtk_print_operation_set_export_filename().
862func (po *PrintOperation) SetExportFilename(name string) {
863	cstr := C.CString(name)
864	defer C.free(unsafe.Pointer(cstr))
865	C.gtk_print_operation_set_export_filename(po.native(), (*C.gchar)(cstr))
866}
867
868// SetShowProgress() is a wrapper around gtk_print_operation_set_show_progress().
869func (po *PrintOperation) SetShowProgress(show bool) {
870	C.gtk_print_operation_set_show_progress(po.native(), gbool(show))
871}
872
873// SetTrackPrintStatus() is a wrapper around gtk_print_operation_set_track_print_status().
874func (po *PrintOperation) SetTrackPrintStatus(progress bool) {
875	C.gtk_print_operation_set_track_print_status(po.native(), gbool(progress))
876}
877
878// SetCustomTabLabel() is a wrapper around gtk_print_operation_set_custom_tab_label().
879func (po *PrintOperation) SetCustomTabLabel(label string) {
880	cstr := C.CString(label)
881	defer C.free(unsafe.Pointer(cstr))
882	C.gtk_print_operation_set_custom_tab_label(po.native(), (*C.gchar)(cstr))
883}
884
885// Run() is a wrapper around gtk_print_operation_run().
886func (po *PrintOperation) Run(action PrintOperationAction, parent IWindow) (PrintOperationResult, error) {
887	var err *C.GError = nil
888
889	var w *C.GtkWindow = nil
890	if parent != nil {
891		w = parent.toWindow()
892	}
893
894	c := C.gtk_print_operation_run(po.native(), C.GtkPrintOperationAction(action), w, &err)
895	res := PrintOperationResult(c)
896	if res == PRINT_OPERATION_RESULT_ERROR {
897		defer C.g_error_free(err)
898		return res, errors.New(C.GoString((*C.char)(err.message)))
899	}
900	return res, nil
901}
902
903// Cancel() is a wrapper around gtk_print_operation_cancel().
904func (po *PrintOperation) Cancel() {
905	C.gtk_print_operation_cancel(po.native())
906}
907
908// DrawPageFinish() is a wrapper around gtk_print_operation_draw_page_finish().
909func (po *PrintOperation) DrawPageFinish() {
910	C.gtk_print_operation_draw_page_finish(po.native())
911}
912
913// SetDeferDrawing() is a wrapper around gtk_print_operation_set_defer_drawing().
914func (po *PrintOperation) SetDeferDrawing() {
915	C.gtk_print_operation_set_defer_drawing(po.native())
916}
917
918// GetStatus() is a wrapper around gtk_print_operation_get_status().
919func (po *PrintOperation) GetStatus() PrintStatus {
920	c := C.gtk_print_operation_get_status(po.native())
921	return PrintStatus(c)
922}
923
924// GetStatusString() is a wrapper around gtk_print_operation_get_status_string().
925func (po *PrintOperation) GetStatusString() string {
926	c := C.gtk_print_operation_get_status_string(po.native())
927	return C.GoString((*C.char)(c))
928}
929
930// IsFinished() is a wrapper around gtk_print_operation_is_finished().
931func (po *PrintOperation) IsFinished() bool {
932	c := C.gtk_print_operation_is_finished(po.native())
933	return gobool(c)
934}
935
936// SetSupportSelection() is a wrapper around gtk_print_operation_set_support_selection().
937func (po *PrintOperation) SetSupportSelection(selection bool) {
938	C.gtk_print_operation_set_support_selection(po.native(), gbool(selection))
939}
940
941// GetSupportSelection() is a wrapper around gtk_print_operation_get_support_selection().
942func (po *PrintOperation) GetSupportSelection() bool {
943	c := C.gtk_print_operation_get_support_selection(po.native())
944	return gobool(c)
945}
946
947// SetHasSelection() is a wrapper around gtk_print_operation_set_has_selection().
948func (po *PrintOperation) SetHasSelection(selection bool) {
949	C.gtk_print_operation_set_has_selection(po.native(), gbool(selection))
950}
951
952// GetHasSelection() is a wrapper around gtk_print_operation_get_has_selection().
953func (po *PrintOperation) GetHasSelection() bool {
954	c := C.gtk_print_operation_get_has_selection(po.native())
955	return gobool(c)
956}
957
958// SetEmbedPageSetup() is a wrapper around gtk_print_operation_set_embed_page_setup().
959func (po *PrintOperation) SetEmbedPageSetup(embed bool) {
960	C.gtk_print_operation_set_embed_page_setup(po.native(), gbool(embed))
961}
962
963// GetEmbedPageSetup() is a wrapper around gtk_print_operation_get_embed_page_setup().
964func (po *PrintOperation) GetEmbedPageSetup() bool {
965	c := C.gtk_print_operation_get_embed_page_setup(po.native())
966	return gobool(c)
967}
968
969// PrintRunPageSetupDialog() is a wrapper around gtk_print_run_page_setup_dialog().
970func PrintRunPageSetupDialog(parent IWindow, pageSetup *PageSetup, settings *PrintSettings) *PageSetup {
971
972	var w *C.GtkWindow = nil
973	if parent != nil {
974		w = parent.toWindow()
975	}
976
977	c := C.gtk_print_run_page_setup_dialog(w, pageSetup.native(), settings.native())
978	obj := glib.Take(unsafe.Pointer(c))
979	return wrapPageSetup(obj)
980}
981
982type PageSetupDoneCallback func(setup *PageSetup)
983
984// PrintRunPageSetupDialogAsync() is a wrapper around gtk_print_run_page_setup_dialog_async().
985func PrintRunPageSetupDialogAsync(parent IWindow, setup *PageSetup,
986	settings *PrintSettings, cb PageSetupDoneCallback) {
987
988	var w *C.GtkWindow = nil
989	if parent != nil {
990		w = parent.toWindow()
991	}
992
993	C._gtk_print_run_page_setup_dialog_async(w, setup.native(),
994		settings.native(), C.gpointer(callback.Assign(cb)))
995}
996
997/*
998 * GtkPrintOperationPreview
999 */
1000
1001// PrintOperationPreview is a representation of GTK's GtkPrintOperationPreview GInterface.
1002type PrintOperationPreview struct {
1003	*glib.Object
1004}
1005
1006// IPrintOperationPreview is an interface type implemented by all structs
1007// embedding a PrintOperationPreview.  It is meant to be used as an argument type
1008// for wrapper functions that wrap around a C GTK function taking a
1009// GtkPrintOperationPreview.
1010type IPrintOperationPreview interface {
1011	toPrintOperationPreview() *C.GtkPrintOperationPreview
1012}
1013
1014// native() returns a pointer to the underlying GObject as a GtkPrintOperationPreview.
1015func (v *PrintOperationPreview) native() *C.GtkPrintOperationPreview {
1016	if v == nil || v.GObject == nil {
1017		return nil
1018	}
1019	p := unsafe.Pointer(v.GObject)
1020	return C.toGtkPrintOperationPreview(p)
1021}
1022
1023func marshalPrintOperationPreview(p uintptr) (interface{}, error) {
1024	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
1025	obj := glib.Take(unsafe.Pointer(c))
1026	return wrapPrintOperationPreview(obj), nil
1027}
1028
1029func wrapPrintOperationPreview(obj *glib.Object) *PrintOperationPreview {
1030	if obj == nil {
1031		return nil
1032	}
1033
1034	return &PrintOperationPreview{obj}
1035}
1036
1037func (v *PrintOperationPreview) toPrintOperationPreview() *C.GtkPrintOperationPreview {
1038	if v == nil {
1039		return nil
1040	}
1041	return v.native()
1042}
1043
1044// RenderPage()() is a wrapper around gtk_print_operation_preview_render_page().
1045func (pop *PrintOperationPreview) RenderPage(page int) {
1046	C.gtk_print_operation_preview_render_page(pop.native(), C.gint(page))
1047}
1048
1049// EndPreview()() is a wrapper around gtk_print_operation_preview_end_preview().
1050func (pop *PrintOperationPreview) EndPreview() {
1051	C.gtk_print_operation_preview_end_preview(pop.native())
1052}
1053
1054// IsSelected()() is a wrapper around gtk_print_operation_preview_is_selected().
1055func (pop *PrintOperationPreview) IsSelected(page int) bool {
1056	c := C.gtk_print_operation_preview_is_selected(pop.native(), C.gint(page))
1057	return gobool(c)
1058}
1059
1060/*
1061 * GtkPrintSettings
1062 */
1063
1064type PrintSettings struct {
1065	*glib.Object
1066}
1067
1068func (ps *PrintSettings) native() *C.GtkPrintSettings {
1069	if ps == nil || ps.GObject == nil {
1070		return nil
1071	}
1072
1073	p := unsafe.Pointer(ps.GObject)
1074	return C.toGtkPrintSettings(p)
1075}
1076
1077func marshalPrintSettings(p uintptr) (interface{}, error) {
1078	c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
1079	return wrapPrintSettings(glib.Take(unsafe.Pointer(c))), nil
1080}
1081
1082func wrapPrintSettings(obj *glib.Object) *PrintSettings {
1083	if obj == nil {
1084		return nil
1085	}
1086
1087	return &PrintSettings{obj}
1088}
1089
1090const (
1091	PRINT_SETTINGS_PRINTER              string = C.GTK_PRINT_SETTINGS_PRINTER
1092	PRINT_SETTINGS_ORIENTATION          string = C.GTK_PRINT_SETTINGS_ORIENTATION
1093	PRINT_SETTINGS_PAPER_FORMAT         string = C.GTK_PRINT_SETTINGS_PAPER_FORMAT
1094	PRINT_SETTINGS_PAPER_WIDTH          string = C.GTK_PRINT_SETTINGS_PAPER_WIDTH
1095	PRINT_SETTINGS_PAPER_HEIGHT         string = C.GTK_PRINT_SETTINGS_PAPER_HEIGHT
1096	PRINT_SETTINGS_USE_COLOR            string = C.GTK_PRINT_SETTINGS_USE_COLOR
1097	PRINT_SETTINGS_COLLATE              string = C.GTK_PRINT_SETTINGS_COLLATE
1098	PRINT_SETTINGS_REVERSE              string = C.GTK_PRINT_SETTINGS_REVERSE
1099	PRINT_SETTINGS_DUPLEX               string = C.GTK_PRINT_SETTINGS_DUPLEX
1100	PRINT_SETTINGS_QUALITY              string = C.GTK_PRINT_SETTINGS_QUALITY
1101	PRINT_SETTINGS_N_COPIES             string = C.GTK_PRINT_SETTINGS_N_COPIES
1102	PRINT_SETTINGS_NUMBER_UP            string = C.GTK_PRINT_SETTINGS_NUMBER_UP
1103	PRINT_SETTINGS_NUMBER_UP_LAYOUT     string = C.GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT
1104	PRINT_SETTINGS_RESOLUTION           string = C.GTK_PRINT_SETTINGS_RESOLUTION
1105	PRINT_SETTINGS_RESOLUTION_X         string = C.GTK_PRINT_SETTINGS_RESOLUTION_X
1106	PRINT_SETTINGS_RESOLUTION_Y         string = C.GTK_PRINT_SETTINGS_RESOLUTION_Y
1107	PRINT_SETTINGS_PRINTER_LPI          string = C.GTK_PRINT_SETTINGS_PRINTER_LPI
1108	PRINT_SETTINGS_SCALE                string = C.GTK_PRINT_SETTINGS_SCALE
1109	PRINT_SETTINGS_PRINT_PAGES          string = C.GTK_PRINT_SETTINGS_PRINT_PAGES
1110	PRINT_SETTINGS_PAGE_RANGES          string = C.GTK_PRINT_SETTINGS_PAGE_RANGES
1111	PRINT_SETTINGS_PAGE_SET             string = C.GTK_PRINT_SETTINGS_PAGE_SET
1112	PRINT_SETTINGS_DEFAULT_SOURCE       string = C.GTK_PRINT_SETTINGS_DEFAULT_SOURCE
1113	PRINT_SETTINGS_MEDIA_TYPE           string = C.GTK_PRINT_SETTINGS_MEDIA_TYPE
1114	PRINT_SETTINGS_DITHER               string = C.GTK_PRINT_SETTINGS_DITHER
1115	PRINT_SETTINGS_FINISHINGS           string = C.GTK_PRINT_SETTINGS_FINISHINGS
1116	PRINT_SETTINGS_OUTPUT_BIN           string = C.GTK_PRINT_SETTINGS_OUTPUT_BIN
1117	PRINT_SETTINGS_OUTPUT_DIR           string = C.GTK_PRINT_SETTINGS_OUTPUT_DIR
1118	PRINT_SETTINGS_OUTPUT_BASENAME      string = C.GTK_PRINT_SETTINGS_OUTPUT_BASENAME
1119	PRINT_SETTINGS_OUTPUT_FILE_FORMAT   string = C.GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT
1120	PRINT_SETTINGS_OUTPUT_URI           string = C.GTK_PRINT_SETTINGS_OUTPUT_URI
1121	PRINT_SETTINGS_WIN32_DRIVER_EXTRA   string = C.GTK_PRINT_SETTINGS_WIN32_DRIVER_EXTRA
1122	PRINT_SETTINGS_WIN32_DRIVER_VERSION string = C.GTK_PRINT_SETTINGS_WIN32_DRIVER_VERSION
1123)
1124
1125// PrintSettingsNew() is a wrapper around gtk_print_settings_new().
1126func PrintSettingsNew() (*PrintSettings, error) {
1127	c := C.gtk_print_settings_new()
1128	if c == nil {
1129		return nil, nilPtrErr
1130	}
1131	obj := glib.Take(unsafe.Pointer(c))
1132	return wrapPrintSettings(obj), nil
1133}
1134
1135// Copy() is a wrapper around gtk_print_settings_copy().
1136func (ps *PrintSettings) Copy() (*PrintSettings, error) {
1137	c := C.gtk_print_settings_copy(ps.native())
1138	if c == nil {
1139		return nil, nilPtrErr
1140	}
1141	obj := glib.Take(unsafe.Pointer(c))
1142	return wrapPrintSettings(obj), nil
1143}
1144
1145// HasKey() is a wrapper around gtk_print_settings_has_key().
1146func (ps *PrintSettings) HasKey(key string) bool {
1147	cstr := C.CString(key)
1148	defer C.free(unsafe.Pointer(cstr))
1149	c := C.gtk_print_settings_has_key(ps.native(), (*C.gchar)(cstr))
1150	return gobool(c)
1151}
1152
1153// Get() is a wrapper around gtk_print_settings_get().
1154func (ps *PrintSettings) Get(key string) string {
1155	cstr := C.CString(key)
1156	defer C.free(unsafe.Pointer(cstr))
1157	c := C.gtk_print_settings_get(ps.native(), (*C.gchar)(cstr))
1158	return C.GoString((*C.char)(c))
1159}
1160
1161// Set() is a wrapper around gtk_print_settings_set().
1162// TODO: Since value can't be nil, we can't unset values here.
1163func (ps *PrintSettings) Set(key, value string) {
1164	cKey := C.CString(key)
1165	defer C.free(unsafe.Pointer(cKey))
1166	cValue := C.CString(value)
1167	defer C.free(unsafe.Pointer(cValue))
1168	C.gtk_print_settings_set(ps.native(), (*C.gchar)(cKey), (*C.gchar)(cValue))
1169}
1170
1171// Unset() is a wrapper around gtk_print_settings_unset().
1172func (ps *PrintSettings) Unset(key string) {
1173	cstr := C.CString(key)
1174	defer C.free(unsafe.Pointer(cstr))
1175	C.gtk_print_settings_unset(ps.native(), (*C.gchar)(cstr))
1176}
1177
1178type PrintSettingsCallback func(key, value string)
1179
1180// Foreach() is a wrapper around gtk_print_settings_foreach().
1181func (ps *PrintSettings) ForEach(cb PrintSettingsCallback) {
1182	// Clean up callback immediately as we only need it for the duration of this Foreach call
1183	id := callback.Assign(cb)
1184	defer callback.Delete(id)
1185
1186	C._gtk_print_settings_foreach(ps.native(), C.gpointer(id))
1187}
1188
1189// GetBool() is a wrapper around gtk_print_settings_get_bool().
1190func (ps *PrintSettings) GetBool(key string) bool {
1191	cstr := C.CString(key)
1192	defer C.free(unsafe.Pointer(cstr))
1193	c := C.gtk_print_settings_get_bool(ps.native(), (*C.gchar)(cstr))
1194	return gobool(c)
1195}
1196
1197// SetBool() is a wrapper around gtk_print_settings_set_bool().
1198func (ps *PrintSettings) SetBool(key string, value bool) {
1199	cstr := C.CString(key)
1200	defer C.free(unsafe.Pointer(cstr))
1201	C.gtk_print_settings_set_bool(ps.native(), (*C.gchar)(cstr), gbool(value))
1202}
1203
1204// GetDouble() is a wrapper around gtk_print_settings_get_double().
1205func (ps *PrintSettings) GetDouble(key string) float64 {
1206	cstr := C.CString(key)
1207	defer C.free(unsafe.Pointer(cstr))
1208	c := C.gtk_print_settings_get_double(ps.native(), (*C.gchar)(cstr))
1209	return float64(c)
1210}
1211
1212// GetDoubleWithDefault() is a wrapper around gtk_print_settings_get_double_with_default().
1213func (ps *PrintSettings) GetDoubleWithDefault(key string, def float64) float64 {
1214	cstr := C.CString(key)
1215	defer C.free(unsafe.Pointer(cstr))
1216	c := C.gtk_print_settings_get_double_with_default(ps.native(),
1217		(*C.gchar)(cstr), C.gdouble(def))
1218	return float64(c)
1219}
1220
1221// SetDouble() is a wrapper around gtk_print_settings_set_double().
1222func (ps *PrintSettings) SetDouble(key string, value float64) {
1223	cstr := C.CString(key)
1224	defer C.free(unsafe.Pointer(cstr))
1225	C.gtk_print_settings_set_double(ps.native(), (*C.gchar)(cstr), C.gdouble(value))
1226}
1227
1228// GetLength() is a wrapper around gtk_print_settings_get_length().
1229func (ps *PrintSettings) GetLength(key string, unit Unit) float64 {
1230	cstr := C.CString(key)
1231	defer C.free(unsafe.Pointer(cstr))
1232	c := C.gtk_print_settings_get_length(ps.native(), (*C.gchar)(cstr), C.GtkUnit(unit))
1233	return float64(c)
1234}
1235
1236// SetLength() is a wrapper around gtk_print_settings_set_length().
1237func (ps *PrintSettings) SetLength(key string, value float64, unit Unit) {
1238	cstr := C.CString(key)
1239	defer C.free(unsafe.Pointer(cstr))
1240	C.gtk_print_settings_set_length(ps.native(), (*C.gchar)(cstr), C.gdouble(value), C.GtkUnit(unit))
1241}
1242
1243// GetInt() is a wrapper around gtk_print_settings_get_int().
1244func (ps *PrintSettings) GetInt(key string) int {
1245	cstr := C.CString(key)
1246	defer C.free(unsafe.Pointer(cstr))
1247	c := C.gtk_print_settings_get_int(ps.native(), (*C.gchar)(cstr))
1248	return int(c)
1249}
1250
1251// GetIntWithDefault() is a wrapper around gtk_print_settings_get_int_with_default().
1252func (ps *PrintSettings) GetIntWithDefault(key string, def int) int {
1253	cstr := C.CString(key)
1254	defer C.free(unsafe.Pointer(cstr))
1255	c := C.gtk_print_settings_get_int_with_default(ps.native(), (*C.gchar)(cstr), C.gint(def))
1256	return int(c)
1257}
1258
1259// SetInt() is a wrapper around gtk_print_settings_set_int().
1260func (ps *PrintSettings) SetInt(key string, value int) {
1261	cstr := C.CString(key)
1262	defer C.free(unsafe.Pointer(cstr))
1263	C.gtk_print_settings_set_int(ps.native(), (*C.gchar)(cstr), C.gint(value))
1264}
1265
1266// GetPrinter() is a wrapper around gtk_print_settings_get_printer().
1267func (ps *PrintSettings) GetPrinter() string {
1268	c := C.gtk_print_settings_get_printer(ps.native())
1269	return C.GoString((*C.char)(c))
1270}
1271
1272// SetPrinter() is a wrapper around gtk_print_settings_set_printer().
1273func (ps *PrintSettings) SetPrinter(printer string) {
1274	cstr := C.CString(printer)
1275	defer C.free(unsafe.Pointer(cstr))
1276	C.gtk_print_settings_set_printer(ps.native(), (*C.gchar)(cstr))
1277}
1278
1279// GetOrientation() is a wrapper around gtk_print_settings_get_orientation().
1280func (ps *PrintSettings) GetOrientation() PageOrientation {
1281	c := C.gtk_print_settings_get_orientation(ps.native())
1282	return PageOrientation(c)
1283}
1284
1285// SetOrientation() is a wrapper around gtk_print_settings_set_orientation().
1286func (ps *PrintSettings) SetOrientation(orientation PageOrientation) {
1287	C.gtk_print_settings_set_orientation(ps.native(), C.GtkPageOrientation(orientation))
1288}
1289
1290// GetPaperSize() is a wrapper around gtk_print_settings_get_paper_size().
1291func (ps *PrintSettings) GetPaperSize() (*PaperSize, error) {
1292	c := C.gtk_print_settings_get_paper_size(ps.native())
1293	if c == nil {
1294		return nil, nilPtrErr
1295	}
1296	p := &PaperSize{c}
1297	runtime.SetFinalizer(p, (*PaperSize).free)
1298	return p, nil
1299}
1300
1301// SetPaperSize() is a wrapper around gtk_print_settings_set_paper_size().
1302func (ps *PrintSettings) SetPaperSize(size *PaperSize) {
1303	C.gtk_print_settings_set_paper_size(ps.native(), size.native())
1304}
1305
1306// GetPaperWidth() is a wrapper around gtk_print_settings_get_paper_width().
1307func (ps *PrintSettings) GetPaperWidth(unit Unit) float64 {
1308	c := C.gtk_print_settings_get_paper_width(ps.native(), C.GtkUnit(unit))
1309	return float64(c)
1310}
1311
1312// SetPaperWidth() is a wrapper around gtk_print_settings_set_paper_width().
1313func (ps *PrintSettings) SetPaperWidth(width float64, unit Unit) {
1314	C.gtk_print_settings_set_paper_width(ps.native(), C.gdouble(width), C.GtkUnit(unit))
1315}
1316
1317// GetPaperHeight() is a wrapper around gtk_print_settings_get_paper_height().
1318func (ps *PrintSettings) GetPaperHeight(unit Unit) float64 {
1319	c := C.gtk_print_settings_get_paper_height(ps.native(), C.GtkUnit(unit))
1320	return float64(c)
1321}
1322
1323// SetPaperHeight() is a wrapper around gtk_print_settings_set_paper_height().
1324func (ps *PrintSettings) SetPaperHeight(width float64, unit Unit) {
1325	C.gtk_print_settings_set_paper_height(ps.native(), C.gdouble(width), C.GtkUnit(unit))
1326}
1327
1328// GetUseColor() is a wrapper around gtk_print_settings_get_use_color().
1329func (ps *PrintSettings) GetUseColor() bool {
1330	c := C.gtk_print_settings_get_use_color(ps.native())
1331	return gobool(c)
1332}
1333
1334// SetUseColor() is a wrapper around gtk_print_settings_set_use_color().
1335func (ps *PrintSettings) SetUseColor(color bool) {
1336	C.gtk_print_settings_set_use_color(ps.native(), gbool(color))
1337}
1338
1339// GetCollate() is a wrapper around gtk_print_settings_get_collate().
1340func (ps *PrintSettings) GetCollate() bool {
1341	c := C.gtk_print_settings_get_collate(ps.native())
1342	return gobool(c)
1343}
1344
1345// SetCollate() is a wrapper around gtk_print_settings_set_collate().
1346func (ps *PrintSettings) SetCollate(collate bool) {
1347	C.gtk_print_settings_set_collate(ps.native(), gbool(collate))
1348}
1349
1350// GetReverse() is a wrapper around gtk_print_settings_get_reverse().
1351func (ps *PrintSettings) GetReverse() bool {
1352	c := C.gtk_print_settings_get_reverse(ps.native())
1353	return gobool(c)
1354}
1355
1356// SetReverse() is a wrapper around gtk_print_settings_set_reverse().
1357func (ps *PrintSettings) SetReverse(reverse bool) {
1358	C.gtk_print_settings_set_reverse(ps.native(), gbool(reverse))
1359}
1360
1361// GetDuplex() is a wrapper around gtk_print_settings_get_duplex().
1362func (ps *PrintSettings) GetDuplex() PrintDuplex {
1363	c := C.gtk_print_settings_get_duplex(ps.native())
1364	return PrintDuplex(c)
1365}
1366
1367// SetDuplex() is a wrapper around gtk_print_settings_set_duplex().
1368func (ps *PrintSettings) SetDuplex(duplex PrintDuplex) {
1369	C.gtk_print_settings_set_duplex(ps.native(), C.GtkPrintDuplex(duplex))
1370}
1371
1372// GetQuality() is a wrapper around gtk_print_settings_get_quality().
1373func (ps *PrintSettings) GetQuality() PrintQuality {
1374	c := C.gtk_print_settings_get_quality(ps.native())
1375	return PrintQuality(c)
1376}
1377
1378// SetQuality() is a wrapper around gtk_print_settings_set_quality().
1379func (ps *PrintSettings) SetQuality(quality PrintQuality) {
1380	C.gtk_print_settings_set_quality(ps.native(), C.GtkPrintQuality(quality))
1381}
1382
1383// GetNCopies() is a wrapper around gtk_print_settings_get_n_copies().
1384func (ps *PrintSettings) GetNCopies() int {
1385	c := C.gtk_print_settings_get_n_copies(ps.native())
1386	return int(c)
1387}
1388
1389// SetNCopies() is a wrapper around gtk_print_settings_set_n_copies().
1390func (ps *PrintSettings) SetNCopies(copies int) {
1391	C.gtk_print_settings_set_n_copies(ps.native(), C.gint(copies))
1392}
1393
1394// GetNmberUp() is a wrapper around gtk_print_settings_get_number_up().
1395func (ps *PrintSettings) GetNmberUp() int {
1396	c := C.gtk_print_settings_get_number_up(ps.native())
1397	return int(c)
1398}
1399
1400// SetNumberUp() is a wrapper around gtk_print_settings_set_number_up().
1401func (ps *PrintSettings) SetNumberUp(numberUp int) {
1402	C.gtk_print_settings_set_number_up(ps.native(), C.gint(numberUp))
1403}
1404
1405// GetNumberUpLayout() is a wrapper around gtk_print_settings_get_number_up_layout().
1406func (ps *PrintSettings) GetNumberUpLayout() NumberUpLayout {
1407	c := C.gtk_print_settings_get_number_up_layout(ps.native())
1408	return NumberUpLayout(c)
1409}
1410
1411// SetNumberUpLayout() is a wrapper around gtk_print_settings_set_number_up_layout().
1412func (ps *PrintSettings) SetNumberUpLayout(numberUpLayout NumberUpLayout) {
1413	C.gtk_print_settings_set_number_up_layout(ps.native(), C.GtkNumberUpLayout(numberUpLayout))
1414}
1415
1416// GetResolution() is a wrapper around gtk_print_settings_get_resolution().
1417func (ps *PrintSettings) GetResolution() int {
1418	c := C.gtk_print_settings_get_resolution(ps.native())
1419	return int(c)
1420}
1421
1422// SetResolution() is a wrapper around gtk_print_settings_set_resolution().
1423func (ps *PrintSettings) SetResolution(resolution int) {
1424	C.gtk_print_settings_set_resolution(ps.native(), C.gint(resolution))
1425}
1426
1427// SetResolutionXY() is a wrapper around gtk_print_settings_set_resolution_xy().
1428func (ps *PrintSettings) SetResolutionXY(resolutionX, resolutionY int) {
1429	C.gtk_print_settings_set_resolution_xy(ps.native(), C.gint(resolutionX), C.gint(resolutionY))
1430}
1431
1432// GetResolutionX() is a wrapper around gtk_print_settings_get_resolution_x().
1433func (ps *PrintSettings) GetResolutionX() int {
1434	c := C.gtk_print_settings_get_resolution_x(ps.native())
1435	return int(c)
1436}
1437
1438// GetResolutionY() is a wrapper around gtk_print_settings_get_resolution_y().
1439func (ps *PrintSettings) GetResolutionY() int {
1440	c := C.gtk_print_settings_get_resolution_y(ps.native())
1441	return int(c)
1442}
1443
1444// GetPrinterLpi() is a wrapper around gtk_print_settings_get_printer_lpi().
1445func (ps *PrintSettings) GetPrinterLpi() float64 {
1446	c := C.gtk_print_settings_get_printer_lpi(ps.native())
1447	return float64(c)
1448}
1449
1450// SetPrinterLpi() is a wrapper around gtk_print_settings_set_printer_lpi().
1451func (ps *PrintSettings) SetPrinterLpi(lpi float64) {
1452	C.gtk_print_settings_set_printer_lpi(ps.native(), C.gdouble(lpi))
1453}
1454
1455// GetScale() is a wrapper around gtk_print_settings_get_scale().
1456func (ps *PrintSettings) GetScale() float64 {
1457	c := C.gtk_print_settings_get_scale(ps.native())
1458	return float64(c)
1459}
1460
1461// SetScale() is a wrapper around gtk_print_settings_set_scale().
1462func (ps *PrintSettings) SetScale(scale float64) {
1463	C.gtk_print_settings_set_scale(ps.native(), C.gdouble(scale))
1464}
1465
1466// GetPrintPages() is a wrapper around gtk_print_settings_get_print_pages().
1467func (ps *PrintSettings) GetPrintPages() PrintPages {
1468	c := C.gtk_print_settings_get_print_pages(ps.native())
1469	return PrintPages(c)
1470}
1471
1472// SetPrintPages() is a wrapper around gtk_print_settings_set_print_pages().
1473func (ps *PrintSettings) SetPrintPages(pages PrintPages) {
1474	C.gtk_print_settings_set_print_pages(ps.native(), C.GtkPrintPages(pages))
1475}
1476
1477// GetPageSet() is a wrapper around gtk_print_settings_get_page_set().
1478func (ps *PrintSettings) GetPageSet(pages PrintPages) PageSet {
1479	c := C.gtk_print_settings_get_page_set(ps.native())
1480	return PageSet(c)
1481}
1482
1483// SetPageSet() is a wrapper around gtk_print_settings_set_page_set().
1484func (ps *PrintSettings) SetPageSet(pageSet PageSet) {
1485	C.gtk_print_settings_set_page_set(ps.native(), C.GtkPageSet(pageSet))
1486}
1487
1488// GetDefaultSource() is a wrapper around gtk_print_settings_get_default_source().
1489func (ps *PrintSettings) GetDefaultSource() string {
1490	c := C.gtk_print_settings_get_default_source(ps.native())
1491	return C.GoString((*C.char)(c))
1492}
1493
1494// SetSefaultSource() is a wrapper around gtk_print_settings_set_default_source().
1495func (ps *PrintSettings) SetSefaultSource(defaultSource string) {
1496	cstr := C.CString(defaultSource)
1497	defer C.free(unsafe.Pointer(cstr))
1498	C.gtk_print_settings_set_default_source(ps.native(), (*C.gchar)(cstr))
1499}
1500
1501// GetMediaType() is a wrapper around gtk_print_settings_get_media_type().
1502func (ps *PrintSettings) GetMediaType() string {
1503	c := C.gtk_print_settings_get_media_type(ps.native())
1504	return C.GoString((*C.char)(c))
1505}
1506
1507// SetMediaType() is a wrapper around gtk_print_settings_set_media_type().
1508func (ps *PrintSettings) SetMediaType(mediaType string) {
1509	cstr := C.CString(mediaType)
1510	defer C.free(unsafe.Pointer(cstr))
1511	C.gtk_print_settings_set_media_type(ps.native(), (*C.gchar)(cstr))
1512}
1513
1514// GetDither() is a wrapper around gtk_print_settings_get_dither().
1515func (ps *PrintSettings) GetDither() string {
1516	c := C.gtk_print_settings_get_dither(ps.native())
1517	return C.GoString((*C.char)(c))
1518}
1519
1520// SetDither() is a wrapper around gtk_print_settings_set_dither().
1521func (ps *PrintSettings) SetDither(dither string) {
1522	cstr := C.CString(dither)
1523	defer C.free(unsafe.Pointer(cstr))
1524	C.gtk_print_settings_set_dither(ps.native(), (*C.gchar)(cstr))
1525}
1526
1527// GetFinishings() is a wrapper around gtk_print_settings_get_finishings().
1528func (ps *PrintSettings) GetFinishings() string {
1529	c := C.gtk_print_settings_get_finishings(ps.native())
1530	return C.GoString((*C.char)(c))
1531}
1532
1533// SetFinishings() is a wrapper around gtk_print_settings_set_finishings().
1534func (ps *PrintSettings) SetFinishings(dither string) {
1535	cstr := C.CString(dither)
1536	defer C.free(unsafe.Pointer(cstr))
1537	C.gtk_print_settings_set_finishings(ps.native(), (*C.gchar)(cstr))
1538}
1539
1540// GetOutputBin() is a wrapper around gtk_print_settings_get_output_bin().
1541func (ps *PrintSettings) GetOutputBin() string {
1542	c := C.gtk_print_settings_get_output_bin(ps.native())
1543	return C.GoString((*C.char)(c))
1544}
1545
1546// SetOutputBin() is a wrapper around gtk_print_settings_set_output_bin().
1547func (ps *PrintSettings) SetOutputBin(bin string) {
1548	cstr := C.CString(bin)
1549	defer C.free(unsafe.Pointer(cstr))
1550	C.gtk_print_settings_set_output_bin(ps.native(), (*C.gchar)(cstr))
1551}
1552
1553// PrintSettingsNewFromFile() is a wrapper around gtk_print_settings_new_from_file().
1554func PrintSettingsNewFromFile(name string) (*PrintSettings, error) {
1555	cstr := C.CString(name)
1556	defer C.free(unsafe.Pointer(cstr))
1557	var err *C.GError = nil
1558	c := C.gtk_print_settings_new_from_file((*C.gchar)(cstr), &err)
1559	if c == nil {
1560		defer C.g_error_free(err)
1561		return nil, errors.New(C.GoString((*C.char)(err.message)))
1562	}
1563	obj := glib.Take(unsafe.Pointer(c))
1564	return wrapPrintSettings(obj), nil
1565}
1566
1567// PrintSettingsNewFromKeyFile() is a wrapper around gtk_print_settings_new_from_key_file().
1568
1569// LoadFile() is a wrapper around gtk_print_settings_load_file().
1570func (ps *PrintSettings) LoadFile(name string) error {
1571	cstr := C.CString(name)
1572	defer C.free(unsafe.Pointer(cstr))
1573	var err *C.GError = nil
1574	c := C.gtk_print_settings_load_file(ps.native(), (*C.gchar)(cstr), &err)
1575	if gobool(c) == false {
1576		defer C.g_error_free(err)
1577		return errors.New(C.GoString((*C.char)(err.message)))
1578	}
1579	return nil
1580}
1581
1582// LoadKeyFile() is a wrapper around gtk_print_settings_load_key_file().
1583
1584// ToFile() is a wrapper around gtk_print_settings_to_file().
1585func (ps *PrintSettings) ToFile(name string) error {
1586	cstr := C.CString(name)
1587	defer C.free(unsafe.Pointer(cstr))
1588	var err *C.GError = nil
1589	c := C.gtk_print_settings_to_file(ps.native(), (*C.gchar)(cstr), &err)
1590	if gobool(c) == false {
1591		return errors.New(C.GoString((*C.char)(err.message)))
1592	}
1593	return nil
1594}
1595
1596// ToKeyFile() is a wrapper around gtk_print_settings_to_key_file().
1597