From 196fe1e970e65560354c0f98c047f0588b823790 Mon Sep 17 00:00:00 2001 Message-Id: <196fe1e970e65560354c0f98c047f0588b823790.1714291464.git.mdw@distorted.org.uk> From: Mark Wooding Date: Thu, 5 Oct 2000 18:57:50 +0000 Subject: [PATCH] Tests updated and rewritten to work with the new API Organization: Straylight/Edgeware From: espen --- examples/testgtk.lisp | 2805 +++++++++-------------------------------- 1 file changed, 628 insertions(+), 2177 deletions(-) diff --git a/examples/testgtk.lisp b/examples/testgtk.lisp index d92af3b..bf56671 100644 --- a/examples/testgtk.lisp +++ b/examples/testgtk.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: testgtk.lisp,v 1.1 2000-08-14 16:44:26 espen Exp $ +;; $Id: testgtk.lisp,v 1.2 2000-10-05 18:57:50 espen Exp $ (use-package "GTK") @@ -40,14 +40,14 @@ (defmacro define-test-dialog (name title &body body) `(let ((window nil)) (defun ,name () (unless window - (setq window (dialog-new)) + (setq window (make-instance 'dialog)) (signal-connect window 'destroy #'(lambda () (widget-destroyed window))) (setf (window-title window) ,title) (setf (container-border-width window) 0) (let ((main-box (vbox-new nil 0)) (action-area (dialog-action-area window))) - (box-pack-start (dialog-vbox window) main-box t t 0) + (box-pack-start (dialog-main-box window) main-box t t 0) ,@body)) (if (not (widget-visible-p window)) @@ -65,36 +65,11 @@ (defmacro define-standard-dialog (name title &body body) ,@body))) -(defun build-option-menu (items history) - (let ((option-menu (option-menu-new)) - (menu (menu-new))) - (labels ((create-menu (items i group) - (when items - (let* ((item (first items)) - (menu-item (radio-menu-item-new group (first item)))) - (signal-connect - menu-item 'activate - #'(lambda () - (when (widget-mapped-p menu-item) - (funcall (second item))))) - - (menu-append menu menu-item) - (when (= i history) - (setf (check-menu-item-active-p menu-item) t)) - (widget-show menu-item) - (create-menu - (rest items) (1+ i) (radio-menu-item-group menu-item)))))) - (create-menu items 0 nil)) - (setf (option-menu-menu option-menu) menu) - (setf (option-menu-history option-menu) history) - option-menu)) - - ;;; Pixmaps used in some of the tests (defvar gtk-mini-xpm - '("15 20 17 1" + #("15 20 17 1" " c None" ". c #14121F" "+ c #278828" @@ -134,7 +109,7 @@ (defvar gtk-mini-xpm " >= ")) (defvar book-closed-xpm - '("16 16 6 1" + #("16 16 6 1" " c None s None" ". c black" "X c red" @@ -159,7 +134,7 @@ (defvar book-closed-xpm " ")) (defvar mini-page-xpm - '("16 16 4 1" + #("16 16 4 1" " c None s None" ". c black" "X c white" @@ -182,7 +157,7 @@ (defvar mini-page-xpm " ")) (defvar book-open-xpm - '("16 16 4 1" + #("16 16 4 1" " c None s None" ". c black" "X c #808080" @@ -208,327 +183,92 @@ (defvar book-open-xpm ;;; Button box -(defun create-bbox (class title spacing child-w child-h layout) - (let* ((frame (make-instance 'frame :title title)) - (bbox (make-instance 'class - :border-width 5 - :layout layout - :spacing spacing - :childrent - (list - (make-instance 'button :label "OK") - (make-instance 'button :label "Cancel") - (make-instance 'button :label "Help")) - :parent frame))) - (setf (button-box-child-size bbox) (vector child-w child-h)) - frame)) - +(defun create-bbox-in-frame (class frame-label spacing width height layout) + (make-instance 'frame + :label frame-label + :child (make-instance class + :border-width 5 :layout layout :spacing spacing + :child-min-width width :child-min-height height + :children + (list + (button-new "OK") + (button-new "Cancel") + (button-new "Help"))))) (define-test-window create-button-box "Button Boxes" (setf (container-border-width window) 10) - (let ((main-box (vbox-new nil 0))) - (let ((frame (frame-new "Horizontal Button Boxes")) - (box (vbox-new nil 0))) - (container-add window main-box) - (box-pack-start main-box frame t t 10) - (setf (container-border-width box) 10) - (container-add frame box) - (box-pack-start - box (create-bbox #'hbutton-box-new "Spread" 40 85 20 :spread) t t 0) - (box-pack-start - box (create-bbox #'hbutton-box-new "Edge" 40 85 20 :edge) t t 0) - (box-pack-start - box (create-bbox #'hbutton-box-new "Start" 40 85 20 :start) t t 0) - (box-pack-start - box (create-bbox #'hbutton-box-new "End" 40 85 20 :end) t t 0)) - - (let ((frame (frame-new "Vertical Button Boxes")) - (box (hbox-new nil 0))) - (box-pack-start main-box frame t t 10) - (setf (container-border-width box) 10) - (container-add frame box) - (box-pack-start - box (create-bbox #'vbutton-box-new "Spread" 30 85 20 :spread) t t 5) - (box-pack-start - box (create-bbox #'vbutton-box-new "Edge" 30 85 20 :edge) t t 5) - (box-pack-start - box (create-bbox #'vbutton-box-new "Start" 30 85 20 :start) t t 5) - (box-pack-start - box (create-bbox #'vbutton-box-new "End" 30 85 20 :end) t t 5)))) - - - -(define-standard-dialog create-buttons "Buttons" - (let ((table (table-new 3 3 nil)) - (buttons `((,(button-new "button1") 0 1 0 1) - (,(button-new "button2") 1 2 1 2) - (,(button-new "button3") 2 3 2 3) - (,(button-new "button4") 0 1 2 3) - (,(button-new "button5") 2 3 0 1) - (,(button-new "button6") 1 2 2 3) - (,(button-new "button7") 1 2 0 1) - (,(button-new "button8") 2 3 1 2) - (,(button-new "button9") 0 1 1 2)))) - (setf (table-row-spacings table) 5) - (setf (table-column-spacings table) 5) - (setf (container-border-width table) 10) - (box-pack-start main-box table t t 0) - (do ((tmp buttons (rest tmp))) - ((endp tmp)) - (let ((button (first tmp)) - (widget (or (first (second tmp)) - (first (first buttons))))) - (signal-connect (first button) 'clicked - #'(lambda () - (if (widget-visible-p widget) - (widget-hide widget) - (widget-show widget)))) - (apply #'table-attach table button))))) + (make-instance 'vbox + :parent window + :children + (list + (list + (make-instance 'frame + :label "Horizontal Button Boxes" + :child + (make-instance 'vbox + :border-width 10 + :children + (mapcar + #'(lambda (args) + (list (apply #'create-bbox-in-frame 'hbutton-box args) :padding 5)) + '(("Spread" 40 85 20 :spread) ("Edge" 40 85 20 :edge) + ("Start" 40 85 20 :start) ("End" 40 85 20 :end))))) + :padding 10) + + (list + (make-instance 'frame + :label "Vertical Button Boxes" + :child + (make-instance 'hbox + :border-width 10 + :children + (mapcar + #'(lambda (args) + (list (apply #'create-bbox-in-frame 'vbutton-box args) :padding 5)) + '(("Spread" 30 85 20 :spread) ("Edge" 30 85 20 :edge) + ("Start" 30 85 20 :start) ("End" 30 85 20 :end))))) + :padding 10)))) + + +;; Buttons + +(define-standard-dialog create-buttons "Buttons" + (let ((table (make-instance 'table + :rows 3 :columns 3 :homogeneous nil + :row-spacing 5 :column-spacing 5 :border-width 10 + :parent main-box)) + (buttons (make-array 0 :adjustable t :fill-pointer t))) + (dotimes (n 9) + (vector-push-extend + (button-new (format nil "button~D" (1+ n))) buttons)) + (dotimes (column 3) + (dotimes (row 3) + (let ((button (aref buttons (+ (* 3 row) column))) + (button+1 (aref buttons (mod (+ (* 3 row) column 1) 9)))) + (signal-connect button 'clicked + #'(lambda () + (if (widget-visible-p button+1) + (widget-hide button+1) + (widget-show button+1)))) + (table-attach table button column (1+ column) row (1+ row))))))) ;; Calenadar (define-standard-dialog create-calendar "Calendar" (setf (container-border-width main-box) 10) - (box-pack-start main-box (calendar-new) t t 0)) - + (make-instance 'calendar :parent main-box)) ;;; Check buttons -(define-standard-dialog create-check-buttons "GtkCheckButton" +(define-standard-dialog create-check-buttons "Check Buttons" (setf (container-border-width main-box) 10) (setf (box-spacing main-box) 10) - (box-pack-start main-box (check-button-new "button1") t t 0) - (box-pack-start main-box (check-button-new "button2") t t 0) - (box-pack-start main-box (check-button-new "button3") t t 0)) - - - -;;; CList - -(let ((style1 nil) - (style2 nil) - (style3 nil)) - (defun insert-row-clist (clist) - (let* ((text '("This" "is" "an" "inserted" "row" - "This" "is" "an" "inserted" "row" - "This" "is" "an" "inserted" "row" - "This" "is" "an" "inserted" "row")) - (row - (if (clist-focus-row clist) - (clist-insert clist (clist-focus-row clist) text) - (clist-prepend clist text)))) - - (unless style1 - (let ((color1 '#(0 56000 0)) - (color2 '#(32000 0 56000))) - (setq style1 (style-copy (widget-style clist))) - (setf - (style-base style1 :normal) color1 - (style-base style1 :selected) color2) - - (setq style2 (style-copy (widget-style clist))) - (setf - (style-fg style2 :normal) color1 - (style-fg style2 :selected) color2) - - (setq style3 (style-copy (widget-style clist))) - (setf - (style-fg style3 :normal) color1 - (style-base style3 :normal) color2 - (style-font style3) "-*-courier-medium-*-*-*-*-120-*-*-*-*-*-*"))) - - (setf (clist-cell-style clist row 3) style1) - (setf (clist-cell-style clist row 4) style2) - (setf (clist-cell-style clist row 0) style3)))) - - -(define-standard-dialog create-clist "clist" - (let* ((titles '("auto resize" "not resizeable" "max width 100" - "min width 50" "hide column" "Title 5" "Title 6" - "Title 7" "Title 8" "Title 9" "Title 10" - "Title 11" "Title 12" "Title 13" "Title 14" - "Title 15" "Title 16" "Title 17" "Title 18" - "Title 19")) - (clist (clist-new titles)) - (scrolled-window (scrolled-window-new nil nil))) - - (setf (container-border-width scrolled-window) 5) - (setf (scrolled-window-scrollbar-policy scrolled-window) :automatic) - (container-add scrolled-window clist) - - (signal-connect - clist 'click-column - #'(lambda (column) - (cond - ((= column 4) - (setf (clist-column-visible-p clist column) nil)) - ((= column (clist-sort-column clist)) - (if (eq (clist-sort-type clist) :ascending) - (setf (clist-sort-type clist) :descending) - (setf (clist-sort-type clist) :ascending))) - (t - (setf (clist-sort-column clist) column))) - (clist-sort clist))) - - (let ((box2 (hbox-new nil 5))) - (setf (container-border-width box2) 5) - (box-pack-start main-box box2 nil nil 0) - - (let ((button (button-new "Insert Row"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked #'insert-row-clist :object clist)) - - (let ((button (button-new "Add 1,000 Rows With Pixmaps"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (multiple-value-bind (pixmap mask) - (gdk:pixmap-create gtk-mini-xpm) - (let ((texts (do ((i 4 (1+ i)) - (texts '(nil "Center" "Right"))) - ((= i (length titles)) (reverse texts)) - (push (format nil "Column ~D" i) texts)))) - (clist-freeze clist) - (dotimes (i 1000) - (let ((row - (clist-append - clist - (cons (format nil "CListRow ~D" (random 1000)) - texts)))) - (clist-set-cell-pixtext - clist row 3 "gtk+" 5 (list pixmap mask)))) - (clist-thaw clist)))))) - - (let ((button (button-new "Add 10,000 Rows"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (let ((texts (do ((i 3 (1+ i)) - (texts '("Center" "Right"))) - ((= i (length titles)) (reverse texts)) - (push (format nil "Column ~D" i) texts)))) - (clist-freeze clist) - (dotimes (i 10000) - (clist-append - clist (cons (format nil "CListRow ~D" (random 1000)) texts))) - (clist-thaw clist)))))) - - - (let ((box2 (hbox-new nil 5))) - (setf (container-border-width box2) 5) - (box-pack-start main-box box2 nil nil 0) - - (let ((button (button-new "Clear List"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (clist-clear clist)))) - - (let ((button (button-new "Remove Selection"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (clist-freeze clist) - (let ((selection-mode (clist-selection-mode clist))) - (labels ((remove-selection () - (let ((selection (clist-selection clist))) - (when selection - (clist-remove clist (first selection)) - (unless (eq selection-mode :browse) - (remove-selection)))))) - (remove-selection)) - - (when (and - (eq selection-mode :extended) - (not (clist-selection clist)) - (clist-focus-row clist)) - (clist-select-row clist (clist-focus-row clist)))) - (clist-thaw clist)))) - - (let ((button (button-new "Undo Selection"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked #'clist-undo-selection :object clist)) - - (let ((button (button-new "Warning Test"))) - (box-pack-start box2 button t t 0) - (signal-connect button 'clicked #'(lambda ())))) - - - (let ((box2 (hbox-new nil 5))) - (setf (container-border-width box2) 5) - (box-pack-start main-box box2 nil nil 0) - - (let ((button (check-button-new "Show Title Buttons"))) - (box-pack-start box2 button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (if (toggle-button-active-p button) - (clist-column-titles-show clist) - (clist-column-titles-hide clist)))) - (setf (toggle-button-active-p button) t)) - - (let ((button (check-button-new "Reorderable"))) - (box-pack-start box2 button nil t 0) - (signal-connect - button 'clicked - #'(lambda () - (setf - (clist-reorderable-p clist) (toggle-button-active-p button)))) - (setf (toggle-button-active-p button) t)) - - (box-pack-start box2 (label-new "Selection Mode : ") nil t 0) - (let ((option-menu - (build-option-menu - `(("Single" - ,#'(lambda () (setf (clist-selection-mode clist) :single))) - ("Browse" - ,#'(lambda () (setf (clist-selection-mode clist) :browse))) - ("Multiple" - ,#'(lambda () (setf (clist-selection-mode clist) :multiple))) - ("Extended" - ,#'(lambda () (setf (clist-selection-mode clist) :extended)))) - 3))) - (box-pack-start box2 option-menu nil t 0))) - - (box-pack-start main-box scrolled-window t t 0) - (setf (clist-row-height clist) 18) - (setf (widget-height clist) 300) - - (dotimes (i (length titles)) - (setf (clist-column-width clist i) 80)) - - (setf (clist-column-auto-resize-p clist 0) t) - (setf (clist-column-resizeable-p clist 1) nil) - (setf (clist-column-max-width clist 2) 100) - (setf (clist-column-min-width clist 3) 50) - (setf (clist-selection-mode clist) :extended) - (setf (clist-column-justification clist 1) :right) - (setf (clist-column-justification clist 2) :center) - - (let ((style (style-new)) - (texts (do ((i 3 (1+ i)) - (texts '("Center" "Right"))) - ((= i (length titles)) (reverse texts)) - (push (format nil "Column ~D" i) texts)))) - (setf - (style-font style) "-adobe-helvetica-bold-r-*-*-*-140-*-*-*-*-*-*" - (style-fg style :normal) '#(56000 0 0) - (style-base style :normal) '#(0 56000 32000)) - - (dotimes (i 10) - (clist-append clist (cons (format nil "CListRow ~D" i) texts)) - (if (= (mod i 4) 2) - (setf (clist-row-style clist i) style) - (setf (clist-cell-style clist i (mod i 4)) style)))))) + (dotimes (n 3) + (make-instance 'check-button + :label (format nil "Button~D" (1+ n)) + :parent main-box))) @@ -537,561 +277,41 @@ (define-standard-dialog create-clist "clist" (let ((color-dialog nil)) (defun create-color-selection () (unless color-dialog - (setq color-dialog - (color-selection-dialog-new "color selection dialog")) - - (setf (window-position color-dialog) :mouse) - (signal-connect - color-dialog 'destroy #'(lambda () (widget-destroyed color-dialog))) - - (let ((colorsel (color-selection-dialog-colorsel color-dialog))) - (setf (color-selection-use-opacity-p colorsel) t) - (setf (color-selection-policy colorsel) :continuous) + (setq + color-dialog + (make-instance 'color-selection-dialog + :title "Color selection dialog" :position :mouse + :allow-grow nil :allow-shrink nil + :signals + (list (list 'destroy #'(lambda () (widget-destroyed color-dialog)))))) + + (with-slots (main-box colorsel) color-dialog + (make-instance 'hbutton-box + :border-width 10 :layout :edge :visible t + :children + (list + (create-check-button + "Show Opacity" '(setf color-selection-use-opacity-p) nil colorsel) + (create-check-button + "Show Palette" '(setf color-selection-use-palette-p) nil colorsel)) + :parent main-box) -; (signal-connect colorsel 'color-changed #'(lambda () nil)) - - (let ((button (color-selection-dialog-ok-button color-dialog))) - (signal-connect - button 'clicked - #'(lambda () - (let ((color (color-selection-color colorsel))) - (format t "Selected color: ~A~%" color) - (setf (color-selection-color colorsel) color)))))) - - (let ((button (color-selection-dialog-cancel-button color-dialog))) (signal-connect - button 'clicked #'widget-destroy :object color-dialog))) + (color-selection-dialog-ok-button color-dialog) 'clicked + #'(lambda () + (let ((color (color-selection-color colorsel))) + (format t "Selected color: ~A~%" color) + (setf (color-selection-color colorsel) color)))) + (signal-connect + (color-selection-dialog-cancel-button color-dialog) 'clicked + #'widget-destroy :object color-dialog))) (if (not (widget-visible-p color-dialog)) - (widget-show-all color-dialog) + (widget-show color-dialog) (widget-destroy color-dialog)))) -;;; CTree - -(let ((total-pages 0) - (total-books 0) - (status-labels) - (style1) - (style2) - (pixmap1) - (pixmap2) - (pixmap3)) - - (defun after-press (ctree &rest data) - (declare (ignore data)) - (setf - (label-text (svref status-labels 0)) - (format nil "~D" total-books)) - (setf - (label-text (svref status-labels 1)) - (format nil "~D" total-pages)) - (setf - (label-text (svref status-labels 2)) - (format nil "~D" (length (clist-selection ctree)))) - (setf - (label-text (svref status-labels 3)) - (format nil "~D" (clist-n-rows ctree))) - nil) - - (defun build-recursive (ctree parent current-depth depth books pages) - (let ((sibling nil)) - (do ((i (+ pages books) (1- i))) - ((= i books)) - (declare (fixnum i)) - (incf total-pages) - (setq - sibling - (ctree-insert-node - ctree parent sibling - (list - (format nil "Page ~D" (random 100)) - (format nil "Item ~D-~D" current-depth i)) - 5 :pixmap pixmap3 :leaf t)) - (when (and parent (eq (ctree-line-style ctree) :tabbed)) - (setf - (ctree-row-style ctree sibling) - (ctree-row-style ctree parent)))) - - (unless (= current-depth depth) - (do ((i books (1- i))) - ((zerop i)) - (incf total-books) - (setq - sibling - (ctree-insert-node - ctree parent sibling - (list - (format nil "Book ~D" (random 100)) - (format nil "Item ~D-~D" current-depth i)) - 5 :closed pixmap1 :opened pixmap2)) - - (let ((style (style-new)) - (color (case (mod current-depth 3) - (0 (vector - (* 10000 (mod current-depth 6)) - 0 - (- 65535 (mod (* i 10000) 65535)))) - (1 (vector - (* 10000 (mod current-depth 6)) - (- 65535 (mod (* i 10000) 65535)) - 0)) - (t (vector - (- 65535 (mod (* i 10000) 65535)) - 0 - (* 10000 (mod current-depth 6))))))) - (setf (style-base style :normal) color) - (ctree-set-node-data ctree sibling style #'style-unref) - - (when (eq (ctree-line-style ctree) :tabbed) - (setf (ctree-row-style ctree sibling) style))) - - (build-recursive - ctree sibling (1+ current-depth) depth books pages))))) - - (defun rebuild-tree (ctree depth books pages) - (let ((n (* (/ (1- (expt books depth)) (1- books)) (1+ pages)))) - (if (> n 10000) - (format t "~D total items? Try less~%" n) - (progn - (clist-freeze ctree) - (clist-clear ctree) - (setq total-books 1) - (setq total-pages 0) - (let ((parent - (ctree-insert-node - ctree nil nil '("Root") 5 - :closed pixmap1 :opened pixmap2 :expanded t)) - (style (style-new))) - (setf (style-base style :normal) '#(0 45000 55000)) - (ctree-set-node-data ctree parent style #'style-unref) - - (when (eq (ctree-line-style ctree) :tabbed) - (setf (ctree-row-style ctree parent) style)) - - (build-recursive ctree parent 1 depth books pages) - (clist-thaw ctree) - (after-press ctree)))))) - - (let ((export-window) - (export-ctree)) - (defun export-tree (ctree) - (unless export-window - (setq export-window (window-new :toplevel)) - (signal-connect - export-window 'destroy - #'(lambda () - (widget-destroyed export-window))) - - (setf (window-title export-window) "Exported ctree") - (setf (container-border-width export-window) 5) - - (let ((vbox (vbox-new nil 0))) - (container-add export-window vbox) - - (let ((button (button-new "Close"))) - (box-pack-end vbox button nil t 0) - (signal-connect - button 'clicked #'widget-destroy :object export-window)) - - (box-pack-end vbox (hseparator-new) nil t 10) - - (setq export-ctree (ctree-new '("Tree" "Info"))) - (setf (ctree-line-style export-ctree) :dotted) - - (let ((scrolled-window (scrolled-window-new))) - (container-add scrolled-window export-ctree) - (setf - (scrolled-window-scrollbar-policy scrolled-window) :automatic) - (box-pack vbox scrolled-window) - (setf (clist-selection-mode export-ctree) :extended) - (setf (clist-column-width export-ctree 0) 200) - (setf (clist-column-width export-ctree 1) 200) - (setf (widget-width export-ctree) 300) - (setf (widget-height export-ctree) 200)))) - - (unless (widget-visible-p export-window) - (widget-show-all export-window)) - - (clist-clear export-ctree) - (let ((node (ctree-nth-node ctree (clist-focus-row ctree)))) - (when node - (let ((tree-list - (list (ctree-map-to-list ctree node #'(lambda (node) node))))) - (ctree-insert-from-list - export-ctree nil tree-list - #'(lambda (export-ctree-node ctree-node) - (multiple-value-bind - (text spacing pixmap-closed bitmap-closed pixmap-opened - bitmap-opened leaf expanded) - (ctree-node-info ctree ctree-node) - (ctree-set-node-info - export-ctree export-ctree-node text spacing - :closed (list pixmap-closed bitmap-closed) - :opened (list pixmap-opened bitmap-opened) - :leaf leaf :expanded expanded)) - (unless (eq (ctree-cell-type ctree ctree-node 1) :empty) - (setf - (ctree-cell-text export-ctree export-ctree-node 1) - (ctree-cell-text ctree ctree-node 1)))))))))) - - - (define-test-window create-ctree "CTree" - (let ((vbox (vbox-new nil 0)) - (ctree (ctree-new '("Tree" "Info")))) - - (container-add window vbox) - - (let ((hbox (hbox-new nil 5))) - (setf (container-border-width hbox) 5) - (box-pack-start vbox hbox nil t 0) - - (let ((spin1 (spin-button-new (adjustment-new 4 1 10 1 5 0) 0 0)) - (spin2 (spin-button-new (adjustment-new 3 1 20 1 5 0) 0 0)) - (spin3 (spin-button-new (adjustment-new 5 1 20 1 5 0) 0 0))) - - (box-pack-start hbox (label-new "Depth :") nil t 0) - (box-pack-start hbox spin1 nil t 5) - (box-pack-start hbox (label-new "Books :") nil t 0) - (box-pack-start hbox spin2 nil t 5) - (box-pack-start hbox (label-new "Pages :") nil t 0) - (box-pack-start hbox spin3 nil t 5) - - (let ((button (button-new "Rebuild Tree"))) - (box-pack-start hbox button t t 0) - (signal-connect - button 'clicked - #'(lambda () - (let ((depth (spin-button-value-as-int spin1)) - (books (spin-button-value-as-int spin2)) - (pages (spin-button-value-as-int spin3))) - (rebuild-tree ctree depth books pages)))))) - - (let ((button (button-new "Close"))) - (box-pack-end hbox button t t 0) - (signal-connect button 'clicked #'widget-destroy :object window))) - - (let ((scrolled-window (scrolled-window-new))) - (setf (container-border-width scrolled-window) 5) - (setf (scrolled-window-hscrollbar-policy scrolled-window) :automatic) - (setf (scrolled-window-vscrollbar-policy scrolled-window) :always) - (box-pack-start vbox scrolled-window t t 0) - - (container-add scrolled-window ctree) - (setf (clist-column-auto-resize-p ctree 0) t) - (setf (clist-column-width ctree 1) 200) - (setf (clist-selection-mode ctree) :extended) - (setf (ctree-line-style ctree) :dotted)) - - (signal-connect - ctree 'click-column - #'(lambda (column) - (cond - ((/= column (clist-sort-column ctree)) - (setf (clist-sort-column ctree) column)) - ((eq (clist-sort-type ctree) :ascending) - (setf (clist-sort-type ctree) :descending)) - (t (setf (clist-sort-type ctree) :ascending))) - (ctree-sort-recursive ctree))) - - (signal-connect - ctree 'button-press-event #'after-press :object t :after t) - (signal-connect - ctree 'button-release-event #'after-press :object t :after t) - (signal-connect - ctree 'tree-move #'after-press :object t :after t) - (signal-connect - ctree 'end-selection #'after-press :object t :after t) - (signal-connect - ctree 'toggle-focus-row #'after-press :object t :after t) - (signal-connect - ctree 'select-all #'after-press :object t :after t) - (signal-connect - ctree 'unselect-all #'after-press :object t :after t) - (signal-connect - ctree 'scroll-vertical #'after-press :object t :after t) - - (let ((bbox (hbox-new nil 5))) - (setf (container-border-width bbox) 5) - (box-pack-start vbox bbox nil t 0) - - (let ((mbox (vbox-new t 5))) - (box-pack bbox mbox :expand nil) - (box-pack mbox (label-new "Row Height :") :expand nil :fill nil) - (box-pack mbox (label-new "Indent :") :expand nil :fill nil) - (box-pack mbox (label-new "Spacing :") :expand nil :fill nil)) - - (let ((mbox (vbox-new t 5))) - (box-pack bbox mbox :expand nil) - - (let* ((adjustment (adjustment-new 20 12 100 1 10 0)) - (spinner (spin-button-new adjustment 0 0))) - (box-pack mbox spinner :expand nil :fill nil :padding 5) - (flet ((set-row-height () - (setf - (clist-row-height ctree) - (spin-button-value-as-int spinner)))) - (signal-connect adjustment 'value-changed #'set-row-height) - (set-row-height))) - - (let* ((adjustment (adjustment-new 20 0 60 1 10 0)) - (spinner (spin-button-new adjustment 0 0))) - (box-pack mbox spinner :expand nil :fill nil :padding 5) - (flet ((set-indent () - (setf - (ctree-indent ctree) - (spin-button-value-as-int spinner)))) - (signal-connect adjustment 'value-changed #'set-indent) - (set-indent))) - - (let* ((adjustment (adjustment-new 5 0 60 1 10 0)) - (spinner (spin-button-new adjustment 0 0))) - (box-pack mbox spinner :expand nil :fill nil :padding 5) - (flet ((set-spacing () - (setf - (ctree-spacing ctree) - (spin-button-value-as-int spinner)))) - (signal-connect adjustment 'value-changed #'set-spacing) - (set-spacing)))) - - - (let ((mbox (vbox-new t 5))) - (box-pack bbox mbox :expand nil) - - (let ((hbox (hbox-new nil 5))) - (box-pack mbox hbox :expand nil :fill nil) - - (let ((button (button-new "Expand All"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (ctree-expand-recursive ctree nil) - (after-press ctree)))) - - (let ((button (button-new "Collapse All"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (ctree-collapse-recursive ctree nil) - (after-press ctree)))) - - (let ((button (button-new "Change Style"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (let ((node (ctree-nth-node - ctree (or (clist-focus-row ctree) 0)))) - (when node - (unless style1 - (let ((color1 '#(0 56000 0)) - (color2 '#(32000 0 56000))) - (setq style1 (style-new)) - (setf (style-base style1 :normal) color1) - (setf (style-fg style1 :selected) color2) - - (setq style2 (style-new)) - (setf (style-base style2 :selected) color2) - (setf (style-base style2 :normal) color2) - (setf (style-fg style2 :normal) color1) - (setf - (style-font style2) - "-*-courier-medium-*-*-*-*-300-*-*-*-*-*-*"))) - (setf (ctree-cell-style ctree node 1) style1) - (setf (ctree-cell-style ctree node 0) style2) - - (when (ctree-node-child node) - (setf - (ctree-row-style ctree (ctree-node-child node)) - style2))))))) - - (let ((button (button-new "Export Tree"))) - (box-pack hbox button) - (signal-connect button 'clicked #'export-tree :object ctree))) - - (let ((hbox (hbox-new nil 5))) - (box-pack mbox hbox :expand nil :fill nil) - - (let ((button (button-new "Select All"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (ctree-select-recursive ctree nil) - (after-press ctree)))) - - (let ((button (button-new "Unselect All"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (ctree-unselect-recursive ctree nil) - (after-press ctree)))) - - (let ((button (button-new "Remove Selection"))) - (box-pack hbox button) - (signal-connect - button 'clicked - #'(lambda () - (clist-freeze ctree) - (let ((selection-mode (clist-selection-mode ctree))) - (labels - ((remove-selection () - (let ((node (first (ctree-selection ctree)))) - (when node - - (ctree-apply-post-recursive - ctree node - #'(lambda (node) - (if (ctree-node-leaf-p node) - (decf total-pages) - (decf total-books)))) - - (ctree-remove-node ctree node) - (unless (eq selection-mode :browse) - (remove-selection)))))) - (remove-selection)) - - (when (and - (eq selection-mode :extended) - (not (clist-selection ctree)) - (clist-focus-row ctree)) - (ctree-select - ctree - (ctree-nth-node ctree (clist-focus-row ctree))))) - (clist-thaw ctree) - (after-press ctree)))) - - (let ((button (check-button-new "Reorderable"))) - (box-pack hbox button :expand nil) - (signal-connect - button 'clicked - #'(lambda () - (setf - (clist-reorderable-p ctree) - (toggle-button-active-p button)))) - (setf (toggle-button-active-p button) t))) - - (let ((hbox (hbox-new nil 5))) - (box-pack mbox hbox :expand nil :fill nil) - - (flet - ((set-line-style (line-style) - (let ((current-line-style (ctree-line-style ctree))) - (when (or - (and - (eq current-line-style :tabbed) - (not (eq line-style :tabbed))) - (and - (not (eq current-line-style :tabbed)) - (eq line-style :tabbed))) - (ctree-apply-pre-recursive - ctree nil - #'(lambda (node) - (let - ((style - (cond - ((eq (ctree-line-style ctree) :tabbed) nil) - ((not (ctree-node-leaf-p node)) - (ctree-node-data ctree node)) - ((ctree-node-parent node) - (ctree-node-data - ctree (ctree-node-parent node)))))) - (setf (ctree-row-style ctree node) style)))) - (setf (ctree-line-style ctree) line-style))))) - - (let ((option-menu - (build-option-menu - `(("No lines" ,#'(lambda () (set-line-style :none))) - ("Solid" ,#'(lambda () (set-line-style :solid))) - ("Dotted" ,#'(lambda () (set-line-style :dotted))) - ("Tabbed" ,#'(lambda () (set-line-style :tabbed)))) - 2))) - (box-pack hbox option-menu :expand nil))) - - (let ((option-menu - (build-option-menu - `(("None" - ,#'(lambda () - (setf (ctree-expander-style ctree) :none))) - ("Square" - ,#'(lambda () - (setf (ctree-expander-style ctree) :square))) - ("Triangle" - ,#'(lambda () - (setf (ctree-expander-style ctree) :triangle))) - ("Circular" - ,#'(lambda () - (setf (ctree-expander-style ctree) :circular)))) - 1))) - (box-pack hbox option-menu :expand nil)) - - (let ((option-menu - (build-option-menu - `(("Left" - ,#'(lambda () - (setf - (clist-column-justification ctree 0) :left))) - ("Right" - ,#'(lambda () - (setf - (clist-column-justification ctree 0) :right)))) - 0))) - (box-pack hbox option-menu :expand nil)) - - (flet ((set-sel-mode (mode) - (setf (clist-selection-mode ctree) mode) - (after-press ctree))) - (let ((option-menu - (build-option-menu - `(("Single" ,#'(lambda () (set-sel-mode :single))) - ("Browse" ,#'(lambda () (set-sel-mode :browse))) - ("Multiple" ,#'(lambda () (set-sel-mode :multiple))) - ("Extended" ,#'(lambda () (set-sel-mode :extended)))) - 3))) - (box-pack hbox option-menu :expand nil)))))) - - (let ((frame (frame-new))) - (setf (container-border-width frame) 0) - (setf (frame-shadow-type frame) :out) - (box-pack vbox frame :expand nil) - - (let ((hbox (hbox-new t 2))) - (setf (container-border-width hbox) 2) - (container-add frame hbox) - - (setq - status-labels - (map 'vector - #'(lambda (text) - (let ((frame (frame-new)) - (hbox2 (hbox-new nil 0))) - (setf (frame-shadow-type frame) :in) - (box-pack hbox frame :expand nil) - (setf (container-border-width hbox2) 2) - (container-add frame hbox2) - (box-pack hbox2 (label-new text) :expand nil) - (let ((label (label-new ""))) - (box-pack-end hbox2 label nil t 5) - label))) - '("Books :" "Pages :" "Selected :" "Visible :"))))) - - (widget-realize window) - (let ((gdk:window (widget-window window))) - (setq pixmap1 (multiple-value-list - (gdk:pixmap-create book-closed-xpm :window gdk:window))) - (setq pixmap2 (multiple-value-list - (gdk:pixmap-create book-open-xpm :window gdk:window))) - (setq pixmap3 (multiple-value-list - (gdk:pixmap-create mini-page-xpm :window gdk:window)))) - (setf (widget-height ctree) 300) - - (rebuild-tree ctree 4 3 5)))) - - ;;; Cursors @@ -1099,89 +319,90 @@ (defun clamp (n min-val max-val) (declare (number n min-val max-val)) (max (min n max-val) min-val)) -(defun set-cursor (spinner drawing-area label) - (let ((cursor - (gforeign:int-enum - (logand (clamp (spin-button-value-as-int spinner) 0 152) #xFE) - 'gdk:cursor-type))) - (setf (label-text label) (string-downcase (symbol-name cursor))) - (setf (widget-cursor drawing-area) cursor))) - -(define-standard-dialog create-cursors "Cursors" - (setf (container-border-width main-box) 10) - (setf (box-spacing main-box) 5) - (let* ((hbox (hbox-new nil 0)) - (label (label-new "Cursor Value : ")) - (adj (adjustment-new 0 0 152 2 10 0)) - (spinner (spin-button-new adj 0 0))) - (setf (container-border-width hbox) 5) - (box-pack-start main-box hbox nil t 0) - (setf (misc-xalign label) 0) - (setf (misc-yalign label) 0.5) - (box-pack-start hbox label nil t 0) - (box-pack-start hbox spinner t t 0) - - (let ((frame (make-frame - :shadow-type :etched-in - :label-xalign 0.5 - :label "Cursor Area" - :border-width 10 - :parent main-box - :visible t)) - (drawing-area (drawing-area-new))) - (setf (widget-width drawing-area) 80) - (setf (widget-height drawing-area) 80) - (container-add frame drawing-area) - (signal-connect - drawing-area 'expose-event - #'(lambda (event) - (declare (ignore event)) - (multiple-value-bind (width height) - (drawing-area-size drawing-area) - (let* ((drawable (widget-window drawing-area)) - (style (widget-style drawing-area)) - (white-gc (style-get-gc style :white)) - (gray-gc (style-get-gc style :background :normal)) - (black-gc (style-get-gc style :black))) - (gdk:draw-rectangle - drawable white-gc t 0 0 width (floor height 2)) - (gdk:draw-rectangle - drawable black-gc t 0 (floor height 2) width (floor height 2)) - (gdk:draw-rectangle - drawable gray-gc t (floor width 3) (floor height 3) - (floor width 3) (floor height 3)))) - t)) - (setf (widget-events drawing-area) '(:exposure :button-press)) - (signal-connect - drawing-area 'button-press-event - #'(lambda (event) - (when (and - (eq (gdk:event-type event) :button-press) - (or - (= (gdk:event-button event) 1) - (= (gdk:event-button event) 3))) - (spin-button-spin - spinner - (if (= (gdk:event-button event) 1) - :step-forward - :step-backward) - 0) - t))) - (widget-show drawing-area) - - (let ((label (make-label - :visible t - :label "XXX" - :parent main-box))) - (setf (box-child-expand-p #|main-box|# label) nil) - (signal-connect - spinner 'changed - #'(lambda () - (set-cursor spinner drawing-area label))) +; (defun set-cursor (spinner drawing-area label) +; (let ((cursor +; (glib:int-enum +; (logand (clamp (spin-button-value-as-int spinner) 0 152) #xFE) +; 'gdk:cursor-type))) +; (setf (label-text label) (string-downcase (symbol-name cursor))) +; (setf (widget-cursor drawing-area) cursor))) + - (widget-realize drawing-area) - (set-cursor spinner drawing-area label))))) +; (define-standard-dialog create-cursors "Cursors" +; (setf (container-border-width main-box) 10) +; (setf (box-spacing main-box) 5) +; (let* ((hbox (hbox-new nil 0)) +; (label (label-new "Cursor Value : ")) +; (adj (adjustment-new 0 0 152 2 10 0)) +; (spinner (spin-button-new adj 0 0))) +; (setf (container-border-width hbox) 5) +; (box-pack-start main-box hbox nil t 0) +; (setf (misc-xalign label) 0) +; (setf (misc-yalign label) 0.5) +; (box-pack-start hbox label nil t 0) +; (box-pack-start hbox spinner t t 0) + +; (let ((frame (make-frame +; :shadow-type :etched-in +; :label-xalign 0.5 +; :label "Cursor Area" +; :border-width 10 +; :parent main-box +; :visible t)) +; (drawing-area (drawing-area-new))) +; (setf (widget-width drawing-area) 80) +; (setf (widget-height drawing-area) 80) +; (container-add frame drawing-area) +; (signal-connect +; drawing-area 'expose-event +; #'(lambda (event) +; (declare (ignore event)) +; (multiple-value-bind (width height) +; (drawing-area-size drawing-area) +; (let* ((drawable (widget-window drawing-area)) +; (style (widget-style drawing-area)) +; (white-gc (style-get-gc style :white)) +; (gray-gc (style-get-gc style :background :normal)) +; (black-gc (style-get-gc style :black))) +; (gdk:draw-rectangle +; drawable white-gc t 0 0 width (floor height 2)) +; (gdk:draw-rectangle +; drawable black-gc t 0 (floor height 2) width (floor height 2)) +; (gdk:draw-rectangle +; drawable gray-gc t (floor width 3) (floor height 3) +; (floor width 3) (floor height 3)))) +; t)) +; (setf (widget-events drawing-area) '(:exposure :button-press)) +; (signal-connect +; drawing-area 'button-press-event +; #'(lambda (event) +; (when (and +; (eq (gdk:event-type event) :button-press) +; (or +; (= (gdk:event-button event) 1) +; (= (gdk:event-button event) 3))) +; (spin-button-spin +; spinner +; (if (= (gdk:event-button event) 1) +; :step-forward +; :step-backward) +; 0) +; t))) +; (widget-show drawing-area) + +; (let ((label (make-label +; :visible t +; :label "XXX" +; :parent main-box))) +; (setf (box-child-expand-p #|main-box|# label) nil) +; (signal-connect +; spinner 'changed +; #'(lambda () +; (set-cursor spinner drawing-area label))) + +; (widget-realize drawing-area) +; (set-cursor spinner drawing-area label))))) @@ -1226,15 +447,10 @@ (define-test-dialog create-dialog "Dialog" (define-standard-dialog create-entry "Entry" (setf (container-border-width main-box) 10) (setf (box-spacing main-box) 10) - (let ((entry (make-instance 'entry - :test "hello world" - :visible t - :parent (list main-box :fill t :expand t)))) - (entry-select-region entry 0 5) - - (let ((combo (make-instance 'combo - :visible t - :parent (list main-box :expand t :fill t)))) + (let ((entry (make-instance 'entry :text "hello world" :parent main-box))) + (editable-select-region entry 0 5) + + (let ((combo (make-instance 'combo :parent main-box))) (setf (combo-popdown-strings combo) '("item0" @@ -1247,40 +463,24 @@ (define-standard-dialog create-entry "Entry" "item7 item7 item7 item7" "item8 item8 item8" "item9 item9")) - (editable-select-region entry 0 5)) - - (let ((check-button (check-button-new "Editable"))) - (box-pack-start main-box check-button nil t 0) - (signal-connect - check-button 'toggled - #'(lambda () - (setf - (editable-editable-p entry) - (toggle-button-active-p check-button)))) - (setf (toggle-button-active-p check-button) t) - (widget-show check-button)) - - (let ((check-button (check-button-new "Visible"))) - (box-pack-start main-box check-button nil t 0) - (signal-connect - check-button 'toggled - #'(lambda () - (setf - (entry-visible-p entry) - (toggle-button-active-p check-button)))) - (setf (toggle-button-active-p check-button) t) - (widget-show check-button)) - - (let ((check-button (check-button-new "Sensitive"))) - (box-pack-start main-box check-button nil t 0) - (signal-connect - check-button 'toggled - #'(lambda () - (setf - (widget-sensitive-p entry) - (toggle-button-active-p check-button)))) - (setf (toggle-button-active-p check-button) t) - (widget-show check-button)))) + (let ((entry (combo-entry combo))) + (setf (editable-text entry) "hello world") + (editable-select-region entry 0))) + + (flet ((create-check-button (label slot) + (let ((button + (make-instance 'check-button + :label label :active t + :parent (list main-box :expand nil)))) + (signal-connect button 'toggled + #'(lambda () + (setf + (slot-value entry slot) + (toggle-button-active-p button))))))) + + (create-check-button "Editable" 'editable) + (create-check-button "Visible" 'visible) + (create-check-button "Sensitive" 'sensitive)))) @@ -1329,65 +529,65 @@ (defun create-file-selection () (defun create-handle-box-toolbar () (let ((toolbar (toolbar-new :horizontal :both))) (toolbar-append-item - toolbar "Horizontal" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Horizontal" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Horizontal toolbar layout" :callback #'(lambda () (setf (toolbar-orientation toolbar) :horizontal))) (toolbar-append-item - toolbar "Vertical" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Vertical" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Vertical toolbar layout" :callback #'(lambda () (setf (toolbar-orientation toolbar) :vertical))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Icons" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Icons" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Only show toolbar icons" :callback #'(lambda () (setf (toolbar-style toolbar) :icons))) (toolbar-append-item - toolbar "Text" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Text" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Only show toolbar text" :callback #'(lambda () (setf (toolbar-style toolbar) :text))) (toolbar-append-item - toolbar "Both" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Both" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Show toolbar icons and text" :callback #'(lambda () (setf (toolbar-style toolbar) :both))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Small" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Small" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Use small spaces" :callback #'(lambda () (setf (toolbar-space-size toolbar) 5))) (toolbar-append-item - toolbar "Big" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Big" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Use big spaces" :callback #'(lambda () (setf (toolbar-space-size toolbar) 10))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Enable" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Enable" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Enable tooltips" :callback #'(lambda () (toolbar-enable-tooltips toolbar))) (toolbar-append-item - toolbar "Disable" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Disable" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Disable tooltips" :callback #'(lambda () (toolbar-disable-tooltips toolbar))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Borders" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Borders" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Show borders" :callback #'(lambda () (setf (toolbar-relief toolbar) :normal))) (toolbar-append-item - toolbar "Borderless" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Borderless" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Hide borders" :callback #'(lambda () (setf (toolbar-relief toolbar) :none))) @@ -1456,88 +656,74 @@ (define-test-window create-handle-box "Handle Box Test" (define-test-window create-labels "Labels" (setf (container-border-width window) 5) - (let ((hbox (hbox-new nil 5))) - (container-add window hbox) - (let ((vbox (vbox-new nil 5))) - (box-pack-start hbox vbox nil nil 0) - - (let ((frame (frame-new "Normal Label"))) - (container-add frame (label-new "This is a Normal label")) - (box-pack-start vbox frame nil nil 0)) - - (let ((frame (frame-new "Multi-line Label"))) - (container-add frame (label-new + (flet ((create-label-in-frame (frame-label label-text &rest args) + (list + (make-instance 'frame + :label frame-label + :child + (apply #'make-instance 'label :label label-text args)) + :fill nil :expand nil))) + (make-instance 'hbox + :spacing 5 + :parent window + :children + (list + (list + (make-instance 'vbox + :spacing 5 + :children + (list + (create-label-in-frame "Normal Label" "This is a Normal label") + (create-label-in-frame "Multi-line Label" "This is a Multi-line label. Second line -Third line")) - (box-pack-start vbox frame nil nil 0)) - - (let ((frame (frame-new "Left Justified Label")) - (label (label-new +Third line") + (create-label-in-frame "Left Justified Label" "This is a Left-Justified Multi-line. -Third line"))) - (setf (label-justify label) :left) - (container-add frame label) - (box-pack-start vbox frame nil nil 0)) - - (let ((frame (frame-new "Right Justified Label")) - (label (label-new +Third line" + :justify :left) + (create-label-in-frame "Right Justified Label" "This is a Right-Justified Multi-line. -Third line"))) - (setf (label-justify label) :right) - (container-add frame label) - (box-pack-start vbox frame nil nil 0))) +Third line" + :justify :right))) + :fill nil :expand nil) - (let ((vbox (vbox-new nil 5))) - (box-pack-start hbox vbox nil nil 0) - - (let ((frame (frame-new "Line wrapped label")) - (label (label-new + (list + (make-instance 'vbox + :spacing 5 + :children + (list + (create-label-in-frame "Line wrapped label" "This is an example of a line-wrapped label. It should not be taking up the entire width allocated to it, but automatically wraps the words to fit. The time has come, for all good men, to come to the aid of their party. The sixth sheik's six sheep's sick. - It supports multiple paragraphs correctly, and correctly adds many extra spaces. "))) - (setf (label-wrap-p label) t) - (container-add frame label) - (box-pack-start vbox frame nil nil 0)) - - (let ((frame (frame-new "Filled, wrapped label")) - (label (label-new + It supports multiple paragraphs correctly, and correctly adds many extra spaces. " + :wrap t) + (create-label-in-frame "Filled, wrapped label" "This is an example of a line-wrapped, filled label. It should be taking up the entire width allocated to it. Here is a seneance to prove my point. Here is another sentence. Here comes the sun, do de do de do. This is a new paragraph. - This is another newer, longer, better paragraph. It is coming to an end, unfortunately."))) - (setf (label-justify label) :fill) - (setf (label-wrap-p label) t) - (container-add frame label) - (box-pack-start vbox frame nil nil 0)) - - (let ((frame (frame-new "Underlined label")) - (label (label-new + This is another newer, longer, better paragraph. It is coming to an end, unfortunately." + :justify :fill :wrap t) + (create-label-in-frame "Underlined label" "This label is underlined! -This one is underlined in ÆüËܸì¤ÎÆþÍÑquite a funky fashion"))) - (setf (label-justify label) :left) - (setf (label-pattern label) "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____") - (container-add frame label) - (box-pack-start vbox frame nil nil 0))))) +This one is underlined (こんにちは) in quite a funky fashion" + :justify :left + :pattern "_________________________ _ _________ _ _____ _ __ __ ___ ____ _____"))) + :fill nil :expand nil))))) ;;; Layout (defun layout-expose-handler (layout event) - (multiple-value-bind (x-offset y-offset) - (layout-offset layout) - (declare (fixnum x-offset y-offset)) - (multiple-value-bind (area-x area-y area-width area-height) - (gdk:event-area event) - (declare (fixnum area-x area-y area-width area-height)) - (let ((imin (truncate (+ x-offset area-x) 10)) - (imax (truncate (+ x-offset area-x area-width 9) 10)) - (jmin (truncate (+ y-offset area-y) 10)) - (jmax (truncate (+ y-offset area-y area-height 9) 10))) + (with-slots (window x-offset y-offset) layout + (with-slots (x y width height) event + (let ((imin (truncate (+ x-offset x) 10)) + (imax (truncate (+ x-offset x width 9) 10)) + (jmin (truncate (+ y-offset y) 10)) + (jmax (truncate (+ y-offset y height 9) 10))) (declare (fixnum imin imax jmin jmax)) - (gdk:window-clear-area - (widget-window layout) area-x area-y area-width area-height) + (gdk:window-clear-area window x y width height) (let ((window (layout-bin-window layout)) (gc (style-get-gc (widget-style layout) :black))) @@ -1558,15 +744,16 @@ (defun layout-expose-handler (layout event) (define-test-window create-layout "Layout" (setf (widget-width window) 200) (setf (widget-height window) 200) - (let ((scrolled (scrolled-window-new)) - (layout (layout-new))) - (container-add window scrolled) - (container-add scrolled layout) - (setf (adjustment-step-increment (layout-hadjustment layout)) 10.0) - (setf (adjustment-step-increment (layout-vadjustment layout)) 10.0) - (setf (widget-events layout) '(:exposure)) + (let ((layout (make-instance 'layout + :parent (make-instance 'scrolled-window :parent window) + :x-size 1600 :y-size 128000 + :events '(:exposure)))) + + (with-slots (hadjustment vadjustment) layout + (setf + (adjustment-step-increment hadjustment) 10.0 + (adjustment-step-increment vadjustment) 10.0)) (signal-connect layout 'expose-event #'layout-expose-handler :object t) - (setf (layout-size layout) '#(1600 128000)) (dotimes (i 16) (dotimes (j 16) @@ -1584,7 +771,7 @@ (define-test-window create-layout "Layout" (button-new text) (label-new text)))) (layout-put layout button 0 (* i 100)))))) - + ;;; List @@ -1606,7 +793,7 @@ (define-standard-dialog create-list "List" (container-focus-hadjustment list) (scrolled-window-hadjustment scrolled-window)) - (with-open-file (file "cl-gtk:src;gtktypes.lisp") + (with-open-file (file "clg:examples;gtktypes.lisp") (labels ((read-file () (let ((line (read-line file nil nil))) (when line @@ -1667,7 +854,7 @@ (define-standard-dialog create-list "List" (let ((hbox (hbox-new nil 5)) (option-menu - (build-option-menu + (create-option-menu `(("Single" ,#'(lambda () (setf (list-selection-mode list) :single))) ("Browse" @@ -1692,23 +879,23 @@ (defun create-menu (depth tearoff) (let ((menu (menu-new))) (when tearoff (let ((menuitem (tearoff-menu-item-new))) - (menu-append menu menuitem) + (menu-shell-append menu menuitem) (widget-show menuitem) )) (let ((group nil)) (dotimes (i 5) (let ((menuitem (radio-menu-item-new - group (format nil "item ~2D - ~D" depth (1+ i))))) - (setq group (radio-menu-item-group menuitem)) ; ough! + (format nil "item ~2D - ~D" depth (1+ i)) group))) + (setq group menuitem) (unless (zerop (mod depth 2)) - (setf (check-menu-item-toggle-indicator-p menuitem) t)) - (menu-append menu menuitem) + (setf (check-menu-item-toggle-indicator-p menuitem) t)) + (menu-shell-append menu menuitem) (widget-show menuitem) (when (= i 3) (setf (widget-sensitive-p menuitem) nil)) (setf (menu-item-submenu menuitem) (create-menu (1- depth) t))))) - menu))) + menu))) (define-standard-dialog create-menus "Menus" @@ -1723,18 +910,18 @@ (define-standard-dialog create-menus "Menus" (let ((menuitem (menu-item-new (format nil "test~%line2")))) (setf (menu-item-submenu menuitem) (create-menu 2 t)) - (menu-bar-append menubar menuitem) + (menu-shell-append menubar menuitem) (widget-show menuitem)) (let ((menuitem (menu-item-new "foo"))) (setf (menu-item-submenu menuitem) (create-menu 3 t)) - (menu-bar-append menubar menuitem) + (menu-shell-append menubar menuitem) (widget-show menuitem)) (let ((menuitem (menu-item-new "bar"))) (setf (menu-item-submenu menuitem) (create-menu 4 t)) (menu-item-right-justify menuitem) - (menu-bar-append menubar menuitem) + (menu-shell-append menubar menuitem) (widget-show menuitem)) (let ((box2 (vbox-new nil 10)) @@ -1746,24 +933,24 @@ (define-standard-dialog create-menus "Menus" (setf (menu-accel-group menu) accel-group) (let ((menuitem (check-menu-item-new "Accelerate Me"))) - (menu-append menu menuitem) + (menu-shell-append menu menuitem) (widget-show menuitem) (widget-add-accelerator - menuitem 'activate accel-group "F1" 0 '(:visible :signal-visible))) + menuitem 'activate accel-group "F1" '() '(:visible :signal-visible))) (let ((menuitem (check-menu-item-new "Accelerator Locked"))) - (menu-append menu menuitem) + (menu-shell-append menu menuitem) (widget-show menuitem) (widget-add-accelerator - menuitem 'activate accel-group "F2" 0 '(:visible :locked))) + menuitem 'activate accel-group "F2" '() '(:visible :locked))) (let ((menuitem (check-menu-item-new "Accelerator Frozen"))) - (menu-append menu menuitem) + (menu-shell-append menu menuitem) (widget-show menuitem) (widget-add-accelerator - menuitem 'activate accel-group "F2" 0 '(:visible)) + menuitem 'activate accel-group "F2" '() '(:visible)) (widget-add-accelerator - menuitem 'activate accel-group "F3" 0 '(:visible)) + menuitem 'activate accel-group "F3" '() '(:visible)) (widget-lock-accelerators menuitem)) (let ((optionmenu (option-menu-new))) @@ -1842,12 +1029,12 @@ (define-standard-dialog create-notebook "Notebook" (let ((label-box (hbox-new nil 0)) (menu-box (hbox-new nil 0))) (box-pack-start - label-box (pixmap-new (list book-closed book-closed-mask)) + label-box (pixmap-new book-closed book-closed-mask) nil t 0) (box-pack-start label-box (label-new title) nil t 0) (widget-show-all label-box) (box-pack-start - menu-box (pixmap-new (list book-closed book-closed-mask)) + menu-box (pixmap-new book-closed book-closed-mask) nil t 0) (box-pack-start menu-box (label-new title) nil t 0) (widget-show-all menu-box) @@ -1864,34 +1051,31 @@ (define-standard-dialog create-notebook "Notebook" notebook 'switch-page #'(lambda (pointer page) (declare (ignore pointer)) - (let ((old-page (notebook-current-page-num notebook))) + (let ((old-page (notebook-page-child notebook))) (unless (eq page old-page) - (setf - (pixmap-pixmap - (first - (container-children - (notebook-tab-label notebook page)))) - (list book-open book-open-mask)) - (setf - (pixmap-pixmap - (first - (container-children - (notebook-menu-label notebook page)))) - (list book-open book-open-mask)) - + (pixmap-set + (first + (container-children + (notebook-tab-label notebook page))) + book-open book-open-mask) + (pixmap-set + (first + (container-children + (notebook-menu-label notebook page))) + book-open book-open-mask) + (when old-page - (setf - (pixmap-pixmap - (first - (container-children - (notebook-tab-label notebook old-page)))) - (list book-closed book-closed-mask)) - (setf - (pixmap-pixmap + (pixmap-set (first (container-children - (notebook-menu-label notebook old-page)))) - (list book-closed book-closed-mask))))))) + (notebook-tab-label notebook old-page))) + book-closed book-closed-mask) + (pixmap-set + (first + (container-children + (notebook-menu-label notebook old-page))) + book-closed book-closed-mask)) + )))) (setf (notebook-tab-pos notebook) :top) (box-pack-start main-box notebook t t 0) @@ -1932,7 +1116,7 @@ (define-standard-dialog create-notebook "Notebook" (let* ((scrollable-p nil) (option-menu - (build-option-menu + (create-option-menu `(("Standard" ,#'(lambda () (setf (notebook-show-tabs-p notebook) t) @@ -1964,7 +1148,7 @@ (define-standard-dialog create-notebook "Notebook" (signal-connect button 'clicked #'(lambda () - (container-foreach notebook #'widget-show))))) + (map-container nil #'widget-show notebook))))) (let ((box2 (hbox-new nil 5))) (setf (container-border-width box2) 10) @@ -1985,13 +1169,15 @@ (define-standard-dialog create-notebook "Notebook" (notebook-next-page notebook)))) (let ((button (button-new "rotate")) - (tab-pos 2)) + (tab-pos 0)) (box-pack-start box2 button t t 0) (signal-connect button 'clicked #'(lambda () (setq tab-pos (mod (1+ tab-pos) 4)) - (setf (notebook-tab-pos notebook) tab-pos)))))))))) + (setf + (notebook-tab-pos notebook) + (svref #(:top :bottom :right :left) tab-pos))))))))))) @@ -2004,12 +1190,10 @@ (defun toggle-resize (child) (if is-child1-p (paned-child1 paned) (paned-child2 paned)) - (widget-ref child) (container-remove paned child) (if is-child1-p (paned-pack1 paned child (not resize) shrink) - (paned-pack2 paned child (not resize) shrink)) - (widget-unref child)))) + (paned-pack2 paned child (not resize) shrink))))) (defun toggle-shrink (child) (let* ((paned (widget-parent child)) @@ -2018,26 +1202,22 @@ (defun toggle-shrink (child) (if is-child1-p (paned-child1 paned) (paned-child2 paned)) - (widget-ref child) (container-remove paned child) (if is-child1-p (paned-pack1 paned child resize (not shrink)) - (paned-pack2 paned child resize (not shrink))) - (widget-unref child)))) + (paned-pack2 paned child resize (not shrink)))))) (defun create-pane-options (paned frame-label label1 label2) - (let ((frame (frame-new frame-label)) - (table (table-new 3 2 t))) - (setf (container-border-width frame) 4) - (container-add frame table) + (let* ((frame (make-instance 'frame + :label frame-label :border-width 4)) + (table (make-instance 'table + :rows 3 :columns 2 :homogeneous t :parent frame))) (table-attach table (label-new label1) 0 1 0 1) - (let ((check-button (check-button-new "Resize"))) (table-attach table check-button 0 1 1 2) (signal-connect check-button 'toggled #'toggle-resize :object (paned-child1 paned))) - (let ((check-button (check-button-new "Shrink"))) (table-attach table check-button 0 1 2 3) (setf (toggle-button-active-p check-button) t) @@ -2045,13 +1225,11 @@ (defun create-pane-options (paned frame-label label1 label2) check-button 'toggled #'toggle-shrink :object (paned-child1 paned))) (table-attach table (label-new label2) 1 2 0 1) - (let ((check-button (check-button-new "Resize"))) (table-attach table check-button 1 2 1 2) (setf (toggle-button-active-p check-button) t) (signal-connect check-button 'toggled #'toggle-resize :object (paned-child2 paned))) - (let ((check-button (check-button-new "Shrink"))) (table-attach table check-button 1 2 2 3) (setf (toggle-button-active-p check-button) t) @@ -2061,41 +1239,27 @@ (defun create-pane-options (paned frame-label label1 label2) frame)) (define-test-window create-panes "Panes" - (let ((vbox (vbox-new nil 0)) - (vpaned (vpaned-new)) - (hpaned (hpaned-new))) - (container-add window vbox) - (box-pack-start vbox vpaned t t 0) - (setf (container-border-width vpaned) 5) - - (paned-add1 vpaned hpaned) - - (let ((frame (frame-new nil))) - (setf (frame-shadow-type frame) :in) - (setf (widget-width frame) 60) - (setf (widget-height frame) 60) - (paned-add1 hpaned frame) - (container-add frame (button-new "Hi there"))) - - (let ((frame (frame-new nil))) - (setf (frame-shadow-type frame) :in) - (setf (widget-width frame) 80) - (setf (widget-height frame) 60) - (paned-add2 hpaned frame)) - - (let ((frame (frame-new nil))) - (setf (frame-shadow-type frame) :in) - (setf (widget-width frame) 80) - (setf (widget-height frame) 60) - (paned-add2 vpaned frame)) - - ;; Now create toggle buttons to control sizing - - (box-pack-start - vbox (create-pane-options hpaned "Horizontal" "Left" "Right") nil nil 0) - - (box-pack-start - vbox (create-pane-options vpaned "Vertical" "Top" "Bottom") nil nil 0))) + (let* ((hpaned (make-instance 'hpaned + :child1 (make-instance 'frame + :shadow-type :in :width 60 :height 60 + :child (button-new "Hi there")) + :child2 (make-instance 'frame + :shadow-type :in :width 80 :height 60))) + (vpaned (make-instance 'vpaned + :border-width 5 + :child1 hpaned + :child2 (make-instance 'frame + :shadow-type :in :width 80 :height 60)))) + + (make-instance 'vbox + :parent window + :children + (list + vpaned + (list + (create-pane-options hpaned "Horizontal" "Left" "Right") :expand nil) + (list + (create-pane-options vpaned "Vertical" "Top" "Bottom") :expand nil))))) @@ -2103,240 +1267,20 @@ (define-test-window create-panes "Panes" (define-standard-dialog create-pixmap "Pixmap" (setf (container-border-width main-box) 10) - (let* ((button (button-new)) - (hbox (hbox-new nil 0))) - (box-pack-start main-box button nil nil 0) - (container-add button hbox) - (setf (container-border-width hbox) 2) - (container-add hbox (pixmap-new "cl-gtk:src;test.xpm")) - (container-add hbox (label-new "Pixmap test")))) + (make-instance 'button + :parent main-box + :child (make-instance 'hbox + :border-width 2 + :children + (list + (pixmap-new "clg:examples;test.xpm") + (label-new "Pixmap test"))))) ;;; Progress bar -(define-standard-dialog create-progress-bar "Progress bar" - (setf (window-allow-grow-p window) nil) - (setf (window-allow-shrink-p window) nil) - (setf (window-auto-shrink-p window) t) - - (setf (container-border-width main-box) 10) - - (let* ((pbar-adj (adjustment-new 0 1 300 0 0 0)) - (pbar (progress-bar-new pbar-adj)) - (user-label (label-new ""))) - - (let ((frame (frame-new "Progress")) - (vbox (vbox-new nil 5))) - (box-pack-start main-box frame nil t 0) - (container-add frame vbox) - - (let ((timer (timeout-add - 100 - #'(lambda () - (let* ((value (adjustment-value pbar-adj)) - (new-value - (if (= value (adjustment-upper pbar-adj)) - (adjustment-lower pbar-adj) - (1+ value)))) - (setf (progress-value pbar) new-value)) - t)))) - (signal-connect window 'destroy #'(lambda () (timeout-remove timer)))) - - (signal-connect - pbar-adj 'value-changed - #'(lambda () - (setf - (label-text user-label) - (if (progress-activity-mode-p pbar) - "???" - (format nil "~D" (round (* 100 (progress-percentage pbar)))))))) - - (setf (progress-format-string pbar) "%v from [%l,%u] (=%p%%)") - - (let ((align (alignment-new 0.5 0.5 0.0 0.0))) - (box-pack-start vbox align nil nil 0) - (container-add align pbar)) - - (let ((hbox (hbox-new nil 5))) - (box-pack-start hbox (label-new "Label updated by user :") nil t 0) - (box-pack-start hbox user-label nil t 0) - - (let ((align (alignment-new 0.5 0.5 0.0 0.0))) - (box-pack-start vbox align nil nil 5) - (container-add align hbox)))) - - (let ((frame (frame-new "Options")) - (vbox (vbox-new nil 5))) - (box-pack-start main-box frame nil t 0) - (container-add frame vbox) - - (let ((table (table-new 7 2 nil))) - (box-pack-start vbox table nil t 0) - - (let ((label (label-new "Orientation :"))) - (setf (misc-xalign label) 0.0) - (setf (misc-yalign label) 0.5) - (table-attach table label 0 1 0 1 :x-padding 5 :y-padding 5)) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start - hbox - (build-option-menu - `(("Left-Right" - ,#'(lambda () - (setf (progress-bar-orientation pbar) :left-to-right))) - ("Right-Left" - ,#'(lambda () - (setf (progress-bar-orientation pbar) :right-to-left))) - ("Bottom-Top" - ,#'(lambda () - (setf (progress-bar-orientation pbar) :bottom-to-top))) - ("Top-Bottom" - ,#'(lambda () - (setf (progress-bar-orientation pbar) :top-to-bottom)))) - 0) - t t 0) - (table-attach table hbox 1 2 0 1 :x-padding 5 :y-padding 5)) - - (let* ((button (check-button-new "Show text")) - (entry (entry-new)) - (x-align-adj (adjustment-new 0.5 0.0 1.0 0.1 0.1 0.0)) - (x-align-spin (spin-button-new x-align-adj 0 1)) - (y-align-adj (adjustment-new 0.5 0.0 1.0 0.1 0.1 0.0)) - (y-align-spin (spin-button-new y-align-adj 0 1))) - - (signal-connect - button 'clicked - #'(lambda () - (let ((state (toggle-button-active-p button))) - (setf (progress-show-text-p pbar) state) - (setf (widget-sensitive-p entry) state) - (setf (widget-sensitive-p x-align-spin) state) - (setf (widget-sensitive-p y-align-spin) state)))) - (table-attach table button 0 1 1 2 :x-padding 5 :y-padding 5) - - (signal-connect - entry 'changed - #'(lambda () - (setf - (progress-format-string pbar) - (entry-text entry)))) - (setf (entry-text entry) "%v from [%l,%u] (=%p%%)") - (setf (widget-width entry) 100) - (setf (widget-sensitive-p entry) nil) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start hbox (label-new "Format : ") nil t 0) - (box-pack-start hbox entry t t 0) - (table-attach table hbox 1 2 1 2 :x-padding 5 :y-padding 5)) - - (let ((label (label-new "Text align :"))) - (setf (misc-xalign label) 0.0) - (setf (misc-yalign label) 0.5) - (table-attach table label 0 1 2 3 :x-padding 5 :y-padding 5)) - - (flet ((adjust-align () - (setf - (progress-text-xalign pbar) - (spin-button-value x-align-spin)) - (setf - (progress-text-yalign pbar) - (spin-button-value y-align-spin)))) - (signal-connect x-align-adj 'value-changed #'adjust-align) - (signal-connect y-align-adj 'value-changed #'adjust-align)) - (setf (widget-sensitive-p x-align-spin) nil) - (setf (widget-sensitive-p y-align-spin) nil) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start hbox (label-new "x :") nil t 5) - (box-pack-start hbox x-align-spin nil t 0) - (box-pack-start hbox (label-new "y :") nil t 5) - (box-pack-start hbox y-align-spin nil t 0) - (table-attach table hbox 1 2 2 3 :x-padding 5 :y-padding 5))) - - (let ((label (label-new "Bar Style :"))) - (setf (misc-xalign label) 0.0) - (setf (misc-yalign label) 0.5) - (table-attach table label 0 1 3 4 :x-padding 5 :y-padding 5)) - - (let* ((block-adj (adjustment-new 10 2 20 1 5 0)) - (block-spin (spin-button-new block-adj 0 0))) - (let ((hbox (hbox-new nil 0))) - (box-pack-start - hbox - (build-option-menu - `(("Continuous" - ,#'(lambda () - (setf (progress-bar-style pbar) :continuous) - (setf (widget-sensitive-p block-spin) nil))) - ("Discrete" - ,#'(lambda () - (setf (progress-bar-style pbar) :discrete) - (setf (widget-sensitive-p block-spin) t)))) - 0) - t t 0) - (table-attach table hbox 1 2 3 4 :x-padding 5 :y-padding 5)) - - (let ((label (label-new "Block count :"))) - (setf (misc-xalign label) 0.0) - (setf (misc-yalign label) 0.5) - (table-attach table label 0 1 4 5 :x-padding 5 :y-padding 5)) - - (signal-connect - block-adj 'value-changed - #'(lambda () - (setf (progress-percentage pbar) 0) - (setf - (progress-bar-discrete-blocks pbar) - (spin-button-value-as-int block-spin)))) - (setf (widget-sensitive-p block-spin) nil) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start hbox block-spin nil t 0) - (table-attach table hbox 1 2 4 5 :x-padding 5 :y-padding 5))) - - (let* ((step-size-adj (adjustment-new 3 1 20 1 5 0)) - (step-size-spin (spin-button-new step-size-adj 0 0)) - (block-adj (adjustment-new 5 2 10 1 5 00)) - (block-spin (spin-button-new block-adj 0 0))) - - (let ((button (check-button-new "Activity mode"))) - (signal-connect - button 'clicked - #'(lambda () - (let ((state (toggle-button-active-p button))) - (setf (progress-activity-mode-p pbar) state) - (setf (widget-sensitive-p step-size-spin) state) - (setf (widget-sensitive-p block-spin) state)))) - (table-attach table button 0 1 5 6 :x-padding 5 :y-padding 5)) - - (signal-connect - step-size-adj 'value-changed - #'(lambda () - (setf - (progress-bar-activity-step pbar) - (spin-button-value-as-int step-size-spin)))) - (setf (widget-sensitive-p step-size-spin) nil) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start hbox (label-new "Step size : ") nil t 0) - (box-pack-start hbox step-size-spin nil t 0) - (table-attach table hbox 1 2 5 6 :x-padding 5 :y-padding 5)) - - (signal-connect - block-adj 'value-changed - #'(lambda () - (setf - (progress-bar-activity-blocks pbar) - (spin-button-value-as-int block-spin)))) - (setf (widget-sensitive-p block-spin) nil) - - (let ((hbox (hbox-new nil 0))) - (box-pack-start hbox (label-new "Blocks : ") nil t 0) - (box-pack-start hbox block-spin nil t 0) - (table-attach table hbox 1 2 6 7 :x-padding 5 :y-padding 5))))))) - + ;;; Radio buttons @@ -2344,16 +1288,11 @@ (define-standard-dialog create-progress-bar "Progress bar" (define-standard-dialog create-radio-buttons "Radio buttons" (setf (container-border-width main-box) 10) (setf (box-spacing main-box) 10) - (let* ((button1 (radio-button-new nil :label "button1")) - (button2 (radio-button-new - (radio-button-group button1) :label "button2")) - (button3 (radio-button-new - (radio-button-group button2) :label "button3"))) - (box-pack-start main-box button1 t t 0) - (box-pack-start main-box button2 t t 0) - (setf (toggle-button-active-p button2) t) - (box-pack-start main-box button3 t t 0))) + (map nil + #'(lambda (button) + (box-pack-start main-box button t t 0)) + (create-radio-button-group '("button1" "button2" "button3") 1))) ;;; Rangle controls @@ -2362,18 +1301,11 @@ (define-standard-dialog create-range-controls "Range controls" (setf (container-border-width main-box) 10) (setf (box-spacing main-box) 10) (let ((adjustment (adjustment-new 0.0 0.0 101.0 0.1 1.0 1.0))) - - (let ((scale (hscale-new adjustment))) - (setf (widget-width scale) 150) - (setf (widget-height scale) 30) - (setf (range-update-policy scale) :delayed) - (setf (scale-digits scale) 1) - (setf (scale-draw-value-p scale) t) - (box-pack-start main-box scale t t 0)) - - (let ((scrollbar (hscrollbar-new adjustment))) - (setf (range-update-policy scrollbar) :continuous) - (box-pack-start main-box scrollbar t t 0)))) + (make-instance 'hscale + :width 150 :height 30 :adjustment adjustment + :update-policy :delayed :digits 1 :draw-value t :parent main-box) + (make-instance 'hscrollbar + :adjustment adjustment :update-policy :continuous :parent main-box))) @@ -2428,59 +1360,56 @@ (define-test-window create-rulers "rulers" (setf (widget-height window) 300) (setf (widget-events window) '(:pointer-motion :pointer-motion-hint)) - (let ((table (table-new 2 2 nil))) - (container-add window table) - (widget-show table) + (let ((table (make-instance 'table + :rows 2 :columns 2 + :parent window))) - (let ((ruler (hruler-new))) - (setf (ruler-metric ruler) :centimeters) - (ruler-set-range ruler 100 0 0 20) + (let ((ruler (make-instance 'hruler + :metric :centimeters + :lower 100.0 :upper 0.0 + :position 0.0 :max-size 20.0))) (signal-connect window 'motion-notify-event #'(lambda (event) (widget-event ruler event))) - (table-attach table ruler 1 2 0 1 :y-options '(:fill)) - (widget-show ruler)) + (table-attach table ruler 1 2 0 1 :y-options '(:fill))) - (let ((ruler (vruler-new))) - (ruler-set-range ruler 5 15 0 20) + (let ((ruler (make-instance 'vruler + :lower 5.0 :upper 15.0 + :position 0.0 :max-size 20.0))) (signal-connect window 'motion-notify-event #'(lambda (event) (widget-event ruler event))) - (table-attach table ruler 0 1 1 2 :x-options '(:fill)) - (widget-show ruler)))) + (table-attach table ruler 0 1 1 2 :x-options '(:fill))))) ;;; Scrolled window (define-standard-dialog create-scrolled-windows "Scrolled windows" - (let ((scrolled-window (scrolled-window-new nil nil))) - (setf (container-border-width scrolled-window) 10) - (setf (scrolled-window-scrollbar-policy scrolled-window) :automatic) - (box-pack-start main-box scrolled-window t t 0) + (let* ((scrolled-window + (make-instance 'scrolled-window + :parent main-box + :border-width 10 + :vscrollbar-policy :automatic + :hscrollbar-policy :automatic)) + (table + (make-instance 'table + :rows 20 :columns 20 :row-spacing 10 :column-spacing 10 + :focus-vadjustment (scrolled-window-vadjustment scrolled-window) + :focus-hadjustment (scrolled-window-hadjustment scrolled-window)))) - (let ((table (table-new 20 20 nil))) - (setf (table-row-spacings table) 10) - (setf (table-column-spacings table) 10) (scrolled-window-add-with-viewport scrolled-window table) - (setf - (container-focus-vadjustment table) - (scrolled-window-vadjustment scrolled-window)) - (setf - (container-focus-hadjustment table) - (scrolled-window-hadjustment scrolled-window)) - (dotimes (i 20) (dotimes (j 20) (let ((button (toggle-button-new (format nil "button (~D,~D)~%" i j)))) - (table-attach table button i (1+ i) j (1+ j))))))) + (table-attach table button i (1+ i) j (1+ j)))))) - (let ((button (button-new "remove"))) - (signal-connect button 'clicked #'(lambda ())) - (setf (widget-can-default-p button) t) - (box-pack-start action-area button t t 0) - (widget-grab-default button)) +; (let ((button (button-new "remove"))) +; (signal-connect button 'clicked #'(lambda ())) +; (setf (widget-can-default-p button) t) +; (box-pack-start action-area button t t 0) +; (widget-grab-default button)) (setf (window-default-height window) 300) (setf (window-default-width window) 300)) @@ -2489,34 +1418,27 @@ (define-standard-dialog create-scrolled-windows "Scrolled windows" ;;; Shapes -(defun shape-create-icon (xpm-file x y px py window-type root-window) - (let ((window (window-new window-type)) - (fixed (fixed-new))) - (setf (widget-width fixed) 100) - (setf (widget-height fixed) 100) - (container-add window fixed) - (widget-show fixed) - - (setf - (widget-events window) - (append - (widget-events window) - '(:button-motion :pointer-motion-hint :button-press))) +(defun shape-create-icon (xpm-file x y px py type root-window destroy) + (let* ((window + (make-instance 'window + :type type :x x :y y + :events '(:button-motion :pointer-motion-hint :button-press))) + (fixed + (make-instance 'fixed + :parent window :width 100 :height 100))) + (widget-realize window) - - (multiple-value-bind (gdk-pixmap gdk-pixmap-mask) - (gdk:pixmap-create xpm-file) - (let ((pixmap (pixmap-new (list gdk-pixmap gdk-pixmap-mask))) + (multiple-value-bind (source mask) (gdk:pixmap-create xpm-file) + (let ((pixmap (pixmap-new source mask)) (x-offset 0) (y-offset 0)) (declare (fixnum x-offset y-offset)) (fixed-put fixed pixmap px py) - (widget-show pixmap) - (widget-shape-combine-mask window gdk-pixmap-mask px py) - (signal-connect - window 'button-press-event + (widget-shape-combine-mask window mask px py) + + (signal-connect window 'button-press-event #'(lambda (event) - (when (eq (gdk:event-type event) :button-press) + (when (typep event 'gdk:button-press-event) (setq x-offset (truncate (gdk:event-x event))) (setq y-offset (truncate (gdk:event-y event))) (grab-add window) @@ -2526,16 +1448,14 @@ (defun shape-create-icon (xpm-file x y px py window-type root-window) nil nil 0)) t)) - (signal-connect - window 'button-release-event + (signal-connect window 'button-release-event #'(lambda (event) (declare (ignore event)) (grab-remove window) (gdk:pointer-ungrab 0) t)) - (signal-connect - window 'motion-notify-event + (signal-connect window 'motion-notify-event #'(lambda (event) (declare (ignore event)) (multiple-value-bind (win xp yp mask) @@ -2543,10 +1463,10 @@ (defun shape-create-icon (xpm-file x y px py window-type root-window) (declare (ignore mask win) (fixnum xp yp)) (widget-set-uposition window :x (- xp x-offset) :y (- yp y-offset))) - t)))) + t)) + (signal-connect window 'destroy destroy))) - (widget-set-uposition window :x x :y y) - (widget-show window) + (widget-show-all window) window)) @@ -2556,39 +1476,27 @@ (let ((modeller nil) (defun create-shapes () (let ((root-window (gdk:get-root-window))) (if (not modeller) - (progn - (setq - modeller - (shape-create-icon - "cl-gtk:src;Modeller.xpm" - 440 140 0 0 :popup root-window)) - (signal-connect - modeller 'destroy - #'(lambda () (widget-destroyed modeller)))) + (setq + modeller + (shape-create-icon + "clg:examples;Modeller.xpm" 440 140 0 0 :popup root-window + #'(lambda () (widget-destroyed modeller)))) (widget-destroy modeller)) (if (not sheets) - (progn - (setq - sheets - (shape-create-icon - "cl-gtk:src;FilesQueue.xpm" - 580 170 0 0 :popup root-window)) - (signal-connect - sheets 'destroy - #'(lambda () (widget-destroyed sheets)))) + (setq + sheets + (shape-create-icon + "clg:examples;FilesQueue.xpm" 580 170 0 0 :popup root-window + #'(lambda () (widget-destroyed sheets)))) (widget-destroy sheets)) (if (not rings) - (progn - (setq - rings - (shape-create-icon - "cl-gtk:src;3DRings.xpm" - 460 270 25 25 :toplevel root-window)) - (signal-connect - rings 'destroy - #'(lambda () (widget-destroyed rings)))) + (setq + rings + (shape-create-icon + "clg:examples;3DRings.xpm" 460 270 25 25 :toplevel root-window + #'(lambda () (widget-destroyed rings)))) (widget-destroy rings))))) @@ -2611,9 +1519,9 @@ (define-test-window create-spins "Spin buttons" (let* ((vbox2 (vbox-new nil 0)) (label (label-new "Day :")) (spinner (spin-button-new - (adjustment-new 1 1 31 1 5 0) 0 0))) + (adjustment-new 1.0 1.0 31.0 1.0 5.0 0.0) 0.0 0))) (box-pack-start hbox vbox2 t t 5) - (setf (misc-xalign label) 0) + (setf (misc-xalign label) 0.0) (setf (misc-yalign label) 0.5) (box-pack-start vbox2 label nil t 0) (setf (spin-button-wrap-p spinner) t) @@ -2623,9 +1531,9 @@ (define-test-window create-spins "Spin buttons" (let* ((vbox2 (vbox-new nil 0)) (label (label-new "Month :")) (spinner (spin-button-new - (adjustment-new 1 1 12 1 5 0) 0 0))) + (adjustment-new 1.0 1.0 12.0 1.0 5.0 0.0) 0.0 0))) (box-pack-start hbox vbox2 t t 5) - (setf (misc-xalign label) 0) + (setf (misc-xalign label) 0.0) (setf (misc-yalign label) 0.5) (box-pack-start vbox2 label nil t 0) (setf (spin-button-wrap-p spinner) t) @@ -2635,9 +1543,10 @@ (define-test-window create-spins "Spin buttons" (let* ((vbox2 (vbox-new nil 0)) (label (label-new "Year :")) (spinner (spin-button-new - (adjustment-new 1998 0 2100 1 100 0) 0 0))) + (adjustment-new 1998.0 0.0 2100.0 1.0 100.0 0.0) + 0.0 0))) (box-pack-start hbox vbox2 t t 5) - (setf (misc-xalign label) 0) + (setf (misc-xalign label) 0.0) (setf (misc-yalign label) 0.5) (box-pack-start vbox2 label nil t 0) (setf (spin-button-wrap-p spinner) t) @@ -2648,8 +1557,9 @@ (define-test-window create-spins "Spin buttons" (vbox (vbox-new nil 0)) (hbox (hbox-new nil 0)) (spinner1 (spin-button-new - (adjustment-new 0 -10000 10000 0.5 100 0) 1.0 2)) - (adj (adjustment-new 2 1 5 1 1 0)) + (adjustment-new 0.0 -10000.0 10000.0 0.5 100.0 0.0) + 1.0 2)) + (adj (adjustment-new 2.0 1.0 5.0 1.0 1.0 0.0)) (spinner2 (spin-button-new adj 1.0 0))) (box-pack-start main-vbox frame t t 0) @@ -2660,7 +1570,7 @@ (define-test-window create-spins "Spin buttons" (let* ((vbox2 (vbox-new nil 0)) (label (label-new "Value :"))) (box-pack-start hbox vbox2 t t 5) - (setf (misc-xalign label) 0) + (setf (misc-xalign label) 0.0) (setf (misc-yalign label) 0.5) (box-pack-start vbox2 label nil t 0) (setf (spin-button-wrap-p spinner1) t) @@ -2671,7 +1581,7 @@ (define-test-window create-spins "Spin buttons" (let* ((vbox2 (vbox-new nil 0)) (label (label-new "Digits :"))) (box-pack-start hbox vbox2 t t 5) - (setf (misc-xalign label) 0) + (setf (misc-xalign label) 0.0) (setf (misc-yalign label) 0.5) (box-pack-start vbox2 label nil t 0) (setf (spin-button-wrap-p spinner2) t) @@ -2708,7 +1618,7 @@ (define-test-window create-spins "Spin buttons" button 'clicked #'(lambda () (setf - (label-text val-label) + (label-label val-label) (format nil "~D" (spin-button-value-as-int spinner1))))) (box-pack-start hbox button t t 5)) @@ -2717,7 +1627,7 @@ (define-test-window create-spins "Spin buttons" button 'clicked #'(lambda () (setf - (label-text val-label) + (label-label val-label) (format nil (format nil "~~,~DF" (spin-button-digits spinner1)) (spin-button-value spinner1))))) @@ -2736,313 +1646,148 @@ (define-test-window create-spins "Spin buttons" ;;; Statusbar (define-test-window create-statusbar "Statusbar" - (let ((box1 (vbox-new nil 0))) - (container-add window box1) + (let ((statusbar (make-instance 'statusbar)) + (statusbar-counter 0) + (close-button + (create-button '("close" :can-default t) #'widget-destroy window))) - (let ((box2 (vbox-new nil 10)) - (statusbar (statusbar-new)) - (statusbar-counter 0)) - (setf (container-border-width box2) 10) - (box-pack-start box1 box2 t t 0) - (box-pack-end box1 statusbar t t 0) - (signal-connect - statusbar 'text-popped - #'(lambda (context-id text) - (declare (ignore context-id)) - (format nil "Popped: ~A~%" text))) - - (make-button - :label "push something" - :visible t - :parent box2 - :signal (list - 'clicked - #'(lambda () - (statusbar-push - statusbar - 1 - (format nil "something ~D" (incf statusbar-counter)))))) - - (make-button - :label "pop" - :visible t - :parent box2 - :signal (list - 'clicked - #'(lambda () - (statusbar-pop statusbar 1)) - :after t)) - - (make-button - :label "steal #4" - :visible t - :parent box2 - :signal (list - 'clicked - #'(lambda () - (statusbar-remove statusbar 1 4)) - :after t)) - - (make-button :label "test contexts" - :visible t - :parent box2 - :signal (list 'clicked #'(lambda ())))) - - (box-pack-start box1 (hseparator-new) nil t 0) - - (let ((box2 (vbox-new nil 10))) - (setf (container-border-width box2) 10) - (box-pack-start box1 box2 nil t 0) + (signal-connect + statusbar 'text-popped + #'(lambda (context-id text) + (declare (ignore context-id)) + (format nil "Popped: ~A~%" text))) - (let ((button (button-new "close"))) - (signal-connect button 'clicked #'(lambda () (widget-destroy window))) - (box-pack-start box2 button t t 0) - (setf (widget-can-default-p button) t) - (widget-grab-default button))))) + (make-instance 'vbox + :parent window + :children + (list + (make-instance 'vbox + :border-width 10 :spacing 10 + :children + (list + (create-button + "push something" + #'(lambda () + (statusbar-push + statusbar 1 + (format nil "something ~D" (incf statusbar-counter))))) + (create-button "pop" #'statusbar-pop statusbar 1) + (create-button "steal #4" #'statusbar-remove statusbar 1 4) + (create-button "dump stack") + (create-button "test contexts"))) + (list (make-instance 'hseparator) :expand nil) + (list + (make-instance 'vbox + :border-width 10 + :children (list (list close-button :expand nil))) + :expand nil) + statusbar)) + + (widget-grab-default close-button))) ;;; Idle test (define-standard-dialog create-idle-test "Idle Test" - (let ((label (label-new "count: 0")) - (idle nil) - (count 0)) + (let* ((container (make-instance 'hbox :parent main-box)) + (label (make-instance 'label + :label "count: 0" :xpad 10 :ypad 10 :parent container)) + (idle nil) + (count 0)) (declare (fixnum count)) (signal-connect window 'destroy #'(lambda () (when idle (idle-remove idle)))) - (setf (misc-xpad label) 10) - (setf (misc-ypad label) 10) - (box-pack-start main-box label t t 0) - - (let* ((container (make-hbox :parent main-box :child label :visible t)) - (frame (make-frame - :border-width 5 - :label "Label Container" - :visible t - :parent main-box)) - (box (make-vbox :visible t :parent frame))) - (make-check-button - :label "Resize-Parent" - :visible t - :parent box - :signal - (list - 'clicked - #'(lambda () - (setf (container-resize-mode container) :parent)))) - - (make-check-button - :label "Resize-Queue" - :visible t - :parent box - :signal - (list - 'clicked - #'(lambda () - (setf (container-resize-mode container) :queue)))) - - (make-check-button - :label "Resize-Immediate" - :visible t - :parent box - :signal - (list - 'clicked - #'(lambda () - (setf (container-resize-mode container) :immediate))))) - - (let ((button (button-new "start"))) - (signal-connect - button 'clicked + (make-instance 'frame + :label "Label Container" :border-width 5 :parent main-box + :child + (make-instance 'vbox + :children + (create-radio-button-group + '(("Resize-Parent" :parent) + ("Resize-Queue" :queue) + ("Resize-Immediate" :immediate)) + 0 + '(setf container-resize-mode) container))) + + (make-instance 'button + :label "start" :can-default t :parent action-area + :signals + (list + (list + 'clicked #'(lambda () - (unless idle - (setq - idle - (idle-add - #'(lambda () - (incf count) - (setf (label-text label) (format nil "count: ~D" count)) - t)))))) - (setf (widget-can-default-p button) t) - (box-pack-start action-area button t t 0) - (widget-show button)) + (unless idle + (setq + idle + (idle-add + #'(lambda () + (incf count) + (setf (label-label label) (format nil "count: ~D" count)) + t)))))))) - (let ((button (button-new "stop"))) - (signal-connect - button 'clicked + (make-instance 'button + :label "stop" :can-default t :parent action-area + :signals + (list + (list + 'clicked #'(lambda () - (when idle - (idle-remove idle) - (setq idle nil)))) - (setf (widget-can-default-p button) t) - (box-pack-start action-area button t t 0) - (widget-show button)))) + (when idle + (idle-remove idle) + (setq idle nil)))))))) ;;; Timeout test (define-standard-dialog create-timeout-test "Timeout Test" - (let ((label (label-new "count: 0")) + (let ((label (make-instance 'label + :label "count: 0" :xpad 10 :ypad 10 :parent main-box)) (timer nil) (count 0)) (declare (fixnum count)) (signal-connect window 'destroy #'(lambda () (when timer (timeout-remove timer)))) - - (setf (misc-xpad label) 10) - (setf (misc-ypad label) 10) - (box-pack-start main-box label t t 0) - (widget-show label) - - (let ((button (button-new "start"))) - (signal-connect - button 'clicked + + (make-instance 'button + :label "start" :can-default t :parent action-area + :signals + (list + (list + 'clicked #'(lambda () - (unless timer - (setq - timer - (timeout-add - 100 - #'(lambda () - (incf count) - (setf (label-text label) (format nil "count: ~D" count)) - t)))))) - (setf (widget-can-default-p button) t) - (box-pack-start action-area button t t 0) - (widget-show button)) - - (let ((button (button-new "stop"))) - (signal-connect - button 'clicked + (unless timer + (setq + timer + (timeout-add + 100 + #'(lambda () + (incf count) + (setf (label-label label) (format nil "count: ~D" count)) + t)))))))) + + (make-instance 'button + :label "stop" :can-default t :parent action-area + :signals + (list + (list + 'clicked #'(lambda () - (when timer - (timeout-remove timer) - (setq timer nil)))) - (setf (widget-can-default-p button) t) - (box-pack-start action-area button t t 0) - (widget-show button)))) + (when timer + (timeout-remove timer) + (setq timer nil)))))))) - -;;; Text - -(define-test-window create-text "Text" - (setf (widget-name window) "text window") - (setf (widget-width window) 500) - (setf (widget-height window) 500) - (setf (window-allow-grow-p window) t) - (setf (window-allow-shrink-p window) t) - (setf (window-auto-shrink-p window) nil) - (let ((box1 (vbox-new nil 0))) - (container-add window box1) - - (let ((box2 (vbox-new nil 10))) - (setf (container-border-width box2) 10) - (box-pack-start box1 box2 t t 0) - - (let ((scrolled-window (scrolled-window-new)) - (text (text-new))) - (box-pack-start box2 scrolled-window t t 0) - (setf (scrolled-window-hscrollbar-policy scrolled-window) :never) - (setf (scrolled-window-vscrollbar-policy scrolled-window) :always) - (setf (editable-editable-p text) t) - (container-add scrolled-window text) - (widget-grab-focus text) - - (text-freeze text) - (let ((font - (gdk:font-load - "-adobe-courier-medium-r-normal--*-120-*-*-*-*-*-*")) - (colors - (map 'list - #'(lambda (definition) - (cons - (gdk:color-new-from-vector (first definition)) - (second definition))) - '((#(#x0000 #x0000 #x0000) "black") - (#(#xFFFF #xFFFF #xFFFF) "white") - (#(#xFFFF #x0000 #x0000) "red") - (#(#x0000 #xFFFF #x0000) "green") - (#(#x0000 #x0000 #xFFFF) "blue") - (#(#x0000 #xFFFF #xFFFF) "cyan") - (#(#xFFFF #x0000 #xFFFF) "magneta") - (#(#xFFFF #xFFFF #x0000) "yellow"))))) - (dolist (color1 colors) - (text-insert text (format nil "~A~,7T" (cdr color1)) :font font) - (dolist (color2 colors) - (text-insert - text "XYZ" :font font - :foreground (car color2) :background (car color1))) - (text-insert text (format nil "~%"))) - (dolist (color colors) - (gdk:color-destroy (car color))) - (gdk:font-unref font)) - - (with-open-file (file "cl-gtk:src;testgtk.lisp") - (labels ((read-file () - (let ((line (read-line file nil nil))) - (when line - (text-insert text (format nil "~A~%" line)) - (read-file))))) - (read-file))) - - (text-thaw text) - - (let ((hbox (hbutton-box-new))) - (box-pack-start box2 hbox nil nil 0) - (let ((check-button (check-button-new "Editable"))) - (box-pack-start hbox check-button nil nil 0) - (signal-connect - check-button 'toggled - #'(lambda () - (setf - (editable-editable-p text) - (toggle-button-active-p check-button)))) - (setf (toggle-button-active-p check-button) t)) - - (let ((check-button (check-button-new "Wrap Words"))) - (box-pack-start hbox check-button nil t 0) - (signal-connect - check-button 'toggled - #'(lambda () - (setf - (text-word-wrap-p text) - (toggle-button-active-p check-button)))) - (setf (toggle-button-active-p check-button) nil))))) - - (box-pack-start box1 (hseparator-new) nil t 0) - - (let ((box2 (vbox-new nil 10))) - (setf (container-border-width box2) 10) - (box-pack-start box1 box2 nil t 0) - - (let ((button (button-new "insert random"))) - (signal-connect button 'clicked #'(lambda () nil)) - (box-pack-start box2 button t t 0)) - - (let ((button (button-new "close"))) - (signal-connect - button 'clicked - #'(lambda () - (widget-destroy window) - (setq window nil))) - (box-pack-start box2 button t t 0) - (setf (widget-can-default-p button) t) - (widget-grab-default button))))) - - - ;;; Toggle buttons (define-standard-dialog create-toggle-buttons "Toggle Button" (setf (container-border-width main-box) 10) (setf (box-spacing main-box) 10) - (box-pack main-box (toggle-button-new "button1")) - (box-pack main-box (toggle-button-new "button2")) - (box-pack main-box (toggle-button-new "button3"))) + (dotimes (n 3) + (make-instance 'toggle-button + :label (format nil "Button~D" (1+ n)) :parent main-box))) @@ -3054,18 +1799,17 @@ (define-test-window create-toolbar "Toolbar test" (setf (window-auto-shrink-p window) t) (widget-realize window) - (let ((toolbar (toolbar-new :horizontal :both))) (setf (toolbar-relief toolbar) :none) (toolbar-append-item - toolbar "Horizontal" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Horizontal" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Horizontal toolbar layout" :tooltip-private-text "Toolbar/Horizontal" :callback #'(lambda () (setf (toolbar-orientation toolbar) :horizontal))) (toolbar-append-item - toolbar "Vertical" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Vertical" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Vertical toolbar layout" :tooltip-private-text "Toolbar/Vertical" :callback #'(lambda () (setf (toolbar-orientation toolbar) :vertical))) @@ -3073,19 +1817,19 @@ (define-test-window create-toolbar "Toolbar test" (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Icons" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Icons" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Only show toolbar icons" :tooltip-private-text "Toolbar/IconsOnly" :callback #'(lambda () (setf (toolbar-style toolbar) :icons))) (toolbar-append-item - toolbar "Text" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Text" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Only show toolbar text" :tooltip-private-text "Toolbar/TextOnly" :callback #'(lambda () (setf (toolbar-style toolbar) :text))) (toolbar-append-item - toolbar "Both" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Both" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Show toolbar icons and text" :tooltip-private-text "Toolbar/Both" :callback #'(lambda () (setf (toolbar-style toolbar) :both))) @@ -3100,13 +1844,13 @@ (define-test-window create-toolbar "Toolbar test" (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Small" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Small" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Use small spaces" :tooltip-private-text "Toolbar/Small" :callback #'(lambda () (setf (toolbar-space-size toolbar) 5))) (toolbar-append-item - toolbar "Big" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Big" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Use big spaces" :tooltip-private-text "Toolbar/Big" :callback #'(lambda () (setf (toolbar-space-size toolbar) 10))) @@ -3114,40 +1858,40 @@ (define-test-window create-toolbar "Toolbar test" (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Enable" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Enable" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Enable tooltips" :callback #'(lambda () (toolbar-enable-tooltips toolbar))) (toolbar-append-item - toolbar "Disable" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Disable" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Disable tooltips" :callback #'(lambda () (toolbar-disable-tooltips toolbar))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Borders" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Borders" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Show borders" :callback #'(lambda () (setf (toolbar-relief toolbar) :normal))) (toolbar-append-item toolbar - "Borderless" (pixmap-new "cl-gtk:src;test.xpm") + "Borderless" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Hide borders" :callback #'(lambda () (setf (toolbar-relief toolbar) :none))) (toolbar-append-space toolbar) (toolbar-append-item - toolbar "Empty" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Empty" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Empty spaces" :callback #'(lambda () (setf (toolbar-space-style toolbar) :empty))) (toolbar-append-item - toolbar "Lines" (pixmap-new "cl-gtk:src;test.xpm") + toolbar "Lines" (pixmap-new "clg:examples;test.xpm") :tooltip-text "Lines in spaces" :callback #'(lambda () (setf (toolbar-space-style toolbar) :line))) - + (container-add window toolbar))) @@ -3155,51 +1899,37 @@ (define-test-window create-toolbar "Toolbar test" ;;; Tooltips test (define-standard-dialog create-tooltips "Tooltips" - (setf (window-allow-grow-p window) t) - (setf (window-allow-shrink-p window) nil) - (setf (window-auto-shrink-p window) t) - (setf (widget-width window) 200) - (setf (container-border-width main-box) 10) - (setf (box-spacing main-box) 10) + (setf + (window-allow-grow-p window) t + (window-allow-shrink-p window) nil + (window-auto-shrink-p window) t + (widget-width window) 200 + (container-border-width main-box) 10 + (box-spacing main-box) 10) (let ((tooltips (tooltips-new))) + (flet ((create-button (label tip-text tip-private) + (let ((button (make-instance 'toggle-button + :label label :parent main-box))) + (tooltips-set-tip tooltips button tip-text tip-private) + button))) + (create-button "button1" "This is button 1" "ContextHelp/button/1") + (create-button "button2" "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly." "ContextHelp/button/2") + + (let* ((toggle (create-button "Override TipSQuery Label" + "Toggle TipsQuery view" "Hi msw! ;)")) + (box (make-instance 'vbox + :homogeneous nil :spacing 5 :border-width 5 + :parent (make-instance 'frame + :label "ToolTips Inspector" + :label-xalign 0.5 :border-width 0 + :parent main-box))) + (button (make-instance 'button :label "[?]" :parent box)) + (tips-query (make-instance 'tips-query + :caller button :parent box))) - (let ((button (toggle-button-new "button1"))) - (box-pack-start main-box button t t 0) - (tooltips-set-tip - tooltips button "This is button 1" "ContextHelp/button/1")) - - (let ((button (toggle-button-new "button2"))) - (box-pack-start main-box button t t 0) - (tooltips-set-tip - tooltips button "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly." - "ContextHelp/button/2")) - - (let ((toggle (toggle-button-new "Override TipSQuery Label"))) - (box-pack-start main-box toggle t t 0) - (tooltips-set-tip - tooltips toggle "Toggle TipsQuery view" "Hi msw! ;)") - - (let* ((box3 (make-vbox - :homogeneous nil - :spacing 5 - :border-width 5 - :visible t)) - (tips-query (make-tips-query - :visible t - :parent box3)) - (button (make-button - :label "[?]" - :visible t - :parent box3 - :signal (list - 'clicked #'tips-query-start-query - :object tips-query)))) - - (box-set-child-packing box3 button nil nil 0 :start) - (tooltips-set-tip - tooltips button "Start the Tooltip Inspector" "ContextHelp/buttons/?") - (setf (tips-query-caller tips-query) button) + (signal-connect + button 'clicked #'tips-query-start-query :object tips-query) (signal-connect tips-query 'widget-entered @@ -3207,7 +1937,7 @@ (define-standard-dialog create-tooltips "Tooltips" (declare (ignore widget tip-private)) (when (toggle-button-active-p toggle) (setf - (label-text tips-query) + (label-label tips-query) (if tip-text "There is a Tip!" "There is no Tip!")) @@ -3223,292 +1953,29 @@ (define-standard-dialog create-tooltips "Tooltips" (or tip-private "None") (type-of widget))) t)) - (let ((frame (make-frame - :label "ToolTips Inspector" - :label-xalign 0.5 - :border-width 0 - :visible t - :parent main-box - :child box3))) - (box-set-child-packing main-box frame t t 0 :start)) - + (tooltips-set-tip + tooltips button "Start the Tooltip Inspector" "ContextHelp/buttons/?") (tooltips-set-tip tooltips close-button "Push this button to close window" "ContextHelp/buttons/Close"))))) -;;; Tree - -(defconstant +default-number-of-items+ 3) -(defconstant +default-recursion-level+ 3) - -(defun create-subtree (item level nb-item-max recursion-level-max) - (unless (and level (= level recursion-level-max)) - (multiple-value-bind (level item-subtree no-root-item) - (if (not level) - (values 0 item t) - (values level (tree-new) nil)) - - (dotimes (nb-item nb-item-max) - (let ((new-item - (tree-item-new (format nil "item ~D-~D" level nb-item)))) - (tree-append item-subtree new-item) - (create-subtree - new-item (1+ level) nb-item-max recursion-level-max) - (widget-show new-item))) - - (unless no-root-item - (setf (tree-item-subtree item) item-subtree))))) - - -(defun create-tree-sample (selection-mode draw-line view-line no-root-item - nb-item-max recursion-level-max) - (let ((window (window-new :toplevel))) - (setf (window-title window) "Tree Sample") - (signal-connect window 'destroy #'(lambda ())) - - (let ((box1 (vbox-new nil 0)) - (root-tree (tree-new)) - (add-button (button-new "Add Item")) - (remove-button (button-new "Remove Item(s)")) - (subtree-button (button-new "Remove Subtree"))) - (container-add window box1) - (widget-show box1) - - (let ((box2 (vbox-new nil 0)) - (scrolled-win (scrolled-window-new nil nil))) - (box-pack box1 box2) - (setf (container-border-width box2) 5) - (widget-show box2) - (setf (scrolled-window-scrollbar-policy scrolled-win) :automatic) - (box-pack box2 scrolled-win) - (setf (widget-width scrolled-win) 200) - (setf (widget-height scrolled-win) 200) - (widget-show scrolled-win) - (signal-connect - root-tree 'selection-changed - #'(lambda () - (format t "Selection: ~A~%" (tree-selection root-tree)) - (let ((nb-selected (length (tree-selection root-tree)))) - (if (zerop nb-selected) - (progn - (if (container-children root-tree) - (setf (widget-sensitive-p add-button) t) - (setf (widget-sensitive-p add-button) nil)) - (setf (widget-sensitive-p remove-button) nil) - (setf (widget-sensitive-p subtree-button) nil)) - (progn - (setf (widget-sensitive-p remove-button) t) - (setf (widget-sensitive-p add-button) (= 1 nb-selected)) - (setf - (widget-sensitive-p subtree-button) (= 1 nb-selected))))))) - (scrolled-window-add-with-viewport scrolled-win root-tree) - (setf (tree-selection-mode root-tree) selection-mode) - (setf (tree-view-lines-p root-tree) draw-line) - (setf (tree-view-mode root-tree) (if view-line :line :item)) - (widget-show root-tree) - - (let ((root-item - (if no-root-item - root-tree - (let ((root-item (tree-item-new "root item"))) - (tree-append root-tree root-item) - (widget-show root-item) - root-item)))) - (create-subtree - root-item (if no-root-item nil 0) nb-item-max recursion-level-max))) - - (let ((box2 (vbox-new nil 0))) - (box-pack-start box1 box2 nil nil 0) - (setf (container-border-width box2) 5) - (widget-show box2) - - (setf (widget-sensitive-p add-button) nil) - (let ((nb-item-add 0)) - (signal-connect - add-button 'clicked - #'(lambda () - (let* ((selected-list (tree-selection root-tree)) - (subtree (if (not selected-list) - root-tree - (let ((selected-item (first selected-list))) - (or - (tree-item-subtree selected-item) - (let ((subtree (tree-new))) - (setf - (tree-item-subtree selected-item) - subtree) - subtree))))) - (new-item - (tree-item-new (format nil "item add ~D" nb-item-add)))) - (tree-append subtree new-item) - (widget-show new-item) - (incf nb-item-add))))) - (box-pack-start box2 add-button t t 0) - (widget-show add-button) - - (setf (widget-sensitive-p remove-button) nil) - (signal-connect - remove-button 'clicked - #'(lambda () - (format t "Remove: ~A~%" (tree-selection root-tree)) - (tree-remove-items root-tree (tree-selection root-tree)))) - (box-pack-start box2 remove-button t t 0) - (widget-show remove-button) - - (setf (widget-sensitive-p subtree-button) nil) - (signal-connect - subtree-button 'clicked - #'(lambda () - (let ((selected-list (tree-selection root-tree))) - (when selected-list - (let ((item (first selected-list))) - (when item - (setf (tree-item-subtree item) nil))))))) - (box-pack-start box2 subtree-button t t 0) - (widget-show subtree-button)) - - (let ((separator (hseparator-new))) - (box-pack-start box1 separator nil nil 0) - (widget-show separator)) - - (let ((box2 (vbox-new nil 0)) - (button (button-new "Close"))) - (box-pack-start box1 box2 nil nil 0) - (setf (container-border-width box2) 5) - (widget-show box2) - (box-pack-start box2 button t t 0) - (signal-connect button 'clicked - #'(lambda () - (widget-destroy window))) - (widget-show button))) - - (widget-show window))) - - -(define-test-window create-tree "Set Tree Parameters" - (let ((box1 (vbox-new nil 0))) - (container-add window box1) - - (let ((box2 (vbox-new nil 5))) - (box-pack box1 box2) - (setf (container-border-width box2) 5) - - (let ((box3 (hbox-new nil 5))) - (box-pack box2 box3) - - (let* ((single-button (radio-button-new nil :label "SIGNLE")) - (browse-button - (radio-button-new - (radio-button-group single-button) :label "BROWSE")) - (multiple-button - (radio-button-new - (radio-button-group single-button) :label "MULTIPLE")) - (draw-line-button (check-button-new "Draw line")) - (view-line-button (check-button-new "View Line mode")) - (no-root-item-button (check-button-new "Without Root item")) - (num-of-items-spinner - (spin-button-new - (adjustment-new - +default-number-of-items+ 1 255 1 5 0) - 0 0)) - (depth-spinner - (spin-button-new - (adjustment-new - +default-recursion-level+ 0 255 1 5 0) - 5 0))) - - (let ((frame (frame-new "Selection Mode")) - (box4 (vbox-new nil 0))) - (box-pack box3 frame) - (container-add frame box4) - (setf (container-border-width box4) 5) - (box-pack box4 single-button) - (box-pack box4 browse-button) - (box-pack box4 multiple-button)) - - (let ((frame (frame-new "Options")) - (box4 (vbox-new nil 0))) - (box-pack box3 frame) - (container-add frame box4) - (setf (container-border-width box4) 5) - (box-pack box4 draw-line-button) - (box-pack box4 view-line-button) - (box-pack box4 no-root-item-button) - (setf (toggle-button-active-p draw-line-button) t) - (setf (toggle-button-active-p view-line-button) t) - (setf (toggle-button-active-p no-root-item-button) nil)) - - (let ((frame (frame-new "Size Parameters")) - (box4 (vbox-new nil 5))) - (box-pack box2 frame) - (container-add frame box4) - (setf (container-border-width box4) 5) - - (let ((box5 (hbox-new nil 5))) - (box-pack box4 box5 :expand nil :fill nil) - (let ((label (label-new "Number of items : "))) - (setf (misc-xalign label) 0) - (setf (misc-yalign label) 0.5) - (box-pack box5 label :expand nil) - (box-pack box5 num-of-items-spinner :expand nil)) - (let ((label (label-new "Depth : "))) - (setf (misc-xalign label) 0) - (setf (misc-yalign label) 0.5) - (box-pack box5 label :expand nil) - (box-pack box5 depth-spinner :expand nil)))) - - (box-pack box1 (hseparator-new) :expand nil :fill nil) - - (let ((box2 (hbox-new t 10))) - (box-pack box1 box2) - (setf (container-border-width box2) 5) - (let ((button (button-new "Create Tree"))) - (box-pack box2 button) - (signal-connect - button 'clicked - #'(lambda () - (let ((selection-mode - (cond - ((toggle-button-active-p single-button) :single) - ((toggle-button-active-p browse-button) :browse) - (t :multiple))) - (draw-line - (toggle-button-active-p draw-line-button)) - (view-line - (toggle-button-active-p view-line-button)) - (no-root-item - (toggle-button-active-p no-root-item-button)) - (num-of-items - (spin-button-value-as-int num-of-items-spinner)) - (depth - (spin-button-value-as-int depth-spinner))) - - (if (> (expt num-of-items depth) 10000) - (format t "~D total items? That will take a very long time. Try less~%" (expt num-of-items depth)) - (create-tree-sample - selection-mode draw-line view-line no-root-item - num-of-items depth)))))) - (let ((button (button-new "Close"))) - (box-pack box2 button) - (signal-connect - button 'clicked #'widget-destroy :object window)))))))) - - - ;;; Main window (defun create-main-window () - (let* ((buttons + (rc-parse "clg:examples;testgtkrc2") + (rc-parse "clg:examples;testgtkrc") + + (let* ((button-specs '(("button box" create-button-box) ("buttons" create-buttons) ("calendar" create-calendar) ("check buttons" create-check-buttons) - ("clist" create-clist) + ("clist" #|create-clist|#) ("color selection" create-color-selection) - ("ctree" create-ctree) - ("cursors" create-cursors) + ("ctree" #|create-ctree|#) + ("cursors" #|create-cursors|#) ("dialog" create-dialog) ; ("dnd") ("entry" create-entry) @@ -3528,7 +1995,7 @@ (defun create-main-window () ("pixmap" create-pixmap) ("preview color") ("preview gray") - ("progress bar" create-progress-bar) + ("progress bar" #|create-progress-bar|#) ("radio buttons" create-radio-buttons) ("range controls" create-range-controls) ("rc file") @@ -3544,11 +2011,11 @@ (defun create-main-window () ("test scrolling") ("test selection") ("test timeout" create-timeout-test) - ("text" create-text) + ("text" #|create-text|#) ("toggle buttons" create-toggle-buttons) ("toolbar" create-toolbar) ("tooltips" create-tooltips) - ("tree" create-tree) + ("tree" #|create-tree|#) ("WM hints"))) (main-window (make-instance 'window :type :toplevel :title "testgtk.lisp" @@ -3558,13 +2025,9 @@ (defun create-main-window () :hscrollbar-policy :automatic :vscrollbar-policy :automatic :border-width 10)) - (close-button (make-instance 'button - :label "close" - :can-default t ;:has-default t - :signals - (list - (list - 'clicked #'widget-destroy :object main-window))))) + (close-button (create-button + '("close" :can-default t) + #'widget-destroy main-window))) ;; Main box (make-instance 'vbox @@ -3572,44 +2035,32 @@ (defun create-main-window () :children (list (list - (make-instance 'label :label (gtk-version)) - :expand nil :fill nil) + (make-instance 'label :label (gtk-version)) :expand nil :fill nil) (list - (make-instance 'label :label (format nil "clg CVS version")) - :expand nil :fill nil) + (make-instance 'label :label "clg CVS version") :expand nil :fill nil) scrolled-window (list (make-instance 'hseparator) :expand nil) (list (make-instance 'vbox :homogeneous nil :spacing 10 :border-width 10 - :children (list (list close-button :expand t :fill t))) + :children (list close-button)) :expand nil))) - (let ((button-box - (make-instance 'vbox - :border-width 10 - :focus-vadjustment (scrolled-window-vadjustment scrolled-window) - :children - (map - 'list - #'(lambda (button) - (let ((widget (make-instance 'button :label (first button)))) - (if (second button) - (signal-connect widget 'clicked (second button)) - (setf (widget-sensitive-p widget) nil)) - widget)) - buttons)))) - - (scrolled-window-add-with-viewport scrolled-window button-box)) + (scrolled-window-add-with-viewport + scrolled-window + (make-instance 'vbox + :border-width 10 + :focus-vadjustment (scrolled-window-vadjustment scrolled-window) + :children + (mapcar + #'(lambda (spec) + (apply #'create-button spec)) + button-specs))) (widget-grab-default close-button) (widget-show-all main-window) main-window)) -;(gdk:rgb-init) -(rc-parse "cl-gtk:src;testgtkrc2") -(rc-parse "cl-gtk:src;testgtkrc") - ;(create-main-window) -- [mdw]