------------------------------------------------------------------------------
-- --
-- Copyright (C) 1998-2000 E. Briot, J. Brobecker and A. Charlet --
-- Copyright (C) 2000-2014, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 3, or (at your option) any later --
-- version. This library is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
------------------------------------------------------------------------------
-- <description>
-- A Gtk.Tool_Palette.Gtk_Tool_Palette allows you to add
-- Gtk.Tool_Item.Gtk_Tool_Item<!-- -->s to a palette-like container with
-- different categories and drag and drop support.
--
-- A Gtk.Tool_Palette.Gtk_Tool_Palette is created with a call to
-- Gtk.Tool_Palette.Gtk_New.
--
-- Gtk.Tool_Item.Gtk_Tool_Item<!-- -->s cannot be added directly to a
-- Gtk.Tool_Palette.Gtk_Tool_Palette - instead they are added to a
-- Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which can than be added to a
-- Gtk.Tool_Palette.Gtk_Tool_Palette. To add a
-- Gtk.Tool_Item_Group.Gtk_Tool_Item_Group to a
-- Gtk.Tool_Palette.Gtk_Tool_Palette, 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
-- Gtk.Tool_Palette.Gtk_Tool_Palette 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 Gtk.Widget.Gtk_Widget::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); ]|
--
-- </description>
pragma Ada_2005;
pragma Warnings (Off, "*is already use-visible*");
with Gdk.Drag_Contexts; use Gdk.Drag_Contexts;
with Glib; use Glib;
with Glib.Generic_Properties; use Glib.Generic_Properties;
with Glib.Properties; use Glib.Properties;
with Glib.Types; use Glib.Types;
with Gtk.Adjustment; use Gtk.Adjustment;
with Gtk.Buildable; use Gtk.Buildable;
with Gtk.Container; use Gtk.Container;
with Gtk.Enums; use Gtk.Enums;
with Gtk.Orientable; use Gtk.Orientable;
with Gtk.Scrollable; use Gtk.Scrollable;
with Gtk.Selection_Data; use Gtk.Selection_Data;
with Gtk.Target_Entry; use Gtk.Target_Entry;
with Gtk.Tool_Item; use Gtk.Tool_Item;
with Gtk.Tool_Item_Group; use Gtk.Tool_Item_Group;
with Gtk.Widget; use Gtk.Widget;
package Gtk.Tool_Palette is
type Gtk_Tool_Palette_Record is new Gtk_Container_Record with null record;
type Gtk_Tool_Palette is access all Gtk_Tool_Palette_Record'Class;
type Gtk_Dest_Defaults is mod 2 ** Integer'Size;
pragma Convention (C, Gtk_Dest_Defaults);
-- The Gtk.Tool_Palette.Gtk_Dest_Defaults enumeration specifies the
-- various types of action that will be taken on behalf of the user for a
-- drag destination site.
Dest_Default_Motion : constant Gtk_Dest_Defaults := 1;
Dest_Default_Highlight : constant Gtk_Dest_Defaults := 2;
Dest_Default_Drop : constant Gtk_Dest_Defaults := 4;
Dest_Default_All : constant Gtk_Dest_Defaults := 7;
type Gtk_Tool_Palette_Drag_Targets is mod 2 ** Integer'Size;
pragma Convention (C, Gtk_Tool_Palette_Drag_Targets);
-- Flags used to specify the supported drag targets.
Tool_Palette_Drag_Items : constant Gtk_Tool_Palette_Drag_Targets := 1;
Tool_Palette_Drag_Groups : constant Gtk_Tool_Palette_Drag_Targets := 2;
----------------------------
-- Enumeration Properties --
----------------------------
package Gtk_Dest_Defaults_Properties is
new Generic_Internal_Discrete_Property (Gtk_Dest_Defaults);
type Property_Gtk_Dest_Defaults is new Gtk_Dest_Defaults_Properties.Property;
package Gtk_Tool_Palette_Drag_Targets_Properties is
new Generic_Internal_Discrete_Property (Gtk_Tool_Palette_Drag_Targets);
type Property_Gtk_Tool_Palette_Drag_Targets is new Gtk_Tool_Palette_Drag_Targets_Properties.Property;
------------------
-- Constructors --
------------------
procedure Gtk_New (Self : out Gtk_Tool_Palette);
procedure Initialize
(Self : not null access Gtk_Tool_Palette_Record'Class);
-- Creates a new tool palette.
-- Since: gtk+ 2.20
function Gtk_Tool_Palette_New return Gtk_Tool_Palette;
-- Creates a new tool palette.
-- Since: gtk+ 2.20
function Get_Type return Glib.GType;
pragma Import (C, Get_Type, "gtk_tool_palette_get_type");
-------------
-- Methods --
-------------
procedure Add_Drag_Dest
(Self : not null access Gtk_Tool_Palette_Record;
Widget : not null access Gtk.Widget.Gtk_Widget_Record'Class;
Flags : Gtk_Dest_Defaults;
Targets : Gtk_Tool_Palette_Drag_Targets;
Actions : Gdk.Drag_Contexts.Gdk_Drag_Action);
-- 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.
-- Since: gtk+ 2.20
-- "widget": a Gtk.Widget.Gtk_Widget 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 Gtk.Tool_Palette.Gtk_Tool_Palette_Drag_Targets which the
-- widget should support
-- "actions": the Gdk.Drag_Contexts.Gdk_Drag_Action<!-- -->s which the
-- widget should suppport
function Get_Drag_Item
(Self : not null access Gtk_Tool_Palette_Record;
Selection : Gtk.Selection_Data.Gtk_Selection_Data)
return Gtk.Widget.Gtk_Widget;
-- Get the dragged item from the selection. This could be a
-- Gtk.Tool_Item.Gtk_Tool_Item or a
-- Gtk.Tool_Item_Group.Gtk_Tool_Item_Group.
-- Since: gtk+ 2.20
-- "selection": a Gtk.Selection_Data.Gtk_Selection_Data
function Get_Drop_Group
(Self : not null access Gtk_Tool_Palette_Record;
X : Gint;
Y : Gint) return Gtk.Tool_Item_Group.Gtk_Tool_Item_Group;
-- Gets the group at position (x, y).
-- Since: gtk+ 2.20
-- "x": the x position
-- "y": the y position
function Get_Drop_Item
(Self : not null access Gtk_Tool_Palette_Record;
X : Gint;
Y : Gint) return Gtk.Tool_Item.Gtk_Tool_Item;
-- Gets the item at position (x, y). See Gtk.Tool_Palette.Get_Drop_Group.
-- Since: gtk+ 2.20
-- "x": the x position
-- "y": the y position
function Get_Exclusive
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class)
return Boolean;
-- Gets whether Group is exclusive or not. See
-- Gtk.Tool_Palette.Set_Exclusive.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which is a child of
-- palette
procedure Set_Exclusive
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class;
Exclusive : Boolean);
-- Sets whether the group should be exclusive or not. If an exclusive
-- group is expanded all other groups are collapsed.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which is a child of
-- palette
-- "exclusive": whether the group should be exclusive or not
function Get_Expand
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class)
return Boolean;
-- Gets whether group should be given extra space. See
-- Gtk.Tool_Palette.Set_Expand.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which is a child of
-- palette
procedure Set_Expand
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class;
Expand : Boolean);
-- Sets whether the group should be given extra space.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which is a child of
-- palette
-- "expand": whether the group should be given extra space
function Get_Group_Position
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class)
return Gint;
-- Gets the position of Group in Palette as index. See
-- Gtk.Tool_Palette.Set_Group_Position.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group
procedure Set_Group_Position
(Self : not null access Gtk_Tool_Palette_Record;
Group : not null access Gtk.Tool_Item_Group.Gtk_Tool_Item_Group_Record'Class;
Position : Gint);
-- 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.
-- Since: gtk+ 2.20
-- "group": a Gtk.Tool_Item_Group.Gtk_Tool_Item_Group which is a child of
-- palette
-- "position": a new index for group
function Get_Icon_Size
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Enums.Gtk_Icon_Size;
-- Gets the size of icons in the tool palette. See
-- Gtk.Tool_Palette.Set_Icon_Size.
-- Since: gtk+ 2.20
procedure Set_Icon_Size
(Self : not null access Gtk_Tool_Palette_Record;
Icon_Size : Gtk.Enums.Gtk_Icon_Size);
-- Sets the size of icons in the tool palette.
-- Since: gtk+ 2.20
-- "icon_size": the Gtk.Enums.Gtk_Icon_Size that icons in the tool palette
-- shall have
function Get_Style
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Enums.Gtk_Toolbar_Style;
-- Gets the style (icons, text or both) of items in the tool palette.
-- Since: gtk+ 2.20
procedure Set_Style
(Self : not null access Gtk_Tool_Palette_Record;
Style : Gtk.Enums.Gtk_Toolbar_Style);
-- Sets the style (text, icons or both) of items in the tool palette.
-- Since: gtk+ 2.20
-- "style": the Gtk.Enums.Gtk_Toolbar_Style that items in the tool palette
-- shall have
procedure Set_Drag_Source
(Self : not null access Gtk_Tool_Palette_Record;
Targets : Gtk_Tool_Palette_Drag_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.
-- Since: gtk+ 2.20
-- "targets": the Gtk.Tool_Palette.Gtk_Tool_Palette_Drag_Targets which the
-- widget should support
procedure Unset_Icon_Size
(Self : not null access Gtk_Tool_Palette_Record);
-- 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.
-- Since: gtk+ 2.20
procedure Unset_Style (Self : not null access Gtk_Tool_Palette_Record);
-- Unsets a toolbar style set with Gtk.Tool_Palette.Set_Style, so that
-- user preferences will be used to determine the toolbar style.
-- Since: gtk+ 2.20
---------------------------------------------
-- Inherited subprograms (from interfaces) --
---------------------------------------------
-- Methods inherited from the Buildable interface are not duplicated here
-- since they are meant to be used by tools, mostly. If you need to call
-- them, use an explicit cast through the "-" operator below.
function Get_Orientation
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Enums.Gtk_Orientation;
procedure Set_Orientation
(Self : not null access Gtk_Tool_Palette_Record;
Orientation : Gtk.Enums.Gtk_Orientation);
function Get_Hadjustment
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Adjustment.Gtk_Adjustment;
procedure Set_Hadjustment
(Self : not null access Gtk_Tool_Palette_Record;
Hadjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class);
function Get_Hscroll_Policy
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Enums.Gtk_Scrollable_Policy;
procedure Set_Hscroll_Policy
(Self : not null access Gtk_Tool_Palette_Record;
Policy : Gtk.Enums.Gtk_Scrollable_Policy);
function Get_Vadjustment
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Adjustment.Gtk_Adjustment;
procedure Set_Vadjustment
(Self : not null access Gtk_Tool_Palette_Record;
Vadjustment : access Gtk.Adjustment.Gtk_Adjustment_Record'Class);
function Get_Vscroll_Policy
(Self : not null access Gtk_Tool_Palette_Record)
return Gtk.Enums.Gtk_Scrollable_Policy;
procedure Set_Vscroll_Policy
(Self : not null access Gtk_Tool_Palette_Record;
Policy : Gtk.Enums.Gtk_Scrollable_Policy);
---------------
-- Functions --
---------------
function Get_Drag_Target_Group return Gtk.Target_Entry.Gtk_Target_Entry;
-- Get the target entry for a dragged
-- Gtk.Tool_Item_Group.Gtk_Tool_Item_Group.
-- Since: gtk+ 2.20
function Get_Drag_Target_Item return Gtk.Target_Entry.Gtk_Target_Entry;
-- Gets the target entry for a dragged Gtk.Tool_Item.Gtk_Tool_Item.
-- Since: gtk+ 2.20
----------------
-- Properties --
----------------
-- The following properties are defined for this widget. See
-- Glib.Properties for more information on properties)
Icon_Size_Property : constant Gtk.Enums.Property_Gtk_Icon_Size;
-- The size of the icons in a tool palette is normally determined by the
-- Gtk.Settings.Gtk_Settings:gtk-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.
Icon_Size_Set_Property : constant Glib.Properties.Property_Boolean;
-- Is True if the Gtk.Tool_Palette.Gtk_Tool_Palette:icon-size property has
-- been set.
Toolbar_Style_Property : constant Gtk.Enums.Property_Gtk_Toolbar_Style;
-- The style of items in the tool palette.
----------------
-- Interfaces --
----------------
-- This class implements several interfaces. See Glib.Types
--
-- - "Buildable"
--
-- - "Orientable"
--
-- - "Scrollable"
package Implements_Gtk_Buildable is new Glib.Types.Implements
(Gtk.Buildable.Gtk_Buildable, Gtk_Tool_Palette_Record, Gtk_Tool_Palette);
function "+"
(Widget : access Gtk_Tool_Palette_Record'Class)
return Gtk.Buildable.Gtk_Buildable
renames Implements_Gtk_Buildable.To_Interface;
function "-"
(Interf : Gtk.Buildable.Gtk_Buildable)
return Gtk_Tool_Palette
renames Implements_Gtk_Buildable.To_Object;
package Implements_Gtk_Orientable is new Glib.Types.Implements
(Gtk.Orientable.Gtk_Orientable, Gtk_Tool_Palette_Record, Gtk_Tool_Palette);
function "+"
(Widget : access Gtk_Tool_Palette_Record'Class)
return Gtk.Orientable.Gtk_Orientable
renames Implements_Gtk_Orientable.To_Interface;
function "-"
(Interf : Gtk.Orientable.Gtk_Orientable)
return Gtk_Tool_Palette
renames Implements_Gtk_Orientable.To_Object;
package Implements_Gtk_Scrollable is new Glib.Types.Implements
(Gtk.Scrollable.Gtk_Scrollable, Gtk_Tool_Palette_Record, Gtk_Tool_Palette);
function "+"
(Widget : access Gtk_Tool_Palette_Record'Class)
return Gtk.Scrollable.Gtk_Scrollable
renames Implements_Gtk_Scrollable.To_Interface;
function "-"
(Interf : Gtk.Scrollable.Gtk_Scrollable)
return Gtk_Tool_Palette
renames Implements_Gtk_Scrollable.To_Object;
private
Toolbar_Style_Property : constant Gtk.Enums.Property_Gtk_Toolbar_Style :=
Gtk.Enums.Build ("toolbar-style");
Icon_Size_Set_Property : constant Glib.Properties.Property_Boolean :=
Glib.Properties.Build ("icon-size-set");
Icon_Size_Property : constant Gtk.Enums.Property_Gtk_Icon_Size :=
Gtk.Enums.Build ("icon-size");
end Gtk.Tool_Palette;