From: fgd3@nifty.UUCP (Fabbian G. Dufoe, III)
Newsgroups: comp.sys.amiga.programmer
Subject: Re: A Style Guide Question
Distribution: world
Date: 17 Nov 92 08:37:49 EST
Organization: Fabbian G. Dufoe, III

In article <17474@pitt.UUCP> dan@cs.pitt.edu (Dan Drake) writes:
>This is a style guide question.
>
>To be consistent in my user interface, I am using buttons called done and 
>cancel, that reside in all of my windows.  I want the user to be able to
>activate these buttons through their keyboard equivalents: eg d for done, 
>and c for cancel.  Now on several of these windows, I want the user to type
>text into a beveled box which I handle manually.  THe problem is that if the
>user wants to type a d or a c, there is some ambiguity concerning what 
>should happen.  Will the buttons be activated, or should the characters
>appear in the "textbox"?  I have 2 solutions, and would be interested in
>any other solutions or recommendations.
>
>1.) If a text box is active, the user must click on the buttons to activate
>them.  I consider this unacceptable because it ruins the orthogonality of
>the interface.  You can't have some things work in one window, and not in
>others.

   If your "text box" were a string gadget any text typed while the gadget
was active would go to the string gadget and not be picked up by the "Done"
and "Cancel" gadgets.  The keyboard shortcuts for the "Done" and "Cancel"
gadgets would work once the string gadget became unselected--which happens
when the user presses the "Return" key after his text entry is complete.  If
you have implemented your "text box" with something other than a string
gadget you should be careful to emulate that behavior.

>2.) Use (ALT|CTRL|right amiga) key to activate the buttons in all cases.
>Alt doesn't work because European languages use it.  Control is awkward
>for left handed people to use like me. (I like to keep one hand on the
>mouse, and one on the keyboard), Right Amiga is somewhat awkward too.

   The standard Amiga way to answer requesters from the keyboard is to use
the left Amiga key in conjunction with "v" for the gadget at the bottom left
of the requester and "b" for the gadget at the bottom right of the
requester.  If you would follow that convention you wouldn't have to worry
about when the user might type "c" or "d".

   You should not use unqualified keypresses for things which are
irrevocable.  Look at the following requester.

    ______________________________________
   |                                      |
   |  O Upper case search                 |
   |  O Lower case search                 |
   |                  _________________   |
   |  Search string: |_________________|  |
   |   ______                     ______  |
   |  |Search|                   |Cancel| |
   |  |______|                   |______| |
   |______________________________________|

You could use "U" and "L" as keyboard shortcuts for the two radio button
gadgets.  While the string gadget was activated the user could type strings
containing any number of Us and Ls with no problem.  No matter which search
mode the user selects (with the mouse or the keyboard equivalents) he can
change his mind freely.  It makes sense to allow unqualified keypresses for
those gadgets because the user can correct a keystroke that went wrong.  (He
might have pressed "U" without noticing that the "Search string" gadget was
not selected, for example.)  He can't change his mind after hitting either
the "Search" or "Cancel" gadgets, though.  It should require a more positive
action to select either of those gadgets to make it less likely that the
requester will be answered prematurely by an erroneous keystroke.  So the
keyboard equivalent for the "Search" gadget would be left-Amiga-v and the
keyboard equivalent for the "Cancel" gadget would be left-Amiga-b.

--Fabbian G. Dufoe, III
   350 Ling-A-Mor Terrace South   | GEnie:    F.DUFOE3
   St. Petersburg, Florida  33705 | internet: fgd3%nifty@tct.com
   813-823-2350                   | uucp:     ...tct!deep6!nifty!fgd3

Newsgroups: comp.sys.amiga.programmer