27
(define-module (gnome gtk))
27
(define-module (gnome gtk)
28
#:use-module (oop goops)
29
#:use-module (gnome gobject)
30
#:use-module (gnome gobject generics)
31
#:use-module (gnome gobject utils)
32
#:use-module (gnome gw support modules)
33
#:export (<guile-gtk-tree-model>
34
on-get-flags on-get-n-columns on-get-column-type
35
on-get-iter on-get-path on-get-value on-iter-next
36
on-iter-children on-iter-has-child on-iter-n-children
37
on-iter-nth-child on-iter-parent
39
gtk-tree-or-list-store-set
40
gtk-text-buffer-create-tag create-tag
29
43
(if (getenv "GUILE_GTK_DEBUG")
30
(define progress display)
31
(define progress identity))
33
(progress "(gnome gtk): [")
36
(use-modules (oop goops))
38
(use-modules (gnome gobject) (gnome gobject generics))
40
(use-modules (gnome glib))
42
(use-modules (gnome gw atk))
44
(use-modules (gnome gw pango))
46
(use-modules (gnome gw gdk))
48
(use-modules (gnome gw gtk))
44
(define-macro (time-debug . forms)
46
(define %before (tms:clock (times)))
48
(let ((diff (/ (- (tms:clock (times)) %before)
49
internal-time-units-per-second)))
50
(format (current-error-port)
51
"(gnome gtk): ~a: ~as" ',forms diff))))
52
(define-macro (time-debug . forms)
55
(time-debug (use-modules (gnome gw gdk)))
56
(time-debug (use-modules (gnome gw gtk)))
57
(re-export-modules (gnome gw gdk)
51
60
;; Support explicit object destruction.
52
(define-method (make-gobject-instance class type (instance <gtk-object>) initargs)
61
(define-method (initialize (instance <gtk-object>) initargs)
54
63
(connect instance 'destroy
56
(let ((primitive-instance (slot-ref instance 'gtype-instance)))
57
(%gtype-instance-primitive-destroy! primitive-instance))))
60
(define-public <guile-gtk-tree-model> <guile-gtk-generic-tree-model>)
65
(gtype-instance-destroy! instance))))
67
(define <guile-gtk-tree-model> <guile-gtk-generic-tree-model>)
70
(define-generic-with-docs on-get-flags
72
(define-generic-with-docs on-get-n-columns
74
(define-generic-with-docs on-get-column-type
76
(define-generic-with-docs on-get-iter
78
(define-generic-with-docs on-get-path
80
(define-generic-with-docs on-get-value
82
(define-generic-with-docs on-iter-next
84
(define-generic-with-docs on-iter-children
86
(define-generic-with-docs on-iter-has-child
88
(define-generic-with-docs on-iter-n-children
90
(define-generic-with-docs on-iter-nth-child
92
(define-generic-with-docs on-iter-parent
62
95
;; Support tree models written in guile.
63
96
(define-method (on-get-flags (obj <guile-gtk-tree-model>))
64
97
(make <gtk-tree-model-flags> #:value 0))
65
(define-method (on-get-n-columns (obj <guile-gtk-tree-model>))
66
(error "This method needs to be overridden by a subclass."))
67
(define-method (on-get-column-type (obj <guile-gtk-tree-model>) index)
68
(error "This method needs to be overridden by a subclass."))
69
(define-method (on-get-iter (obj <guile-gtk-tree-model>) path)
70
(error "This method needs to be overridden by a subclass."))
71
(define-method (on-get-path (obj <guile-gtk-tree-model>) iter)
72
(error "This method needs to be overridden by a subclass."))
73
(define-method (on-get-value (obj <guile-gtk-tree-model>) iter index)
74
(error "This method needs to be overridden by a subclass."))
75
(define-method (on-iter-next (obj <guile-gtk-tree-model>) iter)
76
(error "This method needs to be overridden by a subclass."))
77
(define-method (on-iter-children (obj <guile-gtk-tree-model>) parent)
78
(error "This method needs to be overridden by a subclass."))
79
(define-method (on-iter-has-child (obj <guile-gtk-tree-model>) iter)
80
(error "This method needs to be overridden by a subclass."))
81
(define-method (on-iter-n-children (obj <guile-gtk-tree-model>) iter)
82
(error "This method needs to be overridden by a subclass."))
83
(define-method (on-iter-nth-child (obj <guile-gtk-tree-model>) parent n)
84
(error "This method needs to be overridden by a subclass."))
85
(define-method (on-iter-parent (obj <guile-gtk-tree-model>) iter)
86
(error "This method needs to be overridden by a subclass."))
88
(export on-get-flags on-get-n-columns on-get-column-type
89
on-get-iter on-get-path on-get-value on-iter-next
90
on-iter-children on-iter-has-child on-iter-n-children
91
on-iter-nth-child on-iter-parent)
94
(define-public (gtk-tree-or-list-store-set store iter . args)
100
(define (gtk-tree-or-list-store-set store iter . args)
95
101
(or (even? (length args)) (scm-error 'gruntime-error "Invalid arguments"))
96
102
(let loop ((args args))
97
103
(if (eq? args '())
121
127
(apply gtk-text-buffer-create-tag buffer tag-name properties))
122
128
(export create-tag)
124
;; Make <gtk-message-dialog> have a specific metaclass so we can do
126
(define-class <gtk-message-dialog-class> ((class-of <gtk-message-dialog>)))
127
(especify-metaclass! <gtk-message-dialog> <gtk-message-dialog-class>)
128
(define-method (make-instance (class <gtk-message-dialog-class>) . initargs)
129
(let ((instance (allocate-instance class initargs))
130
(parent (get-keyword #:parent initargs #f))
131
(flags (get-keyword #:flags initargs #f))
132
(message-type (get-keyword #:message-type initargs 'error))
133
(buttons (get-keyword #:buttons initargs 'close))
134
(text (get-keyword #:text initargs "Error")))
135
(slot-set! instance 'gtype-instance
136
(%gtk-message-dialog-new parent flags message-type buttons text))
139
(define-public (gtk-stock-id nick)
130
(define (gtk-stock-id nick)
140
131
(string-append "gtk-" (symbol->string nick)))
142
(use-modules (gnome gw support modules))
144
(re-export-modules (gnome gw gdk)