Re: [Usability] RFC: Revision of HIGs "Check Boxes" section




On 25 Jul 2008, at 23:42, Matthew Paul Thomas wrote:

Hi Calum (and everyone)

I have written a revision of the "Check Boxes" section of the HIGs.
Patch attached.

Will do my best to review this properly this week (didn't get a chance last week), but it does re-raise the question of what we should do with contributions like this, at this point...

My guess is there probably isn't going to be another release of the HIG in its current format... so while I'd be happy for you to commit your proposed changes straight into the unstable draft for tidying up at the pre-release-editing stage, I'm not sure if they'll ever see the light of day that way.

Or you could add them straight into the stable version as well, but that seems to be somewhat contrary to its "stable" tag. People might well ask why we were making this change now, but not pulling in any of the others from the unstable draft.

Or you could file your changes in bugzilla, but we all know how often I/we get around to reviewing and closing out bugzilla HIG bugs :/

Or we could start up some sort of process on live.gnome.org, where proposed changes like this are posted, reviewed, edited, whatever before being pulled into the HIG... but I don't really see that being hugely more effective than bugzilla. (You might as well toss stuff into a big black hole as onto a wiki, IMHO...)

Any thoughts? Maybe we should just make one last concerted effort to tidy up the current draft, splat a few HIG bugzilla bugs in the process, and push that out as the last "HIG 2.x" before heading for a brave new HIG world, whatever that might look like.

Oh, and re the screenshots-- I'm actually still in the process of updating all the screenshots with new ones we got from last year's GHOP efforts. I'm doing this on the stable version first, though-- I know that's a bit arse-backwards, but hopefully it'll be feasible to merge those changes into the unstable branch afterwards, if we decide it still has a future. I apologise for sucking at this particular task[1], but it's a bit tedious so I've only been doing it in small doses.

Cheeri,
Calum.


[1] But l.g.o kind of sucks a bit too, for not making the changes show up on the website as often as one might like. And indeed for not easily allowing the draft HIG to be visible on the website too, for everyone to read/review-- so that's still hosted on developer.gnome.org in the meantime, while the code is in gnome-devel- docs... all a bit untidy, really...

Cheeri,
Calum.



Over two years ago, on 10 May 2006 at 15:45, Calum Benson wrote:

On 10 May 2006, at 15:39, Matthew Paul Thomas wrote:

I'd like to revise this section to fix all these issues. Is that ok?

["These issues" are listed in
<http://mail.gnome.org/archives/usability/2006-May/msg00060.html>.]

These all sound fine to me. Some of them probably apply to (at least)
the radio buttons section too, so feel free to fix those while you're
at it :)
...

So, I finally got around to doing this. :-) I got annoyed by advising
against the same mistakes repeatedly in Bugzilla and mailing lists, so
my revision concentrates heavily on those common mistakes and what to do
instead. The Windows Vista guidelines also do this, but much more
verbosely, and they also make unwarranted special exceptions for poor
uses of checkboxes in Windows Vista and in Microsoft Office. (For this
reason, I include an explicit warning for the benefit of developers who
may be coming from Windows.) The Apple HIGs aren't particularly useful
for checkboxes at all -- they contain few guidelines except for layout.

My patch is incomplete, because it is missing illustrations. It is also rather noisy, because I have taken the opportunity to rename "check box"
to "checkbox" throughout.

So for the purpose of discussion on the mailing list, here's my proposed
revision in plain text.

   = Checkboxes =

   A checkbox is used to control something that can obviously be on
   or off.

   == Text ==

   A checkbox should always have a label, and (except in the rare
   case of a grid of checkboxes) the label should always be to the
   right of the checkbox itself. (In a multi-column listbox, one
   column may contain the labels for checkboxes in previous
   columns.)

   A checkbox label should convey the effect the checkbox has when
   checked. The effect of the unchecked state should be obvious
   without any extra text. (If the label contains the word “all”,
   “always”, “default”, or “only”, the unchecked state probably
   *isn’t* obvious.) If it cannot be made obvious by rewording the
   label, use a pair of radio buttons instead. When deciding this,
   consider the target audience and situation. For example, in an
   assistant a pair of radio buttons will be better than a
   checkbox more often than usual, since people will often be
   unfamiliar with the choices being offered.

   The checked state of a checkbox should be understandable as
   something positive. Never use a checkbox label beginning “Don’t”
   or “Do not”, and avoid using a checkbox label beginning “Hide”,
   “Ignore”, or similar. Try reversing the effect of the checkbox
   so the label can be positive.

       Windows Vista guidelines offer “Don't show this message
       again” as an example of a correctly labelled checkbox.
       Don’t use a checkbox like this in Gnome software,
       because it would have a negatively-worded label, because
       it would not be obvious how to turn the message back on
       later, and because it suggests the message was annoying
       in the first place. Instead, if a message is truly
       necessary, present it unobtrusively enough that it
       doesn’t need to be optional.

   Don’t begin a checkbox label with “Enable”, and be careful if
   beginning it with “Use”. Labels like this are usually
   unnecessarily indirect, and often introduce a jargon term that
   people shouldn’t need to know. If practical, reword the label
   to convey what the checked state actually achieves. Don’t use a
   checkbox merely to advertise a feature that should always be
   turned on anyway.

   A checkbox label should use sentence case, but should not end in
   a period. (It may end in a colon, if it doubles as the label for
   a dependent control whose label normally ends in a colon.) The
   label should be no longer than about ten words, and should not
   wrap to multiple lines at typical window sizes. If the label is
   a complete clause, express it as a command (imperative) rather
   than a description (indicative). For example, not “Sound plays
   when a message arrives” but instead “Play a sound when a message
   arrives”.

   Avoid including an explanation or advice inside a checkbox
   label, and don’t give a checkbox a tooltip. If extra information
   is necessary, present it as a sentence in a smaller font (not in
   italics) aligned underneath the label. (This time the indicative
   form is appropriate, with the checkbox as the implied subject.)
   Even better, try shortening the explanation or advice enough
   that it can be used as the label itself, replacing the existing
   one.

   If necessary, a group of related checkboxes may have an extra
   label introducing them. This label should be in sentence case,
   and end with a colon. Avoid repeating the first word in several
   checkboxes in a group; instead, include this word in the label
   for the group.

   In help text or support materials, refer to a checkbox as a
   “box” that someone may “check” or “clear”.

   == Layout ==

   Arrange a group of checkboxes in a single column, unless a
   horizontal or multi-column arrangement suits the window much
   better. If there is a label for the group as a whole, place it
   either above the group, or to the left of the first checkbox,
   depending on the layout of the rest of the window.

   Avoid presenting more than about eight checkboxes as a single
   group. If this is unavoidable, or if the number of checkboxes is
   dynamic (for example, a list of plug-ins), present them in a
   scrollable list box.

   == Behavior ==

   Clicking a checkbox, or its label, toggles its state. Don’t
   perform any action *other than* toggling the state; for example,
   don’t open a dialog when a checkbox is checked. If a checkbox
   turns on something that demands further configuration, and it is
   not possible for that configuration to have a sensible default,
   instead of a checkbox use a button to open a dialog for
   configuring and confirming the function.

   For example, a backup function might have “Backup is off.” text,
   followed by a “Turn On Backup…” button that opens a secondary
   dialog. Once the configuration is complete, the text might
   change to summarize the configuration, and the single button
   might be replaced by “Settings…” and “Turn Off Backup” buttons.

   == Mixed-state checkboxes ==

   When a checkbox represents a property that is turned on for some
   parts of the current selection, but off for other parts, the
   checkbox should appear in its mixed state. For example, where
   multiple files are selected in Nautilus, an emblem that has been
   applied only to some of the selected files is represented by a
   mixed-state checkbox in the Properties window.

   Clicking a mixed-state checkbox cycles between the mixed state,
   the fully checked state, the unchecked state, and back to the
   mixed state (restoring the original values), in that order.

   Don’t use a mixed-state checkbox for any other purpose. For a
   property that normally has three possible states, use three
   radio buttons or an option menu instead.


If this revision is acceptable, please let me know what I need to do to
generate a proper ChangeLog entry etc.

Cheers
--
Matthew Paul Thomas
http://mpt.net.nz/


---AV & Spam Filtering by M+Guardian - Risk Free Email (TM)---
Index: C/hig-ch-toolbars.xml
===================================================================
--- C/hig-ch-toolbars.xml	(revision 551)
+++ C/hig-ch-toolbars.xml	(working copy)
@@ -152,7 +152,7 @@
	
      </listitem>
	
- <listitem><para>If your application has a single toolbar, allow the user to turn it on or off with a <menuchoice><guimenu>View</guimenu><guimenuitem>Toolbar</ guimenuitem></menuchoice> check box menu item.</para></listitem> + <listitem><para>If your application has a single toolbar, allow the user to turn it on or off with a <menuchoice><guimenu>View</guimenu><guimenuitem>Toolbar</ guimenuitem></menuchoice> checkbox menu item.</para></listitem>
	
<listitem><para>If your application has two or three toolbars, allow the user to turn them on or off individually by placing a menu item for each one on the application's <guimenu>View</guimenu> menu. For example, <guimenuitem>Main Toolbar</guimenuitem>, <guimenuitem>Drawing Toolbar</guimenuitem>, <guimenuitem>Formatting Toolbar</guimenuitem>. Place the items together in a single group on the menu, with <guimenuitem>Main Toolbar</guimenuitem> first (if your application has one), followed by the others in alphabetical order.</para></listitem>
	
Index: C/hig-ch-menus.xml
===================================================================
--- C/hig-ch-menus.xml	(revision 551)
+++ C/hig-ch-menus.xml	(working copy)
@@ -199,7 +199,7 @@

<listitem><para>Order items within a group logically, numerically, in task order or by expected frequency of use, as appropriate.</para></listitem>

- <listitem><para>Only place one type of menu item in each group — <link linkend="menu-item-type-command">command</link>, <link linkend="menu-item-type-mutable">mutable</link>, <link linkend="menu- item-type-check">check box</link> or <link linkend="menu-item-type- radio">radio button</link>. For example, do not place commands (such as <menuchoice><guimenu>View</guimenu><guimenuitem>Reload</ guimenuitem></menuchoice>) and settings (such as. <menuchoice><guimenu>View</guimenu><guimenuitem>Toolbar</ guimenuitem></menuchoice>) in the same group.</para></listitem> + <listitem><para>Only place one type of menu item in each group — <link linkend="menu-item-type-command">command</link>, <link linkend="menu-item-type-mutable">mutable</link>, <link linkend="menu- item-type-check">checkbox</link> or <link linkend="menu-item-type- radio">radio button</link>. For example, do not place commands (such as <menuchoice><guimenu>View</guimenu><guimenuitem>Reload</ guimenuitem></menuchoice>) and settings (such as. <menuchoice><guimenu>View</guimenu><guimenuitem>Toolbar</ guimenuitem></menuchoice>) in the same group.</para></listitem>

	    </itemizedlist>	
	</sect2>
@@ -247,27 +247,27 @@
	<itemizedlist><title>Guidelines</title>
<listitem><para>If your mutable menu items are <link linkend="menu- item-type-command">command items</link>, and you have sufficient space on your menu, consider providing two adjacent menu items for the commands instead. Then make the items sensitive or insensitive as the situation demands. This also makes it easier for the user to tell when different shortcuts are available for each of the commands, for example <keycombo><keycap>Ctrl</keycap><keycap>R</ keycap></keycombo> for <guimenuitem>Reload</guimenuitem>, and <keycap>Esc</keycap> for <guimenuitem>Stop</guimenuitem>.</para></ listitem>

- <listitem><para>Do not use mutable menu items to toggle a two- state setting (for example, <guimenuitem>Show Toolbar</guimenuitem> and <guimenuitem>Hide Toolbar</guimenuitem>). Present such items as a single <link linkend="menu-item-type-check">check box item</link> instead.</para></listitem> + <listitem><para>Do not use mutable menu items to toggle a two- state setting (for example, <guimenuitem>Show Toolbar</guimenuitem> and <guimenuitem>Hide Toolbar</guimenuitem>). Present such items as a single <link linkend="menu-item-type-check">checkbox item</link> instead.</para></listitem>
	</itemizedlist>

	</sect3>
	<sect3 id="menu-item-type-check">
	  <title>Checkbox Items</title>

- <figure id="checkbox-items-figure"><title>A group of check box items on a menu</title> + <figure id="checkbox-items-figure"><title>A group of checkbox items on a menu</title>
	  <mediaobject>
<imageobject><imagedata fileref="images/menus-checkbox- group.png" format="PNG" width="231" depth="112"/></imageobject> <imageobject><imagedata fileref="images/menus-checkbox- group.eps" format="EPS"/></imageobject> - <textobject><phrase>Screenshot of group on a View menu containing four check box items: Main Toolbar, Side Pane, Location Bar and Status Bar</phrase></textobject> + <textobject><phrase>Screenshot of group on a View menu containing four checkbox items: Main Toolbar, Side Pane, Location Bar and Status Bar</phrase></textobject>
	  </mediaobject>
	</figure>

- <para>A check box menu item shows the current state of a two- state setting, and allows the user to toggle it by selecting the menu item.</para> + <para>A checkbox menu item shows the current state of a two- state setting, and allows the user to toggle it by selecting the menu item.</para>

	<itemizedlist><title>Guidelines</title>
	
- <listitem><para>Use a check box menu item only when it is obvious from the label what the set and unset states mean. This usually means that the two states are logical or natural opposites, such as &quot;on&quot; and &quot;off&quot;. If this is not the case, use two <link linkend="menu-item-type-radio">radio button items</link> instead.</para></listitem> - <listitem><para>Never change the label of a check box menu item in response to the user selecting the item.</para></listitem> + <listitem><para>Use a checkbox menu item only when it is obvious from the label what the set and unset states mean. This usually means that the two states are logical or natural opposites, such as &quot;on&quot; and &quot;off&quot;. If this is not the case, use two <link linkend="menu-item-type-radio">radio button items</link> instead.</para></listitem> + <listitem><para>Never change the label of a checkbox menu item in response to the user selecting the item.</para></listitem>

	</itemizedlist>

@@ -287,7 +287,7 @@

	<itemizedlist>

- <listitem><para>If you need to offer a choice of two mutually- exclusive settings to the user, use a group of two radio button items instead of a single check box menu item if the settings are not clearly opposites. For example, represent <guimenuitem>View as Icons</guimenuitem> and <guimenu>View as List</guimenu> as two radio button items.</para></listitem> + <listitem><para>If you need to offer a choice of two mutually- exclusive settings to the user, use a group of two radio button items instead of a single checkbox menu item if the settings are not clearly opposites. For example, represent <guimenuitem>View as Icons</guimenuitem> and <guimenu>View as List</guimenu> as two radio button items.</para></listitem>

<listitem><para>Never change the label of a radio button menu item in response to the user selecting or deselecting the item.</ para></listitem>

@@ -301,8 +301,8 @@
	including:
	
	* Confusing menu items acting as radio buttons in a group with menu
-          items acting as check boxes.
-	* Ambiguous names for check box/toggle menu items which make it
+          items acting as checkboxes.
+	* Ambiguous names for checkbox/toggle menu items which make it
	  difficult to establish the current system state by looking at
	  the menu.
</remark>
@@ -910,14 +910,14 @@
	      <row>
<entry><guimenuitem><accel>T</accel>oolbar</guimenuitem></ entry>
	      		<entry>None</entry>
- <entry>Shows or hides the application's toolbar. This is a <link linkend="menu-item-type-check">check box menu item</link>. Include this item in every application that has a single toolbar. See <xref linkend="toolbars-controlling-display"/> for information on how to deal with multiple toolbars.</entry> + <entry>Shows or hides the application's toolbar. This is a <link linkend="menu-item-type-check">checkbox menu item</link>. Include this item in every application that has a single toolbar. See <xref linkend="toolbars-controlling-display"/> for information on how to deal with multiple toolbars.</entry>
		</row>

		<!-- Suggest removing this for now, see bug #????
		<row>
			<entry><guimenuitem><accel>S</accel>tatusbar</guimenuitem></entry>
			<entry>None</entry>
- <entry>Shows or hides the application's statusbar. This is a <link linkend="menu-item-type-check">check box menu item</link>. Include this item in every application that has a statusbar.</entry> + <entry>Shows or hides the application's statusbar. This is a <link linkend="menu-item-type-check">checkbox menu item</link>. Include this item in every application that has a statusbar.</entry>
		</row>
		-->

Index: C/hig-ch-input.xml
===================================================================
--- C/hig-ch-input.xml	(revision 551)
+++ C/hig-ch-input.xml	(working copy)
@@ -435,7 +435,7 @@
	
<listitem><para>Use a logical keyboard navigation order. When navigating around a window with the Tab key, keyboard focus should move between controls in a predictable order. In Western locales, this is normally left to right and top to bottom.</para></listitem>
	
- <listitem><para>Ensure correct tab order for controls whose enabled state is dependent on check box, radio button or toggle button state. When such a button is selected, all its dependent controls should be enabled, and all the dependent controls of any other button in the group should be disabled. When the user selects a check box, radio button or toggle button that has dependent controls, do not automatically give focus to the first dependent control, but instead leave the focus on the button. + <listitem><para>Ensure correct tab order for controls whose enabled state is dependent on checkbox, radio button or toggle button state. When such a button is selected, all its dependent controls should be enabled, and all the dependent controls of any other button in the group should be disabled. When the user selects a checkbox, radio button or toggle button that has dependent controls, do not automatically give focus to the first dependent control, but instead leave the focus on the button.
<!-- See <xref linkend="keynav-examples"/>.--></para></listitem>
	
	
@@ -1019,7 +1019,7 @@
	      </row>
	      <row>
		<entry><keysym>Space</keysym></entry>
- <entry>Toggle selected state of focused check box, radio button, or toggle button</entry> + <entry>Toggle selected state of focused checkbox, radio button, or toggle button</entry>
	      </row>
	      <row>
		<entry><keysym>Return</keysym></entry>
Index: C/hig-ch-controls.xml
===================================================================
--- C/hig-ch-controls.xml	(revision 551)
+++ C/hig-ch-controls.xml	(working copy)
@@ -47,7 +47,7 @@
    able to use later, even if it is not available right now.</para>

    <figure>
- <title>Two check boxes: sensitive (top) and insensitive (bottom)</title> + <title>Two checkboxes: sensitive (top) and insensitive (bottom)</title>

      <mediaobject>
        <imageobject>
@@ -61,7 +61,7 @@

        <textobject>
<phrase>Screenshot showing the visual appearance of sensitive and
-          insensitive check box controls</phrase>
+          insensitive checkboxes</phrase>
        </textobject>
      </mediaobject>
    </figure>
@@ -667,194 +667,185 @@
    completed.</para>
  </sect1>

-  <sect1 id="controls-check-boxes">
-    <title>Check Boxes</title>
-
- <para>Check boxes are used to show or change a setting. Its two states, - set and unset, are shown by the presence or absence of a checkmark in the
-    labelled box.</para>
-
-    <figure>
-      <title>A typical group of check boxes</title>
-
-      <mediaobject>
-        <imageobject>
- <imagedata depth="140" fileref="images/controls-check- boxes.png"
-          format="PNG" width="143" />
-        </imageobject>
-
-        <imageobject>
- <imagedata fileref="images/controls-check-boxes.eps" format="EPS" />
-        </imageobject>
-
-        <textobject>
- <phrase>A typical group of five check boxes in a dialog</ phrase>
-        </textobject>
-      </mediaobject>
-    </figure>
-
-    <!-- CB-Fig: callouts. -->
-
-    <itemizedlist>
-      <title>Guidelines</title>
-
-      <listitem>
- <para>Do not initiate an action when the user clicks a check box. - However, if used in an instant-apply <link linkend="windows- utility">property - or preference window</link>, update the setting represented by the
-        check box immediately.</para>
-      </listitem>
-
-      <listitem>
- <para>Clicking a check box should not affect the values of any other - controls. It may sensitize, insensitize, hide or show other controls,
-        however.</para>
-      </listitem>
-
-      <listitem>
- <para>If toggling a check box affects the sensitivity of other - controls, place the check box immediately above or to the left of the - controls that it affects. This helps to indicate that the controls are - dependent on the state of the check box.<!--FIXME: pic required)--></para>
-      </listitem>
-
-      <listitem>
-        <para>Use <link linkend="layout-capitalization">sentence
-        capitalization</link> for check box labels, for example
-        <guilabel>Use custom font</guilabel>.</para>
-      </listitem>
-
-      <listitem>
- <para>Label check boxes to clearly indicate the effects of both their - checked and unchecked states, for example, <guilabel>Show icons in - menus</guilabel>. Where this proves difficult, consider using two - radio buttons instead so both states can be given labels. For example:</para>
-
-        <figure>
- <title>Ambiguous check box (top), radio buttons work better in this
-          case (bottom)</title>
-
-          <mediaobject>
-            <imageobject>
-              <imagedata depth="70"
- fileref="images/controls-check-box-ambiguous.png" format="PNG"
-              width="279" />
-            </imageobject>
-
-            <imageobject>
- <imagedata fileref="images/controls-check-box- ambiguous.eps"
-              format="EPS" />
-            </imageobject>
-
-            <textobject>
- <phrase>Two images: one showing a single check box ambiguously - labelled &quot;Progress bar in left of statusbar&quot;, the other
-              making the choice explicit with radio buttons labelled
- &quot;Left&quot; and &quot;Right&quot; under the heading &quot;Status
-              bar progress indicator position:&quot;</phrase>
-            </textobject>
-          </mediaobject>
-        </figure>
-
- <para>The single check box in this example is ambiguous, as it is not - clear where the &quot;progress indicator&quot; will go if the box is - unchecked. Two radio buttons are better in this case, as they make the
-        options clear.</para>
-      </listitem>
-
- <!-- CB-Fig: Again, callouts, shorten caption. The callouts should include other bullet points as well (e.g., access keys). The referring bullet item is badly phrased. Perhaps make this the one check box images for the bullets, with different callouts for different bullet points. -->
-
-      <listitem>
- <para>Provide an access key in all check box labels that allows the - user to set or unset the check box directly from the keyboard.</para>
-      </listitem>
-
-      <listitem>
- <para>If the check box represents a setting in a multiple selection - that is set for some objects in the selection and unset for others,
-        show the check box in its mixed state. For example:</para>
-
-        <figure>
- <title>Check boxes (right) showing properties for a multiple
-          selection of files in Nautilus (left)</title>
-
-          <mediaobject>
-            <imageobject>
-              <imagedata depth="170"
- fileref="images/controls-check-boxes-mixed.png" format="PNG"
-              width="223" />
-            </imageobject>
-
-            <imageobject>
- <imagedata fileref="images/controls-check-boxes- mixed.eps"
-              format="EPS" />
-            </imageobject>
-
-            <textobject>
- <phrase>Check boxes showing the Hidden, Readable and Writeable - states of two selected files in Nautilus. Both files are hidden, - neither are writeable, but one is readable. The Readable check
-              box is therefore shown in its mixed state.</phrase>
-            </textobject>
-          </mediaobject>
-        </figure>
-
- <para>In this example, both selected files are hidden (since their - filenames start with &quot;.&quot;), and the emblems on their icons show
-        that neither file is writeable, but one is readable. The
- <guilabel>Readable</guilabel> check box is therefore shown in its - mixed state. <remark>At time of writing, the exact visual appearance - of a mixed state check box in gtk was undecided</remark>.</ para>
-
-        <para>When a check box is in its mixed state:</para>
-
-        <itemizedlist>
-          <listitem>
- <para>clicking the box once should check the box, applying that - setting (when confirmed) to all the selected objects</ para>
-          </listitem>
-
-          <listitem>
- <para>clicking the box a second time should uncheck the box, - removing that setting (when confirmed) to all the selected objects</para>
-          </listitem>
-
-          <listitem>
- <para>clicking the box a third time should return the box to its - mixed state, restoring each selected object&apos;s original value
-            for that setting (when confirmed)</para>
-          </listitem>
-        </itemizedlist>
-
- <!-- CB-Ed: Mixed state check boxes are a polemic-ridden issue. Data to back this up? -->
-      </listitem>
-
-      <listitem>
- <para>Label a group of check boxes with a descriptive heading above or
-        to the left of the group.</para>
-      </listitem>
-
-      <listitem>
- <para>Use a frame around the group if necessary, but remember that
-        blank space often works just as well and results in a less
-        visually-cluttered dialog.</para>
-      </listitem>
-
-      <listitem>
- <para>Do not place more than about eight check boxes under the same - group heading. If you need more than eight, try to use blank space,
-        heading labels or frames to divide them into smaller groups.
- Otherwise, consider using a check box list instead— but you probably - also need to think about how to simplify your user interface.</para>
-      </listitem>
-
-      <listitem>
- <para>Try to align groups of check boxes vertically rather than
-        horizontally, as this makes them easier to scan visually. Use
- horizontal or rectangular alignments only if they greatly improve the
-        layout of the window.</para>
-      </listitem>
-    </itemizedlist>
+  <sect1 id="controls-checkboxes">
+    <title>Checkboxes</title>
+    <para>
+ A checkbox is used to control something that can obviously be on or off.
+    </para>
+    <sect2>
+      <title>Text</title>
+      <para>
+        A checkbox should always have a label, and
+ (except in the rare case of a grid of checkboxes) the label should
+        always be to the right of the checkbox itself.
+ (In a multi-column listbox, one column may contain the labels for
+        checkboxes in previous columns.)
+      </para>
+      <para>
+        A checkbox label should convey the effect the checkbox has
+        when checked.
+ The effect of the unchecked state should be obvious without any extra
+        text.
+        (If the label contains the word
+        <quote>all</quote>, <quote>always</quote>,
+        <quote>default</quote>, or <quote>only</quote>,
+ the unchecked state probably <emphasis>isn&#8217;t</ emphasis> obvious.) + If it cannot be made obvious by rewording the label, use a pair of + <link linkend="controls-radio-buttons">radio buttons</link> instead. + When deciding this, consider the target audience and situation. + For example, in an <link linkend="windows- assistant">assistant</link> + a pair of radio buttons will be better than a checkbox more often than + usual, since people will often be unfamiliar with the choices being
+        offered.
+      </para>
+      <para>
+ The checked state of a checkbox should be understandable as something
+        positive.
+        Never use a checkbox label beginning
+        <quote>Don&#8217;t</quote> or <quote>Do not</quote>,
+        and avoid using a checkbox label beginning
+        <quote>Hide</quote>, <quote>Ignore</quote>, or similar.
+ Try reversing the effect of the checkbox so the label can be positive.
+      </para>
+      <caution class="windows">
+        Windows Vista guidelines offer
+        <guilabel>Don't show this message again</guilabel>
+        as an example of a correctly labelled checkbox.
+        Don&#8217;t use a checkbox like this in Gnome software,
+        because it would have a negatively-worded label,
+ because it would not be obvious how to turn the message back on later, + and because it suggests the message was annoying in the first place. + Instead, if a message is truly necessary, present it unobtrusively
+        enough that it doesn&#8217;t need to be optional.
+ <!-- See also <xref linkend="alerts-confirmation"></xref>. -->
+      </caution>
+      <para>
+ Don&#8217;t begin a checkbox label with <quote>Enable</ quote>,
+        and be careful if beginning it with <quote>Use</quote>.
+ Labels like this are usually unnecessarily indirect, and often + introduce a jargon term that people shouldn&#8217;t need to know. + If practical, reword the label to convey what the checked state
+        actually achieves.
+ Don&#8217;t use a checkbox merely to advertise a feature that should
+        always be turned on anyway.
+      </para>
+      <para>
+        A checkbox label should use sentence
+ <link linkend="layout-capitalization">case</link>, but should not end
+        in a period.
+ (It may end in a colon, if it doubles as the label for a dependent
+        control whose label normally ends in a colon.)
+        The label should be no longer than about ten words,
+ and should not wrap to multiple lines at typical window sizes.
+        If the label is a complete clause, express it as a command
+        (imperative) rather than a description (indicative).
+        <mediaobject>
+          <textobject>
+            For example, not
+ <guilabel>Sound plays when a message arrives</guilabel> but instead
+            <guilabel>Play a sound when a message arrives</guilabel>.
+          </textobject>
+        </mediaobject>
+      </para>
+      <para>
+ Avoid including an explanation or advice inside a checkbox label,
+        and don&#8217;t give a checkbox a tooltip.
+        If extra information is necessary, present it as a sentence
+ in a smaller font (not in italics) aligned underneath the label. + (This time the indicative form is appropriate, with the checkbox
+        as the implied subject.)
+ Even better, try shortening the explanation or advice enough that it
+        can be used as the label itself, replacing the existing one.
+      </para>
+      <para>
+ If necessary, a group of related checkboxes may have an extra label
+        introducing them.
+        This label should be in sentence case, and end with a colon.
+ Avoid repeating the first word in several checkboxes in a group;
+        instead, include this word in the label for the group.
+      </para>
+      <para>
+        In help text or support materials, refer to a checkbox as a
+        <quote>box</quote> that someone may <quote>check</quote> or
+        <quote>clear</quote>.
+      </para>
+    </sect2>
+    <sect2>
+      <title>Layout</title>
+      <para>
+ Arrange a group of checkboxes in a single column, unless a horizontal
+        or multi-column arrangement suits the window much better.
+ If there is a label for the group as a whole, place it either above + the group, or to the left of the first checkbox, depending on the
+        layout of the rest of the window.
+      </para>
+      <para>
+ Avoid presenting more than about eight checkboxes as a single group. + If this is unavoidable, or if the number of checkboxes is dynamic + (for example, a list of plug-ins), present them in a scrollable
+        <link linkend="controls-lists">list box</link>.
+      </para>
+    </sect2>
+    <sect2>
+      <title>Behavior</title>
+      <para>
+        Clicking a checkbox, or its label, toggles its state.
+ Don&#8217;t perform any action <emphasis>other than</ emphasis>
+        toggling the state;
+ for example, don&#8217;t open a dialog when a checkbox is checked. + If a checkbox turns on something that demands further configuration, + and it is not possible for that configuration to have a sensible
+        default, instead of a checkbox use a
+ <link linkend="controls-buttons">button</link> to open a dialog for
+        configuring and confirming the function.
+      </para>
+      <para>
+        <mediaobject>
+          <textobject>
+            For example, a backup function might have
+            <guilabel>Backup is off.</guilabel> text, followed by a
+            <guilabel>Turn On Backup&#8230;</guilabel> button
+            that opens a secondary dialog.
+ Once the configuration is complete, the text might change to + summarize the configuration, and the single button might be
+            replaced by <guilabel>Settings&#8230;</guilabel> and
+            <guilabel>Turn Off Backup</guilabel> buttons.
+          </textobject>
+        </mediaobject>
+      </para>
+    </sect2>
+    <sect2>
+      <title>Mixed-state checkboxes</title>
+      <para>
+ When a checkbox represents a property that is turned on for some parts
+        of the current selection, but off for other parts,
+        the checkbox should appear in its mixed state.
+        For example, where multiple files are selected in Nautilus,
+ an emblem that has been applied only to some of the selected files + is represented by a mixed-state checkbox in the Properties window.
+        <mediaobject>
+          <imageobject>
+ <imagedata fileref="images/controls-check-boxes- mixed.png" />
+          </imageobject>
+          <imageobject>
+ <imagedata fileref="images/controls-check-boxes- mixed.eps" />
+          </imageobject>
+        </mediaobject>
+      </para>
+      <para>
+ Clicking a mixed-state checkbox cycles between the mixed state,
+        the fully checked state,
+        the unchecked state,
+        and back to the mixed state (restoring the original values),
+        in that order.
+      </para>
+      <para>
+        Don&#8217;t use a mixed-state checkbox for any other purpose.
+        For a property that normally has three possible states,
+        use three radio buttons or an
+ <link linkend="controls-option-menus">option menu</link> instead.
+      </para>
+    </sect2>
  </sect1>

  <sect1 id="controls-radio-buttons">
@@ -862,7 +853,7 @@

<para>Radio buttons are used in groups to select from a mutually exclusive set of options. Only one radio button within a group may be set at any one - time. As with check boxes, do not use radio buttons to initiate actions.</para> + time. As with checkboxes, do not use radio buttons to initiate actions.</para>

    <figure>
      <title>A typical group of radio buttons</title>
@@ -889,7 +880,7 @@
      <listitem>
<para>Only use radio buttons in groups of at least two, never use a single radio button on its own. To represent a single setting, use a
-        check box or two radio buttons, one for each state.</para>
+        checkbox or two radio buttons, one for each state.</para>
      </listitem>

      <listitem>
@@ -1039,7 +1030,7 @@
<para>Do not use groups of toggle buttons in dialogs unless space constraints force you to do so, or you need to provide consistency
        with a toolbar in your application. <link
-        linkend="controls-check-boxes">Check boxes</link> or <link
+        linkend="controls-checkboxes">Checkboxes</link> or <link
linkend="controls-radio-buttons">radio buttons</link> are usually
        preferable, as they allow more descriptive labels and are less
        easily-confused with other types of control.</para>
@@ -1058,7 +1049,7 @@

      <listitem>
<para>Label a group of toggle buttons with a descriptive heading above - or to the left of the group, as you would with a group of check boxes + or to the left of the group, as you would with a group of checkboxes
        or radio buttons.</para>
      </listitem>

@@ -1132,7 +1123,7 @@

<remark>At time of writing, the exact visual appearance of mixed state toggle buttons was undecided. A mixed state toggle button should - behave exactly as a mixed state check box or radio button, depending + behave exactly as a mixed-state checkbox or radio button, depending on whether the toggle button choices are independent or mutually
        exclusive, respectively.</remark>
      </listitem>
@@ -1463,7 +1454,7 @@
      <listitem>
<para>Do not use lists with less than about five items, unless the
        number of items may increase over time. Use <link
-        linkend="controls-check-boxes">check boxes</link>, <link
+        linkend="controls-checkboxes">checkboxes</link>, <link
linkend="controls-radio-buttons">radio buttons</link> or an <link linkend="controls-option-menus">drop-down list</link> if there are fewer
        items.</para>
@@ -1497,11 +1488,11 @@
      </listitem>

      <listitem>
- <para>Consider using a check box list for multiple- selection lists, as + <para>Consider using a checkbox list for multiple-selection lists, as these make it more obvious that multiple selection is possible:</para>

        <figure>
-          <title>A simple check box list</title>
+          <title>A simple checkbox list</title>

          <mediaobject>
            <imageobject>
@@ -1517,7 +1508,7 @@

            <textobject>
<phrase>Picture of list control with two columns. The first - column consists of check boxes showing whether or not the + column consists of checkboxes showing whether or not the corresponding item in the second column is selected for further
              action.</phrase>
            </textobject>
@@ -1689,11 +1680,11 @@
      </listitem>

      <listitem>
- <para>Consider using a check box tree for multiple- selection trees, as + <para>Consider using a checkbox tree for multiple-selection trees, as these make it more obvious that multiple selection is possible:</para>

        <figure>
-          <title>A simple check box tree</title>
+          <title>A simple checkbox tree</title>

          <mediaobject>
            <imageobject>
@@ -1709,7 +1700,7 @@

            <textobject>
<phrase>Picture of tree control with two columns. The first - column consists of check boxes showing whether or not the + column consists of checkboxes showing whether or not the corresponding item in the second column is selected for further
              action.</phrase>
            </textobject>
Index: C/images/controls-check-box-ambiguous.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Index: C/images/controls-check-boxes.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Index: C/hig-ch-layout.xml
===================================================================
--- C/hig-ch-layout.xml	(revision 551)
+++ C/hig-ch-layout.xml	(working copy)
@@ -389,14 +389,14 @@

<para>Placement of visual components in an application is important because relationships between elements are indicated by their positions. This is called &quot;layout&quot; in interface design.</para>

- <para>A clean layout is crucial to creating a smooth visual flow of information for the user. This section describes the proper component placement and spacing to use in GNOME applications. The major components discussed will be labels, icons, radio buttons and check boxes, text fields, command buttons, and drop-down menus.</para> + <para>A clean layout is crucial to creating a smooth visual flow of information for the user. This section describes the proper component placement and spacing to use in GNOME applications. The major components discussed will be labels, icons, radio buttons and checkboxes, text fields, command buttons, and drop-down menus.</para>

    </sect2>

    <sect2 id="layout-dialogs">
      <title>Dialogs</title>

- <para>When a user is scanning a complex preferences dialog consisting of many labels and corresponding check boxes, text fields, and drop-down combination boxes, it is easy to see how she can quickly become hindered by poor layout in the visual design. For information on laying out Alerts, see <xref linkend="alert-spacing"/ ></para> + <para>When a user is scanning a complex preferences dialog consisting of many labels and corresponding checkboxes, text fields, and drop-down combination boxes, it is easy to see how she can quickly become hindered by poor layout in the visual design. For information on laying out Alerts, see <xref linkend="alert-spacing"/ ></para>

<figure id="improved-layout-figure"><title>Improved window layout</title>
	
@@ -504,7 +504,7 @@

<listitem><para>As a basic rule of thumb, leave space between user interface components in increments of 6 pixels, going up as the relationship between related elements becomes more distant. For example, between icon labels and associated graphics within an icon, 6 pixels are adequate. Between labels and associated components, leave 12 horizontal pixels. For vertical spacing between groups of components, 18 pixels is adequate. A general padding of 12 pixels is recommended between the contents of a dialog window and the window borders.</para></listitem>
	
- <listitem><para>Break long lists of choices into smaller groups. For lists of less than about eight items, use radio buttons or check boxes. For longer lists, use a list control or drop-down list.</ para></listitem> + <listitem><para>Break long lists of choices into smaller groups. For lists of less than about eight items, use radio buttons or checkboxes. For longer lists, use a list control or drop-down list.</ para></listitem>
	
<listitem><para>Try to keep elements of the same type left-aligned with each other. For instance, in <xref linkend="layout-callouts- figure"/>, the group titles (<guilabel>General</guilabel> and <guilabel>Actions</guilabel>) are left-aligned and justified with each other.</para></listitem>

@@ -541,7 +541,7 @@
<listitem><para>In the right column, place a GtkVBox containing a row per control you wish to place in the category. Set the <property>Spacing</property> to <userinput>6</userinput>.
      <itemizedlist>
<listitem><para>For left-side labelled controls such as text boxes, drop-down lists, and many others, place a 2 columned GtkHBox inside the row with a label in the left column and the corresponding control in the right. Set the <property>Spacing</property> on the GtkHBox to <userinput>6</userinput>. Place all labels such as this (for the whole window) in the same GtkSizeGroup (there is currently no way to do this using only Glade, you will have to use code as well). This will align the controls to their right, even between categories, which is important for allowing quick visual scans.</ para></listitem> - <listitem><para>For right-side labelled controls such as check boxes and radio buttons, simply place them directly in the row.</para></listitem> + <listitem><para>For right-side labelled controls such as checkboxes and radio buttons, simply place them directly in the row.</para></listitem>
    </itemizedlist>
    </para></listitem>
    </itemizedlist>
@@ -614,7 +614,7 @@
	    </row>

	    <row>
-	      <entry>Radio button and check box labels</entry>
+	      <entry>Radio button and checkbox labels</entry>
<entry>6 pixels to the right of and vertically center aligned with radio button</entry>
	      <entry align="center">
		<mediaobject>
@@ -762,7 +762,7 @@
	    <row valign="top">
	      <entry colname="col1" align="left" valign="top">
		
-		Check box labels
+		Checkbox labels
		
	      </entry>
	      <entry colname="col2" valign="top">
_______________________________________________
Usability mailing list
Usability gnome org
http://mail.gnome.org/mailman/listinfo/usability

--
CALUM BENSON, Usability Engineer       Sun Microsystems Ireland
mailto:calum benson sun com            GNOME Desktop Team
http://blogs.sun.com/calum             +353 1 819 9771

Any opinions are personal and not necessarily those of Sun Microsystems



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]