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 <email@example.com>
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
A tiny example for illustration (pretend being a "real user" as
(define-application-frame test ()
((string :initform "this is the default")
(status :initform nil))
:height '(2 :line) :min-height '(2 :line) :max-height '(2 :line)
(define-test-command (com-quit :menu t :name t) ()
(defun display-status (frame stream)
(with-slots (status) frame
(format stream "~A" status))))
(defun display-pane (frame stream)
(with-slots (string status) frame
;;:view `(text-field-view :width 450)
(stream) " OK " (setf status string)))
(stream) " Reset "(setf string status)))))))
(format t "(find-application-frame 'test :own-process nil :create :force)")
Main Index |