CLIM mail archive



Hello CLIMers,

I have just another problem with accept inside an accepting value.
It works fine, if you enter values from the wanted presentation-type,
but it works not very fine, if you enter wrong-type values
(e.g. 1/2 where CLIM expects an integer) CLIM writes:

   The input read, 1/2, was not an integer.
   Please edit your input.


O.K. But any other output (of other accepts in the same accepting-value-macro)
is over-written. That doesn't look very nice.

To get the feeling just start the test-code (from the CLIM-manual), click on
'Set Time' and enter 1/2 for month.

Any hints to avoid this effect?

Future thanks, Ralf.

P.S.: The test-code

;;; -*- Package: CLIM-USER; Syntax: Common-Lisp; Base: 10 -*-

(defun reset-clock (stream)
  (multiple-value-bind (second minute hour day month)
      (decode-universal-time (get-universal-time))
    (declare (ignore second))
    (format stream "Enter the time~%")
	(clim:accepting-values (stream)
	  (setq month (clim:accept 'integer :stream stream :default month :prompt "Month"))
	  (terpri stream)
	  (setq day (clim:accept 'integer :stream stream :default day :prompt "Day"))
	  (terpri stream)
	  (setq hour (clim:accept 'integer :stream stream :default hour :prompt "Hour"))
	  (terpri stream)
	  (setq minute (clim:accept 'integer :stream stream :default minute :prompt "Minute")))
	(format t "~%New values: Month: ~D, Day: ~D, Time: ~D:~2,'0D."
		month day hour minute))
      (abort () (format t "~&Time not set")))))

(define-application-frame myapp ()
  (:panes ((menu :command-menu)
	   (main :application
		 :scroll-bars nil		      ; :vertical
		 :display-function 'display-main
		 :display-after-commands nil)
	   (interactor :interactor)))
       (:column :rest
	(menu :compute)
	(main 3/4)
	(interactor :rest))))))

(defmethod display-main ((frame myapp) stream)
  (declare (ignore stream)))

(define-myapp-command (com-myapp-set-time :name t :menu "Set Time") ()
  (reset-clock (get-frame-pane *application-frame* 'main)))

(define-myapp-command (com-myapp-exit :name t :menu "Exit") ()
  (let ((window (frame-top-level-window *application-frame*)))
    (window-clear window)
    (setf (window-visibility window) nil)
    (window-visibility window)
    (frame-exit *application-frame*)))

(defvar *clim-root* (clim:open-root-window :sheet))

(defun run ()
  (let ((tach (clim:make-application-frame 'MYAPP :parent *clim-root*
					  :left 50 :right 850 :top 50 :bottom 700)))
    (setf (output-recording-stream-output-record (get-frame-pane tach 'main))
	  (make-instance 'clim::linear-output-record))
    (process:process-run-function "task" #'clim:run-frame-top-level tach)))

Main Index | Thread Index