CLIM mail archive


Acceptance of Accepting Values Panes

Some time ago Daniel D Suthers made some remarks concerning
accept values dialogues:

  Date: Mon, 29 Nov 1993 15:05:01 -0500 (EST)
  From: Daniel D Suthers <>

   My users (real users, not hackers) find it *very* unintuitive to 
    1. have to click on a field before they can edit it
    2. have to hit Return after #1 before being able to select the exit box 
   #1 is solved by :initially-select-query-identifer, but they still have
   to hit Return before the exit box is mouse-selectable.

In my opinion, the problem is, that "real users" (no Lisp machine 
background, no time to struggle with user interfaces, etc.)
seem to prefer MODELESS input strategies.

My solution has been to use gadgets almost exclusively in order
to achieve modeless behavior with Accept Values Panes. (At the cost
of having no completion etc.)

Some user testing showed, that 

    1. Users don't want to move the pointer into a text-field if
       there's only one at all. They immediately start typing
       if the pointer is already in the AVPane.
        -- This has disturbing consequences: Characters are printed
       somewhere into the AVP itself or into other Panes, only Control-Z
       will lead out of this. 
    2. Users want to type <Return> instead of clicking the OK Button
For 1. it would be nice if the programmer could specify, into what accept
"blank area input" should go. If this accept shows up as text-field,
it's default should initially be drawn as selected (reversed).
(This is quite similar to :initially-select-query-identifer)

2. could be generalized to allow keystrokes for accept-values-command-buttons. 
Is it possible to associate an accept-values-command-button 
with an ordinary command? Then, keystrokes could be given in

Any suggestions?

Frank Buhr

A tiny example for illustration (pretend being a "real user" as
described above...)

(in-package "CLIM-USER")

(define-application-frame test ()
  ((string :initform "this is the default")
   (status :initform nil))
    :height '(2 :line) :min-height '(2 :line) :max-height '(2 :line)
    :display-function 'display-status
    :incremential-redisplay nil
    :scroll-bars nil)
      :displayer display-pane
      :resynchronize-every-pass t)))
   (:pointer-documentation t)
	(vertically () 

(define-test-command (com-quit :menu t :name t) ()
  (frame-exit *application-frame*))

(defun display-status (frame stream)
  (with-slots (status) frame
    (when status
      (format stream "~A" status))))

(defun display-pane (frame stream)
  (with-slots (string status) frame
    (setf string
      (accept 'string
	      :stream stream 
	      :default string
	      :prompt "String"
	      ;;:view `(text-field-view :width 450)
      (terpri stream)
      (terpri stream)
    (formatting-table (stream)
      (formatting-row (stream)
	(formatting-cell (stream)
	      (stream) " OK " (setf status string)))
	(formatting-cell (stream)
	      (stream) " Reset "(setf string status)))))))

(format t "(find-application-frame 'test :own-process nil :create :force)")



Main Index | Thread Index