<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://wiki.amiga.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Trixie</id>
	<title>wiki.amiga.org - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.amiga.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Trixie"/>
	<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php/Special:Contributions/Trixie"/>
	<updated>2026-04-18T07:22:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=1120</id>
		<title>InfoWindow Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=1120"/>
		<updated>2021-05-08T19:17:28Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Autodoc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This guide describes the ReAction-compatible '''information window class''' for users and developers.&lt;br /&gt;
&lt;br /&gt;
The '''InfoWindow Class''' (installed as ''infowindow.class'' in the SYS:Classes/ directory) is a BOOPSI-compliant class that is used to display information windows such as About-windows commonly found in many applications.&lt;br /&gt;
&lt;br /&gt;
From developers' perspective, it provides an easy and adaptable way of creating and presenting information windows within their application. The class is highly configurable to suit many different needs and scenarios.&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
&lt;br /&gt;
The latest version is 53.8 available in the [[Enhancer Software]] for both AmigaOS3 and AmigaOS4.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
The features include:&lt;br /&gt;
&lt;br /&gt;
* Formatted text&lt;br /&gt;
&lt;br /&gt;
* Aligned images&lt;br /&gt;
&lt;br /&gt;
* Configurable panel featuring tabs, a configurable text field or a custom BOOPSI gadget&lt;br /&gt;
&lt;br /&gt;
* Configurable button row supporting any number of buttons, and a timeout feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:infowindow_class_os3_example1.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|[[File:infowindow_class_os3_example2.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|[[File:infowindow_class_os3_example3.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:infowindow_class_os4_example1.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|[[File:infowindow_class_os4_example2.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|[[File:infowindow_class_os4_example3.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Developers ==&lt;br /&gt;
&lt;br /&gt;
=== Autodoc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
infowindow.class/--datasheet--                   infowindow.class/--datasheet--&lt;br /&gt;
&lt;br /&gt;
  NAME&lt;br /&gt;
    infowindow.class -- Create an information window&lt;br /&gt;
&lt;br /&gt;
  SUPERCLASS&lt;br /&gt;
    window.class&lt;br /&gt;
&lt;br /&gt;
  REQUIRES&lt;br /&gt;
    bitmap.image, button.gadget, clicktab.gadget, label.image, layout.gadget,&lt;br /&gt;
    scroller.gadget, texteditor.gadget, tickbox.gadget, window.class&lt;br /&gt;
&lt;br /&gt;
  DESCRIPTION&lt;br /&gt;
    This is a BOOPSI class to create information windows, such as those that&lt;br /&gt;
    applications display when you select the &amp;quot;About&amp;quot; menu command.&lt;br /&gt;
&lt;br /&gt;
    Supported features:&lt;br /&gt;
&lt;br /&gt;
    - formatted text&lt;br /&gt;
    - image with configurable placement and backfill&lt;br /&gt;
    - configurable panel to display tabs, a scrollable text field, or a custom&lt;br /&gt;
      BOOPSI gadget (e.g. a listbrowser)&lt;br /&gt;
    - configurable button row supporting any number of buttons&lt;br /&gt;
    - optional checkbox gadget for confirming information&lt;br /&gt;
    - keyboard control&lt;br /&gt;
    - timeout (with an optional counter)&lt;br /&gt;
&lt;br /&gt;
    The class does not replace the Requester Class but it can be seen as&lt;br /&gt;
    a more sophisticated version of the REQTYPE_INFO requester type.&lt;br /&gt;
&lt;br /&gt;
  METHODS&lt;br /&gt;
    OM_NEW -- creates the infowindow object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
    OM_SET -- sets object attributes (passed to the superclass first)&lt;br /&gt;
&lt;br /&gt;
    OM_GET -- retrieves object attributes (passed to the superclass first)&lt;br /&gt;
&lt;br /&gt;
    OM_DISPOSE -- disposes of the infowindow object&lt;br /&gt;
&lt;br /&gt;
    IWM_OPEN -- opens the infowindow&lt;br /&gt;
&lt;br /&gt;
  KEYBOARD CONTROL&lt;br /&gt;
    Escape&lt;br /&gt;
      Cancels the infowindow (IWM_OPEN returns IWMRES_CANCEL).&lt;br /&gt;
&lt;br /&gt;
    Return / Enter&lt;br /&gt;
      Selects the default choice and closes the infowindow (IWM_OPEN returns&lt;br /&gt;
      the number of the button).&lt;br /&gt;
&lt;br /&gt;
    Cursor Left / Right&lt;br /&gt;
      Switches between tabs (if the tab panel is displayed).&lt;br /&gt;
&lt;br /&gt;
  ATTRIBUTES&lt;br /&gt;
    The infowindow is designed as a modal (i.e. blocking) requester, so all of&lt;br /&gt;
    its attributes can only be set or retrieved when the window is NOT open.&lt;br /&gt;
&lt;br /&gt;
    Use SetAttrs() freely in between individual IWM_OPEN calls to re-configure&lt;br /&gt;
    the infowindow: no need to dispose of and rebuild the object if you want&lt;br /&gt;
    to change the look, contents or behaviour of the window.&lt;br /&gt;
&lt;br /&gt;
    SetAttrs() will return the number of attributes set.&lt;br /&gt;
&lt;br /&gt;
    The InfoWindow Class is based on the Window Class, so many attributes&lt;br /&gt;
    supported by the superclass are applicable. Use them wisely: make sure&lt;br /&gt;
    you don't turn the infowindow into something it's not supposed to be.&lt;br /&gt;
&lt;br /&gt;
    The following superclass attributes are explicitly IGNORED because their&lt;br /&gt;
    (mis)use could compromise the look or functioning of the infowindow:&lt;br /&gt;
&lt;br /&gt;
    WA_Backdrop&lt;br /&gt;
    WA_BackFill&lt;br /&gt;
    WA_Borderless&lt;br /&gt;
    WA_Hidden&lt;br /&gt;
    WINDOW_AppPort&lt;br /&gt;
    WINDOW_AppWindow&lt;br /&gt;
    WINDOW_Iconifiable&lt;br /&gt;
    WINDOW_IconifyGadget&lt;br /&gt;
    WINDOW_IDCMPHook&lt;br /&gt;
    WINDOW_InputEvent&lt;br /&gt;
    WINDOW_MenuStrip&lt;br /&gt;
    WINDOW_NewMenu&lt;br /&gt;
    WINDOW_PopupGadget&lt;br /&gt;
&lt;br /&gt;
    Further notes on the use of superclass attributes:&lt;br /&gt;
&lt;br /&gt;
    WA_Width and WA_Height are treated as WA_InnerWidth and WA_InnerHeight,&lt;br /&gt;
    respectively. This behaviour is inherited from the Window Class.&lt;br /&gt;
 &lt;br /&gt;
    If WA_CloseGadget is provided and set to TRUE, the IWM_OPEN method will&lt;br /&gt;
    return the value of IWMRES_CANCEL if the window was closed (= cancelled)&lt;br /&gt;
    via the close gadget. The Escape key shortcut has an identical function&lt;br /&gt;
    (and result value) but it is available at all times, regardless of the&lt;br /&gt;
    WA_CloseGadget setting.&lt;br /&gt;
&lt;br /&gt;
    The class needs to be able to resolve the screen on which the infowindow&lt;br /&gt;
    will open. The following policy is applied here:&lt;br /&gt;
    - If INFOWINDOW_Parent is set, the class will attempt to obtain the screen&lt;br /&gt;
      pointer from the parent window object (the window needs to be open for&lt;br /&gt;
      this to work);&lt;br /&gt;
    - the WA_CustomScreen, WA_PubScreen and WA_PubScreenName tags are next in&lt;br /&gt;
      preference, respectively;&lt;br /&gt;
    - if there is no tag setting allowing to resolve the screen, it is assumed&lt;br /&gt;
      that opening on the default public screen is requested.&lt;br /&gt;
&lt;br /&gt;
    You might prefer setting INFOWINDOW_Parent over the Intuition screen tags.&lt;br /&gt;
    This way the infowindow will always stay with your program window, which&lt;br /&gt;
    is especially useful if your application supports jumping between screens.&lt;br /&gt;
    Otherwise you'd have to update the infowindow with a new screen pointer&lt;br /&gt;
    whenever the application changes screen.&lt;br /&gt;
&lt;br /&gt;
    The InfoWindow Class' own attributes are described below:&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Parent (Object *)&lt;br /&gt;
      A pointer to a window object that will be the &amp;quot;parent&amp;quot; of the&lt;br /&gt;
      information window. Often the parent is the application's main window.&lt;br /&gt;
      The class will automatically set the busy pointer for the parent,&lt;br /&gt;
      blocking its input while the infowindow is open.&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_BodyText (CONST_STRPTR)&lt;br /&gt;
      Text for the body of the information window.&lt;br /&gt;
&lt;br /&gt;
      The following codes can be used within the provided string to change&lt;br /&gt;
      the soft style of the text:&lt;br /&gt;
&lt;br /&gt;
      ESC u -- underline&lt;br /&gt;
      ESC b -- bold&lt;br /&gt;
      ESC i -- italic&lt;br /&gt;
      ESC n -- normal&lt;br /&gt;
&lt;br /&gt;
      Example string: &amp;quot;The following words \33bare in bold\33n.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_GadgetText (CONST_STRPTR)&lt;br /&gt;
      Text for the information window's button(s), delimited by the vertical&lt;br /&gt;
      bar character (|) if you want more than one button (e.g. &amp;quot;Yes|No&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
      Defaults to &amp;quot;_OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_CheckBoxText (CONST_STRPTR)&lt;br /&gt;
      If you provide this text string, the class will display a checkbox&lt;br /&gt;
      gadget at the bottom of the information window. The string will become&lt;br /&gt;
      the gadget's label.&lt;br /&gt;
&lt;br /&gt;
      One obvious purpose of the checkbox is to allow the user to confirm the&lt;br /&gt;
      information displayed in the window before closing it and proceeding.&lt;br /&gt;
      The state of the gadget upon closing the infowindow can be retrieved&lt;br /&gt;
      via the INFOWINDOW_Checked tag; see below.&lt;br /&gt;
 &lt;br /&gt;
      Defaults to NULL (no checkbox will be displayed)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_CheckBoxPlace (uint32)&lt;br /&gt;
      The placement of the optional checkbox gadget within the infowindow.&lt;br /&gt;
      Possible values are PLACECHECK_LEFT, PLACECHECK_RIGHT and&lt;br /&gt;
      PLACECHECK_CENTER. The checkbox text label will be displayed to the&lt;br /&gt;
      right of the gadget unless PLACECHECK_RIGHT is set (in which case the&lt;br /&gt;
      text will show on the left).&lt;br /&gt;
    &lt;br /&gt;
      Defaults to PLACECHECK_LEFT&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Checked (BOOL)&lt;br /&gt;
      Setting this attribute will make the checkbox selected or unselected&lt;br /&gt;
      when the infowindow next opens. GetAttrs() can be used to retrieve the&lt;br /&gt;
      state of the gadget upon closing the window.&lt;br /&gt;
&lt;br /&gt;
      Please note that the class stores the checkbox state regardless of&lt;br /&gt;
      whether the infowindow was OK'ed, cancelled, or timed out. You'll want&lt;br /&gt;
      to also check the IWM_OPEN method return value to distinguish between&lt;br /&gt;
      these situations.&lt;br /&gt;
&lt;br /&gt;
      Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Justification (uint16)&lt;br /&gt;
      Body text justification. Applicable values are LJ_LEFT, LJ_CENTER&lt;br /&gt;
      or LJ_RIGHT.&lt;br /&gt;
&lt;br /&gt;
      Defaults to LJ_LEFT (left-justified)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_WrapBorder (uint16)&lt;br /&gt;
      If the body text does not contain any linefeeds (\n) it will be&lt;br /&gt;
      word-wrapped automatically after the number of characters specified&lt;br /&gt;
      in this tag.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 0 (no word-wrap)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_DefButton (uint32)&lt;br /&gt;
      Specifies the default, highlighted button. If the Return or Enter key is&lt;br /&gt;
      pressed, the infowindow will close as if this button has been selected.&lt;br /&gt;
      A value of 0 means there is no default button, and the Return/Enter&lt;br /&gt;
      keyboard shortcut will not be available.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 1 (the first button from the left)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Image (Object *)&lt;br /&gt;
      A custom BOOPSI image object to display in the information window. Note&lt;br /&gt;
      that the image will not be disposed of by the class, you need to take&lt;br /&gt;
      care of this yourself (the logic here is: &amp;quot;you create the image, you&lt;br /&gt;
      dispose of it&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
      This tag takes precedence over INFOWINDOW_ImageFile (see below).&lt;br /&gt;
&lt;br /&gt;
      If your application supports jumping between different screens, it might&lt;br /&gt;
      be necessary to rebuild your custom image object for the particular new&lt;br /&gt;
      host screen, to ensure the image is rendered with proper colours. This&lt;br /&gt;
      will be the case when jumping between an 8-bit screen and a 16/32-bit&lt;br /&gt;
      screen, or vice versa.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImageFile (CONST_STRPTR)&lt;br /&gt;
      A name of a source file from which the class will create a BOOPSI image&lt;br /&gt;
      to display in the information window. The file can be in any picture&lt;br /&gt;
      format supported by DataTypes. The image object created this way is&lt;br /&gt;
      stored internally and the class will dispose of it automatically.&lt;br /&gt;
&lt;br /&gt;
      This tag will be ignored if INFOWINDOW_Image is provided (see above).&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImagePlace (uint32)&lt;br /&gt;
      Flags to determine the placement of the image with regard to the body&lt;br /&gt;
      text. The image can be placed on the left (default), on the right,&lt;br /&gt;
      above or below the text. When PLACEIMAGE_ABOVE or PLACEIMAGE_BELOW is&lt;br /&gt;
      set, the image will be center-aligned horizontally unless you also set&lt;br /&gt;
      PLACEIMAGE_LEFT or PLACEIMAGE_RIGHT (for example, setting this tag to&lt;br /&gt;
      the combination of PLACEIMAGE_ABOVE|PLACEIMAGE_LEFT will display the&lt;br /&gt;
      image in the top-left corner above the body text).&lt;br /&gt;
&lt;br /&gt;
      This tag will be ignored if there is no body text.&lt;br /&gt;
&lt;br /&gt;
      Defaults to PLACEIMAGE_LEFT&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImageBackFill (struct Hook *)&lt;br /&gt;
      Sometimes it may be desirable to place the image on a filled background.&lt;br /&gt;
      This tag allows providing a backfill hook for this purpose.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_TabPanel (struct InfoWindowTab *)&lt;br /&gt;
      Use this tag to configure a special panel for displaying additional&lt;br /&gt;
      information in the window. This will normally be a tabbed panel with&lt;br /&gt;
      scrollable text fields but other configurations are also possible.&lt;br /&gt;
&lt;br /&gt;
      The tabbed panel is created by passing an array of struct InfoWindowTab&lt;br /&gt;
      (see &amp;lt;classes/infowindow.h&amp;gt; for definition). The Label member of each&lt;br /&gt;
      structure in the array must contain the tab label string. The actual&lt;br /&gt;
      contents of the Data member may vary depending on the Type member value:&lt;br /&gt;
&lt;br /&gt;
      TABDATA_STRING -- Data contains a text string&lt;br /&gt;
      TABDATA_FILE   -- Data contains a name of a text file&lt;br /&gt;
      TABDATA_LOCK   -- Data contains a DOS lock on a text file&lt;br /&gt;
      TABDATA_GADGET -- Data points to a custom BOOPSI gadget object&lt;br /&gt;
&lt;br /&gt;
      This means that information to be displayed in the panel can be placed&lt;br /&gt;
      externally. For example, you can have a dedicated tab for displaying&lt;br /&gt;
      the program licence, the text of which is in a file on disk (only plain&lt;br /&gt;
      text files are supported at the moment):&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab tabs[] =&lt;br /&gt;
       {&lt;br /&gt;
         { &amp;quot;Credits&amp;quot;, (APTR) &amp;quot;This program was made by me!&amp;quot;, TABDATA_STRING },&lt;br /&gt;
         { &amp;quot;Licence&amp;quot;, (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;, TABDATA_FILE },&lt;br /&gt;
         { NULL, NULL, TABDATA_END }&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      Note that the array must be properly terminated as shown.&lt;br /&gt;
&lt;br /&gt;
      If instead of an array you pass a single struct InfoWindowTab with&lt;br /&gt;
      a NULL Label member, a scrollable text field will be created in the&lt;br /&gt;
      place of the tabbed panel:&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab textField =&lt;br /&gt;
       {&lt;br /&gt;
        NULL,&lt;br /&gt;
        (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;,&lt;br /&gt;
        TABDATA_FILE&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      The configuration can be further customized by using the TABDATA_GADGET&lt;br /&gt;
      value for Type. In such a case the Data member shall point to a BOOPSI&lt;br /&gt;
      gadget (for example, a listbrowser):&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab customPanel =&lt;br /&gt;
       {&lt;br /&gt;
        NULL,&lt;br /&gt;
        (APTR) myListBrowser,&lt;br /&gt;
        TABDATA_GADGET&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      The configuration above will display your own listbrowser gadget&lt;br /&gt;
      instead of the panel, and this&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab tabs[] =&lt;br /&gt;
       {&lt;br /&gt;
         { &amp;quot;Credits&amp;quot;, (APTR) myListBrowser, TABDATA_GADGET },&lt;br /&gt;
         { &amp;quot;Licence&amp;quot;, (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;, TABDATA_FILE },&lt;br /&gt;
         { NULL, NULL, TABDATA_END }&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      will show your listbrowser under the &amp;quot;Credits&amp;quot; tab instead of the&lt;br /&gt;
      standard text field.&lt;br /&gt;
&lt;br /&gt;
      The tab panel's text fields are currently rendered using a read-only&lt;br /&gt;
      TextEditor Gadget. This may change in the future so don't assume&lt;br /&gt;
      anything about the formatting of the text.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL (no panel)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_TimeOut (uint32)&lt;br /&gt;
      The displayed information window will time out and close after the&lt;br /&gt;
      number of seconds specified via this tag. The IWM_OPEN method will&lt;br /&gt;
      return with a result of IWMRES_TIMEOUT.&lt;br /&gt;
&lt;br /&gt;
      To visually indicate how much time is left before the window closes&lt;br /&gt;
      you can set up a counter to display in the window title bar or in&lt;br /&gt;
      a button. The respective string must include a special placeholder,&lt;br /&gt;
      %t, within its text. For example, to display a counter in the window&lt;br /&gt;
      title you would set WA_Title to something like 'Closes in %t seconds'.&lt;br /&gt;
      Similarly, the label '%t seconds left' passed in INFOWINDOW_GadgetText&lt;br /&gt;
      will display the counter in the button at the bottom of the infowindow.&lt;br /&gt;
      The number of counters is not limited and they can be freely combined,&lt;br /&gt;
      displayed in both the window title and in any (or all) of the buttons.&lt;br /&gt;
      Use with moderation, though.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 0 (no timeout)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_AllowSignals (BOOL)&lt;br /&gt;
      A program may want to run the infowindow on a separate process in order&lt;br /&gt;
      to make it a non-modal (non-blocking) requester. In such a case it would&lt;br /&gt;
      be desirable that the program can exercise some basic control over the &lt;br /&gt;
      independently running infowindow. If set to TRUE, this tag will allow&lt;br /&gt;
      sending a break signal to the infowindow process. The following signals&lt;br /&gt;
      are supported:&lt;br /&gt;
&lt;br /&gt;
      SIGBREAKF_CTRL_C -- cancel the information window&lt;br /&gt;
      SIGBREAKF_CTRL_F -- bring the infowindow to front and activate it&lt;br /&gt;
&lt;br /&gt;
      The function needed to send the signal is IExec-&amp;gt;Signal().&lt;br /&gt;
&lt;br /&gt;
      The IWM_OPEN method will return with a result of IWMRES_BREAK if the&lt;br /&gt;
      infowindow is cancelled via SIGBREAKF_CTRL_C.&lt;br /&gt;
&lt;br /&gt;
      Defaults to FALSE (no signals allowed)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
  NOTES&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  SEE ALSO&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
infowindow.class/IWM_OPEN                             infowindow.class/IWM_OPEN&lt;br /&gt;
&lt;br /&gt;
  NAME&lt;br /&gt;
    IWM_OPEN -- Open the information window&lt;br /&gt;
&lt;br /&gt;
  SYNOPSIS&lt;br /&gt;
    int32 result = IDoMethodA(APTR obj, Msg msg);&lt;br /&gt;
    int32 result = IDoMethod(APTR obj, IWM_OPEN, NULL);&lt;br /&gt;
&lt;br /&gt;
  FUNCTION&lt;br /&gt;
    Opens the information window.&lt;br /&gt;
&lt;br /&gt;
  INPUTS&lt;br /&gt;
    obj - an infowindow object pointer&lt;br /&gt;
    msg - a Msg with MethodID = IWM_OPEN (see &amp;lt;intuition/classusr.h&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
  RESULT&lt;br /&gt;
    The number of the button (1, 2, 3...) the user has selected, or&lt;br /&gt;
    IWMRES_ERROR if the information window failed to open for some reason,&lt;br /&gt;
    IWMRES_CANCEL if the window was closed via the close gadget or Esc key,&lt;br /&gt;
    IWMRES_TIMEOUT if the window has timed out,&lt;br /&gt;
    IWMRES_BREAK if the window was closed via the SIGBREAKF_CTRL_C signal.&lt;br /&gt;
&lt;br /&gt;
  EXAMPLE&lt;br /&gt;
    &lt;br /&gt;
  NOTES&lt;br /&gt;
&lt;br /&gt;
  BUGS&lt;br /&gt;
    &lt;br /&gt;
  SEE ALSO&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1033</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1033"/>
		<updated>2021-02-14T14:37:59Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Toolbar attributes: updated TOOLBAR_TextPlace.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_PLACETEXT_BELOW&lt;br /&gt;
  TB_PLACETEXT_ABOVE (V53.6)&lt;br /&gt;
  TB_PLACETEXT_LEFT (V53.6)&lt;br /&gt;
  TB_PLACETEXT_RIGHT (V53.6)&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle or textbox members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: Multi-line text is supported: use &amp;quot;\n&amp;quot; as line separator in the text string.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar features a textbox member the contents of which is going to change dynamically, it is highly recommended that you also set TBMEMBER_DomainString (see below) at member creation time. This will guarantee a size to accommodate any text, so you won't have to perform WM_RETHINK to recalculate the textbox size each time TBMEMBER_Text changes. Updating the text can be done in one of the following ways:&lt;br /&gt;
&lt;br /&gt;
      (1)   IIntuition-&amp;gt;SetGadgetAttrs(toolbar, window, NULL,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
&lt;br /&gt;
      (2)   IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
         &lt;br /&gt;
              IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, textboxID, window);&lt;br /&gt;
&lt;br /&gt;
: The difference is that (1) performs the textbox update immediately, whereas with (2) you can set the value &amp;quot;quietly&amp;quot; and only display it when you're ready, by calling the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to the GA_TextAttr value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextPen value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the member text. Overrides TOOLBAR_TextStyle (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; style for the toolbar, configured via TOOLBAR_TextStyle. But there are situations where it makes sense to set a particular style at the member level, for example when using textbox members.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextStyle value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
Note: Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1032</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1032"/>
		<updated>2021-02-05T20:01:34Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle or textbox members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: Multi-line text is supported: use &amp;quot;\n&amp;quot; as line separator in the text string.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar features a textbox member the contents of which is going to change dynamically, it is highly recommended that you also set TBMEMBER_DomainString (see below) at member creation time. This will guarantee a size to accommodate any text, so you won't have to perform WM_RETHINK to recalculate the textbox size each time TBMEMBER_Text changes. Updating the text can be done in one of the following ways:&lt;br /&gt;
&lt;br /&gt;
      (1)   IIntuition-&amp;gt;SetGadgetAttrs(toolbar, window, NULL,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
&lt;br /&gt;
      (2)   IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
         &lt;br /&gt;
              IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, textboxID, window);&lt;br /&gt;
&lt;br /&gt;
: The difference is that (1) performs the textbox update immediately, whereas with (2) you can set the value &amp;quot;quietly&amp;quot; and only display it when you're ready, by calling the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to the GA_TextAttr value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextPen value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the member text. Overrides TOOLBAR_TextStyle (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; style for the toolbar, configured via TOOLBAR_TextStyle. But there are situations where it makes sense to set a particular style at the member level, for example when using textbox members.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextStyle value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
Note: Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1031</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1031"/>
		<updated>2021-02-05T20:00:30Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Image attributes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle or textbox members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: Multi-line text is supported: use &amp;quot;\n&amp;quot; as line separator in the text string.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar features a textbox member the contents of which is going to change dynamically, it is highly recommended that you also set TBMEMBER_DomainString (see below) at member creation time. This will guarantee a size to accommodate any text, so you won't have to perform WM_RETHINK to recalculate the textbox size each time TBMEMBER_Text changes. Updating the text can be done in one of the following ways:&lt;br /&gt;
&lt;br /&gt;
      (1)   IIntuition-&amp;gt;SetGadgetAttrs(toolbar, window, NULL,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
&lt;br /&gt;
      (2)   IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
         &lt;br /&gt;
              IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, textboxID, window);&lt;br /&gt;
&lt;br /&gt;
: The difference is that (1) performs the textbox update immediately, whereas with (2) you can set the value &amp;quot;quietly&amp;quot; and only display it when you're ready, by calling the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to the GA_TextAttr value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextPen value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the member text. Overrides TOOLBAR_TextStyle (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; style for the toolbar, configured via TOOLBAR_TextStyle. But there are situations where it makes sense to set a particular style at the member level, for example when using textbox members.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextStyle value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
Note: Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1030</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1030"/>
		<updated>2021-01-09T20:45:33Z</updated>

		<summary type="html">&lt;p&gt;Trixie: More updates.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle or textbox members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: Multi-line text is supported: use &amp;quot;\n&amp;quot; as line separator in the text string.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar features a textbox member the contents of which is going to change dynamically, it is highly recommended that you also set TBMEMBER_DomainString (see below) at member creation time. This will guarantee a size to accommodate any text, so you won't have to perform WM_RETHINK to recalculate the textbox size each time TBMEMBER_Text changes. Updating the text can be done in one of the following ways:&lt;br /&gt;
&lt;br /&gt;
      (1)   IIntuition-&amp;gt;SetGadgetAttrs(toolbar, window, NULL,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
&lt;br /&gt;
      (2)   IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
         &lt;br /&gt;
              IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, textboxID, window);&lt;br /&gt;
&lt;br /&gt;
: The difference is that (1) performs the textbox update immediately, whereas with (2) you can set the value &amp;quot;quietly&amp;quot; and only display it when you're ready, by calling the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to the GA_TextAttr value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextPen value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the member text. Overrides TOOLBAR_TextStyle (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; style for the toolbar, configured via TOOLBAR_TextStyle. But there are situations where it makes sense to set a particular style at the member level, for example when using textbox members.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextStyle value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, textboxes, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1029</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1029"/>
		<updated>2021-01-08T21:08:21Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Added TBMEMBER_TextStyle. Updated TBMEMBER_Text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar features a textbox member the contents of which is going to change dynamically, it is highly recommended that you also set TBMEMBER_DomainString (see below) at member creation time. This will guarantee a size to accommodate any text, so you won't have to perform WM_RETHINK to recalculate the textbox size each time TBMEMBER_Text changes. Updating the text can be done in one of the following ways:&lt;br /&gt;
&lt;br /&gt;
      (1)   IIntuition-&amp;gt;SetGadgetAttrs(toolbar, window, NULL,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
&lt;br /&gt;
      (2)   IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                        TOOLBAR_SetMember, textboxID,&lt;br /&gt;
                           TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                        TAG_END);&lt;br /&gt;
         &lt;br /&gt;
              IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, textboxID, window);&lt;br /&gt;
&lt;br /&gt;
: The difference is that (1) performs the textbox update immediately, whereas with (2) you can set the value &amp;quot;quietly&amp;quot; and only display it when you're ready, by calling the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to the GA_TextAttr value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextPen value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the member text. Overrides TOOLBAR_TextStyle (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; style for the toolbar, configured via TOOLBAR_TextStyle. But there are situations where it makes sense to set a particular style at the member level, for example when using textbox members.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to the TOOLBAR_TextStyle value&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1028</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1028"/>
		<updated>2021-01-08T20:03:11Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Added TOOLBAR_TextStyle. TBMEMBER_DomainString.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default backfill hook)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextStyle (uint8) (V53.4)&lt;br /&gt;
: A font style to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text style for the toolbar, set through this tag. However, you can override the global style and set a different one for individual members if needed; see TBMEMBER_TextStyle below.&lt;br /&gt;
: The styles are defined in the &amp;lt;graphics/text.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to FS_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1027</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1027"/>
		<updated>2021-01-08T13:15:14Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Method attributes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: An image set must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: An image must have a valid ID. The value of TB_NO_ID (~0UL) is not applicable here.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1026</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1026"/>
		<updated>2021-01-05T22:19:34Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Member attributes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR) (V53.4)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1025</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1025"/>
		<updated>2021-01-05T22:18:00Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated GA_TextAttr, TOOLBAR_TextPen and TBMEMBER_TextAttr. Added TBMEMBER_TextPen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar, set through this tag. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar, set through this tag. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *) (V53.4)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the member text. Overrides TOOLBAR_TextPen (see above).&lt;br /&gt;
: Generally, you should use one &amp;quot;global&amp;quot; pen for the toolbar, configured via TOOLBAR_TextPen. But there are situations where it makes sense to set a particular pen at the member level, for example when using textbox members.&lt;br /&gt;
: Prefer to use pens from the dri_Pens[] array in your screen's DrawInfo structure; see the &amp;lt;intuition/screens.h&amp;gt; system include file.&lt;br /&gt;
: Defaults to dri_Pens[TEXTPEN]&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1024</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1024"/>
		<updated>2021-01-05T14:33:24Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated GA_TextAttr. Added TOOLBAR_TextPen.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one font for the toolbar. However, you can override the global font and set a different one for individual members if needed; see TBMEMBER_TextAttr below.&lt;br /&gt;
: Defaults to NULL (will use the system's default public screen font).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPen (uint16) (V53.4)&lt;br /&gt;
: A pen to be used for the toolbar members' text.&lt;br /&gt;
: Generally, you should use one text pen for the toolbar. However, you can override the global pen and set a different one for individual members if needed; see TBMEMBER_TextPen below.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1023</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1023"/>
		<updated>2021-01-04T21:26:51Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* TBM_GETMEMBER */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
     &lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1022</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1022"/>
		<updated>2021-01-04T21:24:57Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* OM_SET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, memberID,&lt;br /&gt;
                 TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                 TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, groupID,&lt;br /&gt;
                 TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1021</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1021"/>
		<updated>2021-01-04T21:19:28Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated TBMEMBER_DomainString and TBMEMBER_Text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for the member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: If your toolbar has a textbox member the contents of which is going to change dynamically, updating TBMEMBER_Text should be done like this:&lt;br /&gt;
&lt;br /&gt;
        IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                    TOOLBAR_SetMember, memberID,&lt;br /&gt;
                       TBMEMBER_Text, &amp;quot;New text&amp;quot;,&lt;br /&gt;
                    TAG_END);&lt;br /&gt;
         &lt;br /&gt;
        IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
: Also, you should set TBMEMBER_DomainString for the textbox (see below). This will guarantee a required minimum size to fit any text, so you won't have to perform WM_RETHINK to recalculate the member size each time TBMEMBER_Text changes.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length. The domain string ought to be at least as long as the longest text to appear in the textbox.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1020</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1020"/>
		<updated>2021-01-04T20:57:22Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated TOOLBAR_TextPlace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH. Plus, it only affects button and toggle members.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1019</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1019"/>
		<updated>2021-01-02T21:19:16Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated TBMEMBER_Text.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The text to associate with a button, toggle or textbox member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text will be used as fallback in case no image is found or provided for a button or a toggle member.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member. (This doesn't apply to textbox members, as they are read-only and don't respond to the keyboard.)&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1018</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1018"/>
		<updated>2021-01-02T20:59:11Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Added documentation for TBMEMBER_TextAttr.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the member text. This tag overrides GA_TextAttr (see above).&lt;br /&gt;
: You should generally use one &amp;quot;global&amp;quot; font for the toolbar, configured via GA_TextAttr. But there are situations where it makes sense to set a particular font at the member level, for example when using textbox members.&lt;br /&gt;
: Defaults to NULL.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1017</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1017"/>
		<updated>2021-01-02T14:02:46Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Added TBMEMBER_DomainString documentation. Updated GA_TextAttr and TBMEMBER_Type.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget members' text.&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON -- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE -- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER -- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
  TB_MTYPE_TEXTBOX -- a read-only box to display text (V53.4)&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_DomainString (CONST_STRPTR)&lt;br /&gt;
: A text string based on which the minimum size of the member will be calculated. This is useful especially with TB_MTYPE_TEXTBOX members when you want to enforce a minimum size required to fit text of variable length.&lt;br /&gt;
: The domain string is never rendered in the gadget.&lt;br /&gt;
: This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_DomainString value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Enhancer_Software&amp;diff=1016</id>
		<title>Enhancer Software</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Enhancer_Software&amp;diff=1016"/>
		<updated>2021-01-02T13:22:24Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Added the ToolBar Gadget page link to the Contents section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Enhancer_Software_Icon.png]]&lt;br /&gt;
|The Enhancer Software is a collection of utilities, commodities, classes, datatypes and libraries with the aim of enhancing the AmigaOS experience.  &lt;br /&gt;
&lt;br /&gt;
It is distibuted both as a digital download from AMIStore App Store and [[Updater]] tool.  It is also available as a [[Enhancer Software Box|boxed CD]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:EnhancerSoftwareV1.3.jpg|center|250px]]&lt;br /&gt;
|[[File:enhancer_software_box.png|center|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
The following releases of the Enhancer Software have been made:&lt;br /&gt;
&lt;br /&gt;
=== Current ===&lt;br /&gt;
&lt;br /&gt;
Version 1.5 released on 30th June 2019 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
=== Historical ===&lt;br /&gt;
&lt;br /&gt;
[[Enhancer Software 1.4|Version 1.4]] released on 9th September 2018 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
[[Enhancer Software 1.3|Version 1.3]] released on 19th July 2017 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
[[Enhancer Software 1.2|Version 1.2]] released on 27th December 2016 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
[[Enhancer Software 1.1|Version 1.1]] released on 31st August 2016 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
[[Enhancer Software 1.0|Version 1.0]] released on 1st May 2016 for OS4 platform.&lt;br /&gt;
&lt;br /&gt;
== Editions ==&lt;br /&gt;
&lt;br /&gt;
There are three editions of the Enhancer Software:&lt;br /&gt;
&lt;br /&gt;
* '''Special Edition''': this edition contains all files except the [[RadeonHD]] graphics driver, [[Warp3D Nova]] and [[CANDI]].  &lt;br /&gt;
&lt;br /&gt;
* '''Standard Edition''': this edition features all files including the version 1 series [[RadeonHD]] driver.  &lt;br /&gt;
&lt;br /&gt;
* '''Plus Edition''': this edition features all files including the version 2 series [[RadeonHD]] driver.&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
&lt;br /&gt;
These components which are installed across the system as follows:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|- style=&amp;quot;width: 50%; vertical-align: top&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
'''C'''&lt;br /&gt;
&lt;br /&gt;
* [[RequestChooser]]&lt;br /&gt;
* [[SystemReboot]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Commodities:'''&lt;br /&gt;
&lt;br /&gt;
* [[ClipViewer]]&lt;br /&gt;
&lt;br /&gt;
* [[Exchanger]]&lt;br /&gt;
&lt;br /&gt;
* [[TimeGuard]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Classes:'''&lt;br /&gt;
&lt;br /&gt;
* [[Anim Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* [[Clock Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* DateSheet Gadget Class&lt;br /&gt;
&lt;br /&gt;
* InfoData Gadget Class&lt;br /&gt;
    &lt;br /&gt;
* [[InfoWindow Class]]&lt;br /&gt;
&lt;br /&gt;
* ListViewer Gadget Class&lt;br /&gt;
&lt;br /&gt;
* MediaDeck Gadget Class&lt;br /&gt;
&lt;br /&gt;
* OptionButton Gadget Class&lt;br /&gt;
&lt;br /&gt;
* PieChart Gadget Class&lt;br /&gt;
&lt;br /&gt;
* [[ProgressBar Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* Shared Image Class&lt;br /&gt;
&lt;br /&gt;
* Select Gadget Class&lt;br /&gt;
&lt;br /&gt;
* Sliderbar Gadget Class&lt;br /&gt;
&lt;br /&gt;
* [[TickBox Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* Time Gadget Class&lt;br /&gt;
&lt;br /&gt;
* [[ToolBar Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Datatypes:'''&lt;br /&gt;
&lt;br /&gt;
* Info Datatype&lt;br /&gt;
&lt;br /&gt;
* MPEGA Datatype&lt;br /&gt;
&lt;br /&gt;
* MOD Datatype&lt;br /&gt;
&lt;br /&gt;
* SimpleHTML Datatype&lt;br /&gt;
&lt;br /&gt;
* [[Sound Datatype]]&lt;br /&gt;
&lt;br /&gt;
* WAV Datatype&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Devs:'''&lt;br /&gt;
&lt;br /&gt;
* A1222eth.device&lt;br /&gt;
&lt;br /&gt;
* HDAudio.audio&lt;br /&gt;
&lt;br /&gt;
* p50x0_eth.device&lt;br /&gt;
&lt;br /&gt;
* usbadm8511.device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Kickstart:'''&lt;br /&gt;
&lt;br /&gt;
* Diskcache Library&lt;br /&gt;
&lt;br /&gt;
* [[RadeonHD]]&lt;br /&gt;
&lt;br /&gt;
* [[SmartFileSystem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''L:'''&lt;br /&gt;
&lt;br /&gt;
* [[SSH2-Handler]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
'''Libraries:'''&lt;br /&gt;
&lt;br /&gt;
* Codesets Library&lt;br /&gt;
&lt;br /&gt;
* EXIF Library&lt;br /&gt;
&lt;br /&gt;
* Expat Library&lt;br /&gt;
&lt;br /&gt;
* FileSysBox Library&lt;br /&gt;
&lt;br /&gt;
* Geocode Library&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES 2.0|OGLES2 Library]]  &lt;br /&gt;
&lt;br /&gt;
* [[Warp3D Nova|Warp3DN Library]]&lt;br /&gt;
&lt;br /&gt;
* [[Warp3D Nova|Warp3DN_SI Library]]&lt;br /&gt;
&lt;br /&gt;
* Zip Library&lt;br /&gt;
&lt;br /&gt;
* Z Library&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Prefs:'''&lt;br /&gt;
&lt;br /&gt;
* AmiSpherePrefs&lt;br /&gt;
&lt;br /&gt;
* [[CANDI|CANDIPrefs]] &lt;br /&gt;
&lt;br /&gt;
* [[Ringhio_Notifications|Notifications Prefs]]&lt;br /&gt;
&lt;br /&gt;
* [[Sound_Preferences|Sound Prefs]]&lt;br /&gt;
&lt;br /&gt;
* [[Time_Preferences|Time Prefs]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SDK:'''&lt;br /&gt;
&lt;br /&gt;
* [[ClipViewer]]&lt;br /&gt;
&lt;br /&gt;
* [[Clock Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* DateSheetGadget&lt;br /&gt;
&lt;br /&gt;
* DockLib&lt;br /&gt;
&lt;br /&gt;
* EXIF&lt;br /&gt;
&lt;br /&gt;
* Expat&lt;br /&gt;
&lt;br /&gt;
* FileSysBox&lt;br /&gt;
&lt;br /&gt;
* Geocode&lt;br /&gt;
&lt;br /&gt;
* [[InfoWindow Class]]&lt;br /&gt;
&lt;br /&gt;
* [[OpenGL ES 2.0]] &lt;br /&gt;
&lt;br /&gt;
* OptionButton Gadget Class&lt;br /&gt;
&lt;br /&gt;
* PieChart Gadget Class&lt;br /&gt;
&lt;br /&gt;
* Progressbar Gadget Class&lt;br /&gt;
&lt;br /&gt;
* Shared Image Class&lt;br /&gt;
&lt;br /&gt;
* [[Sound Datatype]]&lt;br /&gt;
&lt;br /&gt;
* [[TickBox Gadget Class]]&lt;br /&gt;
&lt;br /&gt;
* Translations&lt;br /&gt;
&lt;br /&gt;
* [[Warp3D Nova]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''System:'''&lt;br /&gt;
&lt;br /&gt;
* AmiSphereServer&lt;br /&gt;
&lt;br /&gt;
* [[Format]]&lt;br /&gt;
&lt;br /&gt;
* [[Ringhio_Notifications|NotificationServer]]&lt;br /&gt;
&lt;br /&gt;
* [[Updater]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Utilities:'''&lt;br /&gt;
&lt;br /&gt;
* AmiDVD&lt;br /&gt;
&lt;br /&gt;
* AmiPDF&lt;br /&gt;
&lt;br /&gt;
* [[CANDI]]&lt;br /&gt;
&lt;br /&gt;
* [[Calendar]]  &lt;br /&gt;
&lt;br /&gt;
* [[Clock]]&lt;br /&gt;
&lt;br /&gt;
* [[InfoWindow]]    &lt;br /&gt;
&lt;br /&gt;
* [[MultiEdit]]&lt;br /&gt;
&lt;br /&gt;
* [[Multiviewer]]&lt;br /&gt;
&lt;br /&gt;
* PartitionWizard&lt;br /&gt;
&lt;br /&gt;
* [[TuneNet]]&lt;br /&gt;
&lt;br /&gt;
* [[X-Dock]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Enhancer_Software_Installation_Files.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please read these important notes before installing the Enhancer Software on your hard disk drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To install the Enhancer Software to your system, please double click the ''Install_Enhancer_Software'' icon as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Enhancer_Software_Installation.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The End-User Licence Agreement will be displayed which needs to be reviewed.  If you agree to the terms, then click the '''Agree''' button to continue to the main Installation of the software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Enhancer_Software_EULA_Window.png|center|250px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Installation will then ask you if you wish to backup any files that could be overwritten by the Enhancer Software Installation process.  It is recommended that you select '''Yes'''.  If you do this, once you press '''Proceed''' button, you will then be asked the location to store on your hard disk where the files will be backed up to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are two icon drawer sets available to install for selected Utilities and Commodities.  The standard blue icon set mimics the default look of OS4.1 drawers.  Alternatively the black icon set introduces the new icon style that the Enhancer Software uses. The installation process will prompt you to choose the icon set you want to use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The components of the Enhancer Software sections are installed in this order:&lt;br /&gt;
&lt;br /&gt;
1. Datatypes:&lt;br /&gt;
    Info Datatype&lt;br /&gt;
    LogFile Datatype&lt;br /&gt;
    MPEGA Datatype &lt;br /&gt;
    MOD Datatype&lt;br /&gt;
    SimpleHTML Datatype&lt;br /&gt;
    Sound Datatype&lt;br /&gt;
    WAV Datatype&lt;br /&gt;
    &lt;br /&gt;
2. Gadgets and Classes:&lt;br /&gt;
    Anim Gadget Class&lt;br /&gt;
    Clock Gadget Class&lt;br /&gt;
    DateSheet Gadget Class &lt;br /&gt;
    InfoData Gadget Class &lt;br /&gt;
    InfoWindow Class&lt;br /&gt;
    ListViewer Gadget Class &lt;br /&gt;
    MediaDeck Gadget Class &lt;br /&gt;
    OptionButton Gadget Class&lt;br /&gt;
    PieChart Gadget Class &lt;br /&gt;
    ProgressBar Gadget Class&lt;br /&gt;
    Select Gadget Class &lt;br /&gt;
    SliderBar Gadget Class&lt;br /&gt;
    Shared Image Class&lt;br /&gt;
    Thumblist Gadget Class    &lt;br /&gt;
    TickBox Gadget Class&lt;br /&gt;
    Time Gadget&lt;br /&gt;
&lt;br /&gt;
3. System:&lt;br /&gt;
    AmiSphereServer&lt;br /&gt;
    Format &lt;br /&gt;
    NotificationServer&lt;br /&gt;
    Updater&lt;br /&gt;
&lt;br /&gt;
4. Utilities:&lt;br /&gt;
    AmiDVD&lt;br /&gt;
    AmiPDF&lt;br /&gt;
    Calendar&lt;br /&gt;
    CANDI and CANDI Preferences ¹  &lt;br /&gt;
    Clock  &lt;br /&gt;
    InfoWindow    &lt;br /&gt;
    MultiEdit ¹&lt;br /&gt;
    MultiViewer ¹&lt;br /&gt;
    PartitionWizard&lt;br /&gt;
    TuneNet&lt;br /&gt;
    X-Dock&lt;br /&gt;
&lt;br /&gt;
5. Commodities:&lt;br /&gt;
    ClipViewer ¹&lt;br /&gt;
    Exchanger ¹ &lt;br /&gt;
&lt;br /&gt;
6. Libraries&lt;br /&gt;
    Codesets&lt;br /&gt;
    Expat&lt;br /&gt;
    EXIF &lt;br /&gt;
    Filesysbox&lt;br /&gt;
    Geocode   &lt;br /&gt;
    OpenGL ES 2.0&lt;br /&gt;
    Warp3D Nova&lt;br /&gt;
    Zip&lt;br /&gt;
    Z&lt;br /&gt;
&lt;br /&gt;
7. Kickstart:&lt;br /&gt;
    Diskcache Library&lt;br /&gt;
    RadeonHD v2&lt;br /&gt;
    SmartFileSystem 2    &lt;br /&gt;
&lt;br /&gt;
8. CLI Commands and Tools:&lt;br /&gt;
    RequestChooser&lt;br /&gt;
    SystemReboot        &lt;br /&gt;
&lt;br /&gt;
9. Preferences&lt;br /&gt;
    Notifications Preferences&lt;br /&gt;
    Sound Preferences&lt;br /&gt;
    Time Preferences&lt;br /&gt;
    &lt;br /&gt;
10.Devices&lt;br /&gt;
    A1222 Ethernet Driver&lt;br /&gt;
    PTP USB Driver    &lt;br /&gt;
    SSH2-Handler&lt;br /&gt;
    USBADM8511 Ethernet Driver&lt;br /&gt;
    X5000 Ethernet Driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
¹ Some components from the Enhancer Software will install the image data they require for their User Interface in the Prefs/Presets drawer of your system partition.  it is recommended not to change this, however, some more experienced users may want to install this data in an alternative location on their hard disks.  If this is the case, you can change the default location from Presets to another bespoke location on your hard disk drive.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Gadgets_Icon.png|center]]&lt;br /&gt;
|&amp;lt;u&amp;gt;Gadgets and Classes&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The majority of content in the Enhancer Software requires the gadgets and classes that are supplied and will not operate correctly without these being installed.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Documentation_Icon.png|center]]&lt;br /&gt;
|&amp;lt;u&amp;gt;Documentation&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, all documentation for the components of the Enhancer Software are stored in the Documentation drawer of your system partition.  There are options to install the documentation to an alternative location of your choice.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[File:SDK_Icon.png|center]]&lt;br /&gt;
|&amp;lt;u&amp;gt;Software Development Kit (SDK)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are a developer and have the SDK installed on your system, then any components with SDK files available can be optionally installed. &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Catalogs_Icon.png|center]]&lt;br /&gt;
|&amp;lt;u&amp;gt;Catalog Language Files&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lot of the Enhancer Software components have support for various languages.  These Catalog files can be optionally installed wherever available. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For both the SDK and Catalog language files, there is an option to skip the prompt and let the installer automatically remember your choices.  The first time the SDK or Catalog Language files prompt appears, a requester window will ask if you wish to apply the installation choice to every supported component in the Enhancer Software.  Click the ''Apply To All'' button to do this.  Alternatively if you wish to continue to receive prompts, then click the ''Always Prompt'' button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:installchoicerequester.png|center|250px]]&lt;br /&gt;
|[[File:installcatalogsrequester.png|center|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the end of the installation, a message will report how many installed components need a &amp;quot;soft&amp;quot; or &amp;quot;hard&amp;quot; reboot of your system.  The installed components that require a &amp;quot;soft&amp;quot; reboot either start from the WBStartUp or require an assign in your system's s/user-startup file.  The components that require a &amp;quot;hard&amp;quot; reboot may need adding to the system's '''Kickstart/Kicklayout''' file and are activated during the initialisation of the Kickstart.&lt;br /&gt;
&lt;br /&gt;
=Register and download updates=&lt;br /&gt;
&lt;br /&gt;
In between Enhancer Software releases, individual updated files are available to download through the [[Updater]] tool.  In order to access these files, users will need to open an AmiSphere account and register the Enhancer Software product key code against this AmiSphere account.&lt;br /&gt;
&lt;br /&gt;
[https://www.amisphere.com/register_user.php AmiSphere account registration]&lt;br /&gt;
&lt;br /&gt;
[https://www.amisphere.com/register_product.php Enhancer Software product registration]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Forums=&lt;br /&gt;
&lt;br /&gt;
An official discussion and support forum is available for end users.  Please refer to the following link:&lt;br /&gt;
&lt;br /&gt;
[https://forum.amiga.org/enhancersoftware https://forum.amiga.org/enhancersoftware]&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1008</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1008"/>
		<updated>2020-11-28T22:04:56Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. [[#Image attributes|Image attributes]] cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1007</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1007"/>
		<updated>2020-11-28T21:59:48Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Updated to include the changes for V53.3.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|TBM_REFRESHMEMBER&lt;br /&gt;
|refreshes the imagery of a given member (see the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: When [[#OM_SET|OM_SET]]-ing this attribute, the method will always return TB_NEED_RETHINK, to be on the safe side. However, invoking WM_RETHINK is really only needed if the size of the new image is different from the original image. If the size is the same, a simple gadget refresh will suffice. You can trigger the refresh:&lt;br /&gt;
:* by setting this attribute via RefreshSetGadgetAttrs(), or&lt;br /&gt;
:* by setting this attribute via SetAttrs() and then invoking the [[#TBM_REFRESHMEMBER|TBM_REFRESHMEMBER]] method on the respective button/toggle member.&lt;br /&gt;
: (The difference is that RefreshSetGadgetAttrs() will refresh the entire toolbar, while TBM_REFRESHMEMBER will only refresh the given member.)&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if the gadget ''believes'' that one or more of the attributes will change the sizing requirements of the toolbar. Typically, invoking the WM_RETHINK method on the gadget's window object is needed, in order to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0L if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
&lt;br /&gt;
=== TBM_REFRESHMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_REFRESHMEMBER -- refresh the imagery of a given member (V53.3)&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbRefreshMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 memberID, struct Window *window);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to refresh the imagery of a given button or toggle member.&lt;br /&gt;
: The method has no effect on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  msg      -- a pointer to an initialized tbRefreshMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
  toolbar  -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_REFRESHMEMBER&lt;br /&gt;
  memberID -- the member identifier (as set in TOOLBAR_AddMember)&lt;br /&gt;
  window   -- a pointer to the window the toolbar resides in&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the refresh has taken place.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_REFRESHMEMBER, memberID, window);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
    &lt;br /&gt;
; BUGS&lt;br /&gt;
    &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1006</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1006"/>
		<updated>2020-10-31T13:31:59Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Supported methods ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Method ID&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|OM_NEW&lt;br /&gt;
|creates the toolbar object, sets attributes and defaults&lt;br /&gt;
|-&lt;br /&gt;
|OM_DISPOSE&lt;br /&gt;
|disposes of the toolbar object&lt;br /&gt;
|-&lt;br /&gt;
|OM_REMMEMBER&lt;br /&gt;
|used by the class internally; consider this method private&lt;br /&gt;
|-&lt;br /&gt;
|OM_SET&lt;br /&gt;
|sets toolbar, member and image attributes (see the [[#OM_SET|OM_SET]] section below for more information)&lt;br /&gt;
|-&lt;br /&gt;
|OM_GET&lt;br /&gt;
|retrieves toolbar attributes&lt;br /&gt;
|-&lt;br /&gt;
|TBM_GETMEMBER&lt;br /&gt;
|retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is ([[#OM_SET|OM_SET]])&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, [[#OM_SET|OM_SET]], OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if one or more of the attributes change the sizing requirements of the gadget. In such a case, the appropriate reaction is to call WM_RETHINK on the gadget's window object to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
:* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
:* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  msg -- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage -- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID, TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1005</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1005"/>
		<updated>2020-10-31T09:07:46Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_Image (struct Image *)&lt;br /&gt;
: Custom image to be used for a button or a toggle member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
: Custom image to display when the member becomes selected.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
: The full path to the source file to create the select image from. The image will be loaded and built using the Shared Image class.&lt;br /&gt;
: All images created this way will also be disposed of automatically.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
;TBIMAGE_Width (uint32)&lt;br /&gt;
;TBIMAGE_Height (uint32)&lt;br /&gt;
: Image dimensions, in pixels. These tags can only be used in connection with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the respective source file will be scaled to the specified width and height. Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot be resized using these tags.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Some of the attributes described above change the sizing requirements of the gadget. If set on the fly (i.e. when the toolbar is already displayed in the window), the gadget domain will need recalculating and a re-layout must take place. Refer to the [[#OM_SET|OM_SET]] method documentation below to see how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image. Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
: uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win, struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: This method sets the attributes of the toolbar and/or of its members. SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions to invoke this method.&lt;br /&gt;
: To change a member attribute you first need to pass TOOLBAR_SetMember to identify the respective member, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
: To change an attribute collectively for a group of members you first need to pass TOOLBAR_SetGroup to identify the respective group, and then the member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
  toolbar -- the toolbar gadget object&lt;br /&gt;
  win -- the window that hosts the toolbar&lt;br /&gt;
  req -- requester pointer (use NULL)&lt;br /&gt;
  tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: This method will return TB_NEED_RETHINK if one or more of the attributes change the sizing requirements of the gadget. In such a case, the appropriate reaction is to call WM_RETHINK on the gadget's window object to recalculate the domain and re-layout the contents.&lt;br /&gt;
: If you know you will be changing an attribute that requires a WM_RETHINK, prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
: The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To set various toolbar attributes:&lt;br /&gt;
  if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
; SYNOPSIS&lt;br /&gt;
: uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
: uint32 result = IDoMethod(Object *toolbar, uint32 methodID, uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
; FUNCTION&lt;br /&gt;
: Use this method to obtain the value of a given member attribute.&lt;br /&gt;
: Because of the way OM_GET is implemented in Intuition, getting member attributes is done differently compared to setting them. The difference boils down to the following:&lt;br /&gt;
&lt;br /&gt;
* We cannot use a convenience function such as GetAttr() or GetAttrs(), so a dedicated method is provided. Refer to the EXAMPLE section below to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
* Only one attribute can be queried at a time. (As multiple attributes will rarely be requested in real use, this limitation should not pose a significant problem.)&lt;br /&gt;
&lt;br /&gt;
; INPUTS&lt;br /&gt;
* For IDoMethodA():&lt;br /&gt;
&lt;br /&gt;
  toolbar-- the toolbar gadget object&lt;br /&gt;
  msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
* For IDoMethod():&lt;br /&gt;
&lt;br /&gt;
  toolbar-- the toolbar gadget object&lt;br /&gt;
  methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
  attrID -- the attribute tag identifier&lt;br /&gt;
  storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
; RESULT&lt;br /&gt;
: The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been obtained successfully. The attribute value itself is returned in the provided storage variable.&lt;br /&gt;
&lt;br /&gt;
; EXAMPLE&lt;br /&gt;
&lt;br /&gt;
  // To query about the selection state of a toggle member:&lt;br /&gt;
  uint32 storage;&lt;br /&gt;
&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
; NOTES&lt;br /&gt;
  &lt;br /&gt;
; BUGS&lt;br /&gt;
  &lt;br /&gt;
; SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1004</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1004"/>
		<updated>2020-10-31T07:47:39Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the [[#TBM_GETMEMBER|TBM_GETMEMBER]] section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
: Creates a new image set. The value passed to this tag is a numeric ID identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to display the particular image set in the toolbar.&lt;br /&gt;
: This tag should be followed by a sequence of TOOLBAR_AddImage tags (see below), each creating one image in the given set.&lt;br /&gt;
: If the gadget only uses one set of images, passing TOOLBAR_AddImageSet is not necessary. Each TOOLBAR_AddImage will add the respective image to the default image set identified by an ID of 0.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddImage (uint32)&lt;br /&gt;
: Creates a new image in a given image set. The value passed to this tag is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID (see below) to associate the image with a particular toolbar member.&lt;br /&gt;
: This tag should be followed by a sequence of TBIMAGE_ tags (see the [[#Image attributes|Image attributes]] section below), each configuring one aspect of the image, including its optional selected variant (referred to as the &amp;quot;select image&amp;quot;).&lt;br /&gt;
: Images are added to the default image set unless a preceding TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_AddMember (uint32)&lt;br /&gt;
: Creates a new toolbar member. The value passed to this tag is a numeric ID identifying the member.&lt;br /&gt;
: Spacers and separators normally don't need an ID, so you can use TB_NO_ID as a value for TOOLBAR_AddMember when creating these members. However, if you want to manipulate spacers/separators in your GUI, an ID will be necessary so that you can pass it to TOOLBAR_SetMember to identify the respective spacer or separator member.&lt;br /&gt;
: You can add members when the toolbar object is being created, i.e. as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetMember&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the member you want to modify.&lt;br /&gt;
: Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SetGroup&lt;br /&gt;
: Use this tag in a SetAttrs() call to identify the group of members you want to modify collectively.&lt;br /&gt;
: Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Type (uint32)&lt;br /&gt;
: The type of the toolbar member. The possible values are the following:&lt;br /&gt;
&lt;br /&gt;
  TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
  TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
  TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
  TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
: The type is set upon member creation, and cannot be changed.&lt;br /&gt;
: Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_ImageID (uint32)&lt;br /&gt;
: The identifier of the image to be used for the button or toggle member (see TOOLBAR_AddImage above). This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
: The label to associate with a button or a toggle member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
: The text label will be used as fallback in case no image is found or provided.&lt;br /&gt;
: The text string can contain an underscore character (_), indicating the keyboard shortcut for this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Disabled (BOOL)&lt;br /&gt;
: The current state (disabled or not disabled) of a member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Disabled value of such a member.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Hidden (BOOL)&lt;br /&gt;
: Specifies whether the particular member is displayed in the toolbar or hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that adapt the actual member set to various application settings.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Selected (BOOL)&lt;br /&gt;
: The current selection state of a toggle member. This tag is not relevant to normal buttons (TB_MTYPE_BUTTON), spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return FALSE should you inquire about the TBMEMBER_Selected value of such a member.&lt;br /&gt;
: You can set a target BOOPSI object for any toggle member, using the standard icclass ICA_TARGET tag. The target will receive an automatic notification of the toggle selection. This way toolbar toggles can easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_Group (uint32)&lt;br /&gt;
: Member group ID. Several members can be manipulated at once if they are assigned to the same group. Use TOOLBAR_SetGroup with the respective group ID to identify the group to be manipulated.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_MXGroup (uint32)&lt;br /&gt;
: MX group ID. Toggle members can be put in groups of mutually-exclusive buttons. When such a toggle is selected, all other toggles in the same MX group will become deselected.&lt;br /&gt;
: This tag is not relevant to normal buttons, spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return TB_NO_ID should you inquire about the TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
: Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
: The help text to be displayed when the user hovers the mouse pointer over the respective member. This tag is not relevant to spacers and separators; [[#TBM_GETMEMBER|TBM_GETMEMBER]] will always return NULL should you inquire about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
; TBMEMBER_UserData (APTR)&lt;br /&gt;
: Arbitrary user data associated with this member.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, [[#TBM_GETMEMBER|TBM_GETMEMBER]])&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1003</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1003"/>
		<updated>2020-10-31T06:39:15Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding&lt;br /&gt;
; TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1002</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1002"/>
		<updated>2020-10-31T06:34:07Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
; GA_ID (uint16)&lt;br /&gt;
: Unique ID number for the gadget.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_ReadOnly (BOOL)&lt;br /&gt;
: If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; GA_BackFill (struct Hook *)&lt;br /&gt;
: A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
: Defaults to NULL (the default backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; GA_TextAttr (struct TextAttr *)&lt;br /&gt;
: Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
: Defaults to the system's default public screen font.&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Orientation (uint32)&lt;br /&gt;
: The toolbar orientation: horizontal or vertical.&lt;br /&gt;
: Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Spacing (uint32)&lt;br /&gt;
: The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
: Defaults to 2&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HorizPadding / TOOLBAR_VertPadding (uint32)&lt;br /&gt;
: The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
: The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
: Defaults to 4&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
: Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_MinVisible (uint32)&lt;br /&gt;
: If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
: Defaults to 1&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
: The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
: Defaults to 5&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
: The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
: Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
: The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
: When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
: Defaults to BVS_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
: Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
: Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
: Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
: This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
: Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
: A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
: This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
: Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_Display (uint32)&lt;br /&gt;
: Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
: Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_TextPlace (uint32)&lt;br /&gt;
: Specifies the placement of the text labels with regard to the toolbar images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
: Use this tag to create a minimum-configuration, text-only toolbar. You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
: TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
: Using this tag, the limitation is that you cannot create toggle members (only buttons, separators and spacers).&lt;br /&gt;
: A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
: A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
: Spacers and separators cannot appear as the very first member in the toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
: The button strings are copied to an internal buffer, so the label array need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
: Defaults to NULL&lt;br /&gt;
: Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
: If set to TRUE, this attribute will size all button and toggle members evenly according to the largest member. The attribute has no effect on spacers and separators.&lt;br /&gt;
: If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above) and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway, and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
: Defaults to FALSE&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
; TOOLBAR_ImageSet (uint32)&lt;br /&gt;
: If more than one image set have been configured via TOOLBAR_AddImageSet (see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
: Defaults to 0&lt;br /&gt;
: Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1001</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1001"/>
		<updated>2020-10-30T22:54:54Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
GA_ID (uint16)&lt;br /&gt;
&lt;br /&gt;
Unique ID number for the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_ReadOnly (BOOL)&lt;br /&gt;
&lt;br /&gt;
If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_BackFill (struct Hook *)&lt;br /&gt;
&lt;br /&gt;
A backfill hook to provide a background filled with a specific colour or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
GA_TextAttr (struct TextAttr *)&lt;br /&gt;
&lt;br /&gt;
Pointer to a TextAttr structure describing the font to be used for the gadget's button text labels (if they are used).&lt;br /&gt;
&lt;br /&gt;
Defaults to the system's default public screen font.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Orientation (uint32)&lt;br /&gt;
&lt;br /&gt;
The toolbar orientation: horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Spacing (uint32)&lt;br /&gt;
&lt;br /&gt;
The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
&lt;br /&gt;
Defaults to 2&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HorizPadding / TOOLBAR_VertPadding (uint32)&lt;br /&gt;
&lt;br /&gt;
The horizontal/vertical distance, in pixels, between the toolbar members and the gadget border (or outer bevel, if displayed - see TOOLBAR_BevelStyle below).&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
&lt;br /&gt;
The distance, in pixels, between the member contents (image and/or text) and the button frame. Changing this setting will affect the size of the toolbar members.&lt;br /&gt;
&lt;br /&gt;
Defaults to 4&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
&lt;br /&gt;
Overflow is a situation when there is not enough space to fit all toolbar members within the current window. If this tag is set to TRUE, all members that don't fit will be moved into a pop-up menu whenever overflow takes place. A selector to invoke the menu will be displayed on the right.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_MinVisible (uint32)&lt;br /&gt;
&lt;br /&gt;
If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the specified number of members (including spacers and separators) will always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
&lt;br /&gt;
Defaults to 1&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
&lt;br /&gt;
The size of the spacer member, in pixels. This value will affect the width (in a horizontal toolbar) or the height (in a vertical toolbar) of the spacer.&lt;br /&gt;
&lt;br /&gt;
Defaults to 5&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
&lt;br /&gt;
The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce a traditional-looking toolbar with framed buttons, whereas TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
&lt;br /&gt;
The style of the gadget's outer bevel (frame). The Bevel Image class is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to this tag (although not all of them make good sense to use with the toolbar). The recommended values are:&lt;br /&gt;
&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar buttons), make sure that you also adjust TOOLBAR_HorizPadding and TOOLBAR_VertPadding, otherwise the outer bevel will interfere with the button frames.&lt;br /&gt;
&lt;br /&gt;
Defaults to BVS_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
&lt;br /&gt;
Determines the look of the separator member. If you want to change it on the fly while the window is open, call SetGadgetAttrs() rather than SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
&lt;br /&gt;
Determines how member selection is indicated in the borderless mode. If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the selection: the programmer must provide a select image for each button or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below), otherwise there will be no visual response. If the tag is set to TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around the member to indicate the selection.&lt;br /&gt;
&lt;br /&gt;
This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
&lt;br /&gt;
A custom backfill hook to provide a background filled with a specific colour or pattern.&lt;br /&gt;
&lt;br /&gt;
This tag is meant to replace GA_BackFill because if the toolbar gadget is placed in a layout, the value of GA_BackFill can only be set after the window opens (this is because the Layout Gadget propagates its own backfill to all of its children). TOOLBAR_BackFill is provided as a convenience tag that overrides GA_BackFill, and allows setting your backfill hook even before the window opens.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display (uint32)&lt;br /&gt;
&lt;br /&gt;
Specifies what you want to display inside the toolbar button or toggle members. The possible values are:&lt;br /&gt;
&lt;br /&gt;
  TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
  TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
  TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_TextPlace (uint32)&lt;br /&gt;
&lt;br /&gt;
Specifies the placement of the text labels with regard to the toolbar&lt;br /&gt;
images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to&lt;br /&gt;
TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
&lt;br /&gt;
Use this tag to create a minimum-configuration, text-only toolbar.&lt;br /&gt;
You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore&lt;br /&gt;
character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
&lt;br /&gt;
Using this tag, the limitation is that you cannot create toggle members&lt;br /&gt;
(only buttons, separators and spacers).&lt;br /&gt;
&lt;br /&gt;
A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators cannot appear as the very first member in the&lt;br /&gt;
toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid&lt;br /&gt;
string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
&lt;br /&gt;
The button strings are copied to an internal buffer, so the label array&lt;br /&gt;
need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
&lt;br /&gt;
If set to TRUE, this attribute will size all button and toggle members&lt;br /&gt;
evenly according to the largest member. The attribute has no effect&lt;br /&gt;
on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above)&lt;br /&gt;
and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway,&lt;br /&gt;
and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible&lt;br /&gt;
result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ImageSet (uint32)&lt;br /&gt;
&lt;br /&gt;
If more than one image set have been configured via TOOLBAR_AddImageSet&lt;br /&gt;
(see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform&lt;br /&gt;
various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1000</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=1000"/>
		<updated>2020-10-30T22:49:51Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
GA_ID (uint16)&lt;br /&gt;
Unique ID number for the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_ReadOnly (BOOL)&lt;br /&gt;
If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_BackFill (struct Hook *)&lt;br /&gt;
A backfill hook to provide a background filled with a specific colour&lt;br /&gt;
or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
GA_TextAttr (struct TextAttr *)&lt;br /&gt;
Pointer to a TextAttr structure describing the font to be used for&lt;br /&gt;
the gadget's button text labels (if they are used).&lt;br /&gt;
&lt;br /&gt;
Defaults to the system's default public screen font.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Orientation (uint32)&lt;br /&gt;
The toolbar orientation: horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Spacing (uint32)&lt;br /&gt;
The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
&lt;br /&gt;
Defaults to 2&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HorizPadding&lt;br /&gt;
TOOLBAR_VertPadding (uint32)&lt;br /&gt;
The horizontal/vertical distance, in pixels, between the toolbar&lt;br /&gt;
members and the gadget border (or outer bevel, if displayed - see&lt;br /&gt;
TOOLBAR_BevelStyle below).&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
The distance, in pixels, between the member contents (image and/or text)&lt;br /&gt;
and the button frame. Changing this setting will affect the size of the&lt;br /&gt;
toolbar members.&lt;br /&gt;
&lt;br /&gt;
Defaults to 4&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
Overflow is a situation when there is not enough space to fit all&lt;br /&gt;
toolbar members within the current window. If this tag is set to TRUE,&lt;br /&gt;
all members that don't fit will be moved into a pop-up menu whenever&lt;br /&gt;
overflow takes place. A selector to invoke the menu will be displayed&lt;br /&gt;
on the right.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_MinVisible (uint32)&lt;br /&gt;
If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the&lt;br /&gt;
specified number of members (including spacers and separators) will&lt;br /&gt;
always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
&lt;br /&gt;
Defaults to 1&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
The size of the spacer member, in pixels. This value will affect the&lt;br /&gt;
width (in a horizontal toolbar) or the height (in a vertical toolbar)&lt;br /&gt;
of the spacer.&lt;br /&gt;
&lt;br /&gt;
Defaults to 5&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce&lt;br /&gt;
a traditional-looking toolbar with framed buttons, whereas&lt;br /&gt;
TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
The style of the gadget's outer bevel (frame). The Bevel Image class&lt;br /&gt;
is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to&lt;br /&gt;
this tag (although not all of them make good sense to use with the&lt;br /&gt;
toolbar). The recommended values are:&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar&lt;br /&gt;
buttons), make sure that you also adjust TOOLBAR_HorizPadding and&lt;br /&gt;
TOOLBAR_VertPadding, otherwise the outer bevel will interfere with&lt;br /&gt;
the button frames.&lt;br /&gt;
&lt;br /&gt;
Defaults to BVS_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
Determines the look of the separator member. If you want to change it&lt;br /&gt;
on the fly while the window is open, call SetGadgetAttrs() rather than&lt;br /&gt;
SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
Determines how member selection is indicated in the borderless mode.&lt;br /&gt;
If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the&lt;br /&gt;
selection: the programmer must provide a select image for each button&lt;br /&gt;
or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below),&lt;br /&gt;
otherwise there will be no visual response. If the tag is set to&lt;br /&gt;
TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around&lt;br /&gt;
the member to indicate the selection.&lt;br /&gt;
&lt;br /&gt;
This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
  A custom backfill hook to provide a background filled with a specific&lt;br /&gt;
colour or pattern.&lt;br /&gt;
&lt;br /&gt;
This tag is meant to replace GA_BackFill because if the toolbar gadget&lt;br /&gt;
is placed in a layout, the value of GA_BackFill can only be set after&lt;br /&gt;
the window opens (this is because the Layout Gadget propagates its own&lt;br /&gt;
backfill to all of its children). TOOLBAR_BackFill is provided as&lt;br /&gt;
a convenience tag that overrides GA_BackFill, and allows setting your&lt;br /&gt;
backfill hook even before the window opens.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display (uint32)&lt;br /&gt;
Specifies what you want to display inside the toolbar button or toggle&lt;br /&gt;
members. The possible values are:&lt;br /&gt;
TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_TextPlace (uint32)&lt;br /&gt;
Specifies the placement of the text labels with regard to the toolbar&lt;br /&gt;
images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to&lt;br /&gt;
TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
Use this tag to create a minimum-configuration, text-only toolbar.&lt;br /&gt;
You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore&lt;br /&gt;
character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
&lt;br /&gt;
Using this tag, the limitation is that you cannot create toggle members&lt;br /&gt;
(only buttons, separators and spacers).&lt;br /&gt;
&lt;br /&gt;
A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators cannot appear as the very first member in the&lt;br /&gt;
toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid&lt;br /&gt;
string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
&lt;br /&gt;
The button strings are copied to an internal buffer, so the label array&lt;br /&gt;
need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
If set to TRUE, this attribute will size all button and toggle members&lt;br /&gt;
evenly according to the largest member. The attribute has no effect&lt;br /&gt;
on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above)&lt;br /&gt;
and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway,&lt;br /&gt;
and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible&lt;br /&gt;
result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ImageSet (uint32)&lt;br /&gt;
If more than one image set have been configured via TOOLBAR_AddImageSet&lt;br /&gt;
(see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform&lt;br /&gt;
various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
=== OM_SET ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
=== TBM_GETMEMBER ===&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=999</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=999"/>
		<updated>2020-10-30T22:46:26Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== Toolbar attributes ===&lt;br /&gt;
&lt;br /&gt;
GA_ID (uint16)&lt;br /&gt;
Unique ID number for the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_ReadOnly (BOOL)&lt;br /&gt;
If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_BackFill (struct Hook *)&lt;br /&gt;
A backfill hook to provide a background filled with a specific colour&lt;br /&gt;
or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
GA_TextAttr (struct TextAttr *)&lt;br /&gt;
Pointer to a TextAttr structure describing the font to be used for&lt;br /&gt;
the gadget's button text labels (if they are used).&lt;br /&gt;
&lt;br /&gt;
Defaults to the system's default public screen font.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Orientation (uint32)&lt;br /&gt;
The toolbar orientation: horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Spacing (uint32)&lt;br /&gt;
The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
&lt;br /&gt;
Defaults to 2&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HorizPadding&lt;br /&gt;
TOOLBAR_VertPadding (uint32)&lt;br /&gt;
The horizontal/vertical distance, in pixels, between the toolbar&lt;br /&gt;
members and the gadget border (or outer bevel, if displayed - see&lt;br /&gt;
TOOLBAR_BevelStyle below).&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
The distance, in pixels, between the member contents (image and/or text)&lt;br /&gt;
and the button frame. Changing this setting will affect the size of the&lt;br /&gt;
toolbar members.&lt;br /&gt;
&lt;br /&gt;
Defaults to 4&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
Overflow is a situation when there is not enough space to fit all&lt;br /&gt;
toolbar members within the current window. If this tag is set to TRUE,&lt;br /&gt;
all members that don't fit will be moved into a pop-up menu whenever&lt;br /&gt;
overflow takes place. A selector to invoke the menu will be displayed&lt;br /&gt;
on the right.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_MinVisible (uint32)&lt;br /&gt;
If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the&lt;br /&gt;
specified number of members (including spacers and separators) will&lt;br /&gt;
always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
&lt;br /&gt;
Defaults to 1&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
The size of the spacer member, in pixels. This value will affect the&lt;br /&gt;
width (in a horizontal toolbar) or the height (in a vertical toolbar)&lt;br /&gt;
of the spacer.&lt;br /&gt;
&lt;br /&gt;
Defaults to 5&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce&lt;br /&gt;
a traditional-looking toolbar with framed buttons, whereas&lt;br /&gt;
TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
The style of the gadget's outer bevel (frame). The Bevel Image class&lt;br /&gt;
is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to&lt;br /&gt;
this tag (although not all of them make good sense to use with the&lt;br /&gt;
toolbar). The recommended values are:&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar&lt;br /&gt;
buttons), make sure that you also adjust TOOLBAR_HorizPadding and&lt;br /&gt;
TOOLBAR_VertPadding, otherwise the outer bevel will interfere with&lt;br /&gt;
the button frames.&lt;br /&gt;
&lt;br /&gt;
Defaults to BVS_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
Determines the look of the separator member. If you want to change it&lt;br /&gt;
on the fly while the window is open, call SetGadgetAttrs() rather than&lt;br /&gt;
SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
Determines how member selection is indicated in the borderless mode.&lt;br /&gt;
If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the&lt;br /&gt;
selection: the programmer must provide a select image for each button&lt;br /&gt;
or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below),&lt;br /&gt;
otherwise there will be no visual response. If the tag is set to&lt;br /&gt;
TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around&lt;br /&gt;
the member to indicate the selection.&lt;br /&gt;
&lt;br /&gt;
This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
  A custom backfill hook to provide a background filled with a specific&lt;br /&gt;
colour or pattern.&lt;br /&gt;
&lt;br /&gt;
This tag is meant to replace GA_BackFill because if the toolbar gadget&lt;br /&gt;
is placed in a layout, the value of GA_BackFill can only be set after&lt;br /&gt;
the window opens (this is because the Layout Gadget propagates its own&lt;br /&gt;
backfill to all of its children). TOOLBAR_BackFill is provided as&lt;br /&gt;
a convenience tag that overrides GA_BackFill, and allows setting your&lt;br /&gt;
backfill hook even before the window opens.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display (uint32)&lt;br /&gt;
Specifies what you want to display inside the toolbar button or toggle&lt;br /&gt;
members. The possible values are:&lt;br /&gt;
TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_TextPlace (uint32)&lt;br /&gt;
Specifies the placement of the text labels with regard to the toolbar&lt;br /&gt;
images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to&lt;br /&gt;
TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
Use this tag to create a minimum-configuration, text-only toolbar.&lt;br /&gt;
You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore&lt;br /&gt;
character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
&lt;br /&gt;
Using this tag, the limitation is that you cannot create toggle members&lt;br /&gt;
(only buttons, separators and spacers).&lt;br /&gt;
&lt;br /&gt;
A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators cannot appear as the very first member in the&lt;br /&gt;
toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid&lt;br /&gt;
string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
&lt;br /&gt;
The button strings are copied to an internal buffer, so the label array&lt;br /&gt;
need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
If set to TRUE, this attribute will size all button and toggle members&lt;br /&gt;
evenly according to the largest member. The attribute has no effect&lt;br /&gt;
on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above)&lt;br /&gt;
and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway,&lt;br /&gt;
and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible&lt;br /&gt;
result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ImageSet (uint32)&lt;br /&gt;
If more than one image set have been configured via TOOLBAR_AddImageSet&lt;br /&gt;
(see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
=== Method attributes ===&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform&lt;br /&gt;
various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
=== Member attributes ===&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
=== Image attributes ===&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/OM_SET                                     toolbar.gadget/OM_SET&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
toolbar.gadget/TBM_GETMEMBER                       toolbar.gadget/TBM_GETMEMBER&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=998</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=998"/>
		<updated>2020-10-30T22:43:08Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TABLE OF CONTENTS&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/--datasheet--&lt;br /&gt;
toolbar.gadget/OM_SET&lt;br /&gt;
toolbar.gadget/TBM_GETMEMBER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datasheet ==&lt;br /&gt;
&lt;br /&gt;
; NAME&lt;br /&gt;
: toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
;SUPERCLASS&lt;br /&gt;
: gadgetclass&lt;br /&gt;
&lt;br /&gt;
; REQUIRES&lt;br /&gt;
: button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
; DESCRIPTION&lt;br /&gt;
: This class is an easy-to-setup, highly configurable alternative to the standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER section below for more information)&lt;br /&gt;
&lt;br /&gt;
=== ATTRIBUTES ===&lt;br /&gt;
&lt;br /&gt;
GA_ID (uint16)&lt;br /&gt;
Unique ID number for the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_ReadOnly (BOOL)&lt;br /&gt;
If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_BackFill (struct Hook *)&lt;br /&gt;
A backfill hook to provide a background filled with a specific colour&lt;br /&gt;
or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
GA_TextAttr (struct TextAttr *)&lt;br /&gt;
Pointer to a TextAttr structure describing the font to be used for&lt;br /&gt;
the gadget's button text labels (if they are used).&lt;br /&gt;
&lt;br /&gt;
Defaults to the system's default public screen font.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Orientation (uint32)&lt;br /&gt;
The toolbar orientation: horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Spacing (uint32)&lt;br /&gt;
The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
&lt;br /&gt;
Defaults to 2&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HorizPadding&lt;br /&gt;
TOOLBAR_VertPadding (uint32)&lt;br /&gt;
The horizontal/vertical distance, in pixels, between the toolbar&lt;br /&gt;
members and the gadget border (or outer bevel, if displayed - see&lt;br /&gt;
TOOLBAR_BevelStyle below).&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
The distance, in pixels, between the member contents (image and/or text)&lt;br /&gt;
and the button frame. Changing this setting will affect the size of the&lt;br /&gt;
toolbar members.&lt;br /&gt;
&lt;br /&gt;
Defaults to 4&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
Overflow is a situation when there is not enough space to fit all&lt;br /&gt;
toolbar members within the current window. If this tag is set to TRUE,&lt;br /&gt;
all members that don't fit will be moved into a pop-up menu whenever&lt;br /&gt;
overflow takes place. A selector to invoke the menu will be displayed&lt;br /&gt;
on the right.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_MinVisible (uint32)&lt;br /&gt;
If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the&lt;br /&gt;
specified number of members (including spacers and separators) will&lt;br /&gt;
always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
&lt;br /&gt;
Defaults to 1&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
The size of the spacer member, in pixels. This value will affect the&lt;br /&gt;
width (in a horizontal toolbar) or the height (in a vertical toolbar)&lt;br /&gt;
of the spacer.&lt;br /&gt;
&lt;br /&gt;
Defaults to 5&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce&lt;br /&gt;
a traditional-looking toolbar with framed buttons, whereas&lt;br /&gt;
TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
The style of the gadget's outer bevel (frame). The Bevel Image class&lt;br /&gt;
is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to&lt;br /&gt;
this tag (although not all of them make good sense to use with the&lt;br /&gt;
toolbar). The recommended values are:&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar&lt;br /&gt;
buttons), make sure that you also adjust TOOLBAR_HorizPadding and&lt;br /&gt;
TOOLBAR_VertPadding, otherwise the outer bevel will interfere with&lt;br /&gt;
the button frames.&lt;br /&gt;
&lt;br /&gt;
Defaults to BVS_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
Determines the look of the separator member. If you want to change it&lt;br /&gt;
on the fly while the window is open, call SetGadgetAttrs() rather than&lt;br /&gt;
SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
Determines how member selection is indicated in the borderless mode.&lt;br /&gt;
If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the&lt;br /&gt;
selection: the programmer must provide a select image for each button&lt;br /&gt;
or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below),&lt;br /&gt;
otherwise there will be no visual response. If the tag is set to&lt;br /&gt;
TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around&lt;br /&gt;
the member to indicate the selection.&lt;br /&gt;
&lt;br /&gt;
This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
  A custom backfill hook to provide a background filled with a specific&lt;br /&gt;
colour or pattern.&lt;br /&gt;
&lt;br /&gt;
This tag is meant to replace GA_BackFill because if the toolbar gadget&lt;br /&gt;
is placed in a layout, the value of GA_BackFill can only be set after&lt;br /&gt;
the window opens (this is because the Layout Gadget propagates its own&lt;br /&gt;
backfill to all of its children). TOOLBAR_BackFill is provided as&lt;br /&gt;
a convenience tag that overrides GA_BackFill, and allows setting your&lt;br /&gt;
backfill hook even before the window opens.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display (uint32)&lt;br /&gt;
Specifies what you want to display inside the toolbar button or toggle&lt;br /&gt;
members. The possible values are:&lt;br /&gt;
TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_TextPlace (uint32)&lt;br /&gt;
Specifies the placement of the text labels with regard to the toolbar&lt;br /&gt;
images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to&lt;br /&gt;
TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
Use this tag to create a minimum-configuration, text-only toolbar.&lt;br /&gt;
You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore&lt;br /&gt;
character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
&lt;br /&gt;
Using this tag, the limitation is that you cannot create toggle members&lt;br /&gt;
(only buttons, separators and spacers).&lt;br /&gt;
&lt;br /&gt;
A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators cannot appear as the very first member in the&lt;br /&gt;
toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid&lt;br /&gt;
string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
&lt;br /&gt;
The button strings are copied to an internal buffer, so the label array&lt;br /&gt;
need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
If set to TRUE, this attribute will size all button and toggle members&lt;br /&gt;
evenly according to the largest member. The attribute has no effect&lt;br /&gt;
on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above)&lt;br /&gt;
and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway,&lt;br /&gt;
and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible&lt;br /&gt;
result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ImageSet (uint32)&lt;br /&gt;
If more than one image set have been configured via TOOLBAR_AddImageSet&lt;br /&gt;
(see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
*** Method attributes ***&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform&lt;br /&gt;
various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
*** Member attributes ***&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
*** Image attributes ***&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/OM_SET                                     toolbar.gadget/OM_SET&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
toolbar.gadget/TBM_GETMEMBER                       toolbar.gadget/TBM_GETMEMBER&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=997</id>
		<title>ToolBar Gadget Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=ToolBar_Gadget_Class&amp;diff=997"/>
		<updated>2020-10-30T22:32:21Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TABLE OF CONTENTS&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/--datasheet--&lt;br /&gt;
toolbar.gadget/OM_SET&lt;br /&gt;
toolbar.gadget/TBM_GETMEMBER&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/--datasheet--                       toolbar.gadget/--datasheet--&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
toolbar.gadget -- Create toolbar BOOPSI objects&lt;br /&gt;
&lt;br /&gt;
SUPERCLASS&lt;br /&gt;
gadgetclass&lt;br /&gt;
&lt;br /&gt;
REQUIRES&lt;br /&gt;
button.gadget, select.gadget, label.image, bevel.image, shared.image&lt;br /&gt;
&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
This class is an easy-to-setup, highly configurable alternative to the&lt;br /&gt;
standard speedbar.gadget provided by the operating system.&lt;br /&gt;
&lt;br /&gt;
METHODS&lt;br /&gt;
OM_NEW -- creates the toolbar object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
OM_DISPOSE -- disposes of the toolbar object&lt;br /&gt;
&lt;br /&gt;
OM_REMMEMBER -- used by the class internally; consider this method private&lt;br /&gt;
&lt;br /&gt;
OM_SET -- sets toolbar, member and image attributes (see the OM_SET&lt;br /&gt;
            section below for more information)&lt;br /&gt;
&lt;br /&gt;
OM_GET -- retrieves toolbar attributes&lt;br /&gt;
&lt;br /&gt;
TBM_GETMEMBER -- retrieves a given member attribute (see the TBM_GETMEMBER&lt;br /&gt;
                   section below for more information)&lt;br /&gt;
&lt;br /&gt;
ATTRIBUTES&lt;br /&gt;
GA_ID (uint16)&lt;br /&gt;
Unique ID number for the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_ReadOnly (BOOL)&lt;br /&gt;
If set to TRUE, none of the toolbar buttons will be selectable.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
GA_BackFill (struct Hook *)&lt;br /&gt;
A backfill hook to provide a background filled with a specific colour&lt;br /&gt;
or pattern. Please also see notes for TOOLBAR_BackFill below.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
GA_TextAttr (struct TextAttr *)&lt;br /&gt;
Pointer to a TextAttr structure describing the font to be used for&lt;br /&gt;
the gadget's button text labels (if they are used).&lt;br /&gt;
&lt;br /&gt;
Defaults to the system's default public screen font.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Orientation (uint32)&lt;br /&gt;
The toolbar orientation: horizontal or vertical.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_ORIENT_HORIZ&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Spacing (uint32)&lt;br /&gt;
The spacing between the individual toolbar members, in pixels.&lt;br /&gt;
&lt;br /&gt;
Defaults to 2&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HorizPadding&lt;br /&gt;
TOOLBAR_VertPadding (uint32)&lt;br /&gt;
The horizontal/vertical distance, in pixels, between the toolbar&lt;br /&gt;
members and the gadget border (or outer bevel, if displayed - see&lt;br /&gt;
TOOLBAR_BevelStyle below).&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_InnerPadding (uint32)&lt;br /&gt;
The distance, in pixels, between the member contents (image and/or text)&lt;br /&gt;
and the button frame. Changing this setting will affect the size of the&lt;br /&gt;
toolbar members.&lt;br /&gt;
&lt;br /&gt;
Defaults to 4&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_HandleOverflow (BOOL)&lt;br /&gt;
Overflow is a situation when there is not enough space to fit all&lt;br /&gt;
toolbar members within the current window. If this tag is set to TRUE,&lt;br /&gt;
all members that don't fit will be moved into a pop-up menu whenever&lt;br /&gt;
overflow takes place. A selector to invoke the menu will be displayed&lt;br /&gt;
on the right.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_MinVisible (uint32)&lt;br /&gt;
If TOOLBAR_HandleOverflow is TRUE, this tag ensures that at least the&lt;br /&gt;
specified number of members (including spacers and separators) will&lt;br /&gt;
always be visible. Ignored if TOOLBAR_HandleOverflow is FALSE.&lt;br /&gt;
&lt;br /&gt;
Defaults to 1&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SpacerSize (uint32)&lt;br /&gt;
The size of the spacer member, in pixels. This value will affect the&lt;br /&gt;
width (in a horizontal toolbar) or the height (in a vertical toolbar)&lt;br /&gt;
of the spacer.&lt;br /&gt;
&lt;br /&gt;
Defaults to 5&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ButtonStyle (uint32)&lt;br /&gt;
The look of the toolbar buttons. TB_BUTSTYLE_CLASSIC will produce&lt;br /&gt;
a traditional-looking toolbar with framed buttons, whereas&lt;br /&gt;
TB_BUTSTYLE_BORDERLESS will configure a borderless look.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_BUTSTYLE_CLASSIC&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BevelStyle (uint32)&lt;br /&gt;
The style of the gadget's outer bevel (frame). The Bevel Image class&lt;br /&gt;
is used, so the style values from &amp;lt;images/bevel.h&amp;gt; are applicable to&lt;br /&gt;
this tag (although not all of them make good sense to use with the&lt;br /&gt;
toolbar). The recommended values are:&lt;br /&gt;
  BVS_NONE    -- no bevel is drawn around the toolbar&lt;br /&gt;
  BVS_DISPLAY -- provides a recessed, SpeedBar-compatible bevel&lt;br /&gt;
&lt;br /&gt;
When using a bevel in TB_BUTSTYLE_CLASSIC mode (i.e. with framed toolbar&lt;br /&gt;
buttons), make sure that you also adjust TOOLBAR_HorizPadding and&lt;br /&gt;
TOOLBAR_VertPadding, otherwise the outer bevel will interfere with&lt;br /&gt;
the button frames.&lt;br /&gt;
&lt;br /&gt;
Defaults to BVS_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SeparatorStyle (uint32)&lt;br /&gt;
Determines the look of the separator member. If you want to change it&lt;br /&gt;
on the fly while the window is open, call SetGadgetAttrs() rather than&lt;br /&gt;
SetAttrs() to trigger an immediate redraw.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SEPSTYLE_NORMAL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SelectionStyle (uint32)&lt;br /&gt;
Determines how member selection is indicated in the borderless mode.&lt;br /&gt;
If the tag is set to TB_SELSTYLE_NONE, the gadget will not indicate the&lt;br /&gt;
selection: the programmer must provide a select image for each button&lt;br /&gt;
or toggle member (see TBIMAGE_SelImage and TBIMAGE_SelImageFile below),&lt;br /&gt;
otherwise there will be no visual response. If the tag is set to&lt;br /&gt;
TB_SELSTYLE_BEVEL, the gadget will draw a standard button bevel around&lt;br /&gt;
the member to indicate the selection.&lt;br /&gt;
&lt;br /&gt;
This tag is ignored in the classic mode with framed buttons.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_SELSTYLE_NONE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_BackFill (struct Hook *)&lt;br /&gt;
  A custom backfill hook to provide a background filled with a specific&lt;br /&gt;
colour or pattern.&lt;br /&gt;
&lt;br /&gt;
This tag is meant to replace GA_BackFill because if the toolbar gadget&lt;br /&gt;
is placed in a layout, the value of GA_BackFill can only be set after&lt;br /&gt;
the window opens (this is because the Layout Gadget propagates its own&lt;br /&gt;
backfill to all of its children). TOOLBAR_BackFill is provided as&lt;br /&gt;
a convenience tag that overrides GA_BackFill, and allows setting your&lt;br /&gt;
backfill hook even before the window opens.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL (the default layers backfill hook).&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display (uint32)&lt;br /&gt;
Specifies what you want to display inside the toolbar button or toggle&lt;br /&gt;
members. The possible values are:&lt;br /&gt;
TB_DISPLAY_IMAGES -- display only images&lt;br /&gt;
TB_DISPLAY_TEXT -- display only text labels&lt;br /&gt;
TB_DISPLAY_BOTH -- display both images and text labels&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_DISPLAY_IMAGES&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_TextPlace (uint32)&lt;br /&gt;
Specifies the placement of the text labels with regard to the toolbar&lt;br /&gt;
images. This tag is only meaningful when actual text labels are&lt;br /&gt;
provided via TBMEMBER_Text, and TOOLBAR_Display is set to&lt;br /&gt;
TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to and currently only supports TB_PLACETEXT_BELOW&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_LabelArray (STRPTR *)&lt;br /&gt;
Use this tag to create a minimum-configuration, text-only toolbar.&lt;br /&gt;
You simply pass a NULL-terminated array of strings representing&lt;br /&gt;
the toolbar button labels. Each label can contain an underscore&lt;br /&gt;
character to indicate the keyboard shortcut for the respective button.&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_Display will be set to TB_DISPLAY_TEXT automatically.&lt;br /&gt;
&lt;br /&gt;
Using this tag, the limitation is that you cannot create toggle members&lt;br /&gt;
(only buttons, separators and spacers).&lt;br /&gt;
&lt;br /&gt;
A special string, &amp;quot; &amp;quot;, will create a spacer.&lt;br /&gt;
A special string, &amp;quot;_&amp;quot;, will create a separator.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators cannot appear as the very first member in the&lt;br /&gt;
toolbar. Therefore, the label array may not begin with a spacer or&lt;br /&gt;
a separator string. Also, the array must contain at least one valid&lt;br /&gt;
string to create a button, otherwise the toolbar creation will fail.&lt;br /&gt;
&lt;br /&gt;
The button strings are copied to an internal buffer, so the label array&lt;br /&gt;
need not remain valid throughout the lifetime of the gadget.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_EvenSize (BOOL)&lt;br /&gt;
If set to TRUE, this attribute will size all button and toggle members&lt;br /&gt;
evenly according to the largest member. The attribute has no effect&lt;br /&gt;
on spacers and separators.&lt;br /&gt;
&lt;br /&gt;
If you only intend to use TB_DISPLAY_IMAGES (see TOOLBAR_Display above)&lt;br /&gt;
and your toolbar images are all of the same size, keep this attribute&lt;br /&gt;
at its default FALSE value: the button dimensions will be equal anyway,&lt;br /&gt;
and you'll spare the gadget some unnecessary calculations. On the other &lt;br /&gt;
hand, setting this tag to TRUE may produce a visually more plausible&lt;br /&gt;
result when TOOLBAR_Display is set to TB_DISPLAY_BOTH.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_ImageSet (uint32)&lt;br /&gt;
If more than one image set have been configured via TOOLBAR_AddImageSet&lt;br /&gt;
(see below), use this tag to determine which set is to be displayed in&lt;br /&gt;
the toolbar. The value passed to this tag is the image set ID.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_GET)&lt;br /&gt;
&lt;br /&gt;
*** Method attributes ***&lt;br /&gt;
&lt;br /&gt;
The following tags are not attributes but, rather, methods that perform&lt;br /&gt;
various functions associated with toolbar configuration:&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImageSet (uint32)&lt;br /&gt;
Creates a new image set. The value passed to this tag is a numeric ID&lt;br /&gt;
identifying the set. Use this ID with TOOLBAR_ImageSet (see above) to&lt;br /&gt;
display the particular image set in the toolbar.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TOOLBAR_AddImage tags (see&lt;br /&gt;
below), each creating one image in the given set.&lt;br /&gt;
&lt;br /&gt;
If the gadget only uses one set of images, passing TOOLBAR_AddImageSet&lt;br /&gt;
is not necessary. Each TOOLBAR_AddImage will add the respective image&lt;br /&gt;
to the default image set identified by an ID of 0.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddImage (uint32)&lt;br /&gt;
Creates a new image in a given image set. The value passed to this tag&lt;br /&gt;
is a numeric ID identifying the image. Use this ID with TBMEMBER_ImageID&lt;br /&gt;
(see below) to associate the image with a particular toolbar member.&lt;br /&gt;
&lt;br /&gt;
This tag should be followed by a sequence of TBIMAGE_ tags (see the&lt;br /&gt;
&amp;quot;Image attributes&amp;quot; section below), each configuring one aspect of the&lt;br /&gt;
image, including its optional selected variant (referred to as the&lt;br /&gt;
&amp;quot;select image&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Images are added to the default image set unless a preceding&lt;br /&gt;
TOOLBAR_AddImageSet specifies a different set.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_AddMember (uint32)&lt;br /&gt;
Creates a new toolbar member. The value passed to this tag is a numeric&lt;br /&gt;
ID identifying the member.&lt;br /&gt;
&lt;br /&gt;
Spacers and separators normally don't need an ID, so you can use&lt;br /&gt;
TB_NO_ID as a value for TOOLBAR_AddMember when creating these members.&lt;br /&gt;
However, if you want to manipulate spacers/separators in your GUI,&lt;br /&gt;
an ID will be necessary so that you can pass it to TOOLBAR_SetMember&lt;br /&gt;
to identify the respective spacer or separator member.&lt;br /&gt;
&lt;br /&gt;
You can add members when the toolbar object is being created, i.e.&lt;br /&gt;
as part of the NewObject() call, or at any time later via SetAttrs().&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetMember&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the member you want to&lt;br /&gt;
modify.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
TOOLBAR_SetGroup&lt;br /&gt;
Use this tag in a SetAttrs() call to identify the group of members you&lt;br /&gt;
want to modify collectively.&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_SET)&lt;br /&gt;
&lt;br /&gt;
*** Member attributes ***&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Type (uint32)&lt;br /&gt;
The type of the toolbar member. The possible values are the following:&lt;br /&gt;
TB_MTYPE_BUTTON-- a normal toolbar button&lt;br /&gt;
TB_MTYPE_TOGGLE-- a toggle (on/off) button&lt;br /&gt;
TB_MTYPE_SPACER-- a spacer&lt;br /&gt;
TB_MTYPE_SEPARATOR -- a separator bar&lt;br /&gt;
&lt;br /&gt;
The type is set upon member creation, and cannot be changed.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_MTYPE_BUTTON&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_ImageID (uint32)&lt;br /&gt;
The identifier of the image to be used for the button or toggle member&lt;br /&gt;
(see TOOLBAR_AddImage above). This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return TB_NO_ID should you inquire&lt;br /&gt;
about the TBMEMBER_ImageID value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (no image associated with this member)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Text (CONST_STRPTR)&lt;br /&gt;
The label to associate with a button or a toggle member. This tag is not&lt;br /&gt;
relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
NULL should you inquire about the TBMEMBER_Text value of such a member.&lt;br /&gt;
&lt;br /&gt;
The text label will be used as fallback in case no image is found or&lt;br /&gt;
provided.&lt;br /&gt;
&lt;br /&gt;
The text string can contain an underscore character (_), indicating the&lt;br /&gt;
keyboard shortcut for this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Disabled (BOOL)&lt;br /&gt;
The current state (disabled or not disabled) of a member. This tag is&lt;br /&gt;
not relevant to spacers and separators; TBM_GETMEMBER will always return&lt;br /&gt;
FALSE should you inquire about the TBMEMBER_Disabled value of such&lt;br /&gt;
a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Hidden (BOOL)&lt;br /&gt;
Specifies whether the particular member is displayed in the toolbar or&lt;br /&gt;
hidden. You can use this tag to create &amp;quot;dynamic&amp;quot; toolbar layouts that&lt;br /&gt;
adapt the actual member set to various application settings.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Selected (BOOL)&lt;br /&gt;
The current selection state of a toggle member. This tag is not relevant&lt;br /&gt;
to normal buttons (TB_MTYPE_BUTTON), spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return FALSE should you inquire about the&lt;br /&gt;
TBMEMBER_Selected value of such a member.&lt;br /&gt;
&lt;br /&gt;
You can set a target BOOPSI object for any toggle member, using the&lt;br /&gt;
standard icclass ICA_TARGET tag. The target will receive an automatic&lt;br /&gt;
notification of the toggle selection. This way toolbar toggles can&lt;br /&gt;
easily communicate with other boolean gadgets such as checkboxes.&lt;br /&gt;
&lt;br /&gt;
Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, OM_NOTIFY, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_Group (uint32)&lt;br /&gt;
Member group ID. Several members can be manipulated at once if they are&lt;br /&gt;
assigned to the same group. Use TOOLBAR_SetGroup with the respective&lt;br /&gt;
group ID to identify the group to be manipulated.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_MXGroup (uint32)&lt;br /&gt;
MX group ID. Toggle members can be put in groups of mutually-exclusive&lt;br /&gt;
buttons. When such a toggle is selected, all other toggles in the same&lt;br /&gt;
MX group will become deselected.&lt;br /&gt;
&lt;br /&gt;
This tag is not relevant to normal buttons, spacers and separators;&lt;br /&gt;
TBM_GETMEMBER will always return TB_NO_ID should you inquire about the&lt;br /&gt;
TBMEMBER_MXGroup value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to TB_NO_ID (not assigned to any MX group)&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_HintInfo (CONST_STRPTR)&lt;br /&gt;
The help text to be displayed when the user hovers the mouse pointer&lt;br /&gt;
over the respective member. This tag is not relevant to spacers and&lt;br /&gt;
separators; TBM_GETMEMBER will always return NULL should you inquire&lt;br /&gt;
about the TBMEMBER_HintInfo value of such a member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
TBMEMBER_UserData (APTR)&lt;br /&gt;
Arbitrary user data associated with this member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW, OM_SET, OM_UPDATE, TBM_GETMEMBER)&lt;br /&gt;
&lt;br /&gt;
*** Image attributes ***&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Image (struct Image *)&lt;br /&gt;
Custom image to be used for a button or a toggle member.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_ImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the image from. The image&lt;br /&gt;
will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImage (struct Image *)&lt;br /&gt;
Custom image to display when the member becomes selected.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_SelImageFile (CONST_STRPTR)&lt;br /&gt;
The full path to the source file to create the select image from.&lt;br /&gt;
The image will be loaded and built using the Shared Image class.&lt;br /&gt;
&lt;br /&gt;
All images created this way will also be disposed of automatically.&lt;br /&gt;
&lt;br /&gt;
Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
TBIMAGE_Width (uint32)&lt;br /&gt;
TBIMAGE_Height (uint32)&lt;br /&gt;
Image dimensions, in pixels. These tags can only be used in connection&lt;br /&gt;
with TBIMAGE_ImageFile / TBIMAGE_SelImageFile, in which case the&lt;br /&gt;
respective source file will be scaled to the specified width and height.&lt;br /&gt;
Custom images provided via TBIMAGE_Image and TBIMAGE_SelImage cannot&lt;br /&gt;
be resized using these tags.&lt;br /&gt;
&lt;br /&gt;
Defaults to 0&lt;br /&gt;
&lt;br /&gt;
Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
Some of the attributes described above change the sizing requirements of&lt;br /&gt;
the gadget. If set on the fly (i.e. when the toolbar is already displayed&lt;br /&gt;
in the window), the gadget domain will need recalculating and a re-layout&lt;br /&gt;
must take place. Refer to the OM_SET method documentation below to see&lt;br /&gt;
how to handle such situations.&lt;br /&gt;
&lt;br /&gt;
Images are configured at OM_NEW, i.e. when creating each respective image.&lt;br /&gt;
Image attributes cannot be changed later.&lt;br /&gt;
&lt;br /&gt;
BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SEE ALSO&lt;br /&gt;
&lt;br /&gt;
toolbar.gadget/OM_SET                                     toolbar.gadget/OM_SET&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
OM_SET -- set toolbar attributes&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = SetAttrs(Object *toolbar, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
uint32 result = SetGadgetAttrs(struct Gadget *toolbar, struct Window *win,&lt;br /&gt;
                                 struct Requester *req, Tag tag1, ...);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
  This method sets the attributes of the toolbar and/or of its members.&lt;br /&gt;
SetAttrs() and SetGadgetAttrs() are Intuition's convenience functions&lt;br /&gt;
to invoke this method.&lt;br /&gt;
&lt;br /&gt;
To change a member attribute you first need to pass TOOLBAR_SetMember&lt;br /&gt;
to identify the respective member, and then the member attribute tag(s).&lt;br /&gt;
See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
To change an attribute collectively for a group of members you first need&lt;br /&gt;
to pass TOOLBAR_SetGroup to identify the respective group, and then the&lt;br /&gt;
member attribute tag(s). See the EXAMPLE section below.&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
toolbar -- the toolbar gadget object&lt;br /&gt;
win -- the window that hosts the toolbar&lt;br /&gt;
req -- requester pointer (use NULL)&lt;br /&gt;
tag1 etc. -- a list of toolbar attribute tags&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
This method will return TB_NEED_RETHINK if one or more of the attributes&lt;br /&gt;
change the sizing requirements of the gadget. In such a case, the&lt;br /&gt;
appropriate reaction is to call WM_RETHINK on the gadget's window object&lt;br /&gt;
to recalculate the domain and re-layout the contents.&lt;br /&gt;
&lt;br /&gt;
If you know you will be changing an attribute that requires a WM_RETHINK,&lt;br /&gt;
prefer to use SetAttrs() instead of SetGadgetAttrs() to avoid an&lt;br /&gt;
unnecessary redraw (WM_RETHINK will perform the redraw for you).&lt;br /&gt;
&lt;br /&gt;
The method returns 0 if no rethink is needed.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To set various toolbar attributes:&lt;br /&gt;
if ( IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
                   TOOLBAR_Orientation, TB_ORIENT_VERT,&lt;br /&gt;
                   TOOLBAR_Spacing, 4,&lt;br /&gt;
                   TOOLBAR_SpacerSize, 10,&lt;br /&gt;
                   TAG_END) == TB_NEED_RETHINK )&lt;br /&gt;
   {&lt;br /&gt;
    IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // To disable a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To hide a member:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_Hidden, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
  IIntuition-&amp;gt;IDoMethod(winObj, WM_RETHINK);&lt;br /&gt;
&lt;br /&gt;
  // To modify several member attributes at once:&lt;br /&gt;
  IIntuition-&amp;gt;SetAttrs(toolbar,&lt;br /&gt;
              TOOLBAR_SetMember, MEMBER_ID,&lt;br /&gt;
                TBMEMBER_HintInfo, &amp;quot;My help string&amp;quot;,&lt;br /&gt;
                TBMEMBER_UserData, anything,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
  // To disable all members assigned to a group:&lt;br /&gt;
  IIntuition-&amp;gt;SetGadgetAttrs((struct Gadget *) toolbar, win, NULL,&lt;br /&gt;
              TOOLBAR_SetGroup, GROUP_ID,&lt;br /&gt;
                TBMEMBER_Disabled, TRUE,&lt;br /&gt;
              TAG_END);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;br /&gt;
  &lt;br /&gt;
toolbar.gadget/TBM_GETMEMBER                       toolbar.gadget/TBM_GETMEMBER&lt;br /&gt;
&lt;br /&gt;
NAME&lt;br /&gt;
TBM_GETMEMBER -- obtain the value of a specific member attribute&lt;br /&gt;
&lt;br /&gt;
SYNOPSIS&lt;br /&gt;
uint32 result = IDoMethodA(Object *toolbar, struct tbGetMember *msg);&lt;br /&gt;
&lt;br /&gt;
uint32 result = IDoMethod(Object *toolbar, uint32 methodID,&lt;br /&gt;
                            uint32 attrID, uint32 *storage);&lt;br /&gt;
&lt;br /&gt;
FUNCTION&lt;br /&gt;
Use this method to obtain the value of a given member attribute.&lt;br /&gt;
&lt;br /&gt;
Because of the way OM_GET is implemented in Intuition, getting member&lt;br /&gt;
attributes is done differently compared to setting them. The difference&lt;br /&gt;
boils down to the following:&lt;br /&gt;
&lt;br /&gt;
- We cannot use a convenience function such as GetAttr() or GetAttrs(),&lt;br /&gt;
so a dedicated method is provided. Refer to the EXAMPLE section below&lt;br /&gt;
to see how to invoke the method.&lt;br /&gt;
&lt;br /&gt;
- Only one attribute can be queried at a time. (As multiple attributes&lt;br /&gt;
will rarely be requested in real use, this limitation should not pose&lt;br /&gt;
a significant problem.)&lt;br /&gt;
&lt;br /&gt;
INPUTS&lt;br /&gt;
For IDoMethodA():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
msg-- a pointer to an initialized tbGetMember structure&lt;br /&gt;
&lt;br /&gt;
For IDoMethod():&lt;br /&gt;
toolbar-- the toolbar gadget object&lt;br /&gt;
methodID -- this method's identifier, TBM_GETMEMBER&lt;br /&gt;
attrID -- the attribute tag identifier&lt;br /&gt;
storage-- a pointer to the variable for storing the attribute value&lt;br /&gt;
&lt;br /&gt;
RESULT&lt;br /&gt;
The &amp;quot;result&amp;quot; value will be 1L if the requested attribute value has been&lt;br /&gt;
obtained successfully. The attribute value itself is returned in the&lt;br /&gt;
provided storage variable.&lt;br /&gt;
&lt;br /&gt;
EXAMPLE&lt;br /&gt;
&lt;br /&gt;
// To query about the selection state of a toggle member:&lt;br /&gt;
uint32 storage;&lt;br /&gt;
&lt;br /&gt;
IIntuition-&amp;gt;IDoMethod(toolbar, TBM_GETMEMBER, memberID,&lt;br /&gt;
                        TBMEMBER_Selected, &amp;amp;storage);&lt;br /&gt;
&lt;br /&gt;
NOTES&lt;br /&gt;
  &lt;br /&gt;
BUGS&lt;br /&gt;
  &lt;br /&gt;
SEE ALSO&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=821</id>
		<title>InfoWindow Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=821"/>
		<updated>2017-12-06T11:32:29Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This guide describes the ReAction-compatible '''information window class''' for users and developers.&lt;br /&gt;
&lt;br /&gt;
The '''InfoWindow Class''' (installed as ''infowindow.class'' in the SYS:Classes/ directory) is a BOOPSI-compliant class that is used to display information windows such as About-windows commonly found in many applications.&lt;br /&gt;
&lt;br /&gt;
From developers' perspective, it provides an easy and adaptable way of creating and presenting information windows within their application. The class is highly configurable to suit many different needs and scenarios.&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
&lt;br /&gt;
The latest version is 53.8 available in the [[Enhancer Software]] for both AmigaOS3 and AmigaOS4.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
The features include:&lt;br /&gt;
&lt;br /&gt;
* Formatted text&lt;br /&gt;
&lt;br /&gt;
* Aligned images&lt;br /&gt;
&lt;br /&gt;
* Configurable panel featuring tabs, a configurable text field or a custom BOOPSI gadget&lt;br /&gt;
&lt;br /&gt;
* Configurable button row supporting any number of buttons, and a timeout feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:infowindow_class_os3_example1.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|[[File:infowindow_class_os3_example2.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|[[File:infowindow_class_os3_example3.png|center|250px]]&lt;br /&gt;
''OS3 version''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|- style=&amp;quot;vertical-align:bottom;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:infowindow_class_os4_example1.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|[[File:infowindow_class_os4_example2.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|[[File:infowindow_class_os4_example3.png|center|250px]]&lt;br /&gt;
''OS4 version''&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For Developers ==&lt;br /&gt;
&lt;br /&gt;
=== Autodoc ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TABLE OF CONTENTS&lt;br /&gt;
&lt;br /&gt;
infowindow.class/--datasheet--&lt;br /&gt;
infowindow.class/IWM_OPEN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
infowindow.class/--datasheet--                   infowindow.class/--datasheet--&lt;br /&gt;
&lt;br /&gt;
  NAME&lt;br /&gt;
    infowindow.class -- Create an information window&lt;br /&gt;
&lt;br /&gt;
  SUPERCLASS&lt;br /&gt;
    window.class&lt;br /&gt;
&lt;br /&gt;
  REQUIRES&lt;br /&gt;
    bitmap.image, button.gadget, checkbox.gadget, clicktab.gadget,&lt;br /&gt;
    label.image, layout.gadget, scroller.gadget, texteditor.gadget,&lt;br /&gt;
    window.class&lt;br /&gt;
&lt;br /&gt;
  DESCRIPTION&lt;br /&gt;
    This is a BOOPSI class to create information windows, such as those that&lt;br /&gt;
    applications display when you select the &amp;quot;About&amp;quot; menu command.&lt;br /&gt;
&lt;br /&gt;
    Supported features:&lt;br /&gt;
&lt;br /&gt;
    - formatted text&lt;br /&gt;
    - image with configurable placement and backfill&lt;br /&gt;
    - configurable panel to display tabs, a scrollable text field, or a custom&lt;br /&gt;
      BOOPSI gadget (e.g. a listbrowser)&lt;br /&gt;
    - configurable button row supporting any number of buttons&lt;br /&gt;
    - optional checkbox gadget for confirming information&lt;br /&gt;
    - keyboard control&lt;br /&gt;
    - timeout&lt;br /&gt;
&lt;br /&gt;
    The class does not replace the Requester Class but it can be seen as&lt;br /&gt;
    a more sophisticated version of the REQTYPE_INFO requester type.&lt;br /&gt;
&lt;br /&gt;
  METHODS&lt;br /&gt;
    OM_NEW -- creates the infowindow object, sets attributes and defaults&lt;br /&gt;
&lt;br /&gt;
    OM_SET -- sets object attributes (passed to the superclass first)&lt;br /&gt;
&lt;br /&gt;
    OM_GET -- retrieves object attributes (passed to the superclass first)&lt;br /&gt;
&lt;br /&gt;
    OM_DISPOSE -- disposes of the infowindow object&lt;br /&gt;
&lt;br /&gt;
    IWM_OPEN -- opens the infowindow&lt;br /&gt;
&lt;br /&gt;
  KEYBOARD CONTROL&lt;br /&gt;
    Escape&lt;br /&gt;
      Cancels the infowindow (IWM_OPEN returns IWMRES_CANCEL).&lt;br /&gt;
&lt;br /&gt;
    Return / Enter&lt;br /&gt;
      Selects the default choice and closes the infowindow (IWM_OPEN returns&lt;br /&gt;
      the number of the button).&lt;br /&gt;
&lt;br /&gt;
    Cursor Left / Right&lt;br /&gt;
      Switches between tabs (if the tab panel is displayed).&lt;br /&gt;
&lt;br /&gt;
  ATTRIBUTES&lt;br /&gt;
    The infowindow is in fact a modal (i.e. blocking) requester, so all of its&lt;br /&gt;
    attributes can only be set or retrieved when the window is NOT open.&lt;br /&gt;
&lt;br /&gt;
    Use SetAttrs() freely in between individual IWM_OPEN calls to re-configure&lt;br /&gt;
    the infowindow: no need to dispose of and rebuild the object if you want&lt;br /&gt;
    to change the look, contents or behaviour of the window.&lt;br /&gt;
&lt;br /&gt;
    SetAttrs() will return the number of attributes set.&lt;br /&gt;
&lt;br /&gt;
    The InfoWindow Class is based on the Window Class, so many attributes&lt;br /&gt;
    supported by the superclass are applicable. Use them wisely: make sure&lt;br /&gt;
    you don't turn the infowindow into something it's not supposed to be.&lt;br /&gt;
&lt;br /&gt;
    The following superclass attributes are explicitly IGNORED because their&lt;br /&gt;
    (mis)use could compromise the look or functioning of the infowindow:&lt;br /&gt;
&lt;br /&gt;
    WA_Backdrop&lt;br /&gt;
    WA_BackFill&lt;br /&gt;
    WA_Borderless&lt;br /&gt;
    WA_Hidden&lt;br /&gt;
    WINDOW_AppPort&lt;br /&gt;
    WINDOW_AppWindow&lt;br /&gt;
    WINDOW_Iconifiable&lt;br /&gt;
    WINDOW_IconifyGadget&lt;br /&gt;
    WINDOW_IDCMPHook&lt;br /&gt;
    WINDOW_InputEvent&lt;br /&gt;
    WINDOW_MenuStrip&lt;br /&gt;
    WINDOW_NewMenu&lt;br /&gt;
    WINDOW_PopupGadget&lt;br /&gt;
&lt;br /&gt;
    Further notes on the use of superclass attributes:&lt;br /&gt;
&lt;br /&gt;
    WA_Width and WA_Height are treated as WA_InnerWidth and WA_InnerHeight,&lt;br /&gt;
    respectively. This behaviour is inherited from the Window Class.&lt;br /&gt;
 &lt;br /&gt;
    If WA_CloseGadget is provided and set to TRUE, the IWM_OPEN method will&lt;br /&gt;
    return the value of IWMRES_CANCEL if the window was closed (= cancelled)&lt;br /&gt;
    via the close gadget. The Escape key shortcut has an identical function&lt;br /&gt;
    (and result value) but it is available at all times, regardless of the&lt;br /&gt;
    WA_CloseGadget setting.&lt;br /&gt;
&lt;br /&gt;
    The class needs to be able to resolve the screen on which the infowindow&lt;br /&gt;
    will open. The following policy is applied here:&lt;br /&gt;
    - If INFOWINDOW_Parent is set, the class will attempt to obtain the screen&lt;br /&gt;
      pointer from the parent window object (the window needs to be open for&lt;br /&gt;
      this to work);&lt;br /&gt;
    - the WA_CustomScreen, WA_PubScreen and WA_PubScreenName tags are next in&lt;br /&gt;
      preference, respectively;&lt;br /&gt;
    - if there is no tag setting allowing to resolve the screen, it is assumed&lt;br /&gt;
      that opening on the default public screen is requested.&lt;br /&gt;
&lt;br /&gt;
    You might prefer setting INFOWINDOW_Parent over the Intuition screen tags.&lt;br /&gt;
    This way the infowindow will always stay with your program window, which&lt;br /&gt;
    is especially useful if your application supports jumping between screens.&lt;br /&gt;
    Otherwise you'd have to update the infowindow with a new screen pointer&lt;br /&gt;
    whenever the application changes screen.&lt;br /&gt;
&lt;br /&gt;
    The InfoWindow Class' own attributes are described below:&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Parent (Object *)&lt;br /&gt;
      A pointer to a window object that will be the &amp;quot;parent&amp;quot; of the&lt;br /&gt;
      information window. Often the parent is the application's main window.&lt;br /&gt;
      The class will automatically set the busy pointer for the parent,&lt;br /&gt;
      blocking its input while the infowindow is open.&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_BodyText (CONST_STRPTR)&lt;br /&gt;
      Text for the body of the information window.&lt;br /&gt;
&lt;br /&gt;
      The following codes can be used within the provided string to change&lt;br /&gt;
      the soft style of the text:&lt;br /&gt;
&lt;br /&gt;
      ESC u -- underline&lt;br /&gt;
      ESC b -- bold&lt;br /&gt;
      ESC i -- italic&lt;br /&gt;
      ESC n -- normal&lt;br /&gt;
&lt;br /&gt;
      Example string: &amp;quot;The following words \33bare in bold\33n.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_GadgetText (CONST_STRPTR)&lt;br /&gt;
      Text for the information window's button(s), delimited by the vertical&lt;br /&gt;
      bar character (|) if you want more than one button (e.g. &amp;quot;Yes|No&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
      Defaults to &amp;quot;_OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_CheckBoxText (CONST_STRPTR)&lt;br /&gt;
      If you provide this text string, the class will display a checkbox&lt;br /&gt;
      gadget at the bottom of the information window. The string will become&lt;br /&gt;
      the gadget's label.&lt;br /&gt;
&lt;br /&gt;
      One obvious purpose of the checkbox is to allow the user to confirm the&lt;br /&gt;
      information displayed in the window before closing it and proceeding.&lt;br /&gt;
      The state of the gadget upon closing the infowindow can be retrieved&lt;br /&gt;
      via the INFOWINDOW_Checked tag; see below.&lt;br /&gt;
 &lt;br /&gt;
      Defaults to NULL (no checkbox will be displayed)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Checked (BOOL)&lt;br /&gt;
      Setting this attribute will make the checkbox selected or unselected&lt;br /&gt;
      when the infowindow next opens. GetAttrs() can be used to retrieve the&lt;br /&gt;
      state of the gadget upon closing the window.&lt;br /&gt;
&lt;br /&gt;
      Please note that the class stores the checkbox state regardless of&lt;br /&gt;
      whether the infowindow was OK'ed, cancelled, or timed out. You'll want&lt;br /&gt;
      to also check the IWM_OPEN method return value to distinguish between&lt;br /&gt;
      these situations.&lt;br /&gt;
&lt;br /&gt;
      Defaults to FALSE&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Justification (uint16)&lt;br /&gt;
      Body text justification. Applicable values are LJ_LEFT, LJ_CENTER&lt;br /&gt;
      or LJ_RIGHT.&lt;br /&gt;
&lt;br /&gt;
      Defaults to LJ_LEFT (left-justified)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_WrapBorder (uint16)&lt;br /&gt;
      If the body text does not contain any linefeeds (\n) it will be&lt;br /&gt;
      word-wrapped automatically after the number of characters specified&lt;br /&gt;
      in this tag.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 0 (no word-wrap)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_DefButton (uint32)&lt;br /&gt;
      Specifies the default, highlighted button. If the Return or Enter key is&lt;br /&gt;
      pressed, the infowindow will close as if this button has been selected.&lt;br /&gt;
      A value of 0 means there is no default button, and the Return/Enter&lt;br /&gt;
      keyboard shortcut will not be available.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 1 (the first button from the left)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_Image (Object *)&lt;br /&gt;
      A custom BOOPSI image object to display in the information window. Note&lt;br /&gt;
      that the image will not be disposed of by the class, you need to take&lt;br /&gt;
      care of this yourself (the logic here is: &amp;quot;you create the image, you&lt;br /&gt;
      dispose of it&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
      This tag takes precedence over INFOWINDOW_ImageFile (see below).&lt;br /&gt;
&lt;br /&gt;
      If your application supports jumping between different screens, it might&lt;br /&gt;
      be necessary to rebuild your custom image object for the particular new&lt;br /&gt;
      host screen, to ensure the image is rendered with proper colours. This&lt;br /&gt;
      will be the case when jumping between an 8-bit screen and a 16/32-bit&lt;br /&gt;
      screen, or vice versa.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImageFile (CONST_STRPTR)&lt;br /&gt;
      A name of a source file from which the class will create a BOOPSI image&lt;br /&gt;
      to display in the information window. The file can be in any picture&lt;br /&gt;
      format supported by DataTypes. The image object created this way is&lt;br /&gt;
      stored internally and the class will dispose of it automatically.&lt;br /&gt;
&lt;br /&gt;
      This tag will be ignored if INFOWINDOW_Image is provided (see above).&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImagePlace (uint32)&lt;br /&gt;
      Flags to determine the placement of the image with regard to the body&lt;br /&gt;
      text. The image can be placed on the left (default), on the right,&lt;br /&gt;
      above or below the text. When PLACEIMAGE_ABOVE or PLACEIMAGE_BELOW is&lt;br /&gt;
      set, the image will be center-aligned horizontally unless you also set&lt;br /&gt;
      PLACEIMAGE_LEFT or PLACEIMAGE_RIGHT (for example, setting this tag to&lt;br /&gt;
      the combination of PLACEIMAGE_ABOVE|PLACEIMAGE_LEFT will display the&lt;br /&gt;
      image in the top-left corner above the body text).&lt;br /&gt;
&lt;br /&gt;
      This tag will be ignored if there is no body text.&lt;br /&gt;
&lt;br /&gt;
      Defaults to PLACEIMAGE_LEFT&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_ImageBackFill (struct Hook *)&lt;br /&gt;
      Sometimes it may be desirable to place the image on a filled background.&lt;br /&gt;
      This tag allows providing a backfill hook for this purpose.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_TabPanel (struct InfoWindowTab *)&lt;br /&gt;
      Use this tag to configure a special panel for displaying additional&lt;br /&gt;
      information in the window. This will normally be a tabbed panel with&lt;br /&gt;
      scrollable text fields but other configurations are also possible.&lt;br /&gt;
&lt;br /&gt;
      The tabbed panel is created by passing an array of struct InfoWindowTab&lt;br /&gt;
      (see &amp;lt;classes/infowindow.h&amp;gt; for definition). The Label member of each&lt;br /&gt;
      structure in the array must contain the tab label string. The actual&lt;br /&gt;
      contents of the Data member may vary depending on the Type member value:&lt;br /&gt;
&lt;br /&gt;
      TABDATA_STRING -- Data contains a text string&lt;br /&gt;
      TABDATA_FILE   -- Data contains a name of a text file&lt;br /&gt;
      TABDATA_LOCK   -- Data contains a DOS lock on a text file&lt;br /&gt;
&lt;br /&gt;
      This means that information to be displayed in the panel can be placed&lt;br /&gt;
      externally. For example, you can have a dedicated tab for displaying&lt;br /&gt;
      the program licence, the text of which is in a file on disk (only plain&lt;br /&gt;
      text files are supported at the moment):&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab tabs[] =&lt;br /&gt;
       {&lt;br /&gt;
         { &amp;quot;Credits&amp;quot;, (APTR) &amp;quot;This program was made by me!&amp;quot;, TABDATA_STRING },&lt;br /&gt;
         { &amp;quot;Licence&amp;quot;, (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;, TABDATA_FILE },&lt;br /&gt;
         { NULL, NULL, TABDATA_END }&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      Note that the array must be properly terminated as shown.&lt;br /&gt;
&lt;br /&gt;
      If instead of an array you pass a single struct InfoWindowTab with&lt;br /&gt;
      a NULL Label member, a scrollable text field will be created in the&lt;br /&gt;
      place of the tabbed panel:&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab textField =&lt;br /&gt;
       {&lt;br /&gt;
        NULL,&lt;br /&gt;
        (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;,&lt;br /&gt;
        TABDATA_FILE&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      The configuration can be further customized by using the TABDATA_GADGET&lt;br /&gt;
      value for Type. In such a case the Data member shall point to a BOOPSI&lt;br /&gt;
      gadget (for example, a listbrowser):&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab customPanel =&lt;br /&gt;
       {&lt;br /&gt;
        NULL,&lt;br /&gt;
        (APTR) myListBrowser,&lt;br /&gt;
        TABDATA_GADGET&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      The configuration above will display your own listbrowser gadget&lt;br /&gt;
      instead of the panel, and this&lt;br /&gt;
&lt;br /&gt;
      struct InfoWindowTab tabs[] =&lt;br /&gt;
       {&lt;br /&gt;
         { &amp;quot;Credits&amp;quot;, (APTR) myListBrowser, TABDATA_GADGET },&lt;br /&gt;
         { &amp;quot;Licence&amp;quot;, (APTR) &amp;quot;PROGDIR:Docs/Licence.txt&amp;quot;, TABDATA_FILE },&lt;br /&gt;
         { NULL, NULL, TABDATA_END }&lt;br /&gt;
       };&lt;br /&gt;
&lt;br /&gt;
      will show your listbrowser under the &amp;quot;Credits&amp;quot; tab instead of the&lt;br /&gt;
      standard text field.&lt;br /&gt;
&lt;br /&gt;
      The tab panel's text fields are currently rendered using the Texteditor&lt;br /&gt;
      Gadget. This may change in the future.&lt;br /&gt;
&lt;br /&gt;
      Defaults to NULL (no panel)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
    INFOWINDOW_TimeOut (uint32)&lt;br /&gt;
      The displayed information window will time out and close after the&lt;br /&gt;
      number of seconds specified via this tag. The IWM_OPEN method will&lt;br /&gt;
      return with a result of IWMRES_TIMEOUT.&lt;br /&gt;
&lt;br /&gt;
      Defaults to 0 (no timeout)&lt;br /&gt;
&lt;br /&gt;
      Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
  NOTES&lt;br /&gt;
    The timeout feature is currently implemented with IntuiTicks, so the&lt;br /&gt;
    internal countdown will stop when the infowindow becomes inactive.&lt;br /&gt;
    This needs to be reimplemented using timer.device.&lt;br /&gt;
&lt;br /&gt;
  BUGS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  SEE ALSO&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
infowindow.class/IWM_OPEN                             infowindow.class/IWM_OPEN&lt;br /&gt;
&lt;br /&gt;
  NAME&lt;br /&gt;
    IWM_OPEN -- Open the information window&lt;br /&gt;
&lt;br /&gt;
  SYNOPSIS&lt;br /&gt;
    int32 result = IDoMethodA(APTR obj, Msg msg);&lt;br /&gt;
    int32 result = IDoMethod(APTR obj, IWM_OPEN, NULL);&lt;br /&gt;
&lt;br /&gt;
  FUNCTION&lt;br /&gt;
    Opens the information window.&lt;br /&gt;
&lt;br /&gt;
  INPUTS&lt;br /&gt;
    obj - an infowindow object pointer&lt;br /&gt;
    msg - a Msg with MethodID = IWM_OPEN (see &amp;lt;intuition/classusr.h&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
  RESULT&lt;br /&gt;
    The number of the button (1, 2, 3...) the user has selected.&lt;br /&gt;
    IWMRES_ERROR if the information window failed to open for some reason.&lt;br /&gt;
    IWMRES_CANCEL if the window was closed via the close gadget or Esc key.&lt;br /&gt;
    IWMRES_TIMEOUT if the window has timed out.&lt;br /&gt;
&lt;br /&gt;
  EXAMPLE&lt;br /&gt;
    &lt;br /&gt;
  NOTES&lt;br /&gt;
&lt;br /&gt;
  BUGS&lt;br /&gt;
    &lt;br /&gt;
  SEE ALSO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=246</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=246"/>
		<updated>2016-03-13T10:07:46Z</updated>

		<summary type="html">&lt;p&gt;Trixie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
Closing the program window via the close gadget will NOT quit Exchanger. Rather, the program will be put to hidden state and run in the background, from which it can be recalled using the CX_POPKEY keyboard shortcut (see below in Configuration).&lt;br /&gt;
&lt;br /&gt;
=== Program list ===&lt;br /&gt;
&lt;br /&gt;
The program list displays all applications and commodities currently registered in the system, in alphabetical order. By default Exchanger will not show itself in the list; this can be overridden by settings (see below in Configuration).&lt;br /&gt;
&lt;br /&gt;
Two or more running instances of the same registered application will show up as separate entries in the program list. The individual instances will be distinguished by their application ID in the info display.&lt;br /&gt;
&lt;br /&gt;
Programs that are neither commodities, nor they register with the Application Library will not appear in Exchanger's program list. If you think that a particular program would benefit from being controlled by Exchanger, please contact the author of the software in question.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;Show interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;Hide interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;Enable/Disable&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;WB Info&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;Shutdown&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
If Exchanger cannot find its images at startup, it will use text-only buttons in the toolbar.&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
Exchanger features a standard Amiga menu strip, with the following commands:&lt;br /&gt;
&lt;br /&gt;
==== Project ====&lt;br /&gt;
&lt;br /&gt;
;About&lt;br /&gt;
: Displays the program information window.&lt;br /&gt;
&lt;br /&gt;
;Hide&lt;br /&gt;
: Hides the program GUI completely.&lt;br /&gt;
&lt;br /&gt;
;Iconify&lt;br /&gt;
: Iconifies the program on the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
;Quit&lt;br /&gt;
: Quits Exchanger.&lt;br /&gt;
&lt;br /&gt;
==== Settings ====&lt;br /&gt;
&lt;br /&gt;
;Show self in program list?&lt;br /&gt;
: Toggles the display of Exchanger in the program list.&lt;br /&gt;
&lt;br /&gt;
;Show hints?&lt;br /&gt;
: Toggles the display of help hints for the toolbar buttons.&lt;br /&gt;
&lt;br /&gt;
;Save&lt;br /&gt;
: Stores current settings as tooltypes in the program icon.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
Multiple instances of Exchanger are not allowed. An attempt to start a second instance will bring up the currently running one.&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=245</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=245"/>
		<updated>2016-03-13T10:05:04Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Notes on use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
Closing the program window via the close gadget will NOT quit Exchanger. Rather, the program will be put to hidden state and run in the background, from which it can be recalled using the CX_POPKEY keyboard shortcut (see below).&lt;br /&gt;
&lt;br /&gt;
=== Program list ===&lt;br /&gt;
&lt;br /&gt;
The program list displays all applications and commodities currently registered in the system, in alphabetical order. By default Exchanger will not show itself in the list; this can be overridden by settings (see below).&lt;br /&gt;
&lt;br /&gt;
Two or more running instances of the same registered application will show up as separate entries in the program list. The individual instances will be distinguished by their application ID in the info display.&lt;br /&gt;
&lt;br /&gt;
Programs that are neither commodities, nor they register with the Application Library will not appear in Exchanger's program list. If you think that a particular program would benefit from being controlled by Exchanger, please contact the author of the software in question.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;Show interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;Hide interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;Enable/Disable&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;WB Info&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;Shutdown&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
If Exchanger cannot find its images at startup, it will use text-only buttons in the toolbar.&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
Exchanger features a standard Amiga menu strip, with the following commands:&lt;br /&gt;
&lt;br /&gt;
==== Project ====&lt;br /&gt;
&lt;br /&gt;
;About&lt;br /&gt;
: Displays the program information window.&lt;br /&gt;
&lt;br /&gt;
;Hide&lt;br /&gt;
: Hides the program GUI completely.&lt;br /&gt;
&lt;br /&gt;
;Iconify&lt;br /&gt;
: Iconifies the program on the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
;Quit&lt;br /&gt;
: Quits Exchanger.&lt;br /&gt;
&lt;br /&gt;
==== Settings ====&lt;br /&gt;
&lt;br /&gt;
;Show self in program list?&lt;br /&gt;
: Toggles the display of Exchanger in the program list.&lt;br /&gt;
&lt;br /&gt;
;Show hints?&lt;br /&gt;
: Toggles the display of help hints for the toolbar buttons.&lt;br /&gt;
&lt;br /&gt;
;Save&lt;br /&gt;
: Stores current settings as tooltypes in the program icon.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
Multiple instances of Exchanger are not allowed. An attempt to start a second instance will bring up the currently running one.&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=244</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=244"/>
		<updated>2016-03-13T10:02:20Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* User interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
Closing the program window via the close gadget will NOT quit Exchanger. Rather, the program will be put to hidden state and run in the background, from which it can be recalled using the CX_POPKEY keyboard shortcut (see below).&lt;br /&gt;
&lt;br /&gt;
=== Program list ===&lt;br /&gt;
&lt;br /&gt;
The program list displays all applications and commodities currently registered in the system, in alphabetical order. By default Exchanger will not show itself in the list; this can be overridden by settings (see below).&lt;br /&gt;
&lt;br /&gt;
Two or more running instances of the same registered application will show up as separate entries in the program list. The individual instances will be distinguished by their application ID in the info display.&lt;br /&gt;
&lt;br /&gt;
Programs that are neither commodities, nor they register with the Application Library will not appear in Exchanger's program list. If you think that a particular program would benefit from being controlled by Exchanger, please contact the author of the software in question.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;Show interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;Hide interface&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;Enable/Disable&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;WB Info&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;Shutdown&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
If Exchanger cannot find its images at startup, it will use text-only buttons in the toolbar.&lt;br /&gt;
&lt;br /&gt;
=== Menu ===&lt;br /&gt;
&lt;br /&gt;
Exchanger features a standard Amiga menu strip, with the following commands:&lt;br /&gt;
&lt;br /&gt;
==== Project ====&lt;br /&gt;
&lt;br /&gt;
;About&lt;br /&gt;
: Displays the program information window.&lt;br /&gt;
&lt;br /&gt;
;Hide&lt;br /&gt;
: Hides the program GUI completely.&lt;br /&gt;
&lt;br /&gt;
;Iconify&lt;br /&gt;
: Iconifies the program on the Workbench screen.&lt;br /&gt;
&lt;br /&gt;
;Quit&lt;br /&gt;
: Quits Exchanger.&lt;br /&gt;
&lt;br /&gt;
==== Settings ====&lt;br /&gt;
&lt;br /&gt;
;Show self in program list?&lt;br /&gt;
: Toggles the display of Exchanger in the program list.&lt;br /&gt;
&lt;br /&gt;
;Show hints?&lt;br /&gt;
: Toggles the display of help hints for the toolbar buttons.&lt;br /&gt;
&lt;br /&gt;
;Save&lt;br /&gt;
: Stores current settings as tooltypes in the program icon.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=243</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=243"/>
		<updated>2016-03-13T09:39:05Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Program control in AmigaOS 4.x */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
=== Program list ===&lt;br /&gt;
&lt;br /&gt;
The program list displays all applications and commodities currently registered in the system, in alphabetical order. By default Exchanger will not show itself in the list; this can be overridden by settings (see below).&lt;br /&gt;
&lt;br /&gt;
Two or more running instances of the same registered application will show up as separate entries in the program list. The individual instances will be distinguished by their application ID in the info display.&lt;br /&gt;
&lt;br /&gt;
Programs that are neither commodities, nor they register with the Application Library will not appear in Exchanger's program list. If you think that a particular program would benefit from being controlled by Exchanger, please contact the author of the software in question.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Show interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Hide interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Enable/Disable&amp;quot;&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;WB Info&amp;quot;&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Shutdown&amp;quot;&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=242</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=242"/>
		<updated>2016-03-13T09:35:39Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* User interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (auxiliary programs and services, managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (full-fledged programs, managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
=== Program list ===&lt;br /&gt;
&lt;br /&gt;
The program list displays all applications and commodities currently registered in the system, in alphabetical order. By default Exchanger will not show itself in the list; this can be overridden by settings (see below).&lt;br /&gt;
&lt;br /&gt;
Two or more running instances of the same registered application will show up as separate entries in the program list. The individual instances will be distinguished by their application ID in the info display.&lt;br /&gt;
&lt;br /&gt;
Programs that are neither commodities, nor they register with the Application Library will not appear in Exchanger's program list. If you think that a particular program would benefit from being controlled by Exchanger, please contact the author of the software in question.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Show interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Hide interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Enable/Disable&amp;quot;&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;WB Info&amp;quot;&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Shutdown&amp;quot;&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=241</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=241"/>
		<updated>2016-03-13T09:29:16Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Usability note */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (auxiliary programs and services, managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (full-fledged programs, managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Show interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Hide interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Enable/Disable&amp;quot;&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;WB Info&amp;quot;&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Shutdown&amp;quot;&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes on use ==&lt;br /&gt;
&lt;br /&gt;
The way the selected program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board which - on user request - tells other programs what to do.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
If you would like to implement or improve external control in your software so that it works better with program managers like Exchanger, please contact A-EON. You will be given all support.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=240</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=240"/>
		<updated>2016-03-13T09:09:22Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (auxiliary programs and services, managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (full-fledged programs, managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Show interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Hide interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Enable/Disable&amp;quot;&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;WB Info&amp;quot;&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Shutdown&amp;quot;&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line parameters, depending on whether the program is started from Workbench or Shell. Some of its features can also be configured during runtime from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Tooltype&lt;br /&gt;
!CLI parameter&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|DONOTWAIT&lt;br /&gt;
|N/A&lt;br /&gt;
|If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
|-&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|CX_PRIORITY&lt;br /&gt;
|The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|CX_POPUP&lt;br /&gt;
|Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
|-&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|CX_POPKEY&lt;br /&gt;
|The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|SHOWSELF&lt;br /&gt;
|Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
|-&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|SHOWHINTS&lt;br /&gt;
|Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
|-&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|GUIIMAGES&lt;br /&gt;
|Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usability note ==&lt;br /&gt;
&lt;br /&gt;
The way the program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board that - on user request - tells other programs what to do.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=239</id>
		<title>Exchanger</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Exchanger&amp;diff=239"/>
		<updated>2016-03-12T22:47:50Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Created page with &amp;quot;== Introduction ==  Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:  * showing or hiding the...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is a program manager for AmigaOS 4. It allows basic external control of running applications and commodities, including:&lt;br /&gt;
&lt;br /&gt;
* showing or hiding the program GUI;&lt;br /&gt;
* shutting the program down;&lt;br /&gt;
* displaying the Workbench information requester for the particular program;&lt;br /&gt;
* enabling and disabling commodities.&lt;br /&gt;
&lt;br /&gt;
The name may suggest that Exchanger is a replacement for Commodore's original Exchange tool distributed as part of the Amiga operating system. This is partly true; however, the scope of usability is wider. In addition, Exchanger supports modern AmigaOS features such as jumping between screens, object-oriented menus with images, or program window snapshotting.&lt;br /&gt;
&lt;br /&gt;
=== Minimum requirements ===&lt;br /&gt;
&lt;br /&gt;
* AmigaOS 4.1 Update 6 or newer&lt;br /&gt;
* Commodities Library version 53.6 or newer&lt;br /&gt;
&lt;br /&gt;
Exchanger cannot possibly run on earlier systems because of certain Commodities Library features that were not implemented before version 53.6. Program window snapshotting and menu images will only be available when running Exchanger under AmigaOS 4.1 Final Edition or newer.&lt;br /&gt;
&lt;br /&gt;
The program will use the InfoWindow Class for its About window if the class is installed in the system.&lt;br /&gt;
&lt;br /&gt;
== Program control in AmigaOS 4.x ==&lt;br /&gt;
&lt;br /&gt;
As of AmigaOS release 4, there are two types of program that register with the operating system:&lt;br /&gt;
&lt;br /&gt;
* ''commodities'' (auxiliary programs and services, managed via the Commodities Library);&lt;br /&gt;
* ''registered applications'' (full-fledged programs, managed via the Application Library).&lt;br /&gt;
&lt;br /&gt;
Both types supply the OS with some information about themselves, and provide a certain level of external control. For example, both commodities and registered applications can hide or show their user interface (GUI) in response to a command sent via the respective library. Similarly, a commodity or an application can shut itself down when a corresponding command is received.&lt;br /&gt;
&lt;br /&gt;
Exchanger aims at becoming a common control point for both program types.&lt;br /&gt;
&lt;br /&gt;
== User interface ==&lt;br /&gt;
&lt;br /&gt;
Exchanger features a simple and easy-to-use graphic user interface (GUI) contained within a single program window. The GUI consists of four main parts:&lt;br /&gt;
&lt;br /&gt;
* the ''program list'', located on the left-hand side of the program window; it lists all programs currently registered in the OS;&lt;br /&gt;
* the ''info display'' on the right, which shows information about the program;&lt;br /&gt;
* the graphic ''toolbar'', located below the info display;&lt;br /&gt;
* the ''menu''.&lt;br /&gt;
&lt;br /&gt;
=== Info display ===&lt;br /&gt;
&lt;br /&gt;
As commodities and applications register with slightly different information about themselves, the info display is tabbed in order to cater for both program types. The first tab is for applications, the other for commodities. Should a program register as a commodity and, at the same time, as an application (the OS technically allows this, although such implementation is rarely useful), the program name will only be shown once in the program list, and the user can switch between the tabs in the info display to see the respective information.&lt;br /&gt;
&lt;br /&gt;
=== Toolbar ===&lt;br /&gt;
&lt;br /&gt;
The toolbar consists of five graphic buttons, from left to right:&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Show interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to bring up its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Hide interface&amp;quot;&lt;br /&gt;
: If the program allows external control of its GUI, this button will send a command telling the respective program to hide (commodities) or iconify (applications) its GUI.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Enable/Disable&amp;quot;&lt;br /&gt;
: If the program is a commodity, this button will toggle its activation state. A disabled (inactive) commodity cannot receive input events from the Commodities Network. This button will be unavailable (ghosted) if the program is an application.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;WB Info&amp;quot;&lt;br /&gt;
: If Exchanger is able to locate the selected program's icon, this button will display the Workbench information requester for the given program.&lt;br /&gt;
&lt;br /&gt;
;&amp;quot;Shutdown&amp;quot;&lt;br /&gt;
: Tells the selected program to quit.&lt;br /&gt;
&lt;br /&gt;
If a button is not available, it usually means that the particular function is not supported by the selected program. For example, commodities that have no GUI will have the Show/Hide interface buttons ghosted.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Exchanger is configured via icon tooltypes or command line (CLI) parameters. Some of its features can also be configured from the Settings menu.&lt;br /&gt;
&lt;br /&gt;
=== Tooltypes ===&lt;br /&gt;
&lt;br /&gt;
;DONOTWAIT&lt;br /&gt;
: If you run Exchanger from WBStartup, make sure this tooltype is in place.&lt;br /&gt;
&lt;br /&gt;
;CX_PRIORITY&lt;br /&gt;
: The priority of Exchanger's commodity broker (default: 0). No need to change this.&lt;br /&gt;
&lt;br /&gt;
;CX_POPUP&lt;br /&gt;
: Determines whether Exchanger should display its GUI on program startup (default: YES). If you run Exchanger from WBStartup, you'll probably want to change this to NO (the program will run hidden) and bring up the Exchanger window via the CX_POPKEY shortcut when needed.&lt;br /&gt;
&lt;br /&gt;
;CX_POPKEY&lt;br /&gt;
: The keyboard shortcut to bring Exchanger back from hidden or iconified state (default: ctrl-alt-x).&lt;br /&gt;
&lt;br /&gt;
;SHOWSELF&lt;br /&gt;
: Determines whether Exchanger should display itself in the program list (default: NO).&lt;br /&gt;
&lt;br /&gt;
;SHOWHINTS&lt;br /&gt;
: Determines whether Exchanger should display help hints for the toolbar buttons (default: YES).&lt;br /&gt;
&lt;br /&gt;
;GUIIMAGES&lt;br /&gt;
: Specifies the DOS path to the images used by the program (default: PROGDIR:Images).&lt;br /&gt;
&lt;br /&gt;
=== CLI parameters ===&lt;br /&gt;
&lt;br /&gt;
CX_PRIORITY&lt;br /&gt;
&lt;br /&gt;
CX_POPUP&lt;br /&gt;
&lt;br /&gt;
CX_POPKEY&lt;br /&gt;
&lt;br /&gt;
SHOWSELF&lt;br /&gt;
&lt;br /&gt;
SHOWHINTS&lt;br /&gt;
&lt;br /&gt;
See above in Tooltypes.&lt;br /&gt;
&lt;br /&gt;
== Usability note ==&lt;br /&gt;
&lt;br /&gt;
The way the program reacts to the control commands sent by Exchanger absolutely depends on how the respective program is implemented. If a program allows external control (which should normally be the case with both commodities and registered applications), it is the responsibility of the programmer to implement it in a sensible, logical and safe way.&lt;br /&gt;
&lt;br /&gt;
* If a program does not provide the information it should (for example, no description for it is shown in Exchanger's info display),&lt;br /&gt;
* if a program does not react to the interface control buttons (Show/Hide),&lt;br /&gt;
* if a commodity cannot be enabled or disabled,&lt;br /&gt;
* if a program does not quit (or worse, crashes) upon pressing the Shutdown button,&lt;br /&gt;
&lt;br /&gt;
please contact the author of the respective program. Exchanger is really just a control board that - on user request - tells other programs what to do.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Main_Page&amp;diff=238</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Main_Page&amp;diff=238"/>
		<updated>2016-03-12T21:35:02Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome ==&lt;br /&gt;
&lt;br /&gt;
Welcome to wiki.amiga.org&lt;br /&gt;
&lt;br /&gt;
This is a documentation and information repository for all A-EON Technology and selected partner projects relating to the original Amiga and AmigaONE computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Next Generation Hardware:&lt;br /&gt;
&lt;br /&gt;
* [[AmigaONE 500]]&lt;br /&gt;
* AmigaONE X1000&lt;br /&gt;
* [[AmigaONE X5000]]&lt;br /&gt;
&lt;br /&gt;
Classic Hardware:&lt;br /&gt;
&lt;br /&gt;
* Amiga 500&lt;br /&gt;
* Amiga 500+&lt;br /&gt;
* Amiga 600&lt;br /&gt;
* Amiga 1000&lt;br /&gt;
* Amiga 1200&lt;br /&gt;
* Amiga 1500&lt;br /&gt;
* Amiga 2000&lt;br /&gt;
* Amiga 2500&lt;br /&gt;
* Amiga 3000&lt;br /&gt;
* Amiga 3000UX&lt;br /&gt;
* Amiga 3500&lt;br /&gt;
* Amiga 4000&lt;br /&gt;
* Amiga 4000T&lt;br /&gt;
* Amiga CDTV&lt;br /&gt;
* Amiga CD32&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
* [[AMIStore]]&lt;br /&gt;
* [[CANDI]]&lt;br /&gt;
* [[Exchanger]]&lt;br /&gt;
* [[InfoWindow Class]]&lt;br /&gt;
* [[MultiEdit]]&lt;br /&gt;
* [[Multiviewer]]&lt;br /&gt;
* [[RadeonHD Driver]]&lt;br /&gt;
* [[Ringhio Notifications]]&lt;br /&gt;
* [[SmartFileSystem]]&lt;br /&gt;
* [[TuneNet]]&lt;br /&gt;
* [[Warp3D]]&lt;br /&gt;
* [[X-Dock]]&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
All content submitted to and contained on this website, unless explicitly stated is Copyright &amp;amp;copy; 2015-2016 A-EON Technology Ltd. All rights reserved. You shall not copy, reproduce, distribute, transmit, broadcast, display, sell, license, or otherwise exploit any content for any other purposes without the prior written consent of A-EON Technology Ltd or the respective licensors of the content.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=InformationWindow_Class&amp;diff=237</id>
		<title>InformationWindow Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=InformationWindow_Class&amp;diff=237"/>
		<updated>2016-03-12T21:34:32Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Trixie moved page InformationWindow Class to InfoWindow Class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[InfoWindow Class]]&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=236</id>
		<title>InfoWindow Class</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=InfoWindow_Class&amp;diff=236"/>
		<updated>2016-03-12T21:34:32Z</updated>

		<summary type="html">&lt;p&gt;Trixie: Trixie moved page InformationWindow Class to InfoWindow Class&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
This guide describes the ReAction compatible '''InformationWindow.class''' for users and developers.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==For Users==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==For Developers==&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Main_Page&amp;diff=235</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Main_Page&amp;diff=235"/>
		<updated>2016-03-12T21:32:16Z</updated>

		<summary type="html">&lt;p&gt;Trixie: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome ==&lt;br /&gt;
&lt;br /&gt;
Welcome to wiki.amiga.org&lt;br /&gt;
&lt;br /&gt;
This is a documentation and information repository for all A-EON Technology and selected partner projects relating to the original Amiga and AmigaONE computer systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
Next Generation Hardware:&lt;br /&gt;
&lt;br /&gt;
* [[AmigaONE 500]]&lt;br /&gt;
* AmigaONE X1000&lt;br /&gt;
* [[AmigaONE X5000]]&lt;br /&gt;
&lt;br /&gt;
Classic Hardware:&lt;br /&gt;
&lt;br /&gt;
* Amiga 500&lt;br /&gt;
* Amiga 500+&lt;br /&gt;
* Amiga 600&lt;br /&gt;
* Amiga 1000&lt;br /&gt;
* Amiga 1200&lt;br /&gt;
* Amiga 1500&lt;br /&gt;
* Amiga 2000&lt;br /&gt;
* Amiga 2500&lt;br /&gt;
* Amiga 3000&lt;br /&gt;
* Amiga 3000UX&lt;br /&gt;
* Amiga 3500&lt;br /&gt;
* Amiga 4000&lt;br /&gt;
* Amiga 4000T&lt;br /&gt;
* Amiga CDTV&lt;br /&gt;
* Amiga CD32&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
* [[AMIStore]]&lt;br /&gt;
* [[CANDI]]&lt;br /&gt;
* [[Exchanger]]&lt;br /&gt;
* [[InformationWindow Class]]&lt;br /&gt;
* [[MultiEdit]]&lt;br /&gt;
* [[Multiviewer]]&lt;br /&gt;
* [[RadeonHD Driver]]&lt;br /&gt;
* [[Ringhio Notifications]]&lt;br /&gt;
* [[SmartFileSystem]]&lt;br /&gt;
* [[TuneNet]]&lt;br /&gt;
* [[Warp3D]]&lt;br /&gt;
* [[X-Dock]]&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
All content submitted to and contained on this website, unless explicitly stated is Copyright &amp;amp;copy; 2015-2016 A-EON Technology Ltd. All rights reserved. You shall not copy, reproduce, distribute, transmit, broadcast, display, sell, license, or otherwise exploit any content for any other purposes without the prior written consent of A-EON Technology Ltd or the respective licensors of the content.&lt;/div&gt;</summary>
		<author><name>Trixie</name></author>
	</entry>
</feed>