[comp.sys.atari.st] Designing HIs under GEM

jg@hpldola.HP.COM (Joe Gilray) (08/17/89)

I would like to start a discussion about human interface design under GEM.

Lately I've been building some dialog boxes for a GEM application, and
I got to thinking about the following:

1) Is there any standard "look and feel" for dialog boxes?  More than
   just Title at the top, buttons across the bottom?  For example
   I would like a single dialog to handle several different cases, so
   I turn off inappropriate Object sub-trees with the ob_flag HIDETREE
   bit.  Now each Object sub-tree has its own location in the box so
   when I turn some off there are "holes" in the box.  I could place
   different Object sub-trees in the same location (as long as they
   will NEVER be both visible at the same time) but I don't want to
   do this as I feel that the user will find it easier to learn and
   use the box if it is possible to associate a location with a
   function.  What do you think?

2) I also tend to use nested dialogs quite a bit.  I like to keep the
   amount of information on a given dialog limited (this can also be
   helpful in making a dialog multipurpose, i.e. useable in many
   different parts of an application).  Do you think that nested
   dialogs are too hard to use?  I know that they can be harder to
   write as you often have to allow the user to move up and down
   through the levels of dialog hierarchy and may have to offer
   the same function in several different boxes (i.e. Abort,
   finished, etc).

3) One of the reasons I use nested dialogs is a limit I think I've
   found in GEM, it appears that there must be less than 256 editable
   (FTEXT, FBOXTEXT) characters per box in GEM.  Has anyone else
   noticed this (I am using original ROM TOS)?  Is this fixed in
   QuickSt or TurboSt?


-Joe Gilray

jg@hpldola.HP.COM (Joe Gilray) (08/19/89)

First, thanks to those of you who have responded to my base note so far.
I look forward to some more interesting discussion.

Second, more in the HIs (or do you say GUIs) saga:

I wanted to create an FTEXT object which could be used two different
ways.  What I mean is that it could prompt the user for one field or
another.  For example, it might say
                                      Enter Category: ___
at one point or
                                      Name: ___
at another.

Note that the number of underscores in both cases is the same,
although in general I don't think they should have to be.

I tried to accomplish this in two ways (both really the same in essence):
Method One: copy directly into the Object tree before displaying the tree
    obspec = (TEDINFO *) (tree + THING)->ob_spec;
    strcpy(obspec->te_ptext, "@@@");
    strcpy(obspec->te_ptmplt, "Name: ___");

Method Two: (credit to Tim Oren and his PROGEM series) copy into a local
variable and then set Object to point to local variable
    obspec = (TEDINFO *) (tree + THING)->ob_spec;
    strcpy(localtext, "@@@");
	obspec->te_ptext = localtext;
	obspec->te_txtlen = strlen(localtext) + 1;
	strcpy(localtmplt, "Name: ___");
	obspec->te_ptmplt = localtmplt;
	obspec->te_tmplen = strlen(localtmplt) + 1;

Note that the te_pvalid string is not touched in either case, it is
left as it is the original Object tree - pointing to "XXX".

Neither method works, in both cases it appears that the edit takes
place on the box where the original Object tree thinks it should.
If the original tree had "MMM: ___" as a template and I replace
it (using methods one or two above) with "Name: ___" the dialog
will only show "Name: __" and the cursor will go off the end of
the two shown underscores, also sometimes the system will crash.
If I replace "MMM: ___" with "Name:___" (note missing space)
everything is fine.

What am I doing wrong, or not doing.

Thanks for any help!

Yours,
Joe Gilray

greg@bilbo (Greg Wageman) (08/19/89)

In article <11830048@hpldola.HP.COM> jg@hpldola.HP.COM (Joe Gilray) writes:
>
>I would like to start a discussion about human interface design under GEM.
>
>1) Is there any standard "look and feel" for dialog boxes?  More than
>   just Title at the top, buttons across the bottom?  For example
>   I would like a single dialog to handle several different cases, so
>   I turn off inappropriate Object sub-trees with the ob_flag HIDETREE
>   bit.  Now each Object sub-tree has its own location in the box so
>   when I turn some off there are "holes" in the box.  I could place
>   different Object sub-trees in the same location (as long as they
>   will NEVER be both visible at the same time) but I don't want to
>   do this as I feel that the user will find it easier to learn and
>   use the box if it is possible to associate a location with a
>   function.  What do you think?

The "look and feel" (ghod, how I hate that phrase.  Sounds like
something one does with a prostitute) of a GEM dialogue is pretty much
determined by GEM itself.  The various GEM objects (radio buttons,
TEDINFOs, BOXCHARs, etc.) each have a distinctive appearance and
behaviour.  I've yet to see a real GEM dialogue where the objects and
their operations weren't intuitively obvious.

As for hiding object trees and overloading dialogue boxes, I don't
personally find this a good idea.  More important even than object
location is familiarity with a particular dialogue as a whole.  I know
that I myself get to recognize certain dialogues when they appear, and
don't have to stop to thing about what I'm being asked and what I need
to do when one appears.  Changing a dialogue on-the-fly would lead to
a longer learning curve and slower operation for the user, and doesn't
make your own code any shorter.

Besides, GEM provides the ability to "grey-out" objects and make them
unselectable.  This is the appropriate way to indicate an invalid
selection in a dialogue.  This preserves the appearance of the
dialogue while disallowing inappropriate selections.

>2) I also tend to use nested dialogs quite a bit.  I like to keep the
>   amount of information on a given dialog limited (this can also be
>   helpful in making a dialog multipurpose, i.e. useable in many
>   different parts of an application).  Do you think that nested
>   dialogs are too hard to use?  I know that they can be harder to
>   write as you often have to allow the user to move up and down
>   through the levels of dialog hierarchy and may have to offer
>   the same function in several different boxes (i.e. Abort,
>   finished, etc).

I see nothing wrong with nesting dialogues as long as the nesting
isn't gratuitous.  In other words, don't split a dialogue just to make
it appear more "flashy".

>3) One of the reasons I use nested dialogs is a limit I think I've
>   found in GEM, it appears that there must be less than 256 editable
>   (FTEXT, FBOXTEXT) characters per box in GEM.  Has anyone else
>   noticed this (I am using original ROM TOS)?  Is this fixed in
>   QuickSt or TurboSt?

I can't recall reading about any such restriction, but that doesn't
mean one doesn't exist.  However, you say nothing about what
programming environment you are using.  255 is exactly the largest
unsigned integer that can be represented in a byte.  You aren't using
a language that encodes string length in a leading byte, are you?  (No
K&R standard C language does this; C strings are arbitrarily long and
null-terminated.  Perhaps BASIC or Pascal?)

Greg Wageman			DOMAIN: greg@sj.ate.slb.com
Schlumberger Technologies	UUCP:   {uunet,decwrl,amdahl}!sjsca4!greg
1601 Technology Drive		BIX:    gwage
San Jose, CA 95110-1397		CIS:    74016,352
(408) 437-5198			GEnie:  G.WAGEMAN
------------------
Opinions expressed herein are solely the responsibility of the author.

rosenkra@hall.cray.com (Bill Rosenkranz) (08/19/89)

In article <11830048@hpldola.HP.COM> jg@hpldola.HP.COM (Joe Gilray) writes:
=
=I would like to start a discussion about human interface design under GEM.

this should be fun :^)


=1) Is there any standard "look and feel" for dialog boxes?  More than
=   just Title at the top, buttons across the bottom?  For example

what u describe is more like an alert box, which are trivial to use. they
are subsets of dialog boxes and good for yes/no type input. i generally
use them only to warn the user of some condition he should be aware of
(do you REALLY want to quit and loose all your data?).

=
=2) I also tend to use nested dialogs quite a bit.  I like to keep the
	
in a word: don't. design your program to have as much information as
possible in one spot, i.e. make it as modeless as possible. if you can
design your program so a user can get from one place to the desired
action in one move, it is far easier to use. in fact, if you can design
your program to have but one evnt_multi loop, it will be very easy
for the user to do what he wants to do, quickly. ST users really
appreciate that. i used to use zillions of alert boxes to tell users
what (i thought) they needed to know. i now opt for an asynchronous
message box in some static location on the screen, always there, which
gives the user info but does not require action (like click or key).

=3) One of the reasons I use nested dialogs is a limit I think I've
=   found in GEM, it appears that there must be less than 256 editable
=   (FTEXT, FBOXTEXT) characters per box in GEM.  Has anyone else
=   noticed this (I am using original ROM TOS)?  Is this fixed in
=   QuickSt or TurboSt?

i have not heard this and doubt it is true. i can't see how it matters
since the resources are just strings. i have used dialogs with at least
200 objects which to me seemed like a lot, even in a code with over
50000 lines. half of them were FBOXTEXTs. if there is such a limit, it
would be in the form_do code. find tim oren's tutorial series. he has
a form_do source which you can hack if this is in fact the case.
the standard form_do is pretty lame anyway, especially if you do anything
serious (commercial). form_do is ok for run-of-the-mill stuff, but
you'd be better off in the long run rolling your own. besides, you'll
learn more about how things work. i hacked up form-do to do nested
menus (which were just dialogs, one on top of the others).

user interface is religion. just ask apple :^) expect this discussion
to get rather bloody...

=-Joe Gilray


-bill rosenkranz
rosenkra@boston.cray.com

klute%trillian.irb@unido.uucp (Rainer Klute) (08/26/89)

In article <11830048@hpldola.HP.COM> jg@hpldola.HP.COM (Joe Gilray) writes:
>2) I also tend to use nested dialogs quite a bit.  I like to keep the
>   amount of information on a given dialog limited (this can also be
>   helpful in making a dialog multipurpose, i.e. useable in many
>   different parts of an application).  Do you think that nested
>   dialogs are too hard to use?  I know that they can be harder to
>   write as you often have to allow the user to move up and down
>   through the levels of dialog hierarchy and may have to offer
>   the same function in several different boxes (i.e. Abort,
>   finished, etc).

The amount of information displayed in a dialog box is limited
by the maximum size of the dialog box itself: the screen size.
This should not be too much for the user to survey provided:

a) a normal monitor is used (like the SM124, not those 19'' ones),

b) the small font is not used (extensivly),

c) the dialog box itself is well structured and clear,

d) buttons etc. carry a good description of what they stand
   for, no acronyms.

Nested dialogs have the disadvantage that you see only a part
of the underlying dialog box(es) and so you do not have the
full information at hand. Personally I try to avoid them as
long as the dialog box fullfills the above mentioned conditions.

However, in my new version of Arcgsh (coming in a few weeks on
comp.binaries.atari.st) I had some problems with a dialog box
which takes the parameters for Zoo. Well, Zoo parameters are
that complex that they simply do not fit into a dialog box of
(nearly) screen size. So I took the text edit fields for
filename parameters out and "swapped" them to an extra dialog
box which shows up when the user clicks a button named
"Filenames..." in the main dialog box.

  Rainer Klute           ----    klute@trillian.irb.informatik.uni-dortmund.de
  Univ. Dortmund, IRB    |)|/    klute@unido.uucp, klute@unido.bitnet
  Postfach 500500        |\|\    ...uunet!mcvax!unido!klute
D-4600 Dortmund 50       ----    Tel.: +49 231 7554663

jg@hpldola.HP.COM (Joe Gilray) (08/29/89)

Some seem to dislike the idea of nested dialogs, and I concur that they
can complicate unnecessarily.  The reason I am using them (besides the
unsubstantiated 255 editable character limit that I mentioned earlier) is
that for my application, the user will be creating a "header" with an
unlimited number of "attachments".  The header dialog box will allow the
user to enter header information, then upon clicking a button the user
will be offered a box (box 2) to enter a single attachment.  Another click
and the user can return to the header, exit, or add another attachment
(in which case s/he will be offered another box 2).  You see, this could
not be achieved easily with a single box (I have thought of having a single
box with an "attachment" section, which could be redrawn, but this
is essentially the same as what I've described above, and uglier I think,
(what do you think?)). <---- nested parentheses!!!!

About the 255 editable (FTEXT or FBPOXTEXT) character limit per box that
I mentioned earlier, I am using MWC (v3.0.6), the MW resource constructor,
and original ROM TOS (v1.0?).  Am I the only one who has noticed this?
What might I be doing wrong?  Any suggestions as to how I might test to
be sure this is the problem?

Thanks for any help
-Joe Gilray

saj@chinet.chi.il.us (Stephen Jacobs) (08/30/89)

In article <11830050@hpldola.HP.COM>, jg@hpldola.HP.COM (Joe Gilray) writes:
> 
> About the 255 editable (FTEXT or FBPOXTEXT) character limit per box that
> I mentioned earlier, I am using MWC (v3.0.6), the MW resource constructor,
> and original ROM TOS (v1.0?).  Am I the only one who has noticed this?
> What might I be doing wrong?  Any suggestions as to how I might test to
> be sure this is the problem?
>
I constructed a resource file with about 10 trees and a lot of editable fields
within dialogs using resource.prg.  It gave some funny behavior.  When
decompiled with the utility provided by Mark Williams Company, it had some
obvious errors, and an attempt to compile the decompiled file crashed my
ST.  The people at Mark Williams Company have identified the problem (although
they didn't seem anxious to tell me what it was: I suspect it involves the
cavalier treatment of default text, validation strings and templates).  They
tell me it took some unusual bad luck to activate it, and that it will be fixed
in the next release.  Until then, whenever a resource constructed with the
Mark Williams resource construction program behaves strangely, it's probably
a good idea to look at what it decompiles to.  Look particularly for trees
with duplicate (and incorrect) names >in the decompilation<.
                                Steve J.
 

krs@stag.UUCP (Kent Schumacher) (09/05/89)

[jg@hpldola.HP.COM (Joe Gilray) writes...]

> Some seem to dislike the idea of nested dialogs, and I concur that they
> can complicate unnecessarily.  The reason I am using them (besides the
> unsubstantiated 255 editable character limit that I mentioned earlier) is
> that for my application, the user will be creating a "header" with an
> unlimited number of "attachments".  The header dialog box will allow the
> user to enter header information, then upon clicking a button the user
> will be offered a box (box 2) to enter a single attachment.  Another click
> and the user can return to the header, exit, or add another attachment
> (in which case s/he will be offered another box 2).  You see, this could
> not be achieved easily with a single box (I have thought of having a single
> box with an "attachment" section, which could be redrawn, but this
> is essentially the same as what I've described above, and uglier I think,
> (what do you think?)). <---- nested parentheses!!!!
> 
> [...stuff deleted...] 
> 
> Thanks for any help
> -Joe Gilray

I recently finished up a contract writing program for a client of mine.

The contract consisted of a header area (i.e. customer name, etc...),
from 0-25 products, and a footer (i.e. totals, notes, etc...).

I think this compares somewhat to your need.  What I did, was to install
the dialog in a window, and hide any unused products.

Put another way, when a new contract is initiated, all that is seen is
the header info in a sizeable (sizeable as in 'able to do sizing') 
window with sliders.

If the user invokes an add product function (via menu, function key,
alt key, or screen button), the program unhides one of the product 
sub-trees, shifts the y-coordinate of the footer down a little, and forces
a redraw of the window area.

Note that this is somewhat harder than simply calling form_do(), but not
prohibitively so, and the code developed for handling dialogs in windows 
is very useful to have around (because it can be made to be as generic as
form_do() is).

In my application, the on screen version of the contract was very similiar
to the printed out version.  This was a big plus in my clients eyes.

                                     +   +
                                       ^
                                       o


  - Kent Schumacher                  /* "A member of STdNET-         */
    ardvar!krs@stag.UUCP             /*  The ST developers network  */