Newsgroups: comp.lang.smalltalk
Path: cantaloupe.srv.cs.cmu.edu!bb3.andrew.cmu.edu!newsfeed.pitt.edu!gatech!news.mathworks.com!nntp.primenet.com!news.sprintlink.net!news-stk-200.sprintlink.net!news.clark.net!noos.hooked.net!news.scruz.net!cruzio.com!news
From: "James A. Sawyer" <jas@cruzio.com>
Subject: Re: Tabbed Dialogs: Usability Information
Content-Type: text/plain; charset=us-ascii
Organization: Cruzio Community Networking System, Santa Cruz, CA
Date: Fri, 6 Sep 1996 22:00:03 GMT
Message-ID: <32309EE3.39C@cruzio.com>
X-Mailer: Mozilla 2.0 (Win95; U; 16bit)
Mime-Version: 1.0
X-Nntp-Posting-Host: kelp132.cruzio.com
Content-Transfer-Encoding: 7bit
References: <DwxMp9.Ar8@world.std.com>
Sender: news@cruzio.com (The News User)
Lines: 189

Jared M. Spool wrote:
> 
> Smalltalk Developers:  There have been discussions of Tabbed Dialogs
> recently.  I thought you'd find this article interesting.
> 
> The following article is a reprint, with permission, from Eye For
> Design, a newsletter dealing with interfaces and usability.
>...

I did - thankyou, and thanks to "Eye For Design".

I've had these same responses to many Tabbed Dialogues.  
  
  The disconnect is less drastic for global operations, 
  i.e. dialogs which modify the behavior of the application
  as a whole, but the problem cited with changing tab pages 
  affects globals as well.

I've also seen this same problem in other contexts,
  e.g. configuration management systems.

My own conclusion is that the solution centers on one key aspect
noted in the article:

>...
>
> When Do Changes Take Effect?
>
>...

An answer which matches my mental models
is "as late as possible, but no later",
defined as follows:

  1) Initiating a tabbed dialogue locks 
     the associated local 'selection' (if any)
     for the duration of the dialogue.

       [
        handles the problem cited in the article 
        regarding external mouse clicks used to escape 
        from a sub-dialogue.
       ]

  2) Changes to a given 'tab page' are 
       accumulated and
       deferred 
         until the user
	   
         a)explicitly  
               
             indicates 
               "apply these changes right now"
             by pressing a similarly labelled 'button'
                 
               (
                Said 'button' should of course be active
                only when 
                  'tab page' contents as displayed
                differ from 
                  'tab page' contents in effect
               )
               
             or
              
         b)implicitly 
                
             indicates
               "apply these changes right now" 
             by changing to another 'tab page'

               (
               Likewise, this implicit "indication" is active
                 only when
                   'tab page' contents as displayed
                differ from 
                  'tab page' contents in effect
               )
              
         at which point the accumulated changes
         are encapsulated and applied
         as a 'change set'.

       Changing to another 'tab page' 
         when
           the displayed contents 
         match 
           the contents in effect
       does not (of course)
         generate a 'change set'.

     [
      Handles the problems of
        changing tab pages, and
        spurious "about to ____, is this ok?" exchanges
     ]          
          
  3) Each 'tab page'
       a) maintains its own change history,
            as a sequence of 'change sets' 
          and
       b) provides interfaces 
            to 'undo' and
            to 'redo' 
          its changes, i.e. 'change sets'.
       
  4) Each local selection
       a) maintains its own change history,
            as a sequence of 
              [
                'tab page select'
               +
                'embedded tab page change set'             
              ]
            change sets 
          and
       b) provides interfaces 
            to 'undo' and
            to 'redo' 
          its changes, i.e. 'change sets'.

 5) The application as a whole
       a) maintains its own change history,
            as either
              1) a merged sequence of 
                   [
                     'local change dialogue'
                    or
                     'global change dialogue'
                   ]
                 change sets
                 or
              2) the pair
                 a) a sequence of ['local change dialogue'] change sets
                 b) a sequence of ['global change dialogue'] change sets
                 or
              3) both (1) and (2)
          and
       b) provides interfaces 
            to 'undo' and
            to 'redo' 
          its changes, i.e. 'change sets'.

  6) Embedded change sets and sequences thereof
       [in items (3) (4) and (5)]
     are of course 'undone' and 'redone' 
     by the embedded objects themselves.

  7) It is important (in matching my mental models)
     to implement 'undo' and 'redo' such that
     the past is inviolate.
   
     E.g. 
       repeatedly 
         'undo'ing and/or 'redo'ing a particular change history
           is (collectively) a read-only operation, and hence 
           is cancellable en masse,
             [e.g. by pressing 'Esc' or clicking on 'Cancel']
         whereas 
       the (implicit or explicit)
         application of
           the resulting 'net change' (of a sequnce of 'undo/redo's)
             constitutes
               a new
               single 'change', (or 'change set')
               and
             is appended to
               the appropriate change history.
            
     [
      (3,4,5,6 and 7) 
      handle the problems of
        user error recovery, and 
        model consistancy.
      The "maximum size (0-N)" of each history
        may require tuning to suit particular
        applications and/or user platforms. 
     ]            
            
  8) The above is much easier to describe and to contemplate
     in the context surrounding comp.lang.smalltalk.

Question: (to any objects persistant enough to have read this far)

  Does this formulation appear to match your mental models as well?
  If not, what would it take to do so?
             
===
-jas
