CLIM mail archive


Re: accepting-values and exit-boxes

    Date: Mon, 24 Aug 1992 17:21 EDT
    From: Jeff Morrill <jmorrill@BBN.COM>

      Date: Mon, 24 Aug 1992 15:47-0400
      From: Scott McKay <>
      Subject: accepting-values and exit-boxes
      To:, clim@BBN.COM
	  Date: Tue, 11 Aug 1992 19:19 EDT
	  From: Clinton Hyde <>
	  is Accepting-values only allowed to have the two exit-boxes :exit and
	  I'd really like to have three, and attach some behavior to them.
      CLIM 2.0 allows you to extend the types of exit boxes.  The typical
      types are :exit, :abort, and :help.

    Can you elaborate a bit?  For example, I can imagine wanting to:
     1.  have just one choice, :exit
     2.  associate an arbitrary function call with an exit button
	 (I presume that's what :help would do, rather than being a true "exit" button)
     3.  associate a drawing function, rather than a string name, with an exit button,
	 so that the button is graphical rather than textual
     4.  assign the button a pointer documentation string
     5.  put the buttons somewhere else besides the bottom (yikes!)

     6.  I would also like to make the kind of dialog box that is merely a couple
	 of exit boxes, as in:

	 Wait!  You are about to cause a nuclear meltdown.  Do it anyway?
	 OK  Cancel

	 And have the #\Return character activate a default choice.  I don't
	 know if accepting values is the right way to do this or not.

    jeff morrill

The default methods are the following.  They can all be specialized to
do whatever you want, really.  (I realize this is kind of a vague
answer, but I', trying to catch up on all my mail, etc.)

(defmethod frame-manager-default-exit-boxes ((framem standard-frame-manager))
  '((:abort) (:exit)))

(defmethod frame-manager-exit-box-labels 
	   ((framem standard-frame-manager) frame view)
  (declare (ignore frame view))
  '((:exit   "Exit")
    (:abort  "Cancel")))

(defmethod display-exit-boxes ((frame accept-values) stream (view view))
  ;; Do the fresh-line *outside* of the updating-output so that it
  ;; doesn't get repositioned relatively in the X direction if the
  ;; previous line gets longer.  Maybe there should be some better
  ;; way of ensuring this.
  (fresh-line stream)
  (let ((labels (frame-manager-exit-box-labels (frame-manager frame) frame view)))
    (updating-output (stream :unique-id stream :cache-value 'exit-boxes)
      (with-slots (exit-boxes) frame
	(dolist (exit-box exit-boxes)
	  (let* ((value (if (consp exit-box) (car exit-box) exit-box))
		 (label (or (and (consp exit-box) (second exit-box))
			    (second (assoc value labels)))))
	    (with-output-as-presentation (stream value 'accept-values-exit-box)
	      (write-string label stream)
	      (if (eq value ':abort)
		  ;; Kludge to print the cloverleaf char in MCL.
		  ;; Needs an accompanying kludge in STREAM-WRITE-CHAR so that
		  ;; #\CommandMark doesn't get lozenged.
		    (with-text-style (stream '(:mac-menu :roman :normal))
		      (write-char #\CommandMark stream))
		    (write-string "-. aborts" stream))
		  (write-string label stream)))
	    (write-string " " stream)))))))


Main Index | Thread Index