X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/f4267180bc6ba510900e7c5209a93c0ae66373de..842e5ffe2acf8474415544a32657c5948d72a2c4:/gtk/gtk.lisp diff --git a/gtk/gtk.lisp b/gtk/gtk.lisp index 9d4a734..af78c09 100644 --- a/gtk/gtk.lisp +++ b/gtk/gtk.lisp @@ -15,7 +15,7 @@ ;; 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.26 2004-12-21 00:15:19 espen Exp $ +;; $Id: gtk.lisp,v 1.30 2005-01-12 13:38:18 espen Exp $ (in-package "GTK") @@ -73,13 +73,19 @@ (defbinding accel-label-refetch () boolean (accel-label accel-label)) +;;; Accessible + +(defbinding accessible-connect-widget-destroyed () nil + (accessible accessible)) + + ;;; Adjustment -(defmethod shared-initialize ((adjustment adjustment) names &key value) +(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 + ;; may be outside current limits and ignored (when value (setf (slot-value adjustment 'value) value)))) @@ -96,8 +102,28 @@ (defbinding adjustment-clamp-page () nil (upper single-float)) -;;; Arrow -- no functions +;;; Alignment +(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)) ;;; Aspect frame @@ -111,9 +137,11 @@ (defun (setf bin-child) (child bin) (container-add bin child) child) - -;;; Binding - +(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))) ;;; Box @@ -132,7 +160,7 @@ (defbinding box-pack-end () nil (fill boolean) (padding unsigned-int)) -(defun box-pack (box child &key end expand fill (padding 0)) +(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))) @@ -162,6 +190,12 @@ (defbinding box-set-child-packing () nil ;;; Button +(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))) + + (defbinding button-pressed () nil (button button)) @@ -201,11 +235,7 @@ (defbinding calendar-unmark-day () int (defbinding calendar-clear-marks () nil (calendar calendar)) -(defbinding calendar-display-options () nil - (calendar calendar) - (options calendar-display-options)) - -(defbinding (calendar-date "gtk_calendar_get_date") () nil +(defbinding calendar-get-date () nil (calendar calendar) (year unsigned-int :out) (month unsigned-int :out) @@ -218,31 +248,6 @@ (defbinding calendar-thaw () nil (calendar calendar)) - -;;; Cell editable - - - -;;; Cell renderer - - - -;;; Cell renderer pixbuf -- no functions - - - -;;; Cell renderer text - - - -;;; Cell renderer toggle -- no functions - - - -;;; Check button -- no functions - - - ;;; Check menu item (defbinding check-menu-item-toggled () nil @@ -267,20 +272,26 @@ (defbinding (color-selection-is-adjusting-p ;;;; Combo Box -(defmethod shared-initialize ((combo-box combo-box) names &key model content) - (unless model - (setf - (combo-box-model combo-box) - (make-instance 'list-store :column-types '(string))) - (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 - (map 'nil #'(lambda (text) - (combo-box-append-text combo-box text)) - content))) - (call-next-method)) +(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))) + ;; (defmethod shared-initialize :after ((combo-box combo-box) names &key active) ;; (when active @@ -313,7 +324,7 @@ (defbinding combo-box-popdown () nil ;;;; Combo Box Entry -(defmethod shared-initialize ((combo-box-entry combo-box-entry) names &key model) +(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))) @@ -461,25 +472,21 @@ (defmethod (setf container-children) (children (dialog dialog)) (setf (container-children (dialog-vbox dialog)) children)) - -;;; Drawing area - -(defbinding drawing-area-get-size () nil - (drawing-area drawing-area) - (width int :out) - (height int :out)) - - ;;; Entry -(defbinding entry-get-layout () pango:layout - (entry entry)) - (defbinding entry-get-layout-offsets () nil (entry entry) (x int :out) (y int :out)) +(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)) + ;;; Entry Completion @@ -514,47 +521,182 @@ (defbinding entry-completion-delete-action () nil (index int)) +;;; File Chooser + +(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))) + + +(defbinding file-chooser-select-filename () boolean + (file-chooser file-chooser) + (filename string)) + +(defbinding file-chooser-unselect-filename () nil + (file-chooser file-chooser) + (filename string)) + +(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)) + +(defbinding file-chooser-unselect-uri () nil + (file-chooser file-chooser) + (uri string)) + +(defbinding file-chooser-get-uris () (gslist string) + (file-chooser file-chooser)) + +(defbinding file-chooser-add-filter () nil + (file-chooser file-chooser) + (filter file-filter)) + +(defbinding file-chooser-remove-filter () nil + (file-chooser file-chooser) + (filter file-filter)) + +(defbinding file-chooser-list-filters () (gslist file-filter) + (file-chooser file-chooser)) + +(defbinding file-chooser-add-shortcut-folder () boolean + (file-chooser file-chooser) + (folder string) + (nil null)) + +(defbinding file-chooser-remove-shortcut-folder () nil + (file-chooser file-chooser) + (folder string) + (nil null)) + +(defbinding file-chooser-list-shortcut-folders () (gslist string) + (file-chooser file-chooser)) + +(defbinding file-chooser-add-shortcut-folder-uri () boolean + (file-chooser file-chooser) + (uri string) + (nil null)) + +(defbinding file-chooser-remove-shortcut-folder-uri () nil + (file-chooser file-chooser) + (uri string) + (nil null)) + +(defbinding file-chooser-list-shortcut-folder-uris () (gslist string) + (file-chooser file-chooser)) + + +;;; File Filter + +(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))) + + +(defbinding file-filter-add-mime-type () nil + (filter file-filter) + (mime-type string)) + +(defbinding file-filter-add-pattern () nil + (filter file-filter) + (pattern string)) + +#+gtk2.6 +(defbinding file-filter-add-pixbuf-formats () nil + (filter file-filter) + (pattern string)) + +(def-callback-marshal %file-filter-func (boolean file-filter-info)) + +(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)) + +(defbinding file-filter-get-needed () file-filter-flags + (filter file-filter)) + +(defbinding file-filter-filter () boolean + (filter file-filter) + (filter-info file-filter-info)) + + + ;;; Image (defbinding image-set-from-file () nil (image image) (filename pathname)) -(defbinding image-set-from-pixmap () nil - (image image) - (pixmap gdk:pixmap) - (mask gdk:bitmap)) +(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))) + +(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)))) -(defbinding image-set-from-stock () nil - (image image) - (stock-id string) - (icon-size icon-size)) +(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)))) -(defun image-set-from-pixmap-data (image pixmap-data) - (multiple-value-bind (pixmap mask) (gdk:pixmap-create pixmap-data) - (image-set-from-pixmap image pixmap mask))) -(defun image-set-from-source (image source) - (etypecase source - (pathname (image-set-from-file image source)) - (string (if (stock-lookup source) - (setf (image-stock image) source) - (image-set-from-file image source))) - (vector (image-set-from-pixmap-data image source)))) +;;; Image menu item +(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 shared-initialize ((image image) names &rest initargs - &key file pixmap source) - (prog1 - (if (vectorp pixmap) - (progn - (remf initargs :pixmap) - (apply #'call-next-method image names initargs)) - (call-next-method)) - (cond - (file (image-set-from-file image file)) - ((vectorp pixmap) (image-set-from-pixmap-data image pixmap)) - (source (image-set-from-source image source))))) + +(defmethod (setf image-menu-item-image) ((widget widget) (item image-menu-item)) + (setf (slot-value item 'image) widget)) + +(defmethod (setf image-menu-item-image) (image (item image-menu-item)) + (setf (image-menu-item-image item) (create-image-widget image))) ;;; Label @@ -569,12 +711,6 @@ (defbinding label-select-region () nil (start int) (end int)) -(defbinding label-get-text () string - (label label)) - -(defbinding label-get-layout () pango:layout - (label label)) - (defbinding label-get-selection-bounds () boolean (label label) (start int :out) @@ -591,17 +727,15 @@ (defbinding %radio-button-set-group () nil (radio-button radio-button) (group pointer)) -(defun radio-button-add-to-group (button1 button2) +(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))) - -(defmethod initialize-instance ((button radio-button) - &rest initargs &key group-with) - (declare (ignore initargs)) - (call-next-method) - (when group-with - (radio-button-add-to-group button group-with))) +(defmethod initialize-instance ((button radio-button) &key group) + (prog1 + (call-next-method) + (when group + (add-to-radio-group button group)))) ;;; Item @@ -619,30 +753,28 @@ (defbinding item-toggle () nil ;;; Menu item +(defmethod initialize-instance ((item menu-item) &key label) + (prog1 + (call-next-method) + (when label + (setf (menu-item-label item) label)))) + + (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) + :use-underline (menu-item-use-underline-p menu-item) + :visible t :parent menu-item) label) (defun menu-item-label (menu-item) - (with-slots (child) menu-item - (when (typep child 'label) - (label-label child)))) + (when (and (slot-boundp menu-item 'child) + (typep (bin-child menu-item) 'label)) + (label-label (bin-child menu-item)))) -(defbinding %menu-item-set-submenu () nil - (menu-item menu-item) - (submenu menu)) - -(defbinding %menu-item-remove-submenu () nil +(defbinding 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) - (defbinding menu-item-set-accel-path () nil (menu-item menu-item) (accel-path string)) @@ -665,6 +797,16 @@ (defbinding menu-item-toggle-size-allocate () nil (allocation int)) +;;; Menu tool button + +#+gtk2.6 +(defbinding menu-tool-button-set-arrow-tip () nil + (menu-tool-button menu-tool-button) + (tooltips tooltips) + (tip-text string) + (tip-private string)) + + ;;; Message dialog (defmethod initialize-instance ((dialog message-dialog) &rest initargs @@ -717,19 +859,51 @@ (defbinding %radio-menu-item-set-group () nil (radio-menu-item radio-menu-item) (group pointer)) -(defun radio-menu-item-add-to-group (item1 item2) +(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))) -(defmethod initialize-instance ((item radio-menu-item) - &rest initargs &key group-with) - (declare (ignore initargs)) +(defmethod initialize-instance ((item radio-menu-item) &key group) (prog1 (call-next-method) - (when group-with - (radio-menu-item-add-to-group item group-with)))) + (when group + (add-to-radio-group item group)))) + +;;; 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)) + +(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)))) + + ;;; Toggle button @@ -737,7 +911,6 @@ (defbinding toggle-button-toggled () nil (toggle-button toggle-button)) - ;;; Window (defmethod initialize-instance ((window window) &rest initargs @@ -773,7 +946,41 @@ (defbinding window-set-default-size (window width height) int ((or width -1) int) ((or height -1) int)) -;(defbinding window-set-geometry-hints) +(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.") @@ -793,6 +1000,14 @@ (defbinding window-mnemonic-activate (window key modifier) nil ((gdk:keyval-from-name key) unsigned-int) (modifier gdk:modifier-type)) +(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)) @@ -814,6 +1029,20 @@ (defbinding window-maximize () nil (defbinding window-unmaximize () nil (window window)) +(defbinding window-fullscreen () nil + (window window)) + +(defbinding window-unfullscreen () nil + (window window)) + +(defbinding window-set-keep-above () nil + (window window) + (setting boolean)) + +(defbinding window-set-keep-below () nil + (window window) + (setting boolean)) + (defbinding window-begin-resize-drag () nil (window window) (edge gdk:window-edge) @@ -832,9 +1061,6 @@ (defbinding window-set-frame-dimensions () nil (window window) (left int) (top int) (rigth int) (bottom int)) -(defbinding (window-default-icons "gtk_window_get_default_icon_list") - () (glist gdk:pixbuf)) - (defbinding %window-get-default-size () nil (window window) (width int :out) @@ -851,12 +1077,6 @@ (defbinding window-get-frame-dimensions () nil (defbinding %window-get-icon-list () (glist gdk:pixbuf) (window window)) -(defmethod window-icon ((window window)) - (let ((icon-list (%window-get-icon-list window))) - (if (endp (rest icon-list)) - (first icon-list) - icon-list))) - (defbinding window-get-position () nil (window window) (root-x int :out) @@ -884,20 +1104,87 @@ (defbinding window-resize () nil (width int) (heigth int)) -(defbinding %window-set-icon-list () nil +(defbinding (window-default-icon-list "gtk_window_get_default_icon_list") + () (glist gdk:pixbuf)) + +(defun window-default-icon () + (first (window-default-icon-list))) + +(defbinding %window-set-default-icon-list () nil + (icons (glist gdk:pixbuf))) + +(defun (setf window-default-icon-list) (icons) + (%window-set-default-icon-list icons) + icons) + +(defbinding %window-set-default-icon () nil + (icons (glist gdk:pixbuf))) + +(defmethod (setf window-default-icon) ((icon gdk:pixbuf)) + (%window-set-default-icon icon) + icon) + +(defmethod (setf window-group) ((group window-group) (window window)) + (window-group-add-window group window) + group) + +(defbinding %window-set-default-icon-from-file () boolean + (filename pathname) + (nil null)) + +(defmethod (setf window-default-icon) ((icon-file pathname)) + (%window-set-default-icon-from-file icon-file) + icon-file) + +(defbinding %window-set-icon-from-file () boolean (window window) - (icon-list (glist gdk:pixbuf))) + (filename pathname) + (nil null)) -(defmethod (setf window-icon) (icon (window window)) - (%window-set-icon-list window (mklist icon))) +(defmethod (setf window-icon) ((icon-file pathname) (window window)) + (%window-set-icon-from-file window icon-file) + icon-file) +(defbinding window-set-auto-startup-notification () nil + (setting boolean)) +(defbinding decorated-window-init () nil + (window window)) +(defbinding decorated-window-calculate-frame-size () nil + (window window)) -;;; File chooser +(defbinding decorated-window-set-title () nil + (window window) + (title string)) +(defbinding decorated-window-move-resize-window () nil + (window window) + (x int) + (y int) + (width int) + (heigth int)) + + +;;; Window group + +(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))) +(defbinding window-group-add-window () nil + (window-group window-group) + (window window)) + +(defbinding window-group-remove-window () nil + (window-group window-group) + (window window)) + ;;; Scrolled window @@ -909,16 +1196,17 @@ (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))) ;;; Statusbar -(defbinding (statusbar-context-id "gtk_statusbar_get_context_id") - () unsigned-int +(defbinding statusbar-get-context-id () unsigned-int (statusbar statusbar) (context-description string)) @@ -954,20 +1242,15 @@ (defbinding fixed-move () nil ;;; Notebook -(defun %notebook-position (notebook page) +(defun %ensure-notebook-position (notebook page) (etypecase page - (int page) - (keyword (case page - (:first 0) - (:last -1) - (t (error "Invalid position keyword: ~A" page)))) + (position page) (widget (notebook-page-num notebook page t)))) -(defun %notebook-child (notebook position) +(defun %ensure-notebook-child (notebook position) (typecase position (widget position) - (t (notebook-nth-page-child notebook position)))) - + (t (notebook-get-nth-page notebook position)))) (defbinding (notebook-insert "gtk_notebook_insert_page_menu") (notebook position child tab-label &optional menu-label) nil @@ -979,7 +1262,7 @@ (defbinding (notebook-insert "gtk_notebook_insert_page_menu") ((if (stringp menu-label) (make-instance 'label :label menu-label) menu-label) (or null widget)) - ((%notebook-position notebook position) int)) + ((%ensure-notebook-position notebook position) position)) (defun notebook-append (notebook child tab-label &optional menu-label) (notebook-insert notebook :last child tab-label menu-label)) @@ -989,7 +1272,7 @@ (defun notebook-prepend (notebook child tab-label &optional menu-label) (defbinding notebook-remove-page (notebook page) nil (notebook notebook) - ((%notebook-position notebook page) int)) + ((%ensure-notebook-position notebook page) position)) (defbinding %notebook-page-num () int (notebook notebook) @@ -999,7 +1282,7 @@ (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 child of ~A" child notebook)) + (error "~A is not a page in ~A" child notebook)) page-num))) (defbinding notebook-next-page () nil @@ -1019,46 +1302,26 @@ (defbinding notebook-popup-enable () nil (defbinding notebook-popup-disable () nil (notebook notebook)) -(defbinding (notebook-nth-page-child "gtk_notebook_get_nth_page") - (notebook page) widget +(defbinding notebook-get-nth-page () widget (notebook notebook) - ((case page - (:first 0) - (:last -1) - (t page)) int)) - + (page position)) -(defbinding %notebook-get-current-page () int - (notebook notebook)) - -(defun notebook-current-page-num (notebook) - (let ((num (%notebook-get-current-page notebook))) - (when (>= num 0) - num))) - -(defun notebook-current-page (notebook) - (let ((page-num (notebook-current-page-num notebook))) - (when page-num - (notebook-nth-page-child notebook page-num)))) - -(defbinding %notebook-set-current-page () nil - (notebook notebook) - (page-num int)) +(defun %notebook-current-page (notebook) + (when (slot-boundp notebook 'current-page-num) + (notebook-get-nth-page notebook (notebook-current-page-num notebook)))) (defun (setf notebook-current-page) (page notebook) - (%notebook-set-current-page notebook (%notebook-position notebook page)) - page) - + (setf (notebook-current-page notebook) (notebook-page-num notebook page))) (defbinding (notebook-tab-label "gtk_notebook_get_tab_label") (notebook page) widget (notebook notebook) - ((%notebook-child notebook page) widget)) + ((%ensure-notebook-child notebook page) widget)) (defbinding (notebook-tab-label-text "gtk_notebook_get_tab_label_text") (notebook page) (copy-of string) (notebook notebook) - ((%notebook-child notebook page) widget)) + ((%ensure-notebook-child notebook page) widget)) (defbinding %notebook-set-tab-label () nil (notebook notebook) @@ -1069,19 +1332,19 @@ (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 (%notebook-child notebook page) widget) + (%notebook-set-tab-label notebook (%ensure-notebook-child notebook page) widget) widget)) (defbinding (notebook-menu-label "gtk_notebook_get_menu_label") (notebook page) widget (notebook notebook) - ((%notebook-child notebook page) widget)) + ((%ensure-notebook-child notebook page) widget)) (defbinding (notebook-menu-label-text "gtk_notebook_get_menu_label_text") (notebook page) (copy-of string) (notebook notebook) - ((%notebook-child notebook page) widget)) + ((%ensure-notebook-child notebook page) widget)) (defbinding %notebook-set-menu-label () nil (notebook notebook) @@ -1092,7 +1355,7 @@ (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 (%notebook-child notebook page) widget) + (%notebook-set-menu-label notebook (%ensure-notebook-child notebook page) widget) widget)) @@ -1132,16 +1395,25 @@ (defbinding paned-pack2 () nil (defbinding layout-put () nil (layout layout) - (widget widget) + (child widget) (x int) (y int)) (defbinding layout-move () nil (layout layout) - (widget widget) + (child widget) (x int) (y int)) +(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 @@ -1167,6 +1439,10 @@ (defbinding menu-shell-select-item () nil (menu-shell menu-shell) (menu-item menu-item)) +(defbinding menu-shell-select-first () nil + (menu-shell menu-shell) + (search-sensitive boolean)) + (defbinding menu-shell-deselect () nil (menu-shell menu-shell)) @@ -1175,6 +1451,8 @@ (defbinding menu-shell-activate-item () nil (menu-item menu-item) (fore-deactivate boolean)) +(defbinding menu-shell-cancel () nil + (menu-shell menu-shell)) ;;; Menu @@ -1194,7 +1472,15 @@ (defbinding menu-reorder-child (menu menu-item position) nil (menu-item menu-item) ((%menu-position menu position) int)) -(def-callback-marshal %menu-popup-callback (nil (x int) (y int) (push-in boolean))) +(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)) + +(def-callback-marshal %menu-position-func (nil (menu menu) (x int) (y int) (push-in boolean))) (defbinding %menu-popup () nil (menu menu) @@ -1211,7 +1497,7 @@ (defun menu-popup (menu button activate-time &key callback parent-menu-shell (with-callback-function (id callback) (%menu-popup menu parent-menu-shell parent-menu-item - (callback %menu-popup-callback) id button activate-time)) + (callback %menu-position-func) id button activate-time)) (%menu-popup menu parent-menu-shell parent-menu-item nil 0 button activate-time))) @@ -1239,6 +1525,28 @@ (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)) + +(defbinding %menu-attach-to-widget () nil + (menu menu) + (widget widget) + ((callback %menu-detach-func) pointer)) + +(defun menu-attach-to-widget (menu widget function) + (setf (object-data menu 'detach-func) function) + (%menu-attach-to-widget menu widget)) + +(defbinding menu-detach () nil + (menu menu)) + +#+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 @@ -1322,114 +1630,104 @@ (defun table-col-spacing (table &optional col) ;;; Toolbar -(defbinding %toolbar-insert-element () widget +(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) - (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)) + (tool-item tool-item) + (position position)) + +(defun toolbar-insert (toolbar tool-item &optional (position :end)) + (%toolbar-insert toolbar tool-item position) + (%tool-item-update-tooltips tool-item)) -(defbinding %toolbar-insert-stock () widget +(defbinding toolbar-get-item-index () int (toolbar toolbar) - (stock-id string) - (tooltip-text string) - (tooltip-private-text string) - (nil null) - (nil null) - (position int)) + (item tool-item)) -(defun toolbar-insert (toolbar position element - &key tooltip-text tooltip-private-text - type icon group callback object) - (let* ((numpos (case position - (:first -1) - (:last 0) - (t position))) - (widget - (cond - ((or - (eq type :space) - (and (not type) (eq element :space))) - (%toolbar-insert-element - toolbar :space nil nil - tooltip-text tooltip-private-text nil numpos)) - ((or - (eq type :widget) - (and (not type) (typep element 'widget))) - (%toolbar-insert-element - toolbar :widget element nil - tooltip-text tooltip-private-text nil numpos)) - ((or - (eq type :stock) - (and - (not type) - (typep element 'string) - (stock-lookup element))) - (%toolbar-insert-stock - toolbar element tooltip-text tooltip-private-text numpos)) - ((typep element 'string) - (%toolbar-insert-element - toolbar (or type :button) (when (eq type :radio-button) group) - element tooltip-text tooltip-private-text - (etypecase icon - (null nil) - (widget icon) - ((or pathname string vector) - (make-instance 'image - :source icon ; :icon-size (toolbar-icon-size toolbar) - ))) - numpos)) - ((error "Invalid element type: ~A" element))))) - (when callback - (signal-connect widget 'clicked callback :object object)) - widget)) +(defbinding toolbar-get-nth-item () tool-item + (toolbar toolbar) + (n int)) + +(defbinding toolbar-get-drop-index () int + (toolbar toolbar) + (x int) (y int)) + +(defbinding toolbar-set-drop-highlight-item () nil + (toolbar toolbar) + (tool-item tool-item) + (index int)) -(defun toolbar-append (toolbar element &key tooltip-text tooltip-private-text - type icon group callback object) - (toolbar-insert - toolbar :first element :type type :icon icon :group group - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text - :callback callback :object object)) -(defun toolbar-prepend (toolbar element &key tooltip-text tooltip-private-text - type icon group callback object) - (toolbar-insert - toolbar :last element :type type :icon icon :group group - :tooltip-text tooltip-text :tooltip-private-text tooltip-private-text - :callback callback :object object)) +;;; Tool button +(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))) -(defun toolbar-insert-space (toolbar position) - (toolbar-insert toolbar position :space)) -(defun toolbar-append-space (toolbar) - (toolbar-append toolbar :space)) +;;; Tool item + +(defbinding tool-item-set-tooltip () nil + (tool-item tool-item) + (tooltips tooltips) + (tip-text string) + (tip-private string)) -(defun toolbar-prepend-space (toolbar) - (toolbar-prepend toolbar :space)) +(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) "")))) + +(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) + +(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) + +(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 toolbar-enable-tooltips (toolbar) - (setf (toolbar-tooltips-p toolbar) t)) -(defun toolbar-disable-tooltips (toolbar) - (setf (toolbar-tooltips-p toolbar) nil)) +(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 toolbar-remove-space () nil - (toolbar toolbar) - (position int)) +(defbinding %tool-item-set-proxy-menu-item () nil + (tool-item tool-item) + (menu-item-id string) + (menu-item menu-item)) -(defbinding toolbar-unset-icon-size () nil - (toolbar toolbar)) +(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) -(defbinding toolbar-unset-style () nil - (toolbar toolbar)) +#+gtk2.6 +(defbinding tool-item-rebuild-menu () nil + (tool-item tool-item)) ;;; Editable @@ -1444,12 +1742,11 @@ (defbinding editable-get-selection-bounds (editable) nil (start int :out) (end int :out)) -(defbinding editable-insert-text - (editable text &optional (position 0)) nil +(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)) @@ -1492,6 +1789,22 @@ (defbinding editable-delete-selection () nil ;;; Spin button +(defbinding spin-button-configure () nil + (spin-button spin-button) + (adjustment adjustment) + (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))) @@ -1514,11 +1827,12 @@ (defbinding ruler-set-range () nil (position single-float) (max-size single-float)) -(defbinding ruler-draw-ticks () nil - (ruler ruler)) - -(defbinding ruler-draw-pos () nil - (ruler ruler)) +(defbinding ruler-get-range () nil + (ruler ruler) + (lower single-float :out) + (upper single-float :out) + (position single-float :out) + (max-size single-float :out)) @@ -1561,9 +1875,10 @@ (defbinding range-set-increments () nil ;;; Scale -; (defbinding scale-draw-value () nil -; (scale scale)) - +(defbinding scale-get-layout-offsets () nil + (scale scale) + (x int :out) + (y int :out)) ;;; Progress bar @@ -1644,9 +1959,16 @@ (defbinding tooltips-set-tip () nil (tip-text string) (tip-private string)) +(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