X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/f36ca6af731aaec31d2ee56ec1cb19ce6cf8d835..842e5ffe2acf8474415544a32657c5948d72a2c4:/gtk/gtk.lisp diff --git a/gtk/gtk.lisp b/gtk/gtk.lisp index 7dce09d..af78c09 100644 --- a/gtk/gtk.lisp +++ b/gtk/gtk.lisp @@ -1,5 +1,5 @@ ;; Common Lisp bindings for GTK+ v2.0 -;; Copyright (C) 1999-2000 Espen S. Johnsen +;; Copyright (C) 1999-2001 Espen S. Johnsen ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public @@ -15,19 +15,19 @@ ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -;; $Id: gtk.lisp,v 1.2 2000-09-04 22:23:34 espen Exp $ +;; $Id: gtk.lisp,v 1.30 2005-01-12 13:38:18 espen Exp $ (in-package "GTK") ;;; Gtk version -(define-foreign check-version () string +(defbinding check-version () (copy-of string) (required-major unsigned-int) (required-minor unsigned-int) (required-micro unsigned-int)) -(define-foreign query-version () nil +(defbinding query-version () nil (major unsigned-int :out) (minor unsigned-int :out) (micro unsigned-int :out)) @@ -39,1628 +39,1714 @@ (defun gtk-version () (format nil "Gtk+ v~A.~A" major minor) (format nil "Gtk+ v~A.~A.~A" major minor micro)))) +(defbinding get-default-language () (copy-of pango:language)) -;;; should be moved to gobject +;;;; Initalization +(defbinding (gtk-init "gtk_parse_args") () nil + "Initializes the library without opening the display." + (nil null) + (nil null)) +(defun clg-init (&optional display) + "Initializes the system and starts the event handling" + (unless (gdk:display-get-default) + (gdk:gdk-init) + (gtk-init) + (prog1 + (gdk:display-open display) + (system:add-fd-handler + (gdk:display-connection-number) :input #'main-iterate-all) + (setq lisp::*periodic-polling-function* #'main-iterate-all) + (setq lisp::*max-event-to-sec* 0) + (setq lisp::*max-event-to-usec* 1000)))) -;;; Label - -(define-foreign label-new () label - (text string)) -(define-foreign label-parse-uline () unsigned-int - (label label) - (string string)) +;;; Acccel group ;;; Acccel label -(define-foreign accel-label-new () accel-label - (text string)) - -(define-foreign accel-label-refetch () boolean +(defbinding accel-label-refetch () boolean (accel-label accel-label)) +;;; Accessible -;;; Tips query +(defbinding accessible-connect-widget-destroyed () nil + (accessible accessible)) -(define-foreign tips-query-new () tips-query) -(define-foreign tips-query-start-query () nil - (tips-query tips-query)) - -(define-foreign tips-query-stop-query () nil - (tips-query tips-query)) +;;; Adjustment +(defmethod initialize-instance ((adjustment adjustment) &key value) + (prog1 + (call-next-method) + ;; we need to make sure that the value is set last, otherwise it + ;; may be outside current limits and ignored + (when value + (setf (slot-value adjustment 'value) value)))) -;;; Arrow +(defbinding adjustment-changed () nil + (adjustment adjustment)) -(define-foreign arrow-new () arrow - (arrow-type arrow-type) - (shadow-type shadow-type)) +(defbinding adjustment-value-changed () nil + (adjustment adjustment)) +(defbinding adjustment-clamp-page () nil + (adjustment adjustment) + (lower single-float) + (upper single-float)) -;;; Pixmap +;;; Alignment -(defmethod initialize-instance ((pixmap pixmap) &rest initargs - &key source mask) - (declare (ignore initargs)) - (call-next-method) - (if (typep source 'gdk:pixmap) - (pixmap-set pixmap source mask) - (multiple-value-bind (source mask) (gdk:pixmap-create source) - (pixmap-set pixmap source mask)))) - -(defun pixmap-new (source &optional mask) - (make-instance 'pixmap :source source :mask mask)) - -(define-foreign pixmap-set () nil - (pixmap pixmap) - (source gdk:pixmap) - (mask (or null gdk:bitmap))) - -(defun (setf pixmap-source) (source pixmap) - (if (typep source 'gdk:pixmap) - (pixmap-set pximap source (pixmap-mask pixmap)) - (multiple-value-bind (source mask) (gdk:pixmap-create source) - (pixmap-set pixmap source mask))) - source) - -(defun (setf pixmap-mask) (mask pixmap) - (pixmap-set pximap (pixmap-source pixmap) mask) - mask) - -(define-foreign ("gtk_pixmap_get" pixmap-source) () nil - (pixmap pixmap) - (val gdk:pixmap :out) - (nil null)) +(defbinding alignment-set () nil + (alognment alignment) + (x-align single-float) + (y-align single-float) + (x-scale single-float) + (y-scale single-float)) + +(defbinding alignment-get-padding () nil + (alognment alignment) + (top unsigned-int :out) + (bottom unsigned-int :out) + (left unsigned-int :out) + (right unsigned-int :out)) + +(defbinding alignment-set-padding () nil + (alognment alignment) + (top unsigned-int) + (bottom unsigned-int) + (left unsigned-int) + (right unsigned-int)) -(define-foreign ("gtk_pixmap_get" pixmap-mask) () nil - (pixmap pixmap) - (nil null) - (mask gdk:bitmap :out)) +;;; Aspect frame ;;; Bin -(defun bin-child (bin) - (first (container-children bin))) - (defun (setf bin-child) (child bin) - (let ((old-child (bin-child bin))) - (when old-child - (container-remove bin old-child))) + (when-bind (current-child (bin-child bin)) + (container-remove bin current-child)) (container-add bin child) child) +(defmethod create-callback-function ((bin bin) function arg1) + (if (eq arg1 :child) + #'(lambda (&rest args) + (apply function (bin-child bin) (rest args))) + (call-next-method))) -;;; Alignment - -(define-foreign alignment-new () alignment - (xalign single-float) - (ylign single-float) - (xscale single-float) - (yscale single-float)) - - +;;; Box -;;; Frame +(defbinding box-pack-start () nil + (box box) + (child widget) + (expand boolean) + (fill boolean) + (padding unsigned-int)) -(define-foreign frame-new (&optional label) frame - (label string)) +(defbinding box-pack-end () nil + (box box) + (child widget) + (expand boolean) + (fill boolean) + (padding unsigned-int)) +(defun box-pack (box child &key end (expand t) (fill t) (padding 0)) + (if end + (box-pack-end box child expand fill padding) + (box-pack-start box child expand fill padding))) +(defbinding box-reorder-child () nil + (box box) + (child widget) + (position int)) -;;; Aspect frame +(defbinding box-query-child-packing () nil + (box box) + (child widget) + (expand boolean :out) + (fill boolean :out) + (padding unsigned-int :out) + (pack-type pack-type :out)) -(define-foreign aspect-frame-new () alignment - (xalign single-float) - (ylign single-float) - (ratio single-float) - (obey-child boolean)) +(defbinding box-set-child-packing () nil + (box box) + (child widget) + (expand boolean) + (fill boolean) + (padding unsigned-int) + (pack-type pack-type)) ;;; Button -(define-foreign %button-new () button) - -(define-foreign %button-new-with-label () button - (label string)) - -(defun button-new (&optional label) - (if label - (%button-new-with-label label) - (%button-new))) - -(defgeneric button-label (button)) -(defgeneric (setf button-label) (label button)) - -(defmethod button-label ((button button)) - (object-arg button "GtkButton::label")) - -(defmethod (setf button-label) ((label string) (button button)) - (setf (object-arg button "GtkButton::label") label)) +(defmethod initialize-instance ((button button) &rest initargs &key stock) + (if stock + (apply #'call-next-method button :label stock :use-stock t initargs) + (call-next-method))) -(define-foreign button-pressed () nil +(defbinding button-pressed () nil (button button)) -(define-foreign button-released () nil +(defbinding button-released () nil (button button)) -(define-foreign button-clicked () nil +(defbinding button-clicked () nil (button button)) -(define-foreign button-enter () nil +(defbinding button-enter () nil (button button)) -(define-foreign button-leave () nil +(defbinding button-leave () nil (button button)) -;;; Toggle button - -(define-foreign %toggle-button-new () toggle-button) - -(define-foreign %toggle-button-new-with-label () toggle-button - (label string)) - -(defun toggle-button-new (&optional label) - (if label - (%toggle-button-new-with-label label) - (%toggle-button-new))) +;;; Calendar -(define-foreign toggle-button-toggled () nil - (toggle-button toggle-button)) +(defbinding calendar-select-month () int + (calendar calendar) + (month unsigned-int) + (year unsigned-int)) +(defbinding calendar-select-day () nil + (calendar calendar) + (day unsigned-int)) +(defbinding calendar-mark-day () int + (calendar calendar) + (day unsigned-int)) -;;; Check button +(defbinding calendar-unmark-day () int + (calendar calendar) + (day unsigned-int)) -(define-foreign %check-button-new () check-button) +(defbinding calendar-clear-marks () nil + (calendar calendar)) -(define-foreign %check-button-new-with-label () check-button - (label string)) +(defbinding calendar-get-date () nil + (calendar calendar) + (year unsigned-int :out) + (month unsigned-int :out) + (day unsigned-int :out)) -(defun check-button-new (&optional label) - (if label - (%check-button-new-with-label label) - (%check-button-new))) +(defbinding calendar-freeze () nil + (calendar calendar)) -(defmethod (setf button-label) ((label string) (button check-button)) - (call-next-method) - (setf (misc-xalign (bin-child button)) 0.0) - label) +(defbinding calendar-thaw () nil + (calendar calendar)) +;;; Check menu item -;;; Radio button +(defbinding check-menu-item-toggled () nil + (check-menu-item check-menu-item)) -(define-foreign %radio-button-new () radio-button - (group (or null radio-button-group))) -(define-foreign %radio-button-new-with-label-from-widget () radio-button - (widget (or null widget)) - (label string)) -(define-foreign %radio-button-new-from-widget () radio-button - (widget (or null widget))) +;;; Clipboard -(define-foreign %radio-button-new-with-label () radio-button - (group (or null radio-button-group)) - (label string)) -(defun radio-button-new (group &key label from-widget) - (cond - ((and from-widget label) - (%radio-button-new-with-label-from-widget group label)) - (from-widget - (%radio-button-new-from-widget group)) - (label - (%radio-button-new-with-label group label)) - (t - (%radio-button-new group)))) - -; (define-foreign radio-button-group () radio-button-group -; (radio-button radio-button)) +;;; Color selection +(defbinding (color-selection-is-adjusting-p + "gtk_color_selection_is_adjusting") () boolean + (colorsel color-selection)) -;;; Option menu -(define-foreign option-menu-new () option-menu) +;;; Color selection dialog -- no functions -(define-foreign %option-menu-set-menu () nil - (option-menu option-menu) - (menu widget)) -(define-foreign %option-menu-remove-menu () nil - (option-menu option-menu)) -(defun (setf option-menu-menu) (menu option-menu) - (if (not menu) - (%option-menu-remove-menu option-menu) - (%option-menu-set-menu option-menu menu)) - menu) - +;;;; Combo Box +(defmethod initialize-instance ((combo-box combo-box) &rest initargs + &key model content active) + (remf initargs :active) + (if model + (apply #'call-next-method combo-box initargs) + (progn + (apply #'call-next-method combo-box + :model (make-instance 'list-store :column-types '(string)) + initargs) + (unless (typep combo-box 'combo-box-entry) + (let ((cell (make-instance 'cell-renderer-text))) + (cell-layout-pack combo-box cell :expand t) + (cell-layout-add-attribute combo-box cell :text 0))))) + (when content + (mapc #'(lambda (text) + (combo-box-append-text combo-box text)) + content)) + (when active + (setf (combo-box-active combo-box) active))) -;;; Item -(define-foreign item-select () nil - (item item)) +;; (defmethod shared-initialize :after ((combo-box combo-box) names &key active) +;; (when active +;; (signal-emit combo-box 'changed))) -(define-foreign item-deselect () nil - (item item)) +(defbinding combo-box-append-text () nil + (combo-box combo-box) + (text string)) -(define-foreign item-toggle () nil - (item item)) +(defbinding combo-box-insert-text () nil + (combo-box combo-box) + (position int) + (text string)) +(defbinding combo-box-prepend-text () nil + (combo-box combo-box) + (text string)) +#+gtk2.6 +(defbinding combo-box-get-active-text () string + (combo-box combo-box)) -;;; Menu item +(defbinding combo-box-popup () nil + (combo-box combo-box)) -(define-foreign %menu-item-new () menu-item) +(defbinding combo-box-popdown () nil + (combo-box combo-box)) -(define-foreign %menu-item-new-with-label () menu-item - (label string)) -(defun menu-item-new (&optional label) - (if label - (%menu-item-new-with-label label) - (%menu-item-new))) -(defun (setf menu-item-label) (label menu-item) - (make-instance 'accel-label - :label label :xalign 0.0 :yalign 0.5 :accel-widget menu-item - :visible t :parent menu-item) - label) +;;;; Combo Box Entry -(define-foreign %menu-item-set-submenu () nil - (menu-item menu-item) - (submenu menu)) +(defmethod initialize-instance ((combo-box-entry combo-box-entry) &key model) + (call-next-method) + (unless model + (setf (combo-box-entry-text-column combo-box-entry) 0))) -(define-foreign %menu-item-remove-submenu () nil - (menu-item menu-item)) -(defun (setf menu-item-submenu) (submenu menu-item) - (if (not submenu) - (%menu-item-remove-submenu menu-item) - (%menu-item-set-submenu menu-item submenu)) - submenu) +;;;; Dialog -(define-foreign %menu-item-configure () nil - (menu-item menu-item) - (show-toggle-indicator boolean) - (show-submenu-indicator boolean)) - -(defun (setf menu-item-toggle-indicator-p) (show menu-item) - (%menu-item-configure - menu-item - show - (menu-item-submenu-indicator-p menu-item)) - show) - -(defun (setf menu-item-submenu-indicator-p) (show menu-item) - (%menu-item-configure - menu-item - (menu-item-toggle-indicator-p menu-item) - show)) - -(define-foreign menu-item-select () nil - (menu-item menu-item)) +(defmethod shared-initialize ((dialog dialog) names &rest initargs + &key button buttons) + (declare (ignore button buttons)) + (prog1 + (call-next-method) + (initial-apply-add dialog #'dialog-add-button initargs :button :buttons))) + -(define-foreign menu-item-deselect () nil - (menu-item menu-item)) +(defun %dialog-find-response-id-num (dialog id &optional create-p error-p) + (or + (cadr (assoc id (rest (type-expand-1 'response-type)))) + (let ((response-ids (object-data dialog 'response-id-key))) + (cond + ((and response-ids (position id response-ids :test #'equal))) + (create-p + (cond + (response-ids + (vector-push-extend id response-ids) + (1- (length response-ids))) + (t + (setf + (object-data dialog 'response-id-key) + (make-array 1 :adjustable t :fill-pointer t :initial-element id)) + 0))) + (error-p + (error "Invalid response: ~A" id)))))) + +(defun %dialog-find-response-id (dialog response-id-num) + (if (< response-id-num 0) + (car + (rassoc + (list response-id-num) + (rest (type-expand-1 'response-type)) :test #'equal)) + (aref (object-data dialog 'response-id-key) response-id-num ))) + + +(defmethod signal-connect ((dialog dialog) signal function &key object after) + (let ((response-id-num (%dialog-find-response-id-num dialog signal))) + (cond + (response-id-num + (call-next-method + dialog 'response + #'(lambda (dialog id) + (when (= id response-id-num) + (cond + ((eq object t) (funcall function dialog)) + (object (funcall function object)) + (t (funcall function))))) + :object t :after after)) + ((call-next-method))))) -(define-foreign menu-item-activate () nil - (menu-item menu-item)) -(define-foreign menu-item-right-justify () nil - (menu-item menu-item)) +(defbinding dialog-run () nil + (dialog dialog)) +(defbinding dialog-response (dialog response-id) nil + (dialog dialog) + ((%dialog-find-response-id-num dialog response-id nil t) int)) -;;; Check menu item +(defbinding %dialog-add-button () button + (dialog dialog) + (text string) + (response-id-num int)) + +(defun dialog-add-button (dialog label &optional (response label) + &key default object after) + "Adds a button to the dialog." + (let* ((id (if (functionp response) + label + response)) + (id-num (%dialog-find-response-id-num dialog id t)) + (button (%dialog-add-button dialog label id-num))) + (when (functionp response) + (signal-connect dialog id response :object object :after after)) + (when default + (%dialog-set-default-response dialog id-num)) + button)) + + +(defbinding %dialog-add-action-widget () button + (dialog dialog) + (action-widget widget) + (response-id-num int)) + +(defun dialog-add-action-widget (dialog widget &optional (response widget) + &key default object after) + (let* ((id (if (functionp response) + widget + response)) + (id-num (%dialog-find-response-id-num dialog id t))) + (%dialog-add-action-widget dialog widget id-num) + (when (functionp response) + (signal-connect dialog id response :object object :after after)) + (when default + (%dialog-set-default-response dialog id-num)) + widget)) + + +(defbinding %dialog-set-default-response () nil + (dialog dialog) + (response-id-num int)) + +(defun dialog-set-default-response (dialog response-id) + (%dialog-set-default-response + dialog (%dialog-find-response-id-num dialog response-id nil t))) + +(defbinding dialog-set-response-sensitive (dialog response-id sensitive) nil + (dialog dialog) + ((%dialog-find-response-id-num dialog response-id nil t) int) + (sensitive boolean)) + +#+gtk2.6 +(defbinding alternative-dialog-button-order-p(&optional screen) + (screen (or null screen))) + +#+gtk2.6 +(defbinding (dialog-set-alternative-button-order + "gtk_dialog_set_alternative_button_order_from_array") + (dialog new-order) + (dialog dialog) + ((length new-order) int) + ((map 'vector #'(lambda (id) + (%dialog-find-response-id-num dialog id nil t)) + new-order) (vector int))) + + +(defmethod container-add ((dialog dialog) (child widget) &rest args) + (apply #'container-add (dialog-vbox dialog) child args)) + +(defmethod container-remove ((dialog dialog) (child widget)) + (container-remove (dialog-vbox dialog) child)) + +(defmethod container-children ((dialog dialog)) + (container-children (dialog-vbox dialog))) + +(defmethod (setf container-children) (children (dialog dialog)) + (setf (container-children (dialog-vbox dialog)) children)) -(define-foreign %check-menu-item-new - () check-menu-item) -(define-foreign %check-menu-item-new-with-label () check-menu-item - (label string)) +;;; Entry -(defun check-menu-item-new (&optional label) - (if label - (%check-menu-item-new-with-label label) - (%check-menu-item-new))) +(defbinding entry-get-layout-offsets () nil + (entry entry) + (x int :out) + (y int :out)) -(define-foreign check-menu-item-toggled () nil - (check-menu-item check-menu-item)) +(defbinding entry-layout-index-to-text-index () int + (entry entry) + (layout-index int)) +(defbinding entry-text-index-to-layout-index () int + (entry entry) + (text-index int)) -;;; Radio menu item +;;; Entry Completion -(define-foreign %radio-menu-item-new - () radio-menu-item - (group (or null radio-menu-item-group))) +(def-callback-marshal %entry-completion-match-func + (boolean entry-completion string (copy-of tree-iter))) -(define-foreign %radio-menu-item-new-with-label () radio-menu-item - (group (or null radio-menu-item-group)) - (label string)) +(defbinding entry-completion-set-match-func (completion function) nil + (completion entry-completion) + ((callback %entry-completion-match-func) pointer) + ((register-callback-function function) unsigned-int) + ((callback %destroy-user-data) pointer)) -(defun radio-menu-item-new (group &optional label) - (if label - (%radio-menu-item-new-with-label group label) - (%radio-menu-item-new group))) +(defbinding entry-completion-complete () nil + (completion entry-completion)) +#+gtk2.6 +(defbinding entry-completion-insert-prefix () nil + (completion entry-completion)) +(defbinding entry-completion-insert-action-text () nil + (completion entry-completion) + (index int) + (text string)) -;;; Tearoff menu item +(defbinding entry-completion-insert-action-markup () nil + (completion entry-completion) + (index int) + (markup string)) -(define-foreign tearoff-menu-item-new () tearoff-menu-item) +(defbinding entry-completion-delete-action () nil + (completion entry-completion) + (index int)) +;;; File Chooser -;;; List item +(defmethod initialize-instance ((file-chooser file-chooser) &rest initargs + &key filter filters shortcut-folder + shortcut-folders shortcut-folder-uti + shortcut-folder-uris) + (declare (ignore filter filters shortcut-folder shortcut-folders + shortcut-folder-uti shortcut-folder-uris)) + (prog1 + (call-next-method) + (initial-add file-chooser #'file-chooser-add-filter + initargs :filer :filters) + (initial-add file-chooser #'file-chooser-add-shortcut-folder + initargs :shortcut-folder :shortcut-folders) + (initial-add file-chooser #'file-chooser-add-shortcut-folder-uri + initargs :shortcut-folder-uri :shortcut-folders-uris))) -(define-foreign %list-item-new () list-item) -(define-foreign %list-item-new-with-label () list-item - (label string)) +(defbinding file-chooser-select-filename () boolean + (file-chooser file-chooser) + (filename string)) -(defun list-item-new (&optional label) - (if label - (%list-item-new-with-label label) - (%list-item-new))) - -(define-foreign list-item-select () nil - (list-item list-item)) +(defbinding file-chooser-unselect-filename () nil + (file-chooser file-chooser) + (filename string)) -(define-foreign list-item-deselect () nil - (list-item list-item)) +(defbinding file-chooser-select-all () boolean + (file-chooser file-chooser)) +(defbinding file-chooser-unselect-all () boolean + (file-chooser file-chooser)) + +(defbinding file-chooser-get-filenames () (gslist string) + (file-chooser file-chooser)) +(defbinding file-chooser-select-uri () boolean + (file-chooser file-chooser) + (uri string)) -;;; Tree item +(defbinding file-chooser-unselect-uri () nil + (file-chooser file-chooser) + (uri string)) -(define-foreign %tree-item-new () tree-item) +(defbinding file-chooser-get-uris () (gslist string) + (file-chooser file-chooser)) -(define-foreign %tree-item-new-with-label () tree-item - (label string)) +(defbinding file-chooser-add-filter () nil + (file-chooser file-chooser) + (filter file-filter)) -(defun tree-item-new (&optional label) - (if label - (%tree-item-new-with-label label) - (%tree-item-new))) +(defbinding file-chooser-remove-filter () nil + (file-chooser file-chooser) + (filter file-filter)) -(define-foreign %tree-item-set-subtree () nil - (tree-item tree-item) - (subtree tree)) +(defbinding file-chooser-list-filters () (gslist file-filter) + (file-chooser file-chooser)) -(define-foreign %tree-item-remove-subtree () nil - (tree-item tree-item)) +(defbinding file-chooser-add-shortcut-folder () boolean + (file-chooser file-chooser) + (folder string) + (nil null)) -(defun (setf tree-item-subtree) (subtree tree-item) - (if subtree - (%tree-item-set-subtree tree-item subtree) - (%tree-item-remove-subtree tree-item)) - subtree) +(defbinding file-chooser-remove-shortcut-folder () nil + (file-chooser file-chooser) + (folder string) + (nil null)) -(define-foreign tree-item-select () nil - (tree-item tree-item)) +(defbinding file-chooser-list-shortcut-folders () (gslist string) + (file-chooser file-chooser)) -(define-foreign tree-item-deselect () nil - (tree-item tree-item)) +(defbinding file-chooser-add-shortcut-folder-uri () boolean + (file-chooser file-chooser) + (uri string) + (nil null)) -(define-foreign tree-item-expand () nil - (tree-item tree-item)) +(defbinding file-chooser-remove-shortcut-folder-uri () nil + (file-chooser file-chooser) + (uri string) + (nil null)) -(define-foreign tree-item-collapse () nil - (tree-item tree-item)) +(defbinding file-chooser-list-shortcut-folder-uris () (gslist string) + (file-chooser file-chooser)) +;;; File Filter -;;; Window +(defmethod initialize-instance ((file-filter file-filter) &rest initargs + &key mime-type mime-types pattern patterns + pixbuf-formats) + (declare (ignore mime-type mime-types pattern patterns)) + (prog1 + (call-next-method) + (when pixbuf-formats + #-gtk2.6(warn "Initarg :PIXBUF-FORMATS not supportet in this version of Gtk") + #+gtk2.6(file-filter-add-pixbuf-formats file-filter)) + (initial-add file-filter #'file-filter-add-mime-type + initargs :mime-type :mime-types) + (initial-add file-filter #'file-filter-add-pattern + initargs :pattern :patterns))) -(define-foreign window-new () window - (type window-type)) -(define-foreign %window-set-wmclass () nil - (window window) - (wmclass-name string) - (wmclass-class string)) +(defbinding file-filter-add-mime-type () nil + (filter file-filter) + (mime-type string)) -(defun (setf window-wmclass) (wmclass window) - (%window-set-wmclass window (svref wmclass 0) (svref wmclass 1)) - (values (svref wmclass 0) (svref wmclass 1))) +(defbinding file-filter-add-pattern () nil + (filter file-filter) + (pattern string)) -;; gtkglue.c -(define-foreign window-wmclass () nil - (window window) - (wmclass-name string :out) - (wmclass-class string :out)) +#+gtk2.6 +(defbinding file-filter-add-pixbuf-formats () nil + (filter file-filter) + (pattern string)) -(define-foreign window-add-accel-group () nil - (window window) - (accel-group accel-group)) +(def-callback-marshal %file-filter-func (boolean file-filter-info)) -(define-foreign window-remove-accel-group () nil - (window window) - (accel-group accel-group)) +(defbinding file-filter-add-custom () nil + (filter file-filter) + (needed file-filter-flags) + ((callback %file-filter-func) pointer) + ((register-callback-function function) unsigned-int) + ((callback %destroy-user-data) pointer)) -(define-foreign window-activate-focus () int - (window window)) +(defbinding file-filter-get-needed () file-filter-flags + (filter file-filter)) -(define-foreign window-activate-default () int - (window window)) +(defbinding file-filter-filter () boolean + (filter file-filter) + (filter-info file-filter-info)) -(define-foreign window-set-transient-for () nil - (window window) - (parent window)) -;(define-foreign window-set-geometry-hints) +;;; Image +(defbinding image-set-from-file () nil + (image image) + (filename pathname)) -;;; Color selection dialog +(defmethod (setf image-pixmap) ((data vector) (image image)) + (multiple-value-bind (pixmap mask) (gdk:pixmap-create data) + (setf (image-pixmap image) pixmap) + (setf (image-mask image) mask))) -; (define-foreign color-selection-dialog-new () color-selection-dialog -; (title string)) +(defmethod initialize-instance ((image image) &rest initargs &key pixmap file) + (cond + ((typep pixmap 'vector) + (multiple-value-bind (pixmap mask) (gdk:pixmap-create pixmap) + (apply #'call-next-method image :pixmap pixmap :mask mask initargs))) + (file + (prog1 + (call-next-method) + (image-set-from-file image file))) + ((call-next-method)))) +(defun create-image-widget (source &optional mask) + (etypecase source + (gdk:pixbuf (make-instance 'image :pixbuf source)) + (string (make-instance 'image :stock source)) + (pathname (make-instance 'image :file source)) + ((or list vector) (make-instance 'image :pixmap source)) + (gdk:pixmap (make-instance 'image :pixmap source :mask mask)))) -;;; Dialog +;;; Image menu item -(define-foreign dialog-new () dialog) +(defmethod initialize-instance ((item image-menu-item) &rest initargs &key image) + (if (and image (not (typep image 'widget))) + (apply #'call-next-method item :image (create-image-widget image) initargs) + (call-next-method))) +(defmethod (setf image-menu-item-image) ((widget widget) (item image-menu-item)) + (setf (slot-value item 'image) widget)) -;;; Input dialog +(defmethod (setf image-menu-item-image) (image (item image-menu-item)) + (setf (image-menu-item-image item) (create-image-widget image))) -(define-foreign input-dialog-new () dialog) +;;; Label +(defbinding label-get-layout-offsets () nil + (label label) + (x int :out) + (y int :out)) -;;; File selection +(defbinding label-select-region () nil + (label label) + (start int) + (end int)) -; (define-foreign file-selection-new () file-selection -; (title string)) +(defbinding label-get-selection-bounds () boolean + (label label) + (start int :out) + (end int :out)) -; (define-foreign file-selection-complete () nil -; (file-selection file-selection) -; (pattern string)) -; (define-foreign file-selection-show-fileop-buttons () nil -; (file-selection file-selection)) -; (define-foreign file-selection-hide-fileop-buttons () nil -; (file-selection file-selection)) +;;; Radio button +(defbinding %radio-button-get-group () pointer + (radio-button radio-button)) +(defbinding %radio-button-set-group () nil + (radio-button radio-button) + (group pointer)) -;;; Handle box +(defmethod add-to-radio-group ((button1 radio-button) (button2 radio-button)) + "Add BUTTON1 to the group which BUTTON2 belongs to." + (%radio-button-set-group button1 (%radio-button-get-group button2))) -(define-foreign handle-box-new () handle-box) +(defmethod initialize-instance ((button radio-button) &key group) + (prog1 + (call-next-method) + (when group + (add-to-radio-group button group)))) +;;; Item -;;; Scrolled window +(defbinding item-select () nil + (item item)) -(define-foreign scrolled-window-new - (&optional hadjustment vadjustment) scrolled-window - (hadjustment (or null adjustment)) - (vadjustment (or null adjustment))) +(defbinding item-deselect () nil + (item item)) -(defun (setf scrolled-window-scrollbar-policy) (policy window) - (setf (scrolled-window-hscrollbar-policy window) policy) - (setf (scrolled-window-vscrollbar-policy window) policy)) +(defbinding item-toggle () nil + (item item)) -(define-foreign scrolled-window-add-with-viewport () nil - (scrolled-window scrolled-window) - (child widget)) +;;; Menu item -;;; Viewport +(defmethod initialize-instance ((item menu-item) &key label) + (prog1 + (call-next-method) + (when label + (setf (menu-item-label item) label)))) -(define-foreign viewport-new () viewport - (hadjustment adjustment) - (vadjustment adjustment)) - +(defun (setf menu-item-label) (label menu-item) + (make-instance 'accel-label + :label label :xalign 0.0 :yalign 0.5 :accel-widget menu-item + :use-underline (menu-item-use-underline-p menu-item) + :visible t :parent menu-item) + label) -;;; Box +(defun menu-item-label (menu-item) + (when (and (slot-boundp menu-item 'child) + (typep (bin-child menu-item) 'label)) + (label-label (bin-child menu-item)))) -(define-foreign box-pack-start () nil - (box box) - (child widget) - (expand boolean) - (fill boolean) - (padding unsigned-int)) +(defbinding menu-item-remove-submenu () nil + (menu-item menu-item)) -(define-foreign box-pack-end () nil - (box box) - (child widget) - (expand boolean) - (fill boolean) - (padding unsigned-int)) +(defbinding menu-item-set-accel-path () nil + (menu-item menu-item) + (accel-path string)) -(defun box-pack (box child &key (pack :start) (expand t) (fill t) (padding 0)) - (if (eq pack :start) - (box-pack-start box child expand fill padding) - (box-pack-end box child expand fill padding))) +(defbinding menu-item-select () nil + (menu-item menu-item)) -(define-foreign box-reorder-child () nil - (box box) - (child widget) - (position int)) +(defbinding menu-item-deselect () nil + (menu-item menu-item)) -(define-foreign box-query-child-packing () nil - (box box) - (child widget :out) - (expand boolean :out) - (fill boolean :out) - (padding unsigned-int :out) - (pack-type pack-type :out)) +(defbinding menu-item-activate () nil + (menu-item menu-item)) -(define-foreign box-set-child-packing () nil - (box box) - (child widget) - (expand boolean) - (fill boolean) - (padding unsigned-int) - (pack-type pack-type)) +(defbinding menu-item-toggle-size-request () nil + (menu-item menu-item) + (requisition int :out)) +(defbinding menu-item-toggle-size-allocate () nil + (menu-item menu-item) + (allocation int)) -;;; Button box +;;; Menu tool button -(define-foreign ("gtk_button_box_get_child_size_default" - button-box-default-child-size) () nil - (min-width int :out) - (min-height int :out)) +#+gtk2.6 +(defbinding menu-tool-button-set-arrow-tip () nil + (menu-tool-button menu-tool-button) + (tooltips tooltips) + (tip-text string) + (tip-private string)) -(define-foreign ("gtk_button_box_get_child_ipadding_default" - button-box-default-child-ipadding) () nil - (ipad-x int :out) - (ipad-y int :out)) -(define-foreign %button-box-set-child-size-default () nil - (min-width int) - (min-height int)) +;;; Message dialog -(defun (setf button-box-default-child-size) (size) - (%button-box-set-child-size-default (svref size 0) (svref size 1)) - (values (svref size 0) (svref size 1))) +(defmethod initialize-instance ((dialog message-dialog) &rest initargs + &key (type :info) (buttons :close) ; or :ok? + flags message parent) + (remf initargs :parent) + (setf + (slot-value dialog 'location) + (%message-dialog-new parent flags type buttons nil)) + (message-dialog-set-markup dialog message) + (apply #'call-next-method dialog initargs)) -(define-foreign %button-box-set-child-ipadding-default () nil - (ipad-x int) - (ipad-y int)) -(defun (setf button-box-default-child-ipadding) (ipad) - (%button-box-set-child-ipadding-default (svref ipad 0) (svref ipad 1)) - (values (svref ipad 0) (svref ipad 1))) +(defbinding %message-dialog-new () pointer + (parent (or null window)) + (flags dialog-flags) + (type message-type) + (buttons buttons-type) + (message (or null string))) -(define-foreign - ("gtk_button_box_get_child_size" button-box-child-size) () nil - (button-box button-box) - (min-width int :out) - (min-height int :out)) +(defbinding %message-dialog-new-with-markup () pointer + (parent (or null window)) + (flags dialog-flags) + (type message-type) + (buttons buttons-type) + (message string)) -(define-foreign - ("gtk_button_box_get_child_ipadding" button-box-child-ipadding) () nil - (button-box button-box) - (ipad-x int :out) - (ipad-y int :out)) +(defbinding message-dialog-set-markup () nil + (message-dialog message-dialog) + (markup string)) -(define-foreign %button-box-set-child-size () nil - (button-box button-box) - (min-width int) - (min-height int)) +#+gtk2.6 +(defbinding message-dialog-format-secondary-text () nil + (message-dialog message-dialog) + (text string)) -(defun (setf button-box-child-size) (size button-box) - (%button-box-set-child-size button-box (svref size 0) (svref size 1)) - (values (svref size 0) (svref size 1))) +#+gtk2.6 +(defbinding message-dialog-format-secondary-markup () nil + (message-dialog message-dialog) + (markup string)) -(define-foreign %button-box-set-child-ipadding () nil - (button-box button-box) - (ipad-x int) - (ipad-y int)) -(defun (setf button-box-child-ipadding) (ipad button-box) - (%button-box-set-child-ipadding button-box (svref ipad 0) (svref ipad 1)) - (values (svref ipad 0) (svref ipad 1))) +;;; Radio menu item +(defbinding %radio-menu-item-get-group () pointer + (radio-menu-item radio-menu-item)) -;;; HButton box +(defbinding %radio-menu-item-set-group () nil + (radio-menu-item radio-menu-item) + (group pointer)) -(define-foreign hbutton-box-new () hbutton-box) +(defmethod add-to-radio-group ((item1 radio-menu-item) (item2 radio-menu-item)) + "Add ITEM1 to the group which ITEM2 belongs to." + (%radio-menu-item-set-group item1 (%radio-menu-item-get-group item2))) -(define-foreign ("gtk_hbutton_box_get_spacing_default" - hbutton-box-default-spacing) () int) +(defmethod initialize-instance ((item radio-menu-item) &key group) + (prog1 + (call-next-method) + (when group + (add-to-radio-group item group)))) -(define-foreign ("gtk_hbutton_box_set_spacing_default" - (setf hbutton-box-default-spacing)) () nil - (spacing int)) -(define-foreign ("gtk_hbutton_box_get_layout_default" - hbutton-box-default-layout) () button-box-style) -(define-foreign ("gtk_hbutton_box_set_layout_default" - (setf hbutton-box-default-layout)) () nil - (layout button-box-style)) +;;; Radio tool button +(defbinding %radio-tool-button-get-group () pointer + (radio-tool-button radio-tool-button)) +(defbinding %radio-tool-button-set-group () nil + (radio-tool-button radio-tool-button) + (group pointer)) -;;; VButton Box - -(define-foreign vbutton-box-new () vbutton-box) - -(define-foreign ("gtk_vbutton_box_get_spacing_default" - vbutton-box-default-spacing) () int) - -(define-foreign ("gtk_vbutton_box_set_spacing_default" - (setf vbutton-box-default-spacing)) () nil - (spacing int)) - -(define-foreign ("gtk_vbutton_box_get_layout_default" - vbutton-box-default-layout) () button-box-style) - -(define-foreign ("gtk_vbutton_box_set_layout_default" - (setf vbutton-box-default-layout)) () nil - (layout button-box-style)) +(defmethod add-to-radio-group ((button1 radio-tool-button) (button2 radio-tool-button)) + "Add BUTTON1 to the group which BUTTON2 belongs to." + (%radio-tool-button-set-group button1 (%radio-tool-button-get-group button2))) +(defmethod add-activate-callback ((widget widget) function &key object after) + (if object + (signal-connect widget 'clicked + #'(lambda (object) + (when (slot-value widget 'active) + (funcall function object (slot-value widget 'value)))) + :object object :after after) + (signal-connect widget 'clicked + #'(lambda () + (when (slot-value widget 'active) + (funcall function (slot-value widget 'value)))) + :after after))) +(defmethod initialize-instance ((button radio-tool-button) &key group) + (prog1 + (call-next-method) + (when group + (add-to-radio-group button group)))) -;;; VBox - -(define-foreign vbox-new () vbox - (homogeneous boolean) - (spacing int)) +;;; Toggle button -;;; Color selection +(defbinding toggle-button-toggled () nil + (toggle-button toggle-button)) -; (define-foreign color-selection-new () color-selection) -; ;; gtkglue.c -; (define-foreign %color-selection-set-color-by-values () nil -; (colorsel color-selection) -; (red double-float) -; (green double-float) -; (blue double-float) -; (opacity double-float)) +;;; Window -; (defun (setf color-selection-color) (color colorsel) -; (%color-selection-set-color-by-values -; colorsel -; (svref color 0) (svref color 1) (svref color 2) -; (if (> (length color) 3) -; (svref color 3) -; 1.0)) -; color) +(defmethod initialize-instance ((window window) &rest initargs + &key accel-group accel-groups) + (declare (ignore accel-group accel-groups)) + (prog1 + (call-next-method) + (initial-add window #'window-add-accel-group + initargs :accel-group :accel-groups))) -; ;; gtkglue.c -; (define-foreign %color-selection-get-color-as-values () nil -; (colorsel color-selection) -; (red double-float :out) -; (green double-float :out) -; (blue double-float :out) -; (opacity double-float :out)) -; (defun color-selection-color (colorsel) -; (multiple-value-bind (red green blue opacity) -; (%color-selection-get-color-as-values colorsel) -; (if (color-selection-use-opacity-p colorsel) -; (vector red green blue opacity) -; (vector red green blue)))) +(defbinding window-set-wmclass () nil + (window window) + (wmclass-name string) + (wmclass-class string)) +(defbinding window-add-accel-group () nil + (window window) + (accel-group accel-group)) +(defbinding window-remove-accel-group () nil + (window window) + (accel-group accel-group)) +(defbinding window-activate-focus () int + (window window)) -; ;;; Gamma curve +(defbinding window-activate-default () int + (window window)) -; (define-foreign gamma-curve-new () gamma-curve) +(defbinding window-set-default-size (window width height) int + (window window) + ((or width -1) int) + ((or height -1) int)) +(defbinding %window-set-geometry-hints () nil + (window window) + (geometry gdk:geometry) + (geometry-mask gdk:window-hints)) + +(defun window-set-geometry-hints (window &key min-width min-height + max-width max-height base-width base-height + width-inc height-inc min-aspect max-aspect + (gravity nil gravity-p) min-size max-size) + (let ((geometry (make-instance 'gdk:geometry + :min-width (or min-width -1) + :min-height (or min-height -1) + :max-width (or max-width -1) + :max-height (or max-height -1) + :base-width (or base-width 0) + :base-height (or base-height 0) + :width-inc (or width-inc 0) + :height-inc (or height-inc 0) + :min-aspect (or min-aspect 0) + :max-aspect (or max-aspect 0) + :gravity gravity)) + (mask ())) + (when (or min-size min-width min-height) + (push :min-size mask)) + (when (or max-size max-width max-height) + (push :max-size mask)) + (when (or base-width base-height) + (push :base-size mask)) + (when (or width-inc height-inc) + (push :resize-inc mask)) + (when (or min-aspect max-aspect) + (push :aspect mask)) + (when gravity-p + (push :win-gravity mask)) + (%window-set-geometry-hints window geometry mask))) + +(defbinding window-list-toplevels () (glist (copy-of window)) + "Returns a list of all existing toplevel windows.") + +(defbinding window-add-mnemonic (window key target) nil + (window window) + ((gdk:keyval-from-name key) unsigned-int) + (target widget)) +(defbinding window-remove-mnemonic (window key target) nil + (window window) + ((gdk:keyval-from-name key) unsigned-int) + (target widget)) -;;; HBox +(defbinding window-mnemonic-activate (window key modifier) nil + (window window) + ((gdk:keyval-from-name key) unsigned-int) + (modifier gdk:modifier-type)) -(define-foreign hbox-new () hbox - (homogeneous boolean) - (spacing int)) +(defbinding window-activate-key () boolean + (window window) + (event gdk:key-event)) +(defbinding window-propagate-key-event () boolean + (window window) + (event gdk:key-event)) +(defbinding window-present () nil + (window window)) -;;; Combo +(defbinding window-iconify () nil + (window window)) -(define-foreign combo-new () combo) +(defbinding window-deiconify () nil + (window window)) -(define-foreign combo-set-value-in-list () nil - (combo combo) - (val boolean) - (ok-if-empty boolean)) +(defbinding window-stick () nil + (window window)) -; (define-foreign ("gtk_combo_set_item_string" (setf combo-item-string)) () nil -; (combo combo) -; (item item) -; (item-value string)) +(defbinding window-unstick () nil + (window window)) -(define-foreign %combo-set-popdown-strings () nil - (combo combo) - (strings (double-list string))) +(defbinding window-maximize () nil + (window window)) -(defun (setf combo-popdown-strings) (strings combo) - (%combo-set-popdown-strings combo strings) - strings) +(defbinding window-unmaximize () nil + (window window)) -(define-foreign combo-disable-activate () nil - (combo combo)) +(defbinding window-fullscreen () nil + (window window)) +(defbinding window-unfullscreen () nil + (window window)) +(defbinding window-set-keep-above () nil + (window window) + (setting boolean)) -;;; Statusbar +(defbinding window-set-keep-below () nil + (window window) + (setting boolean)) -(define-foreign statusbar-new () statusbar) +(defbinding window-begin-resize-drag () nil + (window window) + (edge gdk:window-edge) + (button int) + (root-x int) (root-y int) + (timestamp unsigned-int)) -(define-foreign - ("gtk_statusbar_get_context_id" statusbar-context-id) () unsigned-int - (statusbar statusbar) - (context-description string)) +(defbinding window-begin-move-drag () nil + (window window) + (edge gdk:window-edge) + (button int) + (root-x int) (root-y int) + (timestamp unsigned-int)) -(define-foreign statusbar-push () unsigned-int - (statusbar statusbar) - (context-id unsigned-int) - (text string)) +(defbinding window-set-frame-dimensions () nil + (window window) + (left int) (top int) (rigth int) (bottom int)) -(define-foreign statusbar-pop () nil - (statusbar statusbar) - (context-id unsigned-int)) +(defbinding %window-get-default-size () nil + (window window) + (width int :out) + (height int :out)) -(define-foreign statusbar-remove () nil - (statusbar statusbar) - (context-id unsigned-int) - (message-id unsigned-int)) +(defun window-get-default-size (window) + (multiple-value-bind (width height) (%window-get-default-size window) + (values (unless (= width -1) width) (unless (= height -1) height)))) +(defbinding window-get-frame-dimensions () nil + (window window) + (left int :out) (top int :out) (rigth int :out) (bottom int :out)) +(defbinding %window-get-icon-list () (glist gdk:pixbuf) + (window window)) -;;; Fixed +(defbinding window-get-position () nil + (window window) + (root-x int :out) + (root-y int :out)) -(define-foreign fixed-new () fixed) +(defbinding window-get-size () nil + (window window) + (width int :out) + (height int :out)) -(define-foreign fixed-put () nil - (fixed fixed) - (widget widget) - (x (signed 16)) - (y (signed 16))) +(defbinding window-move () nil + (window window) + (x int) + (y int)) -(define-foreign fixed-move () nil - (fixed fixed) - (widget widget) - (x (signed 16)) - (y (signed 16))) +(defbinding window-parse-geometry () boolean + (window window) + (geometry string)) +(defbinding window-reshow-with-initial-size () nil + (window window)) +(defbinding window-resize () nil + (window window) + (width int) + (heigth int)) -; ;;; Notebook +(defbinding (window-default-icon-list "gtk_window_get_default_icon_list") + () (glist gdk:pixbuf)) -(define-foreign notebook-new () notebook) +(defun window-default-icon () + (first (window-default-icon-list))) -(define-foreign ("gtk_notebook_insert_page_menu" notebook-insert-page) - (notebook position child tab-label &optional menu-label) nil - (notebook notebook) - (child widget) - ((if (stringp tab-label) - (label-new tab-label) - tab-label) widget) - ((if (stringp menu-label) - (label-new menu-label) - menu-label) (or null widget)) - (position int)) +(defbinding %window-set-default-icon-list () nil + (icons (glist gdk:pixbuf))) -(defun notebook-append-page (notebook child tab-label &optional menu-label) - (notebook-insert-page notebook -1 child tab-label menu-label)) +(defun (setf window-default-icon-list) (icons) + (%window-set-default-icon-list icons) + icons) -(defun notebook-prepend-page (notebook child tab-label &optional menu-label) - (notebook-insert-page notebook 0 child tab-label menu-label)) - -(define-foreign notebook-remove-page () nil - (notebook notebook) - (page-num int)) +(defbinding %window-set-default-icon () nil + (icons (glist gdk:pixbuf))) -; (defun notebook-current-page-num (notebook) -; (let ((page-num (notebook-current-page notebook))) -; (if (= page-num -1) -; nil -; page-num))) +(defmethod (setf window-default-icon) ((icon gdk:pixbuf)) + (%window-set-default-icon icon) + icon) -(define-foreign ("gtk_notebook_get_nth_page" notebook-nth-page-child) () widget - (notebook notebook) - (page-num int)) +(defmethod (setf window-group) ((group window-group) (window window)) + (window-group-add-window group window) + group) -(defun notebook-page-child (notebook) - (notebook-nth-page-child notebook (notebook-page notebook))) +(defbinding %window-set-default-icon-from-file () boolean + (filename pathname) + (nil null)) -(define-foreign %notebook-page-num () int - (notebook notebook) - (child widget)) +(defmethod (setf window-default-icon) ((icon-file pathname)) + (%window-set-default-icon-from-file icon-file) + icon-file) -(defun notebook-child-num (notebook child) - (let ((page-num (%notebook-page-num notebook child))) - (if (= page-num -1) - nil - page-num))) +(defbinding %window-set-icon-from-file () boolean + (window window) + (filename pathname) + (nil null)) -(define-foreign notebook-next-page () nil - (notebook notebook)) +(defmethod (setf window-icon) ((icon-file pathname) (window window)) + (%window-set-icon-from-file window icon-file) + icon-file) -(define-foreign notebook-prev-page () nil - (notebook notebook)) +(defbinding window-set-auto-startup-notification () nil + (setting boolean)) -(define-foreign notebook-popup-enable () nil - (notebook notebook)) +(defbinding decorated-window-init () nil + (window window)) -(define-foreign notebook-popup-disable () nil - (notebook notebook)) +(defbinding decorated-window-calculate-frame-size () nil + (window window)) -(define-foreign - ("gtk_notebook_get_tab_label" notebook-tab-label) (notebook ref) widget - (notebook notebook) - ((if (typep ref 'widget) - ref - (notebook-nth-page-child notebook ref)) - widget)) +(defbinding decorated-window-set-title () nil + (window window) + (title string)) -(define-foreign %notebook-set-tab-label () nil - (notebook notebook) - (reference widget) - (tab-label widget)) +(defbinding decorated-window-move-resize-window () nil + (window window) + (x int) + (y int) + (width int) + (heigth int)) -(defun (setf notebook-tab-label) (tab-label notebook reference) - (let ((tab-label-widget (if (stringp tab-label) - (label-new tab-label) - tab-label))) - (%notebook-set-tab-label - notebook - (if (typep reference 'widget) - reference - (notebook-nth-page-child notebook reference)) - tab-label-widget) - (when (stringp tab-label) - (widget-unref tab-label-widget)) - tab-label-widget)) - -(define-foreign - ("gtk_notebook_get_menu_label" notebook-menu-label) (notebook ref) widget - (notebook notebook) - ((if (typep ref 'widget) - ref - (notebook-nth-page-child notebook ref)) - widget)) -(define-foreign %notebook-set-menu-label () nil - (notebook notebook) - (reference widget) - (menu-label widget)) +;;; Window group -(defun (setf notebook-menu-label) (menu-label notebook reference) - (let ((menu-label-widget (if (stringp menu-label) - (label-new menu-label) - menu-label))) - (%notebook-set-menu-label - notebook - (if (typep reference 'widget) - reference - (notebook-nth-page-child notebook reference)) - menu-label-widget) - (when (stringp menu-label) - (widget-unref menu-label-widget)) - menu-label-widget)) - -(define-foreign notebook-query-tab-label-packing (notebook ref) nil - (notebook notebook) - ((if (typep ref 'widget) - ref - (notebook-nth-page-child notebook ref)) - widget) - (expand boolean :out) - (fill boolean :out) - (pack-type pack-type :out)) +(defmethod initialize-instance ((window-group window-group) &rest initargs + &key window windows) + (declare (ignore window windows)) + (prog1 + (call-next-method) + (initial-add window-group #'window-group-add-window + initargs :window :windows))) -(define-foreign - notebook-set-tab-label-packing (notebook ref expand fill pack-type) nil - (notebook notebook) - ((if (typep ref 'widget) - ref - (notebook-nth-page-child notebook ref)) - widget) - (expand boolean) - (fill boolean) - (pack-type pack-type)) -(define-foreign notebook-reorder-child () nil - (notebook notebook) - (child widget) - (position int)) +(defbinding window-group-add-window () nil + (window-group window-group) + (window window)) +(defbinding window-group-remove-window () nil + (window-group window-group) + (window window)) -; ;;; Font selection +;;; Scrolled window +(defun (setf scrolled-window-scrollbar-policy) (policy window) + (setf (scrolled-window-hscrollbar-policy window) policy) + (setf (scrolled-window-vscrollbar-policy window) policy)) +(defbinding scrolled-window-add-with-viewport () nil + (scrolled-window scrolled-window) + (child widget)) +(defmethod initialize-instance ((window scrolled-window) &rest initargs + &key policy) + (if policy + (apply #'call-next-method window + :vscrollbar-policy policy :hscrollbar-policy policy initargs) + (call-next-method))) -; ;;; Paned -; (define-foreign paned-add1 () nil -; (paned paned) -; (child widget)) +;;; Statusbar -; (define-foreign paned-add2 () nil -; (paned paned) -; (child widget)) +(defbinding statusbar-get-context-id () unsigned-int + (statusbar statusbar) + (context-description string)) -; (define-foreign paned-pack1 () nil -; (paned paned) -; (child widget) -; (resize boolean) -; (shrink boolean)) +(defbinding statusbar-push () unsigned-int + (statusbar statusbar) + (context-id unsigned-int) + (text string)) -; (define-foreign paned-pack2 () nil -; (paned paned) -; (child widget) -; (resize boolean) -; (shrink boolean)) +(defbinding statusbar-pop () nil + (statusbar statusbar) + (context-id unsigned-int)) -; ; (define-foreign ("gtk_paned_set_position" (setf paned-position)) () nil -; ; (paned paned) -; ; (position int)) +(defbinding statusbar-remove () nil + (statusbar statusbar) + (context-id unsigned-int) + (message-id unsigned-int)) -; ;; gtkglue.c -; (define-foreign paned-child1 () widget -; (paned paned) -; (resize boolean :out) -; (shrink boolean :out)) -; ;; gtkglue.c -; (define-foreign paned-child2 () widget -; (paned paned) -; (resize boolean :out) -; (shrink boolean :out)) -; (define-foreign vpaned-new () vpaned) +;;; Fixed -; (define-foreign hpaned-new () hpaned) +(defbinding fixed-put () nil + (fixed fixed) + (widget widget) + (x int) (y int)) +(defbinding fixed-move () nil + (fixed fixed) + (widget widget) + (x int) (y int)) -; ;;; Layout -; (define-foreign layout-new (&optional hadjustment vadjustment) layout -; (hadjustment (or null adjustment)) -; (vadjustment (or null adjustment))) +;;; Notebook -; (define-foreign layout-put () nil -; (layout layout) -; (widget widget) -; (x int) (y int)) +(defun %ensure-notebook-position (notebook page) + (etypecase page + (position page) + (widget (notebook-page-num notebook page t)))) -; (define-foreign layout-move () nil -; (layout layout) -; (widget widget) -; (x int) (y int)) +(defun %ensure-notebook-child (notebook position) + (typecase position + (widget position) + (t (notebook-get-nth-page notebook position)))) -; (define-foreign %layout-set-size () nil -; (layout layout) -; (width int) -; (height int)) +(defbinding (notebook-insert "gtk_notebook_insert_page_menu") + (notebook position child tab-label &optional menu-label) nil + (notebook notebook) + (child widget) + ((if (stringp tab-label) + (make-instance 'label :label tab-label) + tab-label) widget) + ((if (stringp menu-label) + (make-instance 'label :label menu-label) + menu-label) (or null widget)) + ((%ensure-notebook-position notebook position) position)) -; (defun (setf layout-size) (size layout) -; (%layout-set-size layout (svref size 0) (svref size 1)) -; (values (svref size 0) (svref size 1))) +(defun notebook-append (notebook child tab-label &optional menu-label) + (notebook-insert notebook :last child tab-label menu-label)) -; ;; gtkglue.c -; (define-foreign layout-size () nil -; (layout layout) -; (width int :out) -; (height int :out)) +(defun notebook-prepend (notebook child tab-label &optional menu-label) + (notebook-insert notebook :first child tab-label menu-label)) + +(defbinding notebook-remove-page (notebook page) nil + (notebook notebook) + ((%ensure-notebook-position notebook page) position)) -; (define-foreign layout-freeze () nil -; (layout layout)) +(defbinding %notebook-page-num () int + (notebook notebook) + (child widget)) -; (define-foreign layout-thaw () nil -; (layout layout)) +(defun notebook-page-num (notebook child &optional error-p) + (let ((page-num (%notebook-page-num notebook child))) + (if (= page-num -1) + (when error-p + (error "~A is not a page in ~A" child notebook)) + page-num))) -; (define-foreign layout-offset () nil -; (layout layout) -; (x int :out) -; (y int :out)) +(defbinding notebook-next-page () nil + (notebook notebook)) +(defbinding notebook-prev-page () nil + (notebook notebook)) +(defbinding notebook-reorder-child (notebook child position) nil + (notebook notebook) + (child widget) + ((%notebook-position notebook position) int)) -;;; List +(defbinding notebook-popup-enable () nil + (notebook notebook)) -; (define-foreign list-new () list-widget) +(defbinding notebook-popup-disable () nil + (notebook notebook)) -; (define-foreign list-insert-items () nil -; (list list-widget) -; (items (list list-item)) -; (position int)) +(defbinding notebook-get-nth-page () widget + (notebook notebook) + (page position)) -; (define-foreign list-append-items () nil -; (list list-widget) -; (items (double-list list-item))) +(defun %notebook-current-page (notebook) + (when (slot-boundp notebook 'current-page-num) + (notebook-get-nth-page notebook (notebook-current-page-num notebook)))) -; (define-foreign list-prepend-items () nil -; (list list-widget) -; (items (double-list list-item))) +(defun (setf notebook-current-page) (page notebook) + (setf (notebook-current-page notebook) (notebook-page-num notebook page))) -; (define-foreign %list-remove-items () nil -; (list list-widget) -; (items (double-list list-item))) +(defbinding (notebook-tab-label "gtk_notebook_get_tab_label") + (notebook page) widget + (notebook notebook) + ((%ensure-notebook-child notebook page) widget)) -; (define-foreign %list-remove-items-no-unref () nil -; (list list-widget) -; (items (double-list list-item))) +(defbinding (notebook-tab-label-text "gtk_notebook_get_tab_label_text") + (notebook page) (copy-of string) + (notebook notebook) + ((%ensure-notebook-child notebook page) widget)) -; (defun list-remove-items (list items &key no-unref) -; (if no-unref -; (%list-remove-items-no-unref list items) -; (%list-remove-items list items))) +(defbinding %notebook-set-tab-label () nil + (notebook notebook) + (page widget) + (tab-label widget)) -; (define-foreign list-clear-items () nil -; (list list-widget) -; (start int) -; (end int)) +(defun (setf notebook-tab-label) (tab-label notebook page) + (let ((widget (if (stringp tab-label) + (make-instance 'label :label tab-label) + tab-label))) + (%notebook-set-tab-label notebook (%ensure-notebook-child notebook page) widget) + widget)) -; (define-foreign list-select-item () nil -; (list list-widget) -; (item int)) -; (define-foreign list-unselect-item () nil -; (list list-widget) -; (item int)) +(defbinding (notebook-menu-label "gtk_notebook_get_menu_label") + (notebook page) widget + (notebook notebook) + ((%ensure-notebook-child notebook page) widget)) -; (define-foreign list-select-child () nil -; (list list-widget) -; (child widget)) +(defbinding (notebook-menu-label-text "gtk_notebook_get_menu_label_text") + (notebook page) (copy-of string) + (notebook notebook) + ((%ensure-notebook-child notebook page) widget)) -; (define-foreign list-unselect-child () nil -; (list list-widget) -; (child widget)) +(defbinding %notebook-set-menu-label () nil + (notebook notebook) + (page widget) + (menu-label widget)) -; (define-foreign list-child-position () int -; (list list-widget) -; (child widget)) +(defun (setf notebook-menu-label) (menu-label notebook page) + (let ((widget (if (stringp menu-label) + (make-instance 'label :label menu-label) + menu-label))) + (%notebook-set-menu-label notebook (%ensure-notebook-child notebook page) widget) + widget)) -; (define-foreign list-extend-selection () nil -; (list list-widget) -; (scroll-type scroll-type) -; (position single-float) -; (auto-start-selection boolean)) -; (define-foreign list-start-selection () nil -; (list list-widget)) +(defbinding notebook-query-tab-label-packing (notebook page) nil + (notebook notebook) + ((%notebook-child notebook page) widget) + (expand boolean :out) + (fill boolean :out) + (pack-type pack-type :out)) -; (define-foreign list-end-selection () nil -; (list list-widget)) +(defbinding notebook-set-tab-label-packing + (notebook page expand fill pack-type) nil + (notebook notebook) + ((%notebook-child notebook page) widget) + (expand boolean) + (fill boolean) + (pack-type pack-type)) -; (define-foreign list-select-all () nil -; (list list-widget)) -; (define-foreign list-unselect-all () nil -; (list list-widget)) -; (define-foreign list-scroll-horizontal () nil -; (list list-widget) -; (scroll-type scroll-type) -; (position single-float)) +;;; Paned -; (define-foreign list-scroll-vertical () nil -; (list list-widget) -; (scroll-type scroll-type) -; (position single-float)) +(defbinding paned-pack1 () nil + (paned paned) + (child widget) + (resize boolean) + (shrink boolean)) -; (define-foreign list-toggle-add-mode () nil -; (list list-widget)) +(defbinding paned-pack2 () nil + (paned paned) + (child widget) + (resize boolean) + (shrink boolean)) -; (define-foreign list-toggle-focus-row () nil -; (list list-widget)) -; (define-foreign list-toggle-row () nil -; (list list-widget) -; (item list-item)) +;;; Layout -; (define-foreign list-undo-selection () nil -; (list list-widget)) +(defbinding layout-put () nil + (layout layout) + (child widget) + (x int) + (y int)) -; (define-foreign list-end-drag-selection () nil -; (list list-widget)) +(defbinding layout-move () nil + (layout layout) + (child widget) + (x int) + (y int)) -; ;; gtkglue.c -; (define-foreign list-selection () (double-list list-item) -; (list list-widget)) +(defbinding layout-set-size () nil + (layout layout) + (width unsigned-int) + (height unsigned-int)) +(defbinding layout-get-size () nil + (layout layout) + (width unsigned-int :out) + (height unsigned-int :out)) ;;; Menu shell -(define-foreign menu-shell-insert () nil +(defbinding menu-shell-insert (menu-shell menu-item position) nil (menu-shell menu-shell) (menu-item menu-item) - (position int)) + ((case position + (:first 0) + (:last -1) + (t position)) int)) (defun menu-shell-append (menu-shell menu-item) - (menu-shell-insert menu-shell menu-item -1)) + (menu-shell-insert menu-shell menu-item :last)) (defun menu-shell-prepend (menu-shell menu-item) - (menu-shell-insert menu-shell menu-item 0)) + (menu-shell-insert menu-shell menu-item :fisrt)) -(define-foreign menu-shell-deactivate () nil +(defbinding menu-shell-deactivate () nil (menu-shell menu-shell)) -(define-foreign menu-shell-select-item () nil +(defbinding menu-shell-select-item () nil (menu-shell menu-shell) (menu-item menu-item)) -(define-foreign menu-shell-deselect () nil +(defbinding menu-shell-select-first () nil + (menu-shell menu-shell) + (search-sensitive boolean)) + +(defbinding menu-shell-deselect () nil (menu-shell menu-shell)) -(define-foreign menu-shell-activate-item () nil +(defbinding menu-shell-activate-item () nil (menu-shell menu-shell) (menu-item menu-item) (fore-deactivate boolean)) +(defbinding menu-shell-cancel () nil + (menu-shell menu-shell)) -; ;;; Menu bar - -(define-foreign menu-bar-new () menu-bar) - -; (define-foreign menu-bar-insert () nil -; (menu-bar menu-bar) -; (menu menu) -; (position int)) - -; (defun menu-bar-append (menu-bar menu) -; (menu-bar-insert menu-bar menu -1)) - -; (defun menu-bar-prepend (menu-bar menu) -; (menu-bar-insert menu-bar menu 0)) - - +;;; Menu -; ;;; Menu +(defun %menu-position (menu child) + (etypecase child + (int child) + (keyword (case child + (:first 0) + (:last -1) + (t (error "Invalid position keyword: ~A" child)))) + (widget (menu-child-position menu child)))) -(define-foreign menu-new () menu) -; (defun menu-insert (menu menu-item position) -; (menu-shell-insert menu menu-item position)) +(defbinding menu-reorder-child (menu menu-item position) nil + (menu menu) + (menu-item menu-item) + ((%menu-position menu position) int)) -; (defun menu-append (menu menu-item) -; (menu-shell-append menu menu-item)) +(defbinding menu-attach () nil + (menu menu) + (menu-item menu-item) + (left-attach unsigned-int) + (right-attach unsigned-int) + (top-attach unsigned-int) + (bottom-attach unsigned-int)) -; (defun menu-prepend (menu menu-item) -; (menu-shell-prepend menu menu-item)) +(def-callback-marshal %menu-position-func (nil (menu menu) (x int) (y int) (push-in boolean))) -;(defun menu-popup ...) +(defbinding %menu-popup () nil + (menu menu) + (parent-menu-shell (or null menu-shell)) + (parent-menu-item (or null menu-item)) + (callback-func (or null pointer)) + (callback-id unsigned-int) + (button unsigned-int) + (activate-time (unsigned 32))) + +(defun menu-popup (menu button activate-time &key callback parent-menu-shell + parent-menu-item) + (if callback + (with-callback-function (id callback) + (%menu-popup + menu parent-menu-shell parent-menu-item + (callback %menu-position-func) id button activate-time)) + (%menu-popup + menu parent-menu-shell parent-menu-item nil 0 button activate-time))) + +(defbinding menu-set-accel-path () nil + (menu menu) + (accel-path string)) -(define-foreign menu-reposition () nil +(defbinding menu-reposition () nil (menu menu)) -(define-foreign menu-popdown () nil +(defbinding menu-popdown () nil (menu menu)) -(define-foreign ("gtk_menu_get_active" menu-active) () widget - (menu menu)) +(defun menu-child-position (menu child) + (position child (container-children menu))) + +(defun menu-active-num (menu) + (menu-child-position menu (menu-active menu))) -(define-foreign ("gtk_menu_set_active" (setf menu-active)) () nil +(defbinding %menu-set-active () nil (menu menu) (index unsigned-int)) -;(defun menu-attach-to-widget ...) - -(define-foreign menu-detach () nil - (menu menu)) - -(define-foreign ("gtk_menu_get_attach_widget" menu-attach-widget) () widget - (menu menu)) +(defun (setf menu-active) (menu child) + (%menu-set-active menu (%menu-position menu child)) + child) + +(defcallback %menu-detach-func (nil (widget widget) (menu menu)) + (funcall (object-data menu 'detach-func) widget menu)) -(define-foreign menu-reorder-child () nil +(defbinding %menu-attach-to-widget () nil (menu menu) - (menu-item menu-item) - (position int)) - - + (widget widget) + ((callback %menu-detach-func) pointer)) -;;; Packer +(defun menu-attach-to-widget (menu widget function) + (setf (object-data menu 'detach-func) function) + (%menu-attach-to-widget menu widget)) -(define-foreign packer-new () packer) +(defbinding menu-detach () nil + (menu menu)) -(define-foreign packer-add - (packer child side anchor - &key - options - (border-width (packer-default-border-width packer)) - (pad-x (packer-default-pad-x packer)) - (pad-y (packer-default-pad-y packer)) - (ipad-x (packer-default-ipad-x packer)) - (ipad-y (packer-default-ipad-y packer))) nil - (packer packer) - (child widget) - (side side-type) - (anchor anchor-type) - (options packer-options) - (border-width unsigned-int) - (pad-x unsigned-int) - (pad-y unsigned-int) - (ipad-x unsigned-int) - (ipad-y unsigned-int)) - -(define-foreign packer-set-child-packing () nil - (packer packer) - (child widget) - (side side-type) - (anchor anchor-type) - (options packer-options) - (border-width unsigned-int) - (pad-x unsigned-int) - (pad-y unsigned-int) - (ipad-x unsigned-int) - (ipad-y unsigned-int)) - -(define-foreign packer-reorder-child () nil - (packer packer) - (child widget) - (position int)) +#+gtk2.6 +(defbinding menu-get-for-attach-widget () (copy-of (glist widget)) + (widget widget)) +(defbinding menu-set-monitor () nil + (menu menu) + (monitor-num int)) ;;; Table -(define-foreign table-new () table - (rows unsigned-int) - (columns unsigned-int) - (homogeneous boolean)) - -(define-foreign table-resize () nil +(defbinding table-resize () nil (table table) (rows unsigned-int) (columns unsigned-int)) -(define-foreign table-attach (table child left right top bottom - &key (x-options '(:expand :fill)) - (y-options '(:expand :fill)) - (x-padding 0) (y-padding 0)) nil +(defbinding table-attach (table child left right top bottom + &key options x-options y-options + (x-padding 0) (y-padding 0)) nil (table table) (child widget) (left unsigned-int) (right unsigned-int) (top unsigned-int) (bottom unsigned-int) - (x-options attach-options) - (y-options attach-options) + ((append (mklist options) (mklist x-options)) attach-options) + ((append (mklist options) (mklist y-options)) attach-options) (x-padding unsigned-int) (y-padding unsigned-int)) -(define-foreign %table-set-row-spacing () nil + +(defbinding %table-set-row-spacing () nil (table table) (row unsigned-int) (spacing unsigned-int)) -(defun (setf table-row-spacing) (spacing table row) - (%table-set-row-spacing table row spacing) - spacing) - -;; gtkglue.c -(define-foreign table-row-spacing (table row) unsigned-int +(defbinding %table-set-row-spacings () nil (table table) - ((progn - (assert (and (>= row 0) (< row (table-rows table)))) - row) unsigned-int)) - -(define-foreign %table-set-col-spacing () nil - (table table) - (col unsigned-int) (spacing unsigned-int)) -(defun (setf table-column-spacing) (spacing table column) - (%table-set-column-spacing table column spacing) +(defun (setf table-row-spacing) (spacing table &optional row) + (if row + (%table-set-row-spacing table row spacing) + (%table-set-row-spacings table spacing)) spacing) -;; gtkglue.c -(define-foreign table-column-spacing (table col) unsigned-int +(defbinding %table-get-row-spacing () unsigned-int (table table) - ((progn - (assert (and (>= col 0) (< col (table-columns table)))) - col) unsigned-int)) - - -(defun %set-table-child-option (object slot flag value) - (let ((options (container-child-slot-value object slot))) - (cond - ((and value (not (member flag options))) - (setf (container-child-slot-value object slot) (cons flag options))) - ((and (not value) (member flag options)) - (setf - (container-child-slot-value object slot) (delete flag options)))))) - -(macrolet ((define-option-accessor (name slot flag) - `(progn - (defun ,name (object) - (member ,flag (container-child-slot-value object ,slot))) - (defun (setf ,name) (value object) - (%set-table-child-option object ,slot ,flag value))))) - (define-option-accessor table-child-x-expand-p :x-options :expand) - (define-option-accessor table-child-y-expand-p :y-options :expand) - (define-option-accessor table-child-x-shrink-p :x-options :shrink) - (define-option-accessor table-child-y-shrink-p :y-options :shrink) - (define-option-accessor table-child-x-fill-p :x-options :fill) - (define-option-accessor table-child-y-fill-p :y-options :fill)) - - - -;;; Toolbar - -(define-foreign toolbar-new () toolbar - (orientation orientation) - (style toolbar-style)) - -;; gtkglue.c -(define-foreign toolbar-num-children () int - (toolbar toolbar)) - -(defun %toolbar-position-num (toolbar position) - (case position - (:prepend 0) - (:append (toolbar-num-children toolbar)) - (t - (assert (and (>= position 0) (< position (toolbar-num-children toolbar)))) - position))) - -(define-foreign %toolbar-insert-element () widget - (toolbar toolbar) - (type toolbar-child-type) - (widget (or null widget)) - (text string) - (tooltip-text string) - (tooltip-private-text string) - (icon (or null widget)) - (nil null) - (nil null) - (position int)) - -(defun toolbar-insert-element (toolbar position - &key tooltip-text tooltip-private-text - type widget icon text callback) - (let* ((icon-widget (typecase icon - ((or null widget) icon) - (t (pixmap-new icon)))) - (toolbar-child - (%toolbar-insert-element - toolbar (or type (and widget :widget) :button) - widget text tooltip-text tooltip-private-text icon-widget - (%toolbar-position-num toolbar position)))) - (when callback - (signal-connect toolbar-child 'clicked callback)) - toolbar-child)) - -(defun toolbar-append-element (toolbar &key tooltip-text tooltip-private-text - type widget icon text callback) - (toolbar-insert-element - toolbar :append :type type :widget widget :icon icon :text text - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text - :callback callback)) - -(defun toolbar-prepend-element (toolbar &key tooltip-text tooltip-private-text - type widget icon text callback) - (toolbar-insert-element - toolbar :prepend :type type :widget widget :icon icon :text text - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text - :callback callback)) - -(defun toolbar-insert-space (toolbar position) - (toolbar-insert-element toolbar position :type :space)) - -(defun toolbar-append-space (toolbar) - (toolbar-insert-space toolbar :append)) - -(defun toolbar-prepend-space (toolbar) - (toolbar-insert-space toolbar :prepend)) - -(defun toolbar-insert-widget (toolbar widget position &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-element - toolbar position :widget widget :tooltip-text tooltip-text - :tooltip-private-text tooltip-private-text :callback callback)) - -(defun toolbar-append-widget (toolbar widget &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-widget - toolbar widget :append :tooltip-text tooltip-text - :tooltip-private-text tooltip-private-text :callback callback)) - -(defun toolbar-prepend-widget (toolbar widget &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-widget - toolbar widget :prepend :tooltip-text tooltip-text - :tooltip-private-text tooltip-private-text :callback callback)) - -(defun toolbar-insert-item (toolbar text icon position &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-element - toolbar position :text text :icon icon :callback callback - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text)) - -(defun toolbar-append-item (toolbar text icon &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-item - toolbar text icon :append :callback callback - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text)) - - -(defun toolbar-prepend-item (toolbar text icon &key tooltip-text - tooltip-private-text callback) - (toolbar-insert-item - toolbar text icon :prepend :callback callback - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text)) - -(defun toolbar-enable-tooltips (toolbar) - (setf (toolbar-tooltips-p toolbar) t)) - -(defun toolbar-disable-tooltips (toolbar) - (setf (toolbar-tooltips-p toolbar) nil)) - - - -;;; Tree - -(define-foreign tree-new () tree) - -(define-foreign tree-append () nil - (tree tree) - (tree-item tree-item)) + (row unsigned-int)) -(define-foreign tree-prepend () nil - (tree tree) - (tree-item tree-item)) +(defbinding %table-get-default-row-spacing () unsigned-int + (table table)) -(define-foreign tree-insert () nil - (tree tree) - (tree-item tree-item) - (position int)) +(defun table-row-spacing (table &optional row) + (if row + (%table-get-row-spacing table row) + (%table-get-default-row-spacing table))) -(define-foreign tree-remove-items () nil - (tree tree) - (items (double-list tree-item))) -(define-foreign tree-clear-items () nil - (tree tree) - (start int) - (end int)) +(defbinding %table-set-col-spacing () nil + (table table) + (col unsigned-int) + (spacing unsigned-int)) -(define-foreign tree-select-item () nil - (tree tree) - (item int)) +(defbinding %table-set-col-spacings () nil + (table table) + (spacing unsigned-int)) -(define-foreign tree-unselect-item () nil - (tree tree) - (item int)) +(defun (setf table-col-spacing) (spacing table &optional col) + (if col + (%table-set-col-spacing table col spacing) + (%table-set-col-spacings table spacing)) + spacing) -(define-foreign tree-select-child () nil - (tree tree) - (tree-item tree-item)) +(defbinding %table-get-col-spacing () unsigned-int + (table table) + (col unsigned-int)) -(define-foreign tree-unselect-child () nil - (tree tree) - (tree-item tree-item)) +(defbinding %table-get-default-col-spacing () unsigned-int + (table table)) -(define-foreign tree-child-position () int - (tree tree) - (tree-item tree-item)) +(defun table-col-spacing (table &optional col) + (if col + (%table-get-col-spacing table col) + (%table-get-default-col-spacing table))) + -(defun root-tree-p (tree) - (eq (tree-root-tree tree) tree)) -;; gtkglue.c -(define-foreign tree-selection () (double-list tree-item) - (tree tree)) +;;; Toolbar +(defmethod initialize-instance ((toolbar toolbar) &rest initargs &key tooltips) + (if (eq tooltips t) + (apply #'call-next-method toolbar + :tooltips (make-instance 'tooltips) initargs) + (call-next-method))) +(defbinding %toolbar-insert () nil + (toolbar toolbar) + (tool-item tool-item) + (position position)) -;;; Calendar +(defun toolbar-insert (toolbar tool-item &optional (position :end)) + (%toolbar-insert toolbar tool-item position) + (%tool-item-update-tooltips tool-item)) -(define-foreign calendar-new () calendar) +(defbinding toolbar-get-item-index () int + (toolbar toolbar) + (item tool-item)) -(define-foreign calendar-select-month () int - (calendar calendar) - (month unsigned-int) - (year unsigned-int)) +(defbinding toolbar-get-nth-item () tool-item + (toolbar toolbar) + (n int)) -(define-foreign calendar-select-day () nil - (calendar calendar) - (day unsigned-int)) +(defbinding toolbar-get-drop-index () int + (toolbar toolbar) + (x int) (y int)) -(define-foreign calendar-mark-day () int - (calendar calendar) - (day unsigned-int)) +(defbinding toolbar-set-drop-highlight-item () nil + (toolbar toolbar) + (tool-item tool-item) + (index int)) -(define-foreign calendar-unmark-day () int - (calendar calendar) - (day unsigned-int)) -(define-foreign calendar-clear-marks () nil - (calendar calendar)) +;;; Tool button -(define-foreign calendar-display-options () nil - (calendar calendar) - (options calendar-display-options)) +(defmethod initialize-instance ((button tool-button) &rest initargs &key icon) + (if (and icon (not (typep icon 'widget))) + (apply #'call-next-method button :icon (create-image-widget icon) initargs) + (call-next-method))) -(define-foreign ("gtk_calendar_get_date" calendar-date) () nil - (calendar calendar) - (year unsigned-int :out) - (month unsigned-int :out) - (day unsigned-int :out)) -(define-foreign calendar-freeze () nil - (calendar calendar)) +;;; Tool item -(define-foreign calendar-thaw () nil - (calendar calendar)) +(defbinding tool-item-set-tooltip () nil + (tool-item tool-item) + (tooltips tooltips) + (tip-text string) + (tip-private string)) +(defun %tool-item-update-tooltips (tool-item) + (when (and + (slot-boundp tool-item 'parent) + (or + (user-data-p tool-item 'tip-text) + (user-data-p tool-item 'tip-private))) + (tool-item-set-tooltip + tool-item (toolbar-tooltips (widget-parent tool-item)) + (or (user-data tool-item 'tip-text) "") + (or (user-data tool-item 'tip-private) "")))) -;;; Drawing area +(defmethod (setf tool-item-tip-text) ((tip-text string) (tool-item tool-item)) + (setf (user-data tool-item 'tip-text) tip-text) + (%tool-item-update-tooltips tool-item) + tip-text) -; (define-foreign drawing-area-new () drawing-area) +(defmethod (setf tool-item-tip-private) ((tip-private string) (tool-item tool-item)) + (setf (user-data tool-item 'tip-private) tip-private) + (%tool-item-update-tooltips tool-item) + tip-private) -; (define-foreign ("gtk_drawing_area_size" %drawing-area-set-size) () nil -; (drawing-area drawing-area) -; (width int) -; (height int)) +(defmethod container-add ((toolbar toolbar) (tool-item tool-item) &rest args) + (declare (ignore args)) + (prog1 + (call-next-method) + (%tool-item-update-tooltips tool-item))) -; (defun (setf drawing-area-size) (size drawing-area) -; (%drawing-area-set-size drawing-area (svref size 0) (svref size 1)) -; (values (svref size 0) (svref size 1))) -; ;; gtkglue.c -; (define-foreign ("gtk_drawing_area_get_size" drawing-area-size) () nil -; (drawing-area drawing-area) -; (width int :out) -; (height int :out)) +(defbinding tool-item-retrieve-proxy-menu-item () widget + (tool-item tool-item)) +(defbinding (tool-item-proxy-menu-item + "gtk_tool_item_get_proxy_menu_item") () menu-item + (tool-item tool-item) + (menu-item-id string)) +(defbinding %tool-item-set-proxy-menu-item () nil + (tool-item tool-item) + (menu-item-id string) + (menu-item menu-item)) -; ;;; Curve +(defun (setf tool-item-proxy-menu-item) (menu-item menu-item-id tool-item) + (%tool-item-set-proxy-menu-item menu-item-id tool-item menu-item) + menu-item) +#+gtk2.6 +(defbinding tool-item-rebuild-menu () nil + (tool-item tool-item)) -; ;;; Editable +;;; Editable -(define-foreign editable-select-region (editable &optional (start 0) end) nil +(defbinding editable-select-region (editable &optional (start 0) end) nil (editable editable) (start int) ((or end -1) int)) -(define-foreign editable-insert-text - (editable text &optional (position 0)) nil +(defbinding editable-get-selection-bounds (editable) nil + (editable editable) + (start int :out) + (end int :out)) + +(defbinding editable-insert-text (editable text &optional (position 0)) nil (editable editable) (text string) ((length text) int) - ((or position -1) int :in-out)) + (position position-type :in-out)) (defun editable-append-text (editable text) (editable-insert-text editable text nil)) @@ -1668,12 +1754,12 @@ (defun editable-append-text (editable text) (defun editable-prepend-text (editable text) (editable-insert-text editable text 0)) -(define-foreign editable-delete-text (editable &optional (start 0) end) nil +(defbinding editable-delete-text (editable &optional (start 0) end) nil (editable editable) (start int) ((or end -1) int)) -(define-foreign ("gtk_editable_get_chars" editable-text) +(defbinding (editable-text "gtk_editable_get_chars") (editable &optional (start 0) end) string (editable editable) (start int) @@ -1687,342 +1773,267 @@ (defun (setf editable-text) (text editable) (editable-delete-text editable)) text) -(define-foreign editable-cut-clipboard () nil - (editable editable)) - -(define-foreign editable-copy-clipboard () nil +(defbinding editable-cut-clipboard () nil (editable editable)) -(define-foreign editable-paste-clipboard () nil +(defbinding editable-copy-clipboard () nil (editable editable)) -(define-foreign editable-claim-selection () nil - (editable editable) - (claim boolean) - (time unsigned-int)) - -(define-foreign editable-delete-selection () nil +(defbinding editable-paste-clipboard () nil (editable editable)) -(define-foreign editable-changed () nil +(defbinding editable-delete-selection () nil (editable editable)) -;;; Entry - -(define-foreign %entry-new() entry) - -(define-foreign %entry-new-with-max-length () entry - (max (unsigned 16))) - -(defun entry-new (&optional max) - (if max - (%entry-new-with-max-length max) - (%entry-new))) - - ;;; Spin button -(define-foreign spin-button-new () spin-button +(defbinding spin-button-configure () nil + (spin-button spin-button) (adjustment adjustment) - (climb-rate single-float) + (climb-rate double-float) (digits unsigned-int)) +(defbinding spin-button-set-range () nil + (spin-button spin-button) + (min double-float) + (max double-float)) + +(defbinding spin-button-get-range () nil + (spin-button spin-button) + (min double-float :out) + (max double-float :out)) + (defun spin-button-value-as-int (spin-button) (round (spin-button-value spin-button))) -(define-foreign spin-button-spin () nil +(defbinding spin-button-spin () nil (spin-button spin-button) (direction spin-type) (increment single-float)) -(define-foreign spin-button-update () nil +(defbinding spin-button-update () nil (spin-button spin-button)) ; ;;; Ruler -(define-foreign ruler-set-range () nil +(defbinding ruler-set-range () nil (ruler ruler) (lower single-float) (upper single-float) (position single-float) (max-size single-float)) -(define-foreign ruler-draw-ticks () nil - (ruler ruler)) - -(define-foreign ruler-draw-pos () nil - (ruler ruler)) - - - -; ;;; Range - -; (define-foreign range-draw-background () nil -; (range range)) - -; (define-foreign range-clear-background () nil -; (range range)) - -; (define-foreign range-draw-trough () nil -; (range range)) - -; (define-foreign range-draw-slider () nil -; (range range)) - -; (define-foreign range-draw-step-forw () nil -; (range range)) - -; (define-foreign range-slider-update () nil -; (range range)) - -; (define-foreign range-trough-click () int -; (range range) -; (x int) -; (y int) -; (jump-perc single-float :out)) - -; (define-foreign range-default-hslider-update () nil -; (range range)) - -; (define-foreign range-default-vslider-update () nil -; (range range)) - -; (define-foreign range-default-htrough-click () int -; (range range) -; (x int) -; (y int) -; (jump-perc single-float :out)) - -; (define-foreign range-default-vtrough-click () int -; (range range) -; (x int) -; (y int) -; (jump-perc single-float :out)) - -; (define-foreign range-default-hmotion () int -; (range range) -; (x-delta int) -; (y-delta int)) - -; (define-foreign range-default-vmotion () int -; (range range) -; (x-delta int) -; (y-delta int)) - - - -; ;;; Scale - -; (define-foreign scale-draw-value () nil -; (scale scale)) - -; (define-foreign hscale-new () hscale -; (adjustment adjustment)) +(defbinding ruler-get-range () nil + (ruler ruler) + (lower single-float :out) + (upper single-float :out) + (position single-float :out) + (max-size single-float :out)) -; (define-foreign vscale-new () hscale -; (adjustment adjustment)) +;;; Range -; ;;; Scrollbar +(defun range-lower (range) + (adjustment-lower (range-adjustment range))) -; (define-foreign hscrollbar-new () hscrollbar -; (adjustment adjustment)) +(defun range-upper (range) + (adjustment-upper (range-adjustment range))) -; (define-foreign vscrollbar-new () vscrollbar -; (adjustment adjustment)) +(defun (setf range-lower) (value range) + (setf (adjustment-lower (range-adjustment range)) value)) +(defun (setf range-upper) (value range) + (setf (adjustment-upper (range-adjustment range)) value)) +(defun range-page-increment (range) + (adjustment-page-increment (range-adjustment range))) -; ;;; Separator +(defun range-step-increment (range) + (adjustment-step-increment (range-adjustment range))) -(define-foreign vseparator-new () vseparator) +(defun (setf range-page-increment) (value range) + (setf (adjustment-page-increment (range-adjustment range)) value)) -(define-foreign hseparator-new () hseparator) +(defun (setf range-step-increment) (value range) + (setf (adjustment-step-increment (range-adjustment range)) value)) +(defbinding range-set-range () nil + (range range) + (lower double-float) + (upper double-float)) +(defbinding range-set-increments () nil + (range range) + (step double-float) + (page double-float)) -; ;;; Preview +;;; Scale +(defbinding scale-get-layout-offsets () nil + (scale scale) + (x int :out) + (y int :out)) -; ;;; Progress -; (define-foreign progress-configure () adjustment -; (progress progress) -; (value single-float) -; (min single-float) -; (max single-float)) +;;; Progress bar -; (define-foreign ("gtk_progress_get_text_from_value" -; progress-text-from-value) () string -; (progress progress)) +(defbinding progress-bar-pulse () nil + (progress-bar progress-bar)) -; (define-foreign ("gtk_progress_get_percentage_from_value" -; progress-percentage-from-value) () single-float -; (progress progress)) +;;; Size group +(defmethod initialize-instance ((size-group size-group) &rest initargs + &key widget widgets) + (declare (ignore widget widgets)) + (prog1 + (call-next-method) + (initial-add size-group #'size-group-add-widget + initargs :widget :widgets))) -; ;;; Progress bar -; (define-foreign %progress-bar-new () progress-bar) +(defbinding size-group-add-widget () nil + (size-group size-group) + (widget widget)) -; (define-foreign %progress-bar-new-with-adjustment () progress-bar -; (adjustment adjustment)) +(defbinding size-group-remove-widget () nil + (size-group size-group) + (widget widget)) -; (defun progress-bar-new (&optional adjustment) -; (if adjustment -; (%progress-bar-new-with-adjustment adjustment) -; (%progress-bar-new))) -; (define-foreign progress-bar-update () nil -; (progress-bar progress-bar) -; (percentage single-float)) +;;; Stock items +(defbinding %stock-item-copy () pointer + (location pointer)) +(defbinding %stock-item-free () nil + (location pointer)) -;;; Adjustment +(defmethod reference-foreign ((class (eql (find-class 'stock-item))) location) + (%stock-item-copy location)) -(define-foreign adjustment-new () adjustment - (value single-float) - (lower single-float) - (upper single-float) - (step-increment single-float) - (page-increment single-float) - (page-size single-float)) +(defmethod unreference-foreign ((class (eql (find-class 'stock-item))) location) + (%stock-item-free location)) -(define-foreign adjustment-changed () nil - (adjustment adjustment)) +(defbinding stock-add (stock-item) nil + (stock-item stock-item) + (1 unsigned-int)) -(define-foreign adjustment-value-changed () nil - (adjustment adjustment)) +(defbinding stock-list-ids () (gslist string)) -(define-foreign adjustment-clamp-page () nil - (adjustment adjustment) - (lower single-float) - (upper single-float)) +(defbinding %stock-lookup () boolean + (stock-id string) + (location pointer)) +(defun stock-lookup (stock-id) + (let ((location + (allocate-memory (proxy-instance-size (find-class 'stock-item))))) + (unwind-protect + (when (%stock-lookup stock-id location) + (ensure-proxy-instance 'stock-item (%stock-item-copy location))) + (deallocate-memory location)))) ;;; Tooltips -; (define-foreign tooltips-new () tooltips) +(defbinding tooltips-enable () nil + (tooltips tooltips)) -; (define-foreign tooltips-enable () nil -; (tooltips tooltips)) +(defbinding tooltips-disable () nil + (tooltips tooltips)) -; (define-foreign tooltips-disable () nil -; (tooltips tooltips)) +(defun (setf tooltips-enabled-p) (enable tooltips) + (if enable + (tooltips-enable tooltips) + (tooltips-disable tooltips))) -; (define-foreign tooltips-set-tip () nil -; (tooltips tooltips) -; (widget widget) -; (tip-text string) -; (tip-private string)) - -; (declaim (inline tooltips-set-colors-real)) -; (define-foreign ("gtk_tooltips_set_colors" tooltips-set-colors-real) () nil -; (tooltips tooltips) -; (background gdk:color) -; (foreground gdk:color)) - -; (defun tooltips-set-colors (tooltips background foreground) -; (gdk:with-colors ((background background) -; (foreground foreground)) -; (tooltips-set-colors-real tooltips background foreground))) +(defbinding tooltips-set-tip () nil + (tooltips tooltips) + (widget widget) + (tip-text string) + (tip-private string)) -; (define-foreign tooltips-force-window () nil -; (tooltips tooltips)) +(defbinding tooltips-data-get () tooltips-data + (widget widget)) +(defbinding tooltips-force-window () nil + (tooltips tooltips)) +(defbinding tooltips-get-info-from-tip-window () boolean + (tip-window window) + (tooltips tooltips :out) + (current-widget widget :out)) -; ;;; Rc +;;; Rc -; (define-foreign rc-add-default-file (filename) nil -; ((namestring (truename filename)) string)) +(defbinding rc-add-default-file (filename) nil + ((namestring (truename filename)) string)) -; (define-foreign rc-parse (filename) nil -; ((namestring (truename filename)) string)) +(defbinding rc-parse (filename) nil + ((namestring (truename filename)) string)) -; (define-foreign rc-parse-string () nil -; (rc-string string)) +(defbinding rc-parse-string () nil + (rc-string string)) -; (define-foreign rc-reparse-all () nil) +(defbinding rc-reparse-all () nil) -; ;(define-foreign rc-get-style () style -; ; (widget widget)) +(defbinding rc-get-style () style + (widget widget)) ;;; Accelerator Groups - -(define-foreign accel-group-new () accel-group) - -(define-foreign accel-group-get-default () accel-group) - -(deftype-method alien-ref accel-group (type-spec) - (declare (ignore type-spec)) - '%accel-group-ref) - -(deftype-method alien-unref accel-group (type-spec) - (declare (ignore type-spec)) - '%accel-group-unref) - -(define-foreign %accel-group-ref () accel-group - (accel-group (or accel-group pointer))) - -(define-foreign %accel-group-unref () nil - (accel-group (or accel-group pointer))) - -(define-foreign accel-group-activate (accel-group key modifiers) boolean +#| +(defbinding accel-group-activate (accel-group key modifiers) boolean (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) -(define-foreign accel-groups-activate (object key modifiers) boolean +(defbinding accel-groups-activate (object key modifiers) boolean (object object) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) -(define-foreign accel-group-attach () nil +(defbinding accel-group-attach () nil (accel-group accel-group) (object object)) -(define-foreign accel-group-detach () nil +(defbinding accel-group-detach () nil (accel-group accel-group) (object object)) -(define-foreign accel-group-lock () nil +(defbinding accel-group-lock () nil (accel-group accel-group)) -(define-foreign accel-group-unlock () nil +(defbinding accel-group-unlock () nil (accel-group accel-group)) ;;; Accelerator Groups Entries -(define-foreign accel-group-get-entry (accel-group key modifiers) accel-entry +(defbinding accel-group-get-entry (accel-group key modifiers) accel-entry (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) -(define-foreign accel-group-lock-entry (accel-group key modifiers) nil +(defbinding accel-group-lock-entry (accel-group key modifiers) nil (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) -(define-foreign accel-group-unlock-entry (accel-group key modifiers) nil +(defbinding accel-group-unlock-entry (accel-group key modifiers) nil (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) -(define-foreign accel-group-add +(defbinding accel-group-add (accel-group key modifiers flags object signal) nil (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) @@ -2031,7 +2042,7 @@ (define-foreign accel-group-add (object object) ((name-to-string signal) string)) -(define-foreign accel-group-add (accel-group key modifiers object) nil +(defbinding accel-group-add (accel-group key modifiers object) nil (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type) @@ -2040,7 +2051,7 @@ (define-foreign accel-group-add (accel-group key modifiers object) nil ;;; Accelerator Signals -(define-foreign accel-group-handle-add +(defbinding accel-group-handle-add (object signal-id accel-group key modifiers flags) nil (object object) (signal-id unsigned-int) @@ -2049,102 +2060,10 @@ (define-foreign accel-group-handle-add (modifiers gdk:modifier-type) (flags accel-flags)) -(define-foreign accel-group-handle-remove +(defbinding accel-group-handle-remove (object accel-group key modifiers) nil (object object) (accel-group accel-group) ((gdk:keyval-from-name key) unsigned-int) (modifiers gdk:modifier-type)) - - - -;;; Style - -; (define-foreign style-new () style) - -; (define-foreign style-copy () style -; (style style)) - -; (define-foreign style-ref () style -; (style style)) - -; (define-foreign style-unref () nil -; (style style)) - -; (define-foreign style-get-color () gdk:color -; (style style) -; (color-type color-type) -; (state-type state-type)) - -; (define-foreign -; ("gtk_style_set_color" style-set-color-from-color) () gdk:color -; (style style) -; (color-type color-type) -; (state-type state-type) -; (color gdk:color)) - -; (defun style-set-color (style color-type state-type color) -; (gdk:with-colors ((color color)) -; (style-set-color-from-color style color-type state-type color))) - -; (define-foreign ("gtk_style_get_font" style-font) () gdk:font -; (style style)) - -; (define-foreign style-set-font () gdk:font -; (style style) -; (font gdk:font)) - -; (defun (setf style-font) (font style) -; (let ((font (gdk:ensure-font font))) -; (gdk:font-unref (style-font style)) -; (style-set-font style font))) - -; (defun style-fg (style state) -; (style-get-color style :foreground state)) - -; (defun (setf style-fg) (color style state) -; (style-set-color style :foreground state color)) - -; (defun style-bg (style state) -; (style-get-color style :background state)) - -; (defun (setf style-bg) (color style state) -; (style-set-color style :background state color)) - -; (defun style-text (style state) -; (style-get-color style :text state)) - -; (defun (setf style-text) (color style state) -; (style-set-color style :text state color)) - -; (defun style-base (style state) -; (style-get-color style :base state)) - -; (defun (setf style-base) (color style state) -; (style-set-color style :base state color)) - -; (defun style-white (style) -; (style-get-color style :white :normal)) - -; (defun (setf style-white) (color style) -; (style-set-color style :white :normal color)) - -; (defun style-black (style) -; (style-get-color style :black :normal)) - -; (defun (setf style-black) (color style) -; (style-set-color style :black :normal color)) - -; (define-foreign style-get-gc -; (style color-type &optional (state-type :normal)) gdk:gc -; (style style) -; (color-type color-type) -; (state-type state-type)) - - - - - - - - +|#