[mcclim-cvs] CVS update: mcclim/panes.lisp

Gilbert Baumann gbaumann at common-lisp.net
Mon Nov 28 13:23:57 UTC 2005


Update of /project/mcclim/cvsroot/mcclim
In directory common-lisp.net:/tmp/cvs-serv27504

Modified Files:
	panes.lisp 
Log Message:
TABLE-PANE
    The table pane now recognizes x-spacing and y-spacing, but units
    are not tested.


Date: Mon Nov 28 14:23:55 2005
Author: gbaumann

Index: mcclim/panes.lisp
diff -u mcclim/panes.lisp:1.156 mcclim/panes.lisp:1.157
--- mcclim/panes.lisp:1.156	Thu Oct 27 03:21:33 2005
+++ mcclim/panes.lisp	Mon Nov 28 14:23:53 2005
@@ -27,7 +27,7 @@
 ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 ;;; Boston, MA  02111-1307  USA.
 
-;;; $Id: panes.lisp,v 1.156 2005/10/27 01:21:33 rstrandh Exp $
+;;; $Id: panes.lisp,v 1.157 2005/11/28 13:23:53 gbaumann Exp $
 
 (in-package :clim-internals)
 
@@ -1471,59 +1471,67 @@
 
 (defmethod compose-space ((pane table-pane) &key width height)
   (declare (ignore width height))
-  (with-slots (array) pane
+  (with-slots (array x-spacing y-spacing) pane
     ; ---v our problem is here.
+    ; Which problem? --GB
     (let ((rsrs (loop for i from 0 below (array-dimension array 0) 
                     collect (table-pane-row-space-requirement pane i)))
           (csrs (loop for j from 0 below (array-dimension array 1) 
-                    collect (table-pane-col-space-requirement pane j))))
+                    collect (table-pane-col-space-requirement pane j)))
+          (xs (* x-spacing (1- (array-dimension array 1))))
+          (ys (* y-spacing (1- (array-dimension array 0)))))
       (let ((r (stack-space-requirements-vertically rsrs))
             (c (stack-space-requirements-horizontally csrs)))
         (let ((res
                (make-space-requirement
-                :width      (space-requirement-width r)
-                :min-width  (space-requirement-min-width r)
-                :max-width  (space-requirement-max-width r)
-                :height     (space-requirement-height c)
-                :min-height (space-requirement-min-height c)
-                :max-height (space-requirement-max-height c))))
+                :width      (+ (space-requirement-width r) xs)
+                :min-width  (+ (space-requirement-min-width r) xs)
+                :max-width  (+ (space-requirement-max-width r) xs)
+                :height     (+ (space-requirement-height c) ys)
+                :min-height (+ (space-requirement-min-height c) ys)
+                :max-height (+ (space-requirement-max-height c) ys))))
           #+nil
           (format *trace-output* "~%;;; TABLE-PANE sr = ~S." res)
           res)))))
 
-(defmethod allocate-space ((pane table-pane) width height &aux rsrs csrs)
-  (declare (ignorable rsrs csrs))
-  (with-slots (array) pane
-    ;; allot rows
-    (let ((rows (allot-space-vertically
-                 (setq rsrs (loop for i from 0 below (array-dimension array 0)
-                                collect (table-pane-row-space-requirement pane i)))
-                 height))
-          (cols (allot-space-horizontally
-                 (setq csrs (loop for j from 0 below (array-dimension array 1)
-                                collect (table-pane-col-space-requirement pane j)))
-                 width)))
-      #+nil
-      (progn
-        (format T "~&;; row space requirements = ~S." rsrs)
-        (format T "~&;; col space requirements = ~S." csrs)
-        (format T "~&;; row allotment: needed = ~S result = ~S (sum ~S)." height rows (reduce #'+ rows))
-        (format T "~&;; col allotment: needed = ~S result = ~S (sum ~S)." width cols (reduce #'+ cols))
-        (format T "~&;; align-x = ~S, align-y ~S~%"
-                (pane-align-x pane)
-                (pane-align-y pane)))
-      ;; now finally layout each child
-      (loop
-          for y = 0 then (+ y h)
-          for h in rows
-          for i from 0
-          do (loop
-                 for x = 0 then (+ x w)
-                 for w in cols
-                 for j from 0
-                 do (layout-child (aref array i j) (pane-align-x pane) (pane-align-y pane)
-                                  x y w h))))))
-
+(defmethod allocate-space ((pane table-pane) width height)
+  (let (rsrs csrs)
+    (declare (ignorable rsrs csrs))
+    (with-slots (array x-spacing y-spacing) pane
+      ;; allot rows
+      (let* ((xs (* x-spacing (1- (array-dimension array 1))))
+             (ys (* y-spacing (1- (array-dimension array 0))))
+             (rows (allot-space-vertically
+                    (setq rsrs (loop for i from 0 below (array-dimension array 0)
+                                     collect (table-pane-row-space-requirement pane i)))
+                    (- height ys)))
+             (cols (allot-space-horizontally
+                    (setq csrs (loop for j from 0 below (array-dimension array 1)
+                                     collect (table-pane-col-space-requirement pane j)))
+                    (- width xs))))
+        #+nil
+        (progn
+          (format T "~&;; row space requirements = ~S." rsrs)
+          (format T "~&;; col space requirements = ~S." csrs)
+          (format T "~&;; row allotment: needed = ~S result = ~S (sum ~S)." height rows (reduce #'+ rows))
+          (format T "~&;; col allotment: needed = ~S result = ~S (sum ~S)." width cols (reduce #'+ cols))
+          (format T "~&;; align-x = ~S, align-y ~S~%"
+                  (pane-align-x pane)
+                  (pane-align-y pane)))
+        ;; now finally layout each child
+        (loop
+            for y = 0 then (+ y h y-spacing)
+            for h in rows
+            for i from 0
+            do (loop
+                   for x = 0 then (+ x w x-spacing)
+                   for w in cols
+                   for j from 0
+                   do (let ((child (aref array i j)))
+                        (layout-child child
+                                      (pane-align-x pane)
+                                      (pane-align-y pane)
+                                      x y w h))))))))
 
 (defun table-pane-p (pane)
   (typep pane 'table-pane))




More information about the Mcclim-cvs mailing list