chiark / gitweb /
Reintroduced a huge amount of bindings
[clg] / gtk / gtk.lisp
1 ;; Common Lisp bindings for GTK+ v2.0
2 ;; Copyright (C) 1999-2000 Espen S. Johnsen <espejohn@online.no>
3 ;;
4 ;; This library is free software; you can redistribute it and/or
5 ;; modify it under the terms of the GNU Lesser General Public
6 ;; License as published by the Free Software Foundation; either
7 ;; version 2 of the License, or (at your option) any later version.
8 ;;
9 ;; This library is distributed in the hope that it will be useful,
10 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 ;; Lesser General Public License for more details.
13 ;;
14 ;; You should have received a copy of the GNU Lesser General Public
15 ;; License along with this library; if not, write to the Free Software
16 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18 ;; $Id: gtk.lisp,v 1.2 2000-09-04 22:23:34 espen Exp $
19
20
21 (in-package "GTK")
22
23 ;;; Gtk version
24
25 (define-foreign check-version () string
26   (required-major unsigned-int)
27   (required-minor unsigned-int)
28   (required-micro unsigned-int))
29
30 (define-foreign query-version () nil
31   (major unsigned-int :out)
32   (minor unsigned-int :out)
33   (micro unsigned-int :out))
34
35 (defun gtk-version ()
36   (multiple-value-bind (major minor micro)
37       (query-version)
38     (if (zerop micro)
39         (format nil "Gtk+ v~A.~A" major minor) 
40       (format nil "Gtk+ v~A.~A.~A" major minor micro))))
41
42
43
44 ;;; should be moved to gobject
45
46
47
48 ;;; Label
49
50 (define-foreign label-new () label
51   (text string))
52
53 (define-foreign label-parse-uline () unsigned-int
54   (label label)
55   (string string))
56
57
58
59 ;;; Acccel label
60
61 (define-foreign accel-label-new () accel-label
62   (text string))
63
64 (define-foreign accel-label-refetch () boolean
65   (accel-label accel-label))
66
67
68
69 ;;; Tips query
70
71 (define-foreign tips-query-new () tips-query)
72
73 (define-foreign tips-query-start-query () nil
74   (tips-query tips-query))
75
76 (define-foreign tips-query-stop-query () nil
77   (tips-query tips-query))
78
79
80
81 ;;; Arrow
82
83 (define-foreign arrow-new () arrow
84   (arrow-type arrow-type)
85   (shadow-type shadow-type))
86
87
88
89 ;;; Pixmap
90
91 (defmethod initialize-instance ((pixmap pixmap) &rest initargs
92                                 &key source mask)
93   (declare (ignore initargs))
94   (call-next-method)
95   (if (typep source 'gdk:pixmap)
96       (pixmap-set pixmap source mask)
97     (multiple-value-bind (source mask) (gdk:pixmap-create source)
98       (pixmap-set pixmap source mask))))
99
100 (defun pixmap-new (source &optional mask)
101   (make-instance 'pixmap :source source :mask mask))
102
103 (define-foreign pixmap-set () nil
104   (pixmap pixmap)
105   (source gdk:pixmap)
106   (mask (or null gdk:bitmap)))
107
108 (defun (setf pixmap-source) (source pixmap)
109   (if (typep source 'gdk:pixmap)
110       (pixmap-set pximap source (pixmap-mask pixmap))
111     (multiple-value-bind (source mask) (gdk:pixmap-create source)
112       (pixmap-set pixmap source mask)))
113   source)
114
115 (defun (setf pixmap-mask) (mask pixmap)
116   (pixmap-set pximap (pixmap-source pixmap) mask)
117   mask)
118     
119 (define-foreign ("gtk_pixmap_get" pixmap-source) () nil
120   (pixmap pixmap)
121   (val gdk:pixmap :out)
122   (nil null))
123
124 (define-foreign ("gtk_pixmap_get" pixmap-mask) () nil
125   (pixmap pixmap)
126   (nil null)
127   (mask gdk:bitmap :out))
128
129
130
131 ;;; Bin
132
133 (defun bin-child (bin)
134   (first (container-children bin)))
135
136 (defun (setf bin-child) (child bin)
137   (let ((old-child (bin-child bin)))
138     (when old-child
139       (container-remove bin old-child)))
140   (container-add bin child)
141   child)
142
143
144
145 ;;; Alignment
146
147 (define-foreign alignment-new () alignment
148   (xalign single-float)
149   (ylign single-float)
150   (xscale single-float)
151   (yscale single-float))
152
153
154
155 ;;; Frame
156
157 (define-foreign frame-new (&optional label) frame
158   (label string))
159
160
161
162 ;;; Aspect frame
163
164 (define-foreign aspect-frame-new () alignment
165   (xalign single-float)
166   (ylign single-float)
167   (ratio single-float)
168   (obey-child boolean))
169
170
171
172 ;;; Button
173
174 (define-foreign %button-new () button)
175
176 (define-foreign %button-new-with-label () button
177   (label string))
178
179 (defun button-new (&optional label)
180   (if label
181       (%button-new-with-label label)
182     (%button-new)))
183
184 (defgeneric button-label (button))
185 (defgeneric (setf button-label) (label button))
186
187 (defmethod button-label ((button button))
188   (object-arg button "GtkButton::label"))
189
190 (defmethod (setf button-label) ((label string) (button button))
191   (setf (object-arg button "GtkButton::label") label))
192
193
194 (define-foreign button-pressed () nil
195   (button button))
196
197 (define-foreign button-released () nil
198   (button button))
199
200 (define-foreign button-clicked () nil
201   (button button))
202
203 (define-foreign button-enter () nil
204   (button button))
205
206 (define-foreign button-leave () nil
207   (button button))
208
209
210
211 ;;; Toggle button
212
213 (define-foreign %toggle-button-new () toggle-button)
214
215 (define-foreign %toggle-button-new-with-label () toggle-button
216   (label string))
217
218 (defun toggle-button-new (&optional label)
219   (if label
220       (%toggle-button-new-with-label label)
221     (%toggle-button-new)))
222
223 (define-foreign toggle-button-toggled () nil
224   (toggle-button toggle-button))
225
226
227
228 ;;; Check button
229
230 (define-foreign %check-button-new () check-button)
231
232 (define-foreign %check-button-new-with-label () check-button
233   (label string))
234
235 (defun check-button-new (&optional label)
236   (if label
237       (%check-button-new-with-label label)
238     (%check-button-new)))
239
240 (defmethod (setf button-label) ((label string) (button check-button))
241   (call-next-method)
242   (setf (misc-xalign (bin-child button)) 0.0)
243   label)
244
245
246
247 ;;; Radio button
248
249 (define-foreign %radio-button-new () radio-button
250   (group (or null radio-button-group)))
251
252 (define-foreign %radio-button-new-with-label-from-widget () radio-button
253   (widget (or null widget))
254   (label string))
255
256 (define-foreign %radio-button-new-from-widget () radio-button
257   (widget (or null widget)))
258
259 (define-foreign %radio-button-new-with-label () radio-button
260   (group (or null radio-button-group))
261   (label string))
262
263 (defun radio-button-new (group &key label from-widget)
264   (cond
265    ((and from-widget label)
266     (%radio-button-new-with-label-from-widget group label))
267    (from-widget
268     (%radio-button-new-from-widget group))
269    (label
270     (%radio-button-new-with-label group label))
271    (t
272     (%radio-button-new group))))
273     
274 ; (define-foreign radio-button-group () radio-button-group
275 ;   (radio-button radio-button))
276
277
278
279 ;;; Option menu
280
281 (define-foreign option-menu-new () option-menu)
282
283 (define-foreign %option-menu-set-menu () nil
284   (option-menu option-menu)
285   (menu widget))
286
287 (define-foreign %option-menu-remove-menu () nil
288   (option-menu option-menu))
289
290 (defun (setf option-menu-menu) (menu option-menu)
291   (if (not menu)
292       (%option-menu-remove-menu option-menu)
293     (%option-menu-set-menu option-menu menu))
294   menu)
295     
296
297
298 ;;; Item
299
300 (define-foreign item-select () nil
301   (item item))
302
303 (define-foreign item-deselect () nil
304   (item item))
305
306 (define-foreign item-toggle () nil
307   (item item))
308
309
310
311 ;;; Menu item
312
313 (define-foreign %menu-item-new () menu-item)
314
315 (define-foreign %menu-item-new-with-label () menu-item
316   (label string))
317
318 (defun menu-item-new (&optional label)
319   (if label
320       (%menu-item-new-with-label label)
321     (%menu-item-new)))
322
323 (defun (setf menu-item-label) (label menu-item)
324   (make-instance 'accel-label
325    :label label :xalign 0.0 :yalign 0.5 :accel-widget menu-item
326    :visible t :parent menu-item)
327   label)
328
329 (define-foreign %menu-item-set-submenu () nil
330   (menu-item menu-item)
331   (submenu menu))
332
333 (define-foreign %menu-item-remove-submenu () nil
334   (menu-item menu-item))
335
336 (defun (setf menu-item-submenu) (submenu menu-item)
337   (if (not submenu)
338       (%menu-item-remove-submenu menu-item)
339     (%menu-item-set-submenu menu-item submenu))
340   submenu)
341
342 (define-foreign %menu-item-configure () nil
343   (menu-item menu-item)
344   (show-toggle-indicator boolean)
345   (show-submenu-indicator boolean))
346
347 (defun (setf menu-item-toggle-indicator-p) (show menu-item)
348   (%menu-item-configure
349    menu-item
350    show
351    (menu-item-submenu-indicator-p menu-item))
352   show)
353
354 (defun (setf menu-item-submenu-indicator-p) (show menu-item)
355   (%menu-item-configure
356    menu-item
357    (menu-item-toggle-indicator-p menu-item)
358    show))
359
360 (define-foreign menu-item-select () nil
361   (menu-item menu-item))
362
363 (define-foreign menu-item-deselect () nil
364   (menu-item menu-item))
365
366 (define-foreign menu-item-activate () nil
367   (menu-item menu-item))
368
369 (define-foreign menu-item-right-justify () nil
370   (menu-item menu-item))
371
372
373
374 ;;; Check menu item
375
376 (define-foreign %check-menu-item-new
377     () check-menu-item)
378
379 (define-foreign %check-menu-item-new-with-label () check-menu-item
380   (label string))
381
382 (defun check-menu-item-new (&optional label)
383   (if label
384       (%check-menu-item-new-with-label label)
385     (%check-menu-item-new)))
386
387 (define-foreign check-menu-item-toggled () nil
388   (check-menu-item check-menu-item))
389
390
391
392 ;;; Radio menu item
393
394 (define-foreign %radio-menu-item-new
395                  () radio-menu-item
396   (group (or null radio-menu-item-group)))
397
398 (define-foreign %radio-menu-item-new-with-label () radio-menu-item
399   (group (or null radio-menu-item-group))
400   (label string))
401
402 (defun radio-menu-item-new (group &optional label)
403   (if label
404       (%radio-menu-item-new-with-label group label)
405     (%radio-menu-item-new group)))
406
407
408
409 ;;; Tearoff menu item
410
411 (define-foreign tearoff-menu-item-new () tearoff-menu-item)
412
413
414
415 ;;; List item
416
417 (define-foreign %list-item-new () list-item)
418
419 (define-foreign %list-item-new-with-label () list-item
420   (label string))
421
422 (defun list-item-new (&optional label)
423   (if label
424       (%list-item-new-with-label label)
425     (%list-item-new)))
426       
427 (define-foreign list-item-select () nil
428   (list-item list-item))
429
430 (define-foreign list-item-deselect () nil
431   (list-item list-item))
432
433
434
435 ;;; Tree item
436
437 (define-foreign %tree-item-new () tree-item)
438
439 (define-foreign %tree-item-new-with-label () tree-item
440   (label string))
441
442 (defun tree-item-new (&optional label)
443   (if label
444       (%tree-item-new-with-label label)
445     (%tree-item-new)))
446
447 (define-foreign %tree-item-set-subtree () nil
448   (tree-item tree-item)
449   (subtree tree))
450
451 (define-foreign %tree-item-remove-subtree () nil
452   (tree-item tree-item))
453
454 (defun (setf tree-item-subtree) (subtree tree-item)
455   (if subtree
456       (%tree-item-set-subtree tree-item subtree)
457     (%tree-item-remove-subtree tree-item))
458   subtree)
459
460 (define-foreign tree-item-select () nil
461   (tree-item tree-item))
462
463 (define-foreign tree-item-deselect () nil
464   (tree-item tree-item))
465
466 (define-foreign tree-item-expand () nil
467   (tree-item tree-item))
468
469 (define-foreign tree-item-collapse () nil
470   (tree-item tree-item))
471
472
473
474 ;;; Window
475
476 (define-foreign window-new () window
477   (type window-type))
478
479 (define-foreign %window-set-wmclass () nil
480   (window window)
481   (wmclass-name string)
482   (wmclass-class string))
483
484 (defun (setf window-wmclass) (wmclass window)
485   (%window-set-wmclass window (svref wmclass 0) (svref wmclass 1))
486   (values (svref wmclass 0) (svref wmclass 1)))
487
488 ;; gtkglue.c
489 (define-foreign window-wmclass () nil
490   (window window)
491   (wmclass-name string :out)
492   (wmclass-class string :out))
493
494 (define-foreign window-add-accel-group () nil
495   (window window)
496   (accel-group accel-group))
497
498 (define-foreign window-remove-accel-group () nil
499   (window window)
500   (accel-group accel-group))
501
502 (define-foreign window-activate-focus () int
503   (window window))
504
505 (define-foreign window-activate-default () int
506   (window window))
507
508 (define-foreign window-set-transient-for () nil
509   (window window)
510   (parent window))
511
512 ;(define-foreign window-set-geometry-hints)
513
514
515
516 ;;; Color selection dialog
517
518 ; (define-foreign color-selection-dialog-new () color-selection-dialog
519 ;   (title string))
520
521
522
523 ;;; Dialog
524
525 (define-foreign dialog-new () dialog)
526
527
528
529 ;;; Input dialog
530
531 (define-foreign input-dialog-new () dialog)
532
533
534
535 ;;; File selection
536
537 ; (define-foreign file-selection-new () file-selection
538 ;   (title string))
539
540 ; (define-foreign file-selection-complete () nil
541 ;   (file-selection file-selection)
542 ;   (pattern string))
543
544 ; (define-foreign file-selection-show-fileop-buttons () nil
545 ;   (file-selection file-selection))
546
547 ; (define-foreign file-selection-hide-fileop-buttons () nil
548 ;   (file-selection file-selection))
549
550
551
552 ;;; Handle box
553
554 (define-foreign handle-box-new () handle-box)
555
556
557
558 ;;; Scrolled window
559
560 (define-foreign scrolled-window-new
561     (&optional hadjustment vadjustment) scrolled-window
562   (hadjustment (or null adjustment))
563   (vadjustment (or null adjustment)))
564
565 (defun (setf scrolled-window-scrollbar-policy) (policy window)
566   (setf (scrolled-window-hscrollbar-policy window) policy)
567   (setf (scrolled-window-vscrollbar-policy window) policy))
568
569 (define-foreign scrolled-window-add-with-viewport () nil
570    (scrolled-window scrolled-window)
571    (child widget))
572
573
574
575 ;;; Viewport
576
577 (define-foreign viewport-new () viewport
578   (hadjustment adjustment)
579   (vadjustment adjustment))
580   
581
582
583 ;;; Box
584
585 (define-foreign box-pack-start () nil
586   (box box)
587   (child widget)
588   (expand boolean)
589   (fill boolean)
590   (padding unsigned-int))
591
592 (define-foreign box-pack-end () nil
593   (box box)
594   (child widget)
595   (expand boolean)
596   (fill boolean)
597   (padding unsigned-int))
598
599 (defun box-pack (box child &key (pack :start) (expand t) (fill t) (padding 0))
600   (if (eq pack :start)
601       (box-pack-start box child expand fill padding)
602     (box-pack-end box child expand fill padding)))
603
604 (define-foreign box-reorder-child () nil
605   (box box)
606   (child widget)
607   (position int))
608
609 (define-foreign box-query-child-packing () nil
610   (box box)
611   (child widget :out)
612   (expand boolean :out)
613   (fill boolean :out)
614   (padding unsigned-int :out)
615   (pack-type pack-type :out))
616
617 (define-foreign box-set-child-packing () nil
618   (box box)
619   (child widget)
620   (expand boolean)
621   (fill boolean)
622   (padding unsigned-int)
623   (pack-type pack-type))
624
625
626
627 ;;; Button box
628
629 (define-foreign ("gtk_button_box_get_child_size_default"
630                   button-box-default-child-size) () nil
631   (min-width int :out)
632   (min-height int :out))
633
634 (define-foreign ("gtk_button_box_get_child_ipadding_default"
635                   button-box-default-child-ipadding) () nil
636   (ipad-x int :out)
637   (ipad-y int :out))
638
639 (define-foreign %button-box-set-child-size-default () nil
640   (min-width int)
641   (min-height int))
642
643 (defun (setf button-box-default-child-size) (size)
644   (%button-box-set-child-size-default (svref size 0) (svref size 1))
645   (values (svref size 0) (svref size 1)))
646
647 (define-foreign %button-box-set-child-ipadding-default () nil
648   (ipad-x int)
649   (ipad-y int))
650
651 (defun (setf button-box-default-child-ipadding) (ipad)
652   (%button-box-set-child-ipadding-default (svref ipad 0) (svref ipad 1))
653   (values (svref ipad 0) (svref ipad 1)))
654
655 (define-foreign
656     ("gtk_button_box_get_child_size" button-box-child-size) () nil
657   (button-box button-box)
658   (min-width int :out)
659   (min-height int :out))
660
661 (define-foreign
662     ("gtk_button_box_get_child_ipadding" button-box-child-ipadding) () nil
663   (button-box button-box)  
664   (ipad-x int :out)
665   (ipad-y int :out))
666
667 (define-foreign %button-box-set-child-size () nil
668   (button-box button-box)
669   (min-width int)
670   (min-height int))
671
672 (defun (setf button-box-child-size) (size button-box)
673   (%button-box-set-child-size button-box (svref size 0) (svref size 1))
674   (values (svref size 0) (svref size 1)))
675
676 (define-foreign %button-box-set-child-ipadding () nil
677   (button-box button-box)
678   (ipad-x int)
679   (ipad-y int))
680
681 (defun (setf button-box-child-ipadding) (ipad button-box)
682   (%button-box-set-child-ipadding  button-box (svref ipad 0) (svref ipad 1))
683   (values (svref ipad 0) (svref ipad 1)))
684
685
686
687 ;;; HButton box
688
689 (define-foreign hbutton-box-new () hbutton-box)
690
691 (define-foreign ("gtk_hbutton_box_get_spacing_default"
692                   hbutton-box-default-spacing) () int)
693
694 (define-foreign ("gtk_hbutton_box_set_spacing_default"
695                   (setf hbutton-box-default-spacing)) () nil
696   (spacing int))
697   
698 (define-foreign ("gtk_hbutton_box_get_layout_default"
699                   hbutton-box-default-layout) () button-box-style)
700
701 (define-foreign ("gtk_hbutton_box_set_layout_default"
702                   (setf hbutton-box-default-layout)) () nil
703   (layout button-box-style))
704
705
706
707 ;;; VButton Box
708
709 (define-foreign vbutton-box-new () vbutton-box)
710
711 (define-foreign ("gtk_vbutton_box_get_spacing_default"
712                   vbutton-box-default-spacing) () int)
713
714 (define-foreign ("gtk_vbutton_box_set_spacing_default"
715                   (setf vbutton-box-default-spacing)) () nil
716   (spacing int))
717   
718 (define-foreign ("gtk_vbutton_box_get_layout_default"
719                   vbutton-box-default-layout) () button-box-style)
720
721 (define-foreign ("gtk_vbutton_box_set_layout_default"
722                   (setf vbutton-box-default-layout)) () nil
723   (layout button-box-style))
724
725
726
727 ;;; VBox
728
729 (define-foreign vbox-new () vbox
730   (homogeneous boolean)
731   (spacing int))
732
733
734
735 ;;; Color selection
736
737 ; (define-foreign color-selection-new () color-selection)
738
739 ; ;; gtkglue.c
740 ; (define-foreign %color-selection-set-color-by-values () nil
741 ;   (colorsel color-selection)
742 ;   (red double-float)
743 ;   (green double-float)
744 ;   (blue double-float)
745 ;   (opacity double-float))
746
747 ; (defun (setf color-selection-color) (color colorsel)
748 ;   (%color-selection-set-color-by-values
749 ;    colorsel
750 ;    (svref color 0) (svref color 1) (svref color 2)
751 ;    (if (> (length color) 3)
752 ;        (svref color 3)
753 ;      1.0))
754 ;   color)
755
756 ; ;; gtkglue.c
757 ; (define-foreign %color-selection-get-color-as-values () nil
758 ;   (colorsel color-selection)
759 ;   (red double-float :out)
760 ;   (green double-float :out)
761 ;   (blue double-float :out)
762 ;   (opacity double-float :out))
763
764 ; (defun color-selection-color (colorsel)
765 ;   (multiple-value-bind (red green blue opacity)
766 ;       (%color-selection-get-color-as-values colorsel)
767 ;     (if (color-selection-use-opacity-p colorsel)
768 ;       (vector red green blue opacity)
769 ;       (vector red green blue))))
770
771
772
773
774 ; ;;; Gamma curve
775
776 ; (define-foreign gamma-curve-new () gamma-curve)
777
778
779
780 ;;; HBox
781
782 (define-foreign hbox-new () hbox
783   (homogeneous boolean)
784   (spacing int))
785
786
787
788 ;;; Combo
789
790 (define-foreign combo-new () combo)
791
792 (define-foreign combo-set-value-in-list () nil
793   (combo combo)
794   (val boolean)
795   (ok-if-empty boolean))
796
797 ; (define-foreign ("gtk_combo_set_item_string" (setf combo-item-string)) () nil
798 ;   (combo combo)
799 ;   (item item)
800 ;   (item-value string))
801
802 (define-foreign %combo-set-popdown-strings () nil
803   (combo combo)
804   (strings (double-list string)))
805
806 (defun (setf combo-popdown-strings) (strings combo)
807   (%combo-set-popdown-strings combo strings)
808   strings)
809
810 (define-foreign combo-disable-activate () nil
811   (combo combo))
812
813
814
815 ;;; Statusbar
816
817 (define-foreign statusbar-new () statusbar)
818
819 (define-foreign
820     ("gtk_statusbar_get_context_id" statusbar-context-id) () unsigned-int
821   (statusbar statusbar)
822   (context-description string))
823
824 (define-foreign statusbar-push () unsigned-int
825   (statusbar statusbar)
826   (context-id unsigned-int)  
827   (text string))
828
829 (define-foreign statusbar-pop () nil
830   (statusbar statusbar)
831   (context-id unsigned-int))
832
833 (define-foreign statusbar-remove () nil
834   (statusbar statusbar)
835   (context-id unsigned-int)
836   (message-id unsigned-int))
837
838
839
840 ;;; Fixed
841
842 (define-foreign fixed-new () fixed)
843
844 (define-foreign fixed-put () nil
845   (fixed fixed)
846   (widget widget)
847   (x (signed 16))
848   (y (signed 16)))
849
850 (define-foreign fixed-move () nil
851   (fixed fixed)
852   (widget widget)
853   (x (signed 16))
854   (y (signed 16)))
855
856
857
858 ; ;;; Notebook
859
860 (define-foreign notebook-new () notebook)
861
862 (define-foreign ("gtk_notebook_insert_page_menu" notebook-insert-page)
863     (notebook position child tab-label &optional menu-label) nil
864   (notebook notebook)
865   (child widget)
866   ((if (stringp tab-label)
867        (label-new tab-label)
868      tab-label) widget)
869   ((if (stringp menu-label)
870        (label-new menu-label)
871      menu-label) (or null widget))
872   (position int))
873
874 (defun notebook-append-page (notebook child tab-label &optional menu-label)
875   (notebook-insert-page notebook -1 child tab-label menu-label))
876
877 (defun notebook-prepend-page (notebook child tab-label &optional menu-label)
878   (notebook-insert-page notebook 0 child tab-label menu-label))
879   
880 (define-foreign notebook-remove-page () nil
881   (notebook notebook)
882   (page-num int))
883
884 ; (defun notebook-current-page-num (notebook)
885 ;   (let ((page-num (notebook-current-page notebook)))
886 ;     (if (= page-num -1)
887 ;       nil
888 ;       page-num)))
889
890 (define-foreign ("gtk_notebook_get_nth_page" notebook-nth-page-child) () widget
891   (notebook notebook)
892   (page-num int))
893
894 (defun notebook-page-child (notebook)
895   (notebook-nth-page-child notebook (notebook-page notebook)))
896
897 (define-foreign %notebook-page-num () int
898   (notebook notebook)
899   (child widget))
900
901 (defun notebook-child-num (notebook child)
902   (let ((page-num (%notebook-page-num notebook child)))
903     (if (= page-num -1)
904         nil
905       page-num)))
906
907 (define-foreign notebook-next-page () nil
908   (notebook notebook))
909
910 (define-foreign notebook-prev-page () nil
911   (notebook notebook))
912
913 (define-foreign notebook-popup-enable () nil
914   (notebook notebook))
915
916 (define-foreign notebook-popup-disable () nil
917   (notebook notebook))
918
919 (define-foreign
920     ("gtk_notebook_get_tab_label" notebook-tab-label) (notebook ref) widget
921   (notebook notebook)
922   ((if (typep ref 'widget)
923        ref
924      (notebook-nth-page-child notebook ref))
925    widget))
926
927 (define-foreign %notebook-set-tab-label () nil
928   (notebook notebook)
929   (reference widget)
930   (tab-label widget))
931
932 (defun (setf notebook-tab-label) (tab-label notebook reference)
933   (let ((tab-label-widget (if (stringp tab-label)
934                               (label-new tab-label)
935                             tab-label)))
936     (%notebook-set-tab-label
937      notebook
938      (if (typep reference 'widget)
939          reference
940        (notebook-nth-page-child notebook reference))
941      tab-label-widget)
942     (when (stringp tab-label)
943       (widget-unref tab-label-widget))
944     tab-label-widget))
945    
946 (define-foreign
947     ("gtk_notebook_get_menu_label" notebook-menu-label) (notebook ref) widget
948   (notebook notebook)
949   ((if (typep ref 'widget)
950        ref
951      (notebook-nth-page-child notebook ref))
952    widget))
953
954 (define-foreign %notebook-set-menu-label () nil
955   (notebook notebook)
956   (reference widget)
957   (menu-label widget))
958
959 (defun (setf notebook-menu-label) (menu-label notebook reference)
960   (let ((menu-label-widget (if (stringp menu-label)
961                               (label-new menu-label)
962                             menu-label)))
963     (%notebook-set-menu-label
964      notebook
965      (if (typep reference 'widget)
966          reference
967        (notebook-nth-page-child notebook reference))
968      menu-label-widget)
969     (when (stringp menu-label)
970       (widget-unref menu-label-widget))
971     menu-label-widget))
972
973 (define-foreign notebook-query-tab-label-packing (notebook ref) nil
974   (notebook notebook)
975   ((if (typep ref 'widget)
976        ref
977      (notebook-nth-page-child notebook ref))
978    widget)
979   (expand boolean :out)
980   (fill boolean :out)
981   (pack-type pack-type :out))
982
983 (define-foreign
984     notebook-set-tab-label-packing (notebook ref expand fill pack-type) nil
985   (notebook notebook)
986   ((if (typep ref 'widget)
987        ref
988      (notebook-nth-page-child notebook ref))
989    widget)
990   (expand boolean)
991   (fill boolean)
992   (pack-type pack-type))
993
994 (define-foreign notebook-reorder-child () nil
995   (notebook notebook)
996   (child widget)
997   (position int))
998
999
1000
1001 ; ;;; Font selection
1002
1003
1004
1005
1006 ; ;;; Paned
1007
1008 ; (define-foreign paned-add1 () nil
1009 ;   (paned paned)
1010 ;   (child widget))
1011
1012 ; (define-foreign paned-add2 () nil
1013 ;   (paned paned)
1014 ;   (child widget))
1015
1016 ; (define-foreign paned-pack1 () nil
1017 ;   (paned paned)
1018 ;   (child widget)
1019 ;   (resize boolean)
1020 ;   (shrink boolean))
1021
1022 ; (define-foreign paned-pack2 () nil
1023 ;   (paned paned)
1024 ;   (child widget)
1025 ;   (resize boolean)
1026 ;   (shrink boolean))
1027
1028 ; ; (define-foreign ("gtk_paned_set_position" (setf paned-position)) () nil
1029 ; ;   (paned paned)
1030 ; ;   (position int))
1031
1032 ; ;; gtkglue.c
1033 ; (define-foreign paned-child1 () widget
1034 ;   (paned paned)
1035 ;   (resize boolean :out)
1036 ;   (shrink boolean :out))
1037
1038 ; ;; gtkglue.c
1039 ; (define-foreign paned-child2 () widget
1040 ;   (paned paned)
1041 ;   (resize boolean :out)
1042 ;   (shrink boolean :out))
1043
1044 ; (define-foreign vpaned-new () vpaned)
1045
1046 ; (define-foreign hpaned-new () hpaned)
1047
1048
1049
1050 ; ;;; Layout
1051
1052 ; (define-foreign layout-new (&optional hadjustment vadjustment) layout
1053 ;   (hadjustment (or null adjustment))
1054 ;   (vadjustment (or null adjustment)))
1055
1056 ; (define-foreign layout-put () nil
1057 ;   (layout layout)
1058 ;   (widget widget)
1059 ;   (x int) (y int))
1060
1061 ; (define-foreign layout-move () nil
1062 ;   (layout layout)
1063 ;   (widget widget)
1064 ;   (x int) (y int))
1065
1066 ; (define-foreign %layout-set-size () nil
1067 ;   (layout layout)
1068 ;   (width int)
1069 ;   (height int))
1070
1071 ; (defun (setf layout-size) (size layout)
1072 ;   (%layout-set-size layout (svref size 0) (svref size 1))
1073 ;   (values (svref size 0) (svref size 1)))
1074
1075 ; ;; gtkglue.c
1076 ; (define-foreign layout-size () nil
1077 ;   (layout layout)
1078 ;   (width int :out)
1079 ;   (height int :out))
1080
1081 ; (define-foreign layout-freeze () nil
1082 ;   (layout layout))
1083
1084 ; (define-foreign layout-thaw () nil
1085 ;   (layout layout))
1086
1087 ; (define-foreign layout-offset () nil
1088 ;   (layout layout)
1089 ;   (x int :out)
1090 ;   (y int :out))
1091
1092
1093
1094 ;;; List
1095
1096 ; (define-foreign list-new () list-widget)
1097
1098 ; (define-foreign list-insert-items () nil
1099 ;   (list list-widget)
1100 ;   (items (list list-item))
1101 ;   (position int))
1102
1103 ; (define-foreign list-append-items () nil
1104 ;   (list list-widget)
1105 ;   (items (double-list list-item)))
1106
1107 ; (define-foreign list-prepend-items () nil
1108 ;   (list list-widget)
1109 ;   (items (double-list list-item)))
1110
1111 ; (define-foreign %list-remove-items () nil
1112 ;   (list list-widget)
1113 ;   (items (double-list list-item)))
1114
1115 ; (define-foreign %list-remove-items-no-unref () nil
1116 ;   (list list-widget)
1117 ;   (items (double-list list-item)))
1118
1119 ; (defun list-remove-items (list items &key no-unref)
1120 ;   (if no-unref
1121 ;       (%list-remove-items-no-unref list items)
1122 ;     (%list-remove-items list items)))
1123
1124 ; (define-foreign list-clear-items () nil
1125 ;   (list list-widget)
1126 ;   (start int)
1127 ;   (end int))
1128
1129 ; (define-foreign list-select-item () nil
1130 ;   (list list-widget)
1131 ;   (item int))
1132
1133 ; (define-foreign list-unselect-item () nil
1134 ;   (list list-widget)
1135 ;   (item int))
1136
1137 ; (define-foreign list-select-child () nil
1138 ;   (list list-widget)
1139 ;   (child widget))
1140
1141 ; (define-foreign list-unselect-child () nil
1142 ;   (list list-widget)
1143 ;   (child widget))
1144
1145 ; (define-foreign list-child-position () int
1146 ;   (list list-widget)
1147 ;   (child widget))
1148
1149 ; (define-foreign list-extend-selection () nil
1150 ;   (list list-widget)
1151 ;   (scroll-type scroll-type)
1152 ;   (position single-float)
1153 ;   (auto-start-selection boolean))
1154
1155 ; (define-foreign list-start-selection () nil
1156 ;   (list list-widget))
1157
1158 ; (define-foreign list-end-selection () nil
1159 ;   (list list-widget))
1160
1161 ; (define-foreign list-select-all () nil
1162 ;   (list list-widget))
1163
1164 ; (define-foreign list-unselect-all () nil
1165 ;   (list list-widget))
1166
1167 ; (define-foreign list-scroll-horizontal () nil
1168 ;   (list list-widget)
1169 ;   (scroll-type scroll-type)
1170 ;   (position single-float))
1171
1172 ; (define-foreign list-scroll-vertical () nil
1173 ;   (list list-widget)
1174 ;   (scroll-type scroll-type)
1175 ;   (position single-float))
1176
1177 ; (define-foreign list-toggle-add-mode () nil
1178 ;   (list list-widget))
1179
1180 ; (define-foreign list-toggle-focus-row () nil
1181 ;   (list list-widget))
1182
1183 ; (define-foreign list-toggle-row () nil
1184 ;   (list list-widget)
1185 ;   (item list-item))
1186
1187 ; (define-foreign list-undo-selection () nil
1188 ;   (list list-widget))
1189
1190 ; (define-foreign list-end-drag-selection () nil
1191 ;   (list list-widget))
1192
1193 ; ;; gtkglue.c
1194 ; (define-foreign list-selection () (double-list list-item)
1195 ;   (list list-widget))
1196
1197
1198
1199 ;;; Menu shell
1200
1201 (define-foreign menu-shell-insert () nil
1202   (menu-shell menu-shell)
1203   (menu-item menu-item)
1204   (position int))
1205
1206 (defun menu-shell-append (menu-shell menu-item)
1207   (menu-shell-insert menu-shell menu-item -1))
1208
1209 (defun menu-shell-prepend (menu-shell menu-item)
1210   (menu-shell-insert menu-shell menu-item 0))
1211
1212 (define-foreign menu-shell-deactivate () nil
1213   (menu-shell menu-shell))
1214
1215 (define-foreign menu-shell-select-item () nil
1216   (menu-shell menu-shell)
1217   (menu-item menu-item))
1218
1219 (define-foreign menu-shell-deselect () nil
1220   (menu-shell menu-shell))
1221
1222 (define-foreign menu-shell-activate-item () nil
1223   (menu-shell menu-shell)
1224   (menu-item menu-item)
1225   (fore-deactivate boolean))
1226
1227
1228
1229 ; ;;; Menu bar
1230
1231 (define-foreign menu-bar-new () menu-bar)
1232
1233 ; (define-foreign menu-bar-insert () nil
1234 ;   (menu-bar menu-bar)
1235 ;   (menu menu)
1236 ;   (position int))
1237
1238 ; (defun menu-bar-append (menu-bar menu)
1239 ;   (menu-bar-insert menu-bar menu -1))
1240
1241 ; (defun menu-bar-prepend (menu-bar menu)
1242 ;   (menu-bar-insert menu-bar menu 0))
1243
1244
1245
1246 ; ;;; Menu
1247
1248 (define-foreign menu-new () menu)
1249
1250 ; (defun menu-insert (menu menu-item position)
1251 ;   (menu-shell-insert menu menu-item position))
1252
1253 ; (defun menu-append (menu menu-item)
1254 ;   (menu-shell-append menu menu-item))
1255
1256 ; (defun menu-prepend (menu menu-item)
1257 ;   (menu-shell-prepend menu menu-item))
1258
1259 ;(defun menu-popup ...)
1260
1261 (define-foreign menu-reposition () nil
1262   (menu menu))
1263
1264 (define-foreign menu-popdown () nil
1265   (menu menu))
1266
1267 (define-foreign ("gtk_menu_get_active" menu-active) () widget
1268   (menu menu))
1269
1270 (define-foreign ("gtk_menu_set_active" (setf menu-active)) () nil
1271   (menu menu)
1272   (index unsigned-int))
1273
1274 ;(defun menu-attach-to-widget ...)
1275
1276 (define-foreign menu-detach () nil
1277   (menu menu))
1278
1279 (define-foreign ("gtk_menu_get_attach_widget" menu-attach-widget) () widget
1280   (menu menu))
1281
1282 (define-foreign menu-reorder-child () nil
1283   (menu menu)
1284   (menu-item menu-item)
1285   (position int))
1286
1287
1288
1289 ;;; Packer
1290
1291 (define-foreign packer-new () packer)
1292
1293 (define-foreign packer-add
1294     (packer child side anchor
1295      &key
1296      options
1297      (border-width (packer-default-border-width packer))
1298      (pad-x (packer-default-pad-x packer))
1299      (pad-y (packer-default-pad-y packer))
1300      (ipad-x (packer-default-ipad-x packer))
1301      (ipad-y (packer-default-ipad-y packer))) nil
1302   (packer packer)
1303   (child widget)
1304   (side side-type)
1305   (anchor anchor-type)
1306   (options packer-options)
1307   (border-width unsigned-int)
1308   (pad-x unsigned-int)
1309   (pad-y unsigned-int)
1310   (ipad-x unsigned-int)
1311   (ipad-y unsigned-int))
1312
1313 (define-foreign packer-set-child-packing () nil
1314   (packer packer)
1315   (child widget)
1316   (side side-type)
1317   (anchor anchor-type)
1318   (options packer-options)
1319   (border-width unsigned-int)
1320   (pad-x unsigned-int)
1321   (pad-y unsigned-int)
1322   (ipad-x unsigned-int)
1323   (ipad-y unsigned-int))
1324
1325 (define-foreign packer-reorder-child () nil
1326   (packer packer)
1327   (child widget)
1328   (position int))
1329
1330
1331
1332 ;;; Table
1333
1334 (define-foreign table-new () table
1335   (rows unsigned-int)
1336   (columns unsigned-int)
1337   (homogeneous boolean))
1338
1339 (define-foreign table-resize () nil
1340   (table table)
1341   (rows unsigned-int)
1342   (columns unsigned-int))
1343
1344 (define-foreign table-attach (table child left right top bottom
1345                                &key (x-options '(:expand :fill))
1346                                     (y-options '(:expand :fill))
1347                                     (x-padding 0) (y-padding 0)) nil
1348   (table table)
1349   (child widget)
1350   (left unsigned-int)
1351   (right unsigned-int)
1352   (top unsigned-int)
1353   (bottom unsigned-int)
1354   (x-options attach-options)
1355   (y-options attach-options)
1356   (x-padding unsigned-int)
1357   (y-padding unsigned-int))
1358
1359 (define-foreign %table-set-row-spacing () nil
1360   (table table)
1361   (row unsigned-int)
1362   (spacing unsigned-int))
1363
1364 (defun (setf table-row-spacing) (spacing table row)
1365   (%table-set-row-spacing table row spacing)
1366   spacing)
1367
1368 ;; gtkglue.c
1369 (define-foreign table-row-spacing (table row) unsigned-int
1370   (table table)
1371   ((progn
1372      (assert (and (>= row 0) (< row (table-rows table))))
1373      row) unsigned-int))
1374
1375 (define-foreign %table-set-col-spacing () nil
1376   (table table)
1377   (col unsigned-int)
1378   (spacing unsigned-int))
1379
1380 (defun (setf table-column-spacing) (spacing table column)
1381   (%table-set-column-spacing table column spacing)
1382   spacing)
1383
1384 ;; gtkglue.c
1385 (define-foreign table-column-spacing (table col) unsigned-int
1386   (table table)
1387   ((progn
1388      (assert (and (>= col 0) (< col (table-columns table))))
1389      col) unsigned-int))
1390
1391
1392 (defun %set-table-child-option (object slot flag value)
1393   (let ((options (container-child-slot-value object slot)))
1394     (cond
1395      ((and value (not (member flag options)))
1396       (setf (container-child-slot-value object slot) (cons flag options)))
1397      ((and (not value) (member flag options))
1398       (setf
1399        (container-child-slot-value object slot) (delete flag options))))))
1400
1401 (macrolet ((define-option-accessor (name slot flag)
1402              `(progn
1403                 (defun ,name (object)
1404                   (member ,flag (container-child-slot-value object ,slot)))
1405                 (defun (setf ,name) (value object)
1406                   (%set-table-child-option object ,slot ,flag value)))))
1407   (define-option-accessor table-child-x-expand-p :x-options :expand)
1408   (define-option-accessor table-child-y-expand-p :y-options :expand)
1409   (define-option-accessor table-child-x-shrink-p :x-options :shrink)
1410   (define-option-accessor table-child-y-shrink-p :y-options :shrink)
1411   (define-option-accessor table-child-x-fill-p :x-options :fill)
1412   (define-option-accessor table-child-y-fill-p :y-options :fill))
1413
1414
1415
1416 ;;; Toolbar
1417
1418 (define-foreign toolbar-new () toolbar
1419   (orientation orientation)
1420   (style toolbar-style))
1421
1422 ;; gtkglue.c
1423 (define-foreign toolbar-num-children () int
1424   (toolbar toolbar))
1425
1426 (defun %toolbar-position-num (toolbar position)
1427   (case position
1428     (:prepend 0)
1429     (:append (toolbar-num-children toolbar))
1430     (t
1431      (assert (and (>= position 0) (< position (toolbar-num-children toolbar))))
1432      position)))
1433
1434 (define-foreign %toolbar-insert-element () widget
1435   (toolbar toolbar)
1436   (type toolbar-child-type)
1437   (widget (or null widget))
1438   (text string)
1439   (tooltip-text string)
1440   (tooltip-private-text string)
1441   (icon (or null widget))
1442   (nil null)
1443   (nil null)
1444   (position int))
1445
1446 (defun toolbar-insert-element (toolbar position
1447                                &key tooltip-text tooltip-private-text
1448                                type widget icon text callback)
1449   (let* ((icon-widget (typecase icon
1450                        ((or null widget) icon)
1451                        (t (pixmap-new icon))))
1452          (toolbar-child
1453           (%toolbar-insert-element
1454            toolbar (or type (and widget :widget) :button)
1455            widget text tooltip-text tooltip-private-text icon-widget
1456            (%toolbar-position-num toolbar position))))
1457     (when callback
1458       (signal-connect toolbar-child 'clicked callback))
1459     toolbar-child))
1460
1461 (defun toolbar-append-element (toolbar &key tooltip-text tooltip-private-text
1462                                type widget icon text callback)
1463   (toolbar-insert-element
1464    toolbar :append :type type :widget widget :icon icon :text text
1465    :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text
1466    :callback callback))
1467
1468 (defun toolbar-prepend-element (toolbar &key tooltip-text tooltip-private-text
1469                                 type widget icon text callback)
1470   (toolbar-insert-element
1471    toolbar :prepend :type type :widget widget :icon icon :text text
1472    :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text
1473    :callback callback))
1474
1475 (defun toolbar-insert-space (toolbar position)
1476   (toolbar-insert-element toolbar position :type :space))
1477
1478 (defun toolbar-append-space (toolbar)
1479   (toolbar-insert-space toolbar :append))
1480
1481 (defun toolbar-prepend-space (toolbar)
1482   (toolbar-insert-space toolbar :prepend))
1483
1484 (defun toolbar-insert-widget (toolbar widget position &key tooltip-text
1485                               tooltip-private-text callback)
1486   (toolbar-insert-element
1487    toolbar position :widget widget :tooltip-text tooltip-text
1488    :tooltip-private-text tooltip-private-text :callback callback))
1489  
1490 (defun toolbar-append-widget (toolbar widget &key tooltip-text
1491                               tooltip-private-text callback)
1492   (toolbar-insert-widget
1493    toolbar widget :append :tooltip-text tooltip-text
1494    :tooltip-private-text tooltip-private-text :callback callback))
1495
1496 (defun toolbar-prepend-widget (toolbar widget &key tooltip-text
1497                                tooltip-private-text callback)
1498   (toolbar-insert-widget
1499    toolbar widget :prepend :tooltip-text tooltip-text
1500    :tooltip-private-text tooltip-private-text :callback callback))
1501
1502 (defun toolbar-insert-item (toolbar text icon position &key tooltip-text
1503                             tooltip-private-text callback)
1504   (toolbar-insert-element
1505    toolbar position :text text :icon icon :callback callback
1506    :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text))
1507
1508 (defun toolbar-append-item (toolbar text icon &key tooltip-text
1509                             tooltip-private-text callback)
1510   (toolbar-insert-item
1511    toolbar text icon :append :callback callback
1512    :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text))
1513
1514                        
1515 (defun toolbar-prepend-item (toolbar text icon &key tooltip-text
1516                              tooltip-private-text callback)
1517   (toolbar-insert-item
1518    toolbar text icon :prepend :callback callback
1519    :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text))
1520
1521 (defun toolbar-enable-tooltips (toolbar)
1522   (setf (toolbar-tooltips-p toolbar) t))
1523
1524 (defun toolbar-disable-tooltips (toolbar)
1525   (setf (toolbar-tooltips-p toolbar) nil))
1526
1527
1528
1529 ;;; Tree
1530
1531 (define-foreign tree-new () tree)
1532
1533 (define-foreign tree-append () nil
1534   (tree tree)
1535   (tree-item tree-item))
1536
1537 (define-foreign tree-prepend () nil
1538   (tree tree)
1539   (tree-item tree-item))
1540
1541 (define-foreign tree-insert () nil
1542   (tree tree)
1543   (tree-item tree-item)
1544   (position int))
1545
1546 (define-foreign tree-remove-items () nil
1547   (tree tree)
1548   (items (double-list tree-item)))
1549
1550 (define-foreign tree-clear-items () nil
1551   (tree tree)
1552   (start int)
1553   (end int))
1554
1555 (define-foreign tree-select-item () nil
1556   (tree tree)
1557   (item int))
1558
1559 (define-foreign tree-unselect-item () nil
1560   (tree tree)
1561   (item int))
1562
1563 (define-foreign tree-select-child () nil
1564   (tree tree)
1565   (tree-item tree-item))
1566
1567 (define-foreign tree-unselect-child () nil
1568   (tree tree)
1569   (tree-item tree-item))
1570
1571 (define-foreign tree-child-position () int
1572   (tree tree)
1573   (tree-item tree-item))
1574
1575 (defun root-tree-p (tree)
1576   (eq (tree-root-tree tree) tree))
1577
1578 ;; gtkglue.c
1579 (define-foreign tree-selection () (double-list tree-item)
1580   (tree tree))
1581
1582
1583
1584 ;;; Calendar
1585
1586 (define-foreign calendar-new () calendar)
1587
1588 (define-foreign calendar-select-month () int
1589   (calendar calendar)
1590   (month unsigned-int)
1591   (year unsigned-int))
1592
1593 (define-foreign calendar-select-day () nil
1594   (calendar calendar)
1595   (day unsigned-int))
1596
1597 (define-foreign calendar-mark-day () int
1598   (calendar calendar)
1599   (day unsigned-int))
1600
1601 (define-foreign calendar-unmark-day () int
1602   (calendar calendar)
1603   (day unsigned-int))
1604
1605 (define-foreign calendar-clear-marks () nil
1606   (calendar calendar))
1607
1608 (define-foreign calendar-display-options () nil
1609   (calendar calendar)
1610   (options calendar-display-options))
1611
1612 (define-foreign ("gtk_calendar_get_date" calendar-date) () nil
1613   (calendar calendar)
1614   (year unsigned-int :out)
1615   (month unsigned-int :out)
1616   (day unsigned-int :out))
1617
1618 (define-foreign calendar-freeze () nil
1619   (calendar calendar))
1620
1621 (define-foreign calendar-thaw () nil
1622   (calendar calendar))
1623
1624
1625
1626 ;;; Drawing area
1627
1628 ; (define-foreign drawing-area-new () drawing-area)
1629
1630 ; (define-foreign ("gtk_drawing_area_size" %drawing-area-set-size) () nil
1631 ;   (drawing-area drawing-area)
1632 ;   (width int)
1633 ;   (height int))
1634
1635 ; (defun (setf drawing-area-size) (size drawing-area)
1636 ;   (%drawing-area-set-size drawing-area (svref size 0) (svref size 1))
1637 ;   (values (svref size 0) (svref size 1)))
1638
1639 ; ;; gtkglue.c
1640 ; (define-foreign ("gtk_drawing_area_get_size" drawing-area-size) () nil
1641 ;   (drawing-area drawing-area)
1642 ;   (width int :out)
1643 ;   (height int :out))
1644
1645
1646
1647 ; ;;; Curve
1648
1649
1650
1651 ; ;;; Editable
1652
1653 (define-foreign editable-select-region (editable &optional (start 0) end) nil
1654   (editable editable)
1655   (start int)
1656   ((or end -1) int))
1657
1658 (define-foreign editable-insert-text
1659     (editable text &optional (position 0)) nil
1660   (editable editable)
1661   (text string)
1662   ((length text) int)
1663   ((or position -1) int :in-out))
1664
1665 (defun editable-append-text (editable text)
1666   (editable-insert-text editable text nil))
1667
1668 (defun editable-prepend-text (editable text)
1669   (editable-insert-text editable text 0))
1670
1671 (define-foreign editable-delete-text (editable &optional (start 0) end) nil
1672   (editable editable)
1673   (start int)
1674   ((or end -1) int))
1675
1676 (define-foreign ("gtk_editable_get_chars" editable-text)
1677     (editable &optional (start 0) end) string
1678   (editable editable)
1679   (start int)
1680   ((or end -1) int))
1681
1682 (defun (setf editable-text) (text editable)
1683   (if text
1684       (editable-delete-text
1685        editable
1686        (editable-insert-text editable text))
1687     (editable-delete-text editable))
1688   text)
1689
1690 (define-foreign editable-cut-clipboard () nil
1691   (editable editable))
1692
1693 (define-foreign editable-copy-clipboard () nil
1694   (editable editable))
1695
1696 (define-foreign editable-paste-clipboard () nil
1697   (editable editable))
1698
1699 (define-foreign editable-claim-selection () nil
1700   (editable editable)
1701   (claim boolean)
1702   (time unsigned-int))
1703
1704 (define-foreign editable-delete-selection () nil
1705   (editable editable))
1706
1707 (define-foreign editable-changed () nil
1708   (editable editable))
1709
1710
1711
1712 ;;; Entry
1713
1714 (define-foreign %entry-new() entry)
1715
1716 (define-foreign %entry-new-with-max-length () entry
1717   (max (unsigned 16)))
1718
1719 (defun entry-new (&optional max)
1720   (if max
1721       (%entry-new-with-max-length max)
1722     (%entry-new)))
1723
1724
1725 ;;; Spin button
1726
1727 (define-foreign spin-button-new () spin-button
1728   (adjustment adjustment)
1729   (climb-rate single-float)
1730   (digits unsigned-int))
1731
1732 (defun spin-button-value-as-int (spin-button)
1733   (round (spin-button-value spin-button)))
1734
1735 (define-foreign spin-button-spin () nil
1736   (spin-button spin-button)
1737   (direction spin-type)
1738   (increment single-float))
1739
1740 (define-foreign spin-button-update () nil
1741   (spin-button spin-button))
1742
1743
1744
1745 ; ;;; Ruler
1746
1747 (define-foreign ruler-set-range () nil
1748   (ruler ruler)
1749   (lower single-float)
1750   (upper single-float)
1751   (position single-float)
1752   (max-size single-float))
1753
1754 (define-foreign ruler-draw-ticks () nil
1755   (ruler ruler))
1756
1757 (define-foreign ruler-draw-pos () nil
1758   (ruler ruler))
1759
1760
1761
1762 ; ;;; Range
1763
1764 ; (define-foreign range-draw-background () nil
1765 ;   (range range))
1766
1767 ; (define-foreign range-clear-background () nil
1768 ;   (range range))
1769
1770 ; (define-foreign range-draw-trough () nil
1771 ;   (range range))
1772
1773 ; (define-foreign range-draw-slider () nil
1774 ;   (range range))
1775
1776 ; (define-foreign range-draw-step-forw () nil
1777 ;   (range range))
1778
1779 ; (define-foreign range-slider-update () nil
1780 ;   (range range))
1781
1782 ; (define-foreign range-trough-click () int
1783 ;   (range range)
1784 ;   (x int)
1785 ;   (y int)
1786 ;   (jump-perc single-float :out))
1787
1788 ; (define-foreign range-default-hslider-update () nil
1789 ;   (range range))
1790
1791 ; (define-foreign range-default-vslider-update () nil
1792 ;   (range range))
1793
1794 ; (define-foreign range-default-htrough-click () int
1795 ;   (range range)
1796 ;   (x int)
1797 ;   (y int)
1798 ;   (jump-perc single-float :out))
1799
1800 ; (define-foreign range-default-vtrough-click () int
1801 ;   (range range)
1802 ;   (x int)
1803 ;   (y int)
1804 ;   (jump-perc single-float :out))
1805
1806 ; (define-foreign range-default-hmotion () int
1807 ;   (range range)
1808 ;   (x-delta int)
1809 ;   (y-delta int))
1810
1811 ; (define-foreign range-default-vmotion () int
1812 ;   (range range)
1813 ;   (x-delta int)
1814 ;   (y-delta int))
1815
1816
1817
1818 ; ;;; Scale
1819
1820 ; (define-foreign scale-draw-value () nil
1821 ;   (scale scale))
1822
1823 ; (define-foreign hscale-new () hscale
1824 ;   (adjustment adjustment))
1825
1826 ; (define-foreign vscale-new () hscale
1827 ;   (adjustment adjustment))
1828
1829
1830
1831 ; ;;; Scrollbar
1832
1833 ; (define-foreign hscrollbar-new () hscrollbar
1834 ;   (adjustment adjustment))
1835
1836 ; (define-foreign vscrollbar-new () vscrollbar
1837 ;   (adjustment adjustment))
1838
1839
1840
1841 ; ;;; Separator
1842
1843 (define-foreign vseparator-new () vseparator)
1844
1845 (define-foreign hseparator-new () hseparator)
1846
1847
1848
1849 ; ;;; Preview
1850
1851
1852
1853 ; ;;; Progress
1854
1855 ; (define-foreign progress-configure () adjustment
1856 ;   (progress progress)
1857 ;   (value single-float)
1858 ;   (min single-float)
1859 ;   (max single-float))
1860
1861 ; (define-foreign ("gtk_progress_get_text_from_value"
1862 ;                 progress-text-from-value) () string
1863 ;   (progress progress))
1864
1865 ; (define-foreign ("gtk_progress_get_percentage_from_value"
1866 ;                 progress-percentage-from-value) () single-float
1867 ;   (progress progress))
1868
1869
1870
1871 ; ;;; Progress bar
1872
1873 ; (define-foreign %progress-bar-new () progress-bar)
1874
1875 ; (define-foreign %progress-bar-new-with-adjustment () progress-bar
1876 ;   (adjustment adjustment))
1877
1878 ; (defun progress-bar-new (&optional adjustment)
1879 ;   (if adjustment
1880 ;       (%progress-bar-new-with-adjustment adjustment)
1881 ;     (%progress-bar-new)))
1882
1883 ; (define-foreign progress-bar-update () nil
1884 ;   (progress-bar progress-bar)
1885 ;   (percentage single-float))
1886
1887
1888
1889 ;;; Adjustment
1890
1891 (define-foreign adjustment-new () adjustment
1892   (value single-float)
1893   (lower single-float)
1894   (upper single-float)
1895   (step-increment single-float)
1896   (page-increment single-float)
1897   (page-size single-float))
1898
1899 (define-foreign adjustment-changed () nil
1900   (adjustment adjustment))
1901
1902 (define-foreign adjustment-value-changed () nil
1903   (adjustment adjustment))
1904
1905 (define-foreign adjustment-clamp-page () nil
1906   (adjustment adjustment)
1907   (lower single-float)
1908   (upper single-float))
1909
1910
1911
1912 ;;; Tooltips
1913
1914 ; (define-foreign tooltips-new () tooltips)
1915
1916 ; (define-foreign tooltips-enable () nil
1917 ;   (tooltips tooltips))
1918
1919 ; (define-foreign tooltips-disable () nil
1920 ;   (tooltips tooltips))
1921
1922 ; (define-foreign tooltips-set-tip () nil
1923 ;   (tooltips tooltips)
1924 ;   (widget widget)
1925 ;   (tip-text string)
1926 ;   (tip-private string))
1927
1928 ; (declaim (inline tooltips-set-colors-real))
1929 ; (define-foreign ("gtk_tooltips_set_colors" tooltips-set-colors-real) () nil
1930 ;   (tooltips tooltips)
1931 ;   (background gdk:color)
1932 ;   (foreground gdk:color))
1933
1934 ; (defun tooltips-set-colors (tooltips background foreground)
1935 ;   (gdk:with-colors ((background background)
1936 ;                   (foreground foreground))
1937 ;     (tooltips-set-colors-real tooltips background foreground)))
1938
1939 ; (define-foreign tooltips-force-window () nil
1940 ;   (tooltips tooltips))
1941
1942
1943
1944
1945 ; ;;; Rc
1946
1947 ; (define-foreign rc-add-default-file (filename) nil
1948 ;   ((namestring (truename filename)) string))
1949
1950 ; (define-foreign rc-parse (filename) nil
1951 ;   ((namestring (truename filename)) string))
1952
1953 ; (define-foreign rc-parse-string () nil
1954 ;   (rc-string string))
1955
1956 ; (define-foreign rc-reparse-all () nil)
1957
1958 ; ;(define-foreign rc-get-style () style
1959 ; ;  (widget widget))
1960
1961
1962
1963 ;;; Accelerator Groups
1964
1965 (define-foreign accel-group-new () accel-group)
1966
1967 (define-foreign accel-group-get-default () accel-group)
1968
1969 (deftype-method alien-ref accel-group (type-spec)
1970   (declare (ignore type-spec))
1971   '%accel-group-ref)
1972
1973 (deftype-method alien-unref accel-group (type-spec)
1974   (declare (ignore type-spec))
1975   '%accel-group-unref)
1976
1977 (define-foreign %accel-group-ref () accel-group
1978   (accel-group (or accel-group pointer)))
1979
1980 (define-foreign %accel-group-unref () nil
1981   (accel-group (or accel-group pointer)))
1982
1983 (define-foreign accel-group-activate (accel-group key modifiers) boolean
1984   (accel-group accel-group)
1985   ((gdk:keyval-from-name key) unsigned-int)
1986   (modifiers gdk:modifier-type))
1987
1988 (define-foreign accel-groups-activate (object key modifiers) boolean
1989   (object object)
1990   ((gdk:keyval-from-name key) unsigned-int)
1991   (modifiers gdk:modifier-type))
1992
1993 (define-foreign accel-group-attach () nil
1994   (accel-group accel-group)
1995   (object object))
1996
1997 (define-foreign accel-group-detach () nil
1998   (accel-group accel-group)
1999   (object object))
2000
2001 (define-foreign accel-group-lock () nil
2002   (accel-group accel-group))
2003
2004 (define-foreign accel-group-unlock () nil
2005   (accel-group accel-group))
2006
2007
2008 ;;; Accelerator Groups Entries
2009
2010 (define-foreign accel-group-get-entry (accel-group key modifiers) accel-entry
2011   (accel-group accel-group)
2012   ((gdk:keyval-from-name key) unsigned-int)
2013   (modifiers gdk:modifier-type))
2014
2015 (define-foreign accel-group-lock-entry (accel-group key modifiers) nil
2016   (accel-group accel-group)
2017   ((gdk:keyval-from-name key) unsigned-int)
2018   (modifiers gdk:modifier-type))
2019
2020 (define-foreign accel-group-unlock-entry (accel-group key modifiers) nil
2021   (accel-group accel-group)
2022   ((gdk:keyval-from-name key) unsigned-int)
2023   (modifiers gdk:modifier-type))
2024
2025 (define-foreign accel-group-add
2026     (accel-group key modifiers flags object signal) nil
2027   (accel-group accel-group)
2028   ((gdk:keyval-from-name key) unsigned-int)
2029   (modifiers gdk:modifier-type)
2030   (flags accel-flags)
2031   (object object)
2032   ((name-to-string signal) string))
2033
2034 (define-foreign accel-group-add (accel-group key modifiers object) nil
2035   (accel-group accel-group)
2036   ((gdk:keyval-from-name key) unsigned-int)
2037   (modifiers gdk:modifier-type)
2038   (object object))
2039
2040
2041 ;;; Accelerator Signals
2042
2043 (define-foreign accel-group-handle-add
2044     (object signal-id accel-group key modifiers flags) nil
2045   (object object)
2046   (signal-id unsigned-int)
2047   (accel-group accel-group)
2048   ((gdk:keyval-from-name key) unsigned-int)
2049   (modifiers gdk:modifier-type)
2050   (flags accel-flags))
2051
2052 (define-foreign accel-group-handle-remove
2053     (object accel-group key modifiers) nil
2054   (object object)
2055   (accel-group accel-group)
2056   ((gdk:keyval-from-name key) unsigned-int)
2057   (modifiers gdk:modifier-type))
2058
2059
2060
2061 ;;; Style
2062
2063 ; (define-foreign style-new () style)
2064
2065 ; (define-foreign style-copy () style
2066 ;   (style style))
2067
2068 ; (define-foreign style-ref () style
2069 ;   (style style))
2070
2071 ; (define-foreign style-unref () nil
2072 ;   (style style))
2073
2074 ; (define-foreign style-get-color () gdk:color
2075 ;   (style style)
2076 ;   (color-type color-type)
2077 ;   (state-type state-type))
2078
2079 ; (define-foreign
2080 ;     ("gtk_style_set_color" style-set-color-from-color) () gdk:color
2081 ;   (style style)
2082 ;   (color-type color-type)
2083 ;   (state-type state-type)
2084 ;   (color gdk:color))
2085
2086 ; (defun style-set-color (style color-type state-type color)
2087 ;   (gdk:with-colors ((color color))
2088 ;     (style-set-color-from-color style color-type state-type color)))
2089
2090 ; (define-foreign ("gtk_style_get_font" style-font) () gdk:font
2091 ;   (style style))
2092
2093 ; (define-foreign style-set-font () gdk:font
2094 ;   (style style)
2095 ;   (font gdk:font))
2096
2097 ; (defun (setf style-font) (font style)
2098 ;   (let ((font (gdk:ensure-font font)))
2099 ;     (gdk:font-unref (style-font style))
2100 ;     (style-set-font style font)))
2101
2102 ; (defun style-fg (style state)
2103 ;   (style-get-color style :foreground state))
2104
2105 ; (defun (setf style-fg) (color style state)
2106 ;   (style-set-color style :foreground state color))
2107
2108 ; (defun style-bg (style state)
2109 ;   (style-get-color style :background state))
2110
2111 ; (defun (setf style-bg) (color style state)
2112 ;   (style-set-color style :background state color))
2113
2114 ; (defun style-text (style state)
2115 ;   (style-get-color style :text state))
2116
2117 ; (defun (setf style-text) (color style state)
2118 ;   (style-set-color style :text state color))
2119
2120 ; (defun style-base (style state)
2121 ;   (style-get-color style :base state))
2122
2123 ; (defun (setf style-base) (color style state)
2124 ;   (style-set-color style :base state color))
2125
2126 ; (defun style-white (style)
2127 ;   (style-get-color style :white :normal))
2128
2129 ; (defun (setf style-white) (color style)
2130 ;   (style-set-color style :white :normal color))
2131
2132 ; (defun style-black (style)
2133 ;   (style-get-color style :black :normal))
2134
2135 ; (defun (setf style-black) (color style)
2136 ;   (style-set-color style :black :normal color))
2137
2138 ; (define-foreign style-get-gc
2139 ;     (style color-type &optional (state-type :normal)) gdk:gc
2140 ;   (style style)
2141 ;   (color-type color-type)
2142 ;   (state-type state-type))
2143
2144
2145
2146
2147
2148
2149
2150