CLIM mail archive

[Prev][Next][Index][Thread]

Panes that are not in the current layout have no medium?




CLIM 2.0-beta on LispWorks 3.2.21-beta-4
CLIM 2.0 on Allegro 4.2

Apparently, in CLIM 2.0 (unlike in CLIM 1.1) a pane that is not listed
in the frame's current pane layout has no medium.  Hence, one cannot
draw any output on such a pane (or into its output history), even with
the :DRAW output recording option set to NIL.  This seems a bit
constraining.  It means that I cannot keep any hidden panes up to date
via output recording.  Instead, whenever I write to such a pane I have
to enclose it in a

(when (clim:sheet-medium hidable-pane-stream) ...)

and I must in some other way keep track of everything I want recorded
on that pane.  Is this correct?

An example is attached.  Invoke the Switch Layout command, then
attempt to execute the Write Something command.


        Lawrence G. Mayka
        AT&T Bell Laboratories
        lgm@iexist.att.com

Standard disclaimer.

---
(in-package :cl-user)

(defpackage dead-pane (:use))

(clim:define-application-frame dead-pane ()
  ()
  (:panes
   (application-a :application
                  :label "Application A"
                  :width 700
                  :height 150)
   (application-b :application
                  :label "Application B"
                  :width 700
                  :height 150)
   (interactor :interactor
	       :label "Interactor"
	       :width 700
	       :height 150))
  (:layouts
   (layout-a (clim:vertically ()
                              application-a
                              application-b
                              interactor))
   (layout-b (clim:vertically ()
			      application-a
			      interactor))))

(define-dead-pane-command (dead-pane::quit :name t :menu t) ()
   (clim:frame-exit clim:*application-frame*))

(define-dead-pane-command (dead-pane::switch-layout :name t :menu t) ()
   (let* ((frame clim:*application-frame*)
          (old-layout (clim:frame-current-layout frame))
          (new-layout (if (eql old-layout 'layout-a) 'layout-b 'layout-a)))
     (setf (clim:frame-current-layout frame) new-layout)))

(define-dead-pane-command (dead-pane::write-something :name t :menu t) ()
   (let* ((frame clim:*application-frame*)
          (appl-a-stream (clim:get-frame-pane frame 'application-a))
          (appl-b-stream (clim:get-frame-pane frame 'application-b)))
     (format appl-a-stream "This is Application A.~%")
     (clim:with-output-recording-options (appl-b-stream
                                          :draw (clim:sheet-medium appl-b-stream))
       (format appl-b-stream "This is Application B.~%"))))

Follow-Ups:

Main Index | Thread Index