## GtkToolPalette

GtkToolPalette — A tool palette with categories

## Synopsis

    #include <gtk/gtk.h>

                        GtkToolPalette;
    GtkWidget*          gtk_tool_palette_new                (void);
    gboolean            gtk_tool_palette_get_exclusive      (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);
    void                gtk_tool_palette_set_exclusive      (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gboolean exclusive);
    gboolean            gtk_tool_palette_get_expand         (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);
    void                gtk_tool_palette_set_expand         (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gboolean expand);
    gint                gtk_tool_palette_get_group_position (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);
    void                gtk_tool_palette_set_group_position (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gint position);
    GtkIconSize         gtk_tool_palette_get_icon_size      (GtkToolPalette *palette);
    void                gtk_tool_palette_set_icon_size      (GtkToolPalette *palette,
                                                             GtkIconSize icon_size);
    void                gtk_tool_palette_unset_icon_size    (GtkToolPalette *palette);
    GtkToolbarStyle     gtk_tool_palette_get_style          (GtkToolPalette *palette);
    void                gtk_tool_palette_set_style          (GtkToolPalette *palette,
                                                             GtkToolbarStyle style);
    void                gtk_tool_palette_unset_style        (GtkToolPalette *palette);
    void                gtk_tool_palette_add_drag_dest      (GtkToolPalette *palette,
                                                             GtkWidget *widget,
                                                             GtkDestDefaults flags,
                                                             GtkToolPaletteDragTargets targets,
                                                             GdkDragAction actions);
    GtkWidget*          gtk_tool_palette_get_drag_item      (GtkToolPalette *palette,
                                                             const GtkSelectionData *selection);
    const GtkTargetEntry* gtk_tool_palette_get_drag_target_group
                                                            (void);
    const GtkTargetEntry* gtk_tool_palette_get_drag_target_item
                                                            (void);
    GtkToolItemGroup*   gtk_tool_palette_get_drop_group     (GtkToolPalette *palette,
                                                             gint x,
                                                             gint y);
    GtkToolItem*        gtk_tool_palette_get_drop_item      (GtkToolPalette *palette,
                                                             gint x,
                                                             gint y);
    enum                GtkToolPaletteDragTargets;
    void                gtk_tool_palette_set_drag_source    (GtkToolPalette *palette,
                                                             GtkToolPaletteDragTargets targets);
    GtkAdjustment*      gtk_tool_palette_get_hadjustment    (GtkToolPalette *palette);
    GtkAdjustment*      gtk_tool_palette_get_vadjustment    (GtkToolPalette *palette);

## Object Hierarchy

      GObject
       +----GInitiallyUnowned
             +----GtkObject
                   +----GtkWidget
                         +----GtkContainer
                               +----GtkToolPalette

## Implemented Interfaces

GtkToolPalette implements AtkImplementorIface, GtkBuildable and GtkOrientable.

## Properties

      "icon-size"                GtkIconSize           : Read / Write
      "icon-size-set"            gboolean              : Read / Write
      "toolbar-style"            GtkToolbarStyle       : Read / Write

## Child Properties

      "exclusive"                gboolean              : Read / Write
      "expand"                   gboolean              : Read / Write

## Signals

      "set-scroll-adjustments"                         : Run Last / Action

## Description

A GtkToolPalette allows you to add GtkToolItems to a palette-like container with different categories and drag and drop support.

A GtkToolPalette is created with a call to `gtk_tool_palette_new()`.

GtkToolItems cannot be added directly to a GtkToolPalette - instead they are added to a GtkToolItemGroup which can than be added to a GtkToolPalette. To add a GtkToolItemGroup to a GtkToolPalette, use `gtk_container_add()`.

    GtkWidget *palette, *group;
    GtkToolItem *item;

    palette = gtk_tool_palette_new ();
    group = gtk_tool_item_group_new (_("Test Category"));
    gtk_container_add (GTK_CONTAINER (palette), group);

    item = gtk_tool_button_new_from_stock (GTK_STOCK_OK);
    gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);

The easiest way to use drag and drop with GtkToolPalette is to call `gtk_tool_palette_add_drag_dest()` with the desired drag source `palette` and the desired drag target `widget`. Then `gtk_tool_palette_get_drag_item()` can be used to get the dragged item in the "drag-data-received" signal handler of the drag target.

    static void
    passive_canvas_drag_data_received (GtkWidget        *widget,
                                       GdkDragContext   *context,
                                       gint              x,
                                       gint              y,
                                       GtkSelectionData *selection,
                                       guint             info,
                                       guint             time,
                                       gpointer          data)
    {
      GtkWidget *palette;
      GtkWidget *item;

      /* Get the dragged item */
      palette = gtk_widget_get_ancestor (gtk_drag_get_source_widget (context),
                                         GTK_TYPE_TOOL_PALETTE);
      if (palette != NULL)
        item = gtk_tool_palette_get_drag_item (GTK_TOOL_PALETTE (palette),
                                               selection);

      /* Do something with item */
    }

    GtkWidget *target, palette;

    palette = gtk_tool_palette_new ();
    target = gtk_drawing_area_new ();

    g_signal_connect (G_OBJECT (target), "drag-data-received",
                      G_CALLBACK (passive_canvas_drag_data_received), NULL);
    gtk_tool_palette_add_drag_dest (GTK_TOOL_PALETTE (palette), target,
                                    GTK_DEST_DEFAULT_ALL,
                                    GTK_TOOL_PALETTE_DRAG_ITEMS,
                                    GDK_ACTION_COPY);

## Details

### GtkToolPalette

    typedef struct _GtkToolPalette GtkToolPalette;

This should not be accessed directly. Use the accessor functions below.

### gtk_tool_palette_new ()

    GtkWidget*          gtk_tool_palette_new                (void);

Creates a new tool palette.

Returns : | a new GtkToolPalette

Since 2.20

### gtk_tool_palette_get_exclusive ()

    gboolean            gtk_tool_palette_get_exclusive      (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);

Gets whether `group` is exclusive or not. See `gtk_tool_palette_set_exclusive()`.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup which is a child of palette
Returns : | `TRUE` if `group` is exclusive

Since 2.20

### gtk_tool_palette_set_exclusive ()

    void                gtk_tool_palette_set_exclusive      (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gboolean exclusive);

Sets whether the group should be exclusive or not. If an exclusive group is expanded all other groups are collapsed.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup which is a child of palette
`exclusive` : | whether the group should be exclusive or not

Since 2.20

### gtk_tool_palette_get_expand ()

    gboolean            gtk_tool_palette_get_expand         (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);

Gets whether group should be given extra space. See `gtk_tool_palette_set_expand()`.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup which is a child of palette
Returns : | `TRUE` if group should be given extra space, `FALSE` otherwise

Since 2.20

### gtk_tool_palette_set_expand ()

    void                gtk_tool_palette_set_expand         (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gboolean expand);

Sets whether the group should be given extra space.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup which is a child of palette
`expand` : | whether the group should be given extra space

Since 2.20

### gtk_tool_palette_get_group_position ()

    gint                gtk_tool_palette_get_group_position (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group);

Gets the position of `group` in `palette` as index. See `gtk_tool_palette_set_group_position()`.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup
Returns : | the index of group or -1 if `group` is not a child of `palette`

Since 2.20

### gtk_tool_palette_set_group_position ()

    void                gtk_tool_palette_set_group_position (GtkToolPalette *palette,
                                                             GtkToolItemGroup *group,
                                                             gint position);

Sets the position of the group as an index of the tool palette. If position is 0 the group will become the first child, if position is -1 it will become the last child.

`palette` : | a GtkToolPalette
`group` : | a GtkToolItemGroup which is a child of palette
`position` : | a new index for group

Since 2.20

### gtk_tool_palette_get_icon_size ()

    GtkIconSize         gtk_tool_palette_get_icon_size      (GtkToolPalette *palette);

Gets the size of icons in the tool palette. See `gtk_tool_palette_set_icon_size()`.

`palette` : | a GtkToolPalette
Returns : | the GtkIconSize of icons in the tool palette. type int

Since 2.20

### gtk_tool_palette_set_icon_size ()

    void                gtk_tool_palette_set_icon_size      (GtkToolPalette *palette,
                                                             GtkIconSize icon_size);

Sets the size of icons in the tool palette.

`palette` : | a GtkToolPalette
`icon_size` : | type int. type int

Since 2.20

### gtk_tool_palette_unset_icon_size ()

    void                gtk_tool_palette_unset_icon_size    (GtkToolPalette *palette);

Unsets the tool palette icon size set with `gtk_tool_palette_set_icon_size()`, so that user preferences will be used to determine the icon size.

`palette` : | a GtkToolPalette

Since 2.20

### gtk_tool_palette_get_style ()

    GtkToolbarStyle     gtk_tool_palette_get_style          (GtkToolPalette *palette);

Gets the style (icons, text or both) of items in the tool palette.

`palette` : | a GtkToolPalette
Returns : | the GtkToolbarStyle of items in the tool palette.

Since 2.20

### gtk_tool_palette_set_style ()

    void                gtk_tool_palette_set_style          (GtkToolPalette *palette,
                                                             GtkToolbarStyle style);

Sets the style (text, icons or both) of items in the tool palette.

`palette` : | a GtkToolPalette
`style` : | the GtkToolbarStyle that items in the tool palette shall have

Since 2.20

### gtk_tool_palette_unset_style ()

    void                gtk_tool_palette_unset_style        (GtkToolPalette *palette);

Unsets a toolbar style set with `gtk_tool_palette_set_style()`, so that user preferences will be used to determine the toolbar style.

`palette` : | a GtkToolPalette

Since 2.20

### gtk_tool_palette_add_drag_dest ()

    void                gtk_tool_palette_add_drag_dest      (GtkToolPalette *palette,
                                                             GtkWidget *widget,
                                                             GtkDestDefaults flags,
                                                             GtkToolPaletteDragTargets targets,
                                                             GdkDragAction actions);

Sets `palette` as drag source (see `gtk_tool_palette_set_drag_source()`) and sets `widget` as a drag destination for drags from `palette`. See `gtk_drag_dest_set()`.

`palette` : | a GtkToolPalette
`widget` : | a GtkWidget which should be a drag destination for `palette`
`flags` : | the flags that specify what actions GTK+ should take for drops on that widget
`targets` : | the GtkToolPaletteDragTargets which the widget should support
`actions` : | the GdkDragActions which the widget should suppport

Since 2.20

### gtk_tool_palette_get_drag_item ()

    GtkWidget*          gtk_tool_palette_get_drag_item      (GtkToolPalette *palette,
                                                             const GtkSelectionData *selection);

Get the dragged item from the selection. This could be a GtkToolItem or a GtkToolItemGroup.

`palette` : | a GtkToolPalette
`selection` : | a GtkSelectionData
Returns : | the dragged item in selection

Since 2.20

### gtk_tool_palette_get_drag_target_group ()

    const GtkTargetEntry* gtk_tool_palette_get_drag_target_group
                                                            (void);

Get the target entry for a dragged GtkToolItemGroup.

Returns : | the GtkTargetEntry for a dragged group

Since 2.20

### gtk_tool_palette_get_drag_target_item ()

    const GtkTargetEntry* gtk_tool_palette_get_drag_target_item
                                                            (void);

Gets the target entry for a dragged GtkToolItem.

Returns : | the GtkTargetEntry for a dragged item.

Since 2.20

### gtk_tool_palette_get_drop_group ()

    GtkToolItemGroup*   gtk_tool_palette_get_drop_group     (GtkToolPalette *palette,
                                                             gint x,
                                                             gint y);

Gets the group at position (x, y).

`palette` : | a GtkToolPalette
`x` : | the x position
`y` : | the y position
Returns : | the GtkToolItemGroup at position or `NULL` if there is no such group

Since 2.20

### gtk_tool_palette_get_drop_item ()

    GtkToolItem*        gtk_tool_palette_get_drop_item      (GtkToolPalette *palette,
                                                             gint x,
                                                             gint y);

Gets the item at position (x, y). See `gtk_tool_palette_get_drop_group()`.

`palette` : | a GtkToolPalette
`x` : | the x position
`y` : | the y position
Returns : | the GtkToolItem at position or `NULL` if there is no such item

Since 2.20

### enum GtkToolPaletteDragTargets

    typedef enum /*< flags >*/
    {
      GTK_TOOL_PALETTE_DRAG_ITEMS = (1 << 0),
      GTK_TOOL_PALETTE_DRAG_GROUPS = (1 << 1)
    }
    GtkToolPaletteDragTargets;

Flags used to specify the supported drag targets.

`GTK_TOOL_PALETTE_DRAG_ITEMS` | Support drag of items.
`GTK_TOOL_PALETTE_DRAG_GROUPS` | Support drag of groups.

### gtk_tool_palette_set_drag_source ()

    void                gtk_tool_palette_set_drag_source    (GtkToolPalette *palette,
                                                             GtkToolPaletteDragTargets targets);

Sets the tool palette as a drag source. Enables all groups and items in the tool palette as drag sources on button 1 and button 3 press with copy and move actions. See `gtk_drag_source_set()`.

`palette` : | a GtkToolPalette
`targets` : | the GtkToolPaletteDragTargets which the widget should support

Since 2.20

### gtk_tool_palette_get_hadjustment ()

    GtkAdjustment*      gtk_tool_palette_get_hadjustment    (GtkToolPalette *palette);

Gets the horizontal adjustment of the tool palette.

`palette` : | a GtkToolPalette
Returns : | the horizontal adjustment of `palette`

Since 2.20

### gtk_tool_palette_get_vadjustment ()

    GtkAdjustment*      gtk_tool_palette_get_vadjustment    (GtkToolPalette *palette);

Gets the vertical adjustment of the tool palette.

`palette` : | a GtkToolPalette
Returns : | the vertical adjustment of `palette`

Since 2.20

## Property Details

### The `"icon-size"` property

      "icon-size"                GtkIconSize           : Read / Write

The size of the icons in a tool palette is normally determined by the "toolbar-icon-size" setting. When this property is set, it overrides the setting.

This should only be used for special-purpose tool palettes, normal application tool palettes should respect the user preferences for the size of icons.

Default value: GTK_ICON_SIZE_SMALL_TOOLBAR

Since 2.20

### The `"icon-size-set"` property

      "icon-size-set"            gboolean              : Read / Write

Is `TRUE` if the "icon-size" property has been set.

Default value: FALSE

Since 2.20

### The `"toolbar-style"` property

      "toolbar-style"            GtkToolbarStyle       : Read / Write

The style of items in the tool palette.

Default value: GTK_TOOLBAR_ICONS

Since 2.20

## Child Property Details

### The `"exclusive"` child property

      "exclusive"                gboolean              : Read / Write

Whether the item group should be the only one that is expanded at a given time.

Default value: FALSE

Since 2.20

### The `"expand"` child property

      "expand"                   gboolean              : Read / Write

Whether the item group should receive extra space when the palette grows. at a given time.

Default value: FALSE

Since 2.20

## Signal Details

### The `"set-scroll-adjustments"` signal

    void                user_function                      (GtkToolPalette *widget,
                                                            GtkAdjustment  *hadjustment,
                                                            GtkAdjustment  *vadjustment,
                                                            gpointer        user_data)        : Run Last / Action

Set the scroll adjustments for the viewport. Usually scrolled containers like GtkScrolledWindow will emit this signal to connect two instances of GtkScrollbar to the scroll directions of the GtkToolpalette.

`widget` : | the GtkToolPalette that received the signal
`hadjustment` : | The horizontal adjustment
`vadjustment` : | The vertical adjustment
`user_data` : | user data set when the signal handler was connected.

Since 2.20