Lisp HUG Maillist Archive

CAPI and bad tab-layout bahavior.

Hi

I already asked something along these lines some time ago.  However, 
now I was able to narrow down the bad behavior to the following case.


===========================================================
;;; -*- Mode: Lisp -*-

;;; bad-interface.lisp

(capi:define-interface bad-tab-layout ()
   ()
   (:panes
    (one
     capi:output-pane
     )
    (two
     capi:pinboard-layout
     :reader btl-two
     )
    )
   (:layouts
    (main
     capi:tab-layout
     ()
     :items '(("ONE" one) ("TWO" two))
     :print-function 'first
     :visible-child-function 'second
     ))
   (:default-initargs :layout 'main))

(defun add-pinboard-layout (pinboard-layout)
   (setf (capi:layout-description pinboard-layout)
         (list (make-instance 'capi:pinboard-layout))))


(defun add-pinboard-object (pinboard-layout)
   (setf (capi:layout-description pinboard-layout)
         (list (make-instance 'capi:drawn-pinboard-object))))


(defun add-pinboard-layout* (pinboard-layout cause-error-p)
   (when cause-error-p
     (print (multiple-value-list (capi:get-constraints 
pinboard-layout))))
   (setf (capi:layout-description pinboard-layout)
         (list (make-instance 'capi:pinboard-layout))))


(defun add-pinboard-object* (pinboard-layout cause-error-p)
   (when cause-error-p
     (print (multiple-value-list (capi:get-constraints 
pinboard-layout))))
   (setf (capi:layout-description pinboard-layout)
         (list (make-instance 'capi:drawn-pinboard-object))))


(defun test-no-error ()
   (let ((btl (capi:display (make-instance 'bad-tab-layout))))
     (add-pinboard-layout (btl-two btl))
     (add-pinboard-object (first (capi:layout-description (btl-two 
btl))))
     btl))


(defun test-error (&optional (error1 t) (error2 t))
   (let ((btl (capi:display (make-instance 'bad-tab-layout))))
     (add-pinboard-layout* (btl-two btl) error1)
     (add-pinboard-object* (first (capi:layout-description (btl-two 
btl))) error2)
     btl))
===========================================================

The errors appear in LWW and LWM (although up to 4.3, I have not tested 
4.4)

Calling TEST-NO-ERROR causes no error at all.
Calling TEST-ERROR with the two switches properly set causes different 
kinds of errors.
No error appears if the effect of TEST-ERROR are caused *after* the 
pinboard layout "TWO" is selected in the tab layout.

===========================================================
CL-USER 88> (test-error)

(1 1 NIL NIL)
Error: (Internal) No parent representation for #<CAPI:PINBOARD-LAYOUT  
100E0C07>
   1 (abort) Return to level 0.
   2 Return to top loop level 0.

Type :b for backtrace, :c <option number> to proceed,  or :? for other 
options

CL-USER 89 : 1 >  (test-error nil t)

(1 1 NIL NIL)
Error: No applicable methods for #<STANDARD-GENERIC-FUNCTION 
CAPI::FORCE-CHANGE-SIZE 1080821A> with args (NIL #<CAPI:PINBOARD-LAYOUT 
  100EA76B>)
   1 (continue) Call #<STANDARD-GENERIC-FUNCTION CAPI::FORCE-CHANGE-SIZE 
1080821A> again
   2 (abort) Return to level 0.
   3 Return to top loop level 0.

Type :b for backtrace, :c <option number> to proceed,  or :? for other 
options

CL-USER 90 : 1 >
============================================================

This is almost a show stopper for me now.  Is there a way around 
without having to resort to a tab-layout in callback mode?

Thanks

Marco


--
Marco Antoniotti					http://bioinformatics.nyu.edu
NYU Courant Bioinformatics Group		tel. +1 - 212 - 998 3488
715 Broadway 10th FL				fax. +1 - 212 - 998 3484
New York, NY, 10003, U.S.A.


Updated at: 2020-12-10 08:52 UTC