## GimpWidgets

GimpWidgets — A collection of convenient widget constructors, standard callbacks and helper functions.

## Synopsis

    GtkWidget*  gimp_option_menu_new            (gboolean menu_only,
                                                 ...);
    GtkWidget*  gimp_option_menu_new2           (gboolean menu_only,
                                                 GCallback menu_item_callback,
                                                 gpointer menu_item_callback_data,
                                                 gpointer initial,
                                                 ...);
    void        gimp_option_menu_set_history    (GtkOptionMenu *option_menu,
                                                 gpointer item_data);
    void        gimp_option_menu_set_sensitive  (GtkOptionMenu *option_menu,
                                                 GimpOptionMenuSensitivityCallback callback,
                                                 gpointer callback_data);
    gboolean    (*GimpOptionMenuSensitivityCallback)
                                                (gpointer item_data,
                                                 gpointer callback_data);
    GtkWidget*  gimp_radio_group_new            (gboolean in_frame,
                                                 const gchar *frame_title,
                                                 ...);
    GtkWidget*  gimp_radio_group_new2           (gboolean in_frame,
                                                 const gchar *frame_title,
                                                 GCallback radio_button_callback,
                                                 gpointer radio_button_callback_data,
                                                 gpointer initial,
                                                 ...);
    void        gimp_radio_group_set_active     (GtkRadioButton *radio_button,
                                                 gpointer item_data);
    GtkWidget*  gimp_spin_button_new            (GtkObject **adjustment,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 gdouble page_size,
                                                 gdouble climb_rate,
                                                 guint digits);
    #define     GIMP_SCALE_ENTRY_LABEL          (adj)
    #define     GIMP_SCALE_ENTRY_SCALE          (adj)
    #define     GIMP_SCALE_ENTRY_SCALE_ADJ      (adj)
    #define     GIMP_SCALE_ENTRY_SPINBUTTON     (adj)
    #define     GIMP_SCALE_ENTRY_SPINBUTTON_ADJ (adj)
    GtkObject*  gimp_scale_entry_new            (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *text,
                                                 gint scale_width,
                                                 gint spinbutton_width,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 guint digits,
                                                 gboolean constrain,
                                                 gdouble unconstrained_lower,
                                                 gdouble unconstrained_upper,
                                                 const gchar *tooltip,
                                                 const gchar *help_id);
    void        gimp_scale_entry_set_sensitive  (GtkObject *adjustment,
                                                 gboolean sensitive);
    GtkObject*  gimp_color_scale_entry_new      (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *text,
                                                 gint scale_width,
                                                 gint spinbutton_width,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 guint digits,
                                                 const gchar *tooltip,
                                                 const gchar *help_id);
    #define     GIMP_RANDOM_SEED_SPINBUTTON     (hbox)
    #define     GIMP_RANDOM_SEED_SPINBUTTON_ADJ (hbox)
    GtkWidget*  gimp_random_seed_new            (guint32 *seed);
    #define     GIMP_COORDINATES_CHAINBUTTON    (sizeentry)
    GtkWidget*  gimp_coordinates_new            (GimpUnit unit,
                                                 const gchar *unit_format,
                                                 gboolean menu_show_pixels,
                                                 gboolean menu_show_percent,
                                                 gint spinbutton_width,
                                                 GimpSizeEntryUpdatePolicy update_policy,
                                                 gboolean chainbutton_active,
                                                 gboolean chain_constrains_ratio,
                                                 const gchar *xlabel,
                                                 gdouble x,
                                                 gdouble xres,
                                                 gdouble lower_boundary_x,
                                                 gdouble upper_boundary_x,
                                                 gdouble xsize_0,
                                                 gdouble xsize_100,
                                                 const gchar *ylabel,
                                                 gdouble y,
                                                 gdouble yres,
                                                 gdouble lower_boundary_y,
                                                 gdouble upper_boundary_y,
                                                 gdouble ysize_0,
                                                 gdouble ysize_100);
    GtkWidget*  gimp_pixmap_button_new          (gchar **xpm_data,
                                                 const gchar *text);
    void        gimp_toggle_button_sensitive_update
                                                (GtkToggleButton *toggle_button);
    void        gimp_toggle_button_update       (GtkWidget *widget,
                                                 gpointer data);
    void        gimp_radio_button_update        (GtkWidget *widget,
                                                 gpointer data);
    void        gimp_menu_item_update           (GtkWidget *widget,
                                                 gpointer data);
    void        gimp_int_adjustment_update      (GtkAdjustment *adjustment,
                                                 gpointer data);
    void        gimp_uint_adjustment_update     (GtkAdjustment *adjustment,
                                                 gpointer data);
    void        gimp_float_adjustment_update    (GtkAdjustment *adjustment,
                                                 gpointer data);
    void        gimp_double_adjustment_update   (GtkAdjustment *adjustment,
                                                 gpointer data);
    void        gimp_unit_menu_update           (GtkWidget *widget,
                                                 gpointer data);
    GtkWidget*  gimp_table_attach_aligned       (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *label_text,
                                                 gfloat xalign,
                                                 gfloat yalign,
                                                 GtkWidget *widget,
                                                 gint colspan,
                                                 gboolean left_align);

## Description

## Details

### gimp_option_menu_new ()

    GtkWidget*  gimp_option_menu_new            (gboolean menu_only,
                                                 ...);

Convenience function to create a GtkOptionMenu or a GtkMenu.

The `va_list` describing the GtkMenuItem's has the following format:

gchar *label, | The menu item's label.
GtkSignalFunc callback, | The callback which will be connected to the menu item's "activate" signal
gpointer data, | The callback data which will be used in gtk_signal_connect().
gpointer user_data, | The menu item's `user_data` which will be set with gtk_object_set_user_data().
GtkWidget **widget_ptr, | A pointer to store the created menu item in.
gboolean active, | TRUE if this should be the initially selected menu item.

`menu_only` : | `TRUE` if the function should return a GtkMenu only.
`...` : | A `NULL`-terminated `va_list` describing the menu items.
Returns : | A GtkOptionMenu or a GtkMenu (depending on `menu_only`).

### gimp_option_menu_new2 ()

    GtkWidget*  gimp_option_menu_new2           (gboolean menu_only,
                                                 GCallback menu_item_callback,
                                                 gpointer menu_item_callback_data,
                                                 gpointer initial,
                                                 ...);

Convenience function to create a GtkOptionMenu or a GtkMenu.

The `va_list` describing the GtkMenuItem's has the following format:

gchar *label, | The menu item's label.
gpointer user_data, | The menu item's `user_data` which will be set with gtk_object_set_user_data().
GtkWidget **widget_ptr, | A pointer to store the created menu item in.

`menu_only` : | `TRUE` if the function should return a GtkMenu only.
`menu_item_callback` : | The callback each menu item's "activate" signal will be connected with.
`menu_item_callback_data` : | The data which will be passed to g_signal_connect().
`initial` : | The `item_data` of the initially selected menu item.
`...` : | A `NULL`-terminated `va_list` describing the menu items.
Returns : | A GtkOptionMenu or a GtkMenu (depending on `menu_only`).

### gimp_option_menu_set_history ()

    void        gimp_option_menu_set_history    (GtkOptionMenu *option_menu,
                                                 gpointer item_data);

Iterates over all entries in a GtkOptionMenu and selects the one with the matching `item_data`. Probably only makes sense to use with a GtkOptionMenu that was created using gimp_option_menu_new() or gimp_option_menu_new2().

`option_menu` : | A GtkOptionMenu as returned by gimp_option_menu_new() or gimp_option_menu_new2().
`item_data` : | The `item_data` of the menu item you want to select.

### gimp_option_menu_set_sensitive ()

    void        gimp_option_menu_set_sensitive  (GtkOptionMenu *option_menu,
                                                 GimpOptionMenuSensitivityCallback callback,
                                                 gpointer callback_data);

Calls the given `callback` for each item in the menu and passes it the item_data and the `callback_data`. The menu item's sensitivity is set according to the return value of this function.

`option_menu` : | a GtkOptionMenu as returned by gimp_option_menu_new() or gimp_option_menu_new2().
`callback` : | a function called for each item in the menu to determine the the sensitivity state.
`callback_data` : | data to pass to the `callback` function.

### GimpOptionMenuSensitivityCallback ()

    gboolean    (*GimpOptionMenuSensitivityCallback)
                                                (gpointer item_data,
                                                 gpointer callback_data);

`item_data` : |
`callback_data` : |
Returns : |

### gimp_radio_group_new ()

    GtkWidget*  gimp_radio_group_new            (gboolean in_frame,
                                                 const gchar *frame_title,
                                                 ...);

Convenience function to create a group of radio buttons embedded into a GtkFrame or GtkVbox.

The `va_list` describing the GtkRadioButton's has the following format:

gchar *label, | The radio button's label.
GtkSignalFunc callback, | The callback which will be connected to the radio button's "toggled" signal
gpointer data, | The callback data which will be used in gtk_signal_connect().
gpointer user_data, | The radio button's `user_data` which will be set with gtk_object_set_user_data().
GtkWidget **widget_ptr, | A pointer to store the created radio button in.
gboolean active, | TRUE if this should be the initially pressed radio button.

`in_frame` : | `TRUE` if you want a GtkFrame around the radio button group.
`frame_title` : | The title of the Frame or `NULL` if you don't want a title.
`...` : | A `NULL`-terminated `va_list` describing the radio buttons.
Returns : | A GtkFrame or GtkVbox (depending on `in_frame`).

### gimp_radio_group_new2 ()

    GtkWidget*  gimp_radio_group_new2           (gboolean in_frame,
                                                 const gchar *frame_title,
                                                 GCallback radio_button_callback,
                                                 gpointer radio_button_callback_data,
                                                 gpointer initial,
                                                 ...);

Convenience function to create a group of radio buttons embedded into a GtkFrame or GtkVbox.

The `va_list` describing the GtkRadioButton's has the following format:

gchar *label, | The radio button's label.
gpointer user_data, | The radio button's `user_data` which will be set with gtk_object_set_user_data().
GtkWidget **widget_ptr, | A pointer to store the created radio button in.

`in_frame` : | `TRUE` if you want a GtkFrame around the radio button group.
`frame_title` : | The title of the Frame or `NULL` if you don't want a title.
`radio_button_callback` : | The callback each button's "toggled" signal will be connected with.
`radio_button_callback_data` : | The data which will be passed to g_signal_connect().
`initial` : | The `item_data` of the initially pressed radio button.
`...` : | A `NULL`-terminated `va_list` describing the radio buttons.
Returns : | A GtkFrame or GtkVbox (depending on `in_frame`).

### gimp_radio_group_set_active ()

    void        gimp_radio_group_set_active     (GtkRadioButton *radio_button,
                                                 gpointer item_data);

Calls gtk_toggle_button_set_active() with the radio button that was created with a matching `item_data`.

`radio_button` : | Pointer to a GtkRadioButton.
`item_data` : | The `item_data` of the radio button you want to select.

### gimp_spin_button_new ()

    GtkWidget*  gimp_spin_button_new            (GtkObject **adjustment,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 gdouble page_size,
                                                 gdouble climb_rate,
                                                 guint digits);

This function is a shortcut for gtk_adjustment_new() and a subsequent gtk_spin_button_new() and does some more initialisation stuff like setting a standard minimum horizontal size.

`adjustment` : | Returns the spinbutton's GtkAdjustment.
`value` : | The initial value of the spinbutton.
`lower` : | The lower boundary.
`upper` : | The uppper boundary.
`step_increment` : | The spinbutton's step increment.
`page_increment` : | The spinbutton's page increment (mouse button 2).
`page_size` : | The spinbutton's page size.
`climb_rate` : | The spinbutton's climb rate.
`digits` : | The spinbutton's number of decimal digits.
Returns : | A GtkSpinbutton and it's GtkAdjustment.

### GIMP_SCALE_ENTRY_LABEL()

    #define     GIMP_SCALE_ENTRY_LABEL(adj)

Returns the scale_entry's GtkLabel.

`adj` : | The GtkAdjustment returned by gimp_scale_entry_new().

### GIMP_SCALE_ENTRY_SCALE()

    #define     GIMP_SCALE_ENTRY_SCALE(adj)

Returns the scale_entry's GtkHScale.

`adj` : | The GtkAdjustment returned by gimp_scale_entry_new().

### GIMP_SCALE_ENTRY_SCALE_ADJ()

    #define     GIMP_SCALE_ENTRY_SCALE_ADJ(adj)

Returns the GtkAdjustment of the scale_entry's GtkHScale.

`adj` : | The GtkAdjustment returned by gimp_scale_entry_new().

### GIMP_SCALE_ENTRY_SPINBUTTON()

    #define     GIMP_SCALE_ENTRY_SPINBUTTON(adj)

Returns the scale_entry's GtkSpinButton.

`adj` : | The GtkAdjustment returned by gimp_scale_entry_new().

### GIMP_SCALE_ENTRY_SPINBUTTON_ADJ()

    #define     GIMP_SCALE_ENTRY_SPINBUTTON_ADJ(adj)

Returns the GtkAdjustment of the scale_entry's GtkSpinButton.

`adj` : | The GtkAdjustment returned by gimp_scale_entry_new().

### gimp_scale_entry_new ()

    GtkObject*  gimp_scale_entry_new            (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *text,
                                                 gint scale_width,
                                                 gint spinbutton_width,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 guint digits,
                                                 gboolean constrain,
                                                 gdouble unconstrained_lower,
                                                 gdouble unconstrained_upper,
                                                 const gchar *tooltip,
                                                 const gchar *help_id);

This function creates a GtkLabel, a GtkHScale and a GtkSpinButton and attaches them to a 3-column GtkTable.

`table` : | The GtkTable the widgets will be attached to.
`column` : | The column to start with.
`row` : | The row to attach the widgets.
`text` : | The text for the GtkLabel which will appear left of the GtkHScale.
`scale_width` : | The minimum horizontal size of the GtkHScale.
`spinbutton_width` : | The minimum horizontal size of the GtkSpinButton.
`value` : | The initial value.
`lower` : | The lower boundary.
`upper` : | The upper boundary.
`step_increment` : | The step increment.
`page_increment` : | The page increment.
`digits` : | The number of decimal digits.
`constrain` : | `TRUE` if the range of possible values of the GtkSpinButton should be the same as of the GtkHScale.
`unconstrained_lower` : | The spinbutton's lower boundary if `constrain` == `FALSE`.
`unconstrained_upper` : | The spinbutton's upper boundary if `constrain` == `FALSE`.
`tooltip` : | A tooltip message for the scale and the spinbutton.
`help_id` : | The widgets' help_id (see gimp_help_set_help_data()).
Returns : | The GtkSpinButton's GtkAdjustment.

### gimp_scale_entry_set_sensitive ()

    void        gimp_scale_entry_set_sensitive  (GtkObject *adjustment,
                                                 gboolean sensitive);

Sets the sensitivity of the scale_entry's GtkLabel, GtkHScale and GtkSpinbutton.

`adjustment` : | a GtkAdjustment returned by gimp_scale_entry_new()
`sensitive` : | a boolean value with the same semantics as the `sensitive` parameter of gtk_widget_set_sensitive()

### gimp_color_scale_entry_new ()

    GtkObject*  gimp_color_scale_entry_new      (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *text,
                                                 gint scale_width,
                                                 gint spinbutton_width,
                                                 gdouble value,
                                                 gdouble lower,
                                                 gdouble upper,
                                                 gdouble step_increment,
                                                 gdouble page_increment,
                                                 guint digits,
                                                 const gchar *tooltip,
                                                 const gchar *help_id);

This function creates a GtkLabel, a GimpColorScale and a GtkSpinButton and attaches them to a 3-column GtkTable.

`table` : | The GtkTable the widgets will be attached to.
`column` : | The column to start with.
`row` : | The row to attach the widgets.
`text` : | The text for the GtkLabel which will appear left of the GtkHScale.
`scale_width` : | The minimum horizontal size of the GtkHScale.
`spinbutton_width` : | The minimum horizontal size of the GtkSpinButton.
`value` : | The initial value.
`lower` : | The lower boundary.
`upper` : | The upper boundary.
`step_increment` : | The step increment.
`page_increment` : | The page increment.
`digits` : | The number of decimal digits.
`tooltip` : | A tooltip message for the scale and the spinbutton.
`help_id` : | The widgets' help_id (see gimp_help_set_help_data()).
Returns : | The GtkSpinButton's GtkAdjustment.

### GIMP_RANDOM_SEED_SPINBUTTON()

    #define     GIMP_RANDOM_SEED_SPINBUTTON(hbox)

Returns the random_seed's GtkSpinButton.

`hbox` : | The GtkHBox returned by gimp_random_seed_new().

### GIMP_RANDOM_SEED_SPINBUTTON_ADJ()

    #define     GIMP_RANDOM_SEED_SPINBUTTON_ADJ(hbox)

Returns the GtkAdjustment of the random_seed's GtkSpinButton.

`hbox` : | The GtkHBox returned by gimp_random_seed_new().

### gimp_random_seed_new ()

    GtkWidget*  gimp_random_seed_new            (guint32 *seed);

Creates a widget that allows the user to control how the random number generator is initialized.

`seed` : | A pointer to the variable which stores the random seed.
Returns : | A GtkHBox containing a GtkSpinButton for the seed and a GtkButton for setting a random seed.

### GIMP_COORDINATES_CHAINBUTTON()

    #define     GIMP_COORDINATES_CHAINBUTTON(sizeentry)

Returns the GimpChainButton which is attached to the GimpSizeEntry.

`sizeentry` : | The GimpSizeEntry returned by gimp_coordinates_new().

### gimp_coordinates_new ()

    GtkWidget*  gimp_coordinates_new            (GimpUnit unit,
                                                 const gchar *unit_format,
                                                 gboolean menu_show_pixels,
                                                 gboolean menu_show_percent,
                                                 gint spinbutton_width,
                                                 GimpSizeEntryUpdatePolicy update_policy,
                                                 gboolean chainbutton_active,
                                                 gboolean chain_constrains_ratio,
                                                 const gchar *xlabel,
                                                 gdouble x,
                                                 gdouble xres,
                                                 gdouble lower_boundary_x,
                                                 gdouble upper_boundary_x,
                                                 gdouble xsize_0,
                                                 gdouble xsize_100,
                                                 const gchar *ylabel,
                                                 gdouble y,
                                                 gdouble yres,
                                                 gdouble lower_boundary_y,
                                                 gdouble upper_boundary_y,
                                                 gdouble ysize_0,
                                                 gdouble ysize_100);

Convenience function that creates a GimpSizeEntry with two fields for x/y coordinates/sizes with a GimpChainButton attached to constrain either the two fields' values or the ratio between them.

`unit` : | The initial unit of the GimpUnitMenu.
`unit_format` : | A printf-like unit-format string as is used with gimp_unit_menu_new().
`menu_show_pixels` : | `TRUE` if the GimpUnitMenu should contain an item for GIMP_UNIT_PIXEL.
`menu_show_percent` : | `TRUE` if the GimpUnitMenu should contain an item for GIMP_UNIT_PERCENT.
`spinbutton_width` : | The horizontal size of the GimpSizeEntry's GtkSpinButton's.
`update_policy` : | The update policy for the GimpSizeEntry.
`chainbutton_active` : | `TRUE` if the attached GimpChainButton should be active.
`chain_constrains_ratio` : | `TRUE` if the chainbutton should constrain the fields' aspect ratio. If `FALSE`, the values will be constrained.
`xlabel` : | The label for the X coordinate.
`x` : | The initial value of the X coordinate.
`xres` : | The horizontal resolution in DPI.
`lower_boundary_x` : | The lower boundary of the X coordinate.
`upper_boundary_x` : | The upper boundary of the X coordinate.
`xsize_0` : | The X value which will be treated as 0%.
`xsize_100` : | The X value which will be treated as 100%.
`ylabel` : | The label for the Y coordinate.
`y` : | The initial value of the Y coordinate.
`yres` : | The vertical resolution in DPI.
`lower_boundary_y` : | The lower boundary of the Y coordinate.
`upper_boundary_y` : | The upper boundary of the Y coordinate.
`ysize_0` : | The Y value which will be treated as 0%.
`ysize_100` : | The Y value which will be treated as 100%.
Returns : | The new GimpSizeEntry.

### gimp_pixmap_button_new ()

    GtkWidget*  gimp_pixmap_button_new          (gchar **xpm_data,
                                                 const gchar *text);

Convenience function that creates a GtkButton with a GimpPixmap and an optional GtkLabel.

`xpm_data` : | The XPM data which will be passed to gimp_pixmap_new().
`text` : | An optional text which will appear right of the pixmap.
Returns : | The new GtkButton.

### gimp_toggle_button_sensitive_update ()

    void        gimp_toggle_button_sensitive_update
                                                (GtkToggleButton *toggle_button);

If you attached a pointer to a GtkWidget with g_object_set_data() and the "set_sensitive" key to the GtkToggleButton, the sensitive state of the attached widget will be set according to the toggle button's "active" state.

You can attach an arbitrary list of widgets by attaching another "set_sensitive" data pointer to the first widget (and so on...).

This function can also set the sensitive state according to the toggle button's inverse "active" state by attaching widgets with the "inverse_sensitive" key.

`toggle_button` : | The GtkToggleButton the "set_sensitive" and "inverse_sensitive" lists are attached to.

### gimp_toggle_button_update ()

    void        gimp_toggle_button_update       (GtkWidget *widget,
                                                 gpointer data);

Note that this function calls gimp_toggle_button_sensitive_update().

`widget` : | A GtkToggleButton.
`data` : | A pointer to a gint variable which will store the value of gtk_toggle_button_get_active().

### gimp_radio_button_update ()

    void        gimp_radio_button_update        (GtkWidget *widget,
                                                 gpointer data);

Note that this function calls gimp_toggle_button_sensitive_update().

`widget` : | A GtkRadioButton.
`data` : | A pointer to a gint variable which will store the value of GPOINTER_TO_INT (g_object_get_data (`widget`, "gimp-item-data")).

### gimp_menu_item_update ()

    void        gimp_menu_item_update           (GtkWidget *widget,
                                                 gpointer data);

`widget` : | A GtkMenuItem.
`data` : | A pointer to a gint variable which will store the value of GPOINTER_TO_INT (g_object_get_data (`widget`, "gimp-item-data")).

### gimp_int_adjustment_update ()

    void        gimp_int_adjustment_update      (GtkAdjustment *adjustment,
                                                 gpointer data);

Note that the GtkAdjustment's value (which is a gdouble) will be rounded with RINT().

`adjustment` : | A GtkAdjustment.
`data` : | A pointer to a gint variable which will store the `adjustment`'s value.

### gimp_uint_adjustment_update ()

    void        gimp_uint_adjustment_update     (GtkAdjustment *adjustment,
                                                 gpointer data);

Note that the GtkAdjustment's value (which is a gdouble) will be rounded with (guint) (value + 0.5).

`adjustment` : | A GtkAdjustment.
`data` : | A pointer to a guint variable which will store the `adjustment`'s value.

### gimp_float_adjustment_update ()

    void        gimp_float_adjustment_update    (GtkAdjustment *adjustment,
                                                 gpointer data);

`adjustment` : | A GtkAdjustment.
`data` : | A pointer to a gfloat varaiable which will store the `adjustment`'s value.

### gimp_double_adjustment_update ()

    void        gimp_double_adjustment_update   (GtkAdjustment *adjustment,
                                                 gpointer data);

`adjustment` : | A GtkAdjustment.
`data` : | A pointer to a gdouble variable which will store the `adjustment`'s value.

### gimp_unit_menu_update ()

    void        gimp_unit_menu_update           (GtkWidget *widget,
                                                 gpointer data);

This callback can set the number of decimal digits of an arbitrary number of GtkSpinButton's. To use this functionality, attach the spinbuttons as list of data pointers attached with g_object_set_data() with the "set_digits" key.

See gimp_toggle_button_sensitive_update() for a description of how to set up the list.

`widget` : | A GimpUnitMenu.
`data` : | A pointer to a GimpUnit variable which will store the unit menu's value.

### gimp_table_attach_aligned ()

    GtkWidget*  gimp_table_attach_aligned       (GtkTable *table,
                                                 gint column,
                                                 gint row,
                                                 const gchar *label_text,
                                                 gfloat xalign,
                                                 gfloat yalign,
                                                 GtkWidget *widget,
                                                 gint colspan,
                                                 gboolean left_align);

Note that the `label_text` can be `NULL` and that the widget will be attached starting at (`column` + 1) in this case, too.

`table` : | The GtkTable the widgets will be attached to.
`column` : | The column to start with.
`row` : | The row to attach the widgets.
`label_text` : | The text for the GtkLabel which will be attached left of the widget.
`xalign` : | The horizontal alignment of the GtkLabel.
`yalign` : | The vertival alignment of the GtkLabel.
`widget` : | The GtkWidget to attach right of the label.
`colspan` : | The number of columns the widget will use.
`left_align` : | `TRUE` if the widget should be left-aligned.
Returns : | The created GtkLabel.