----------------------------------------------------------------------- -- GtkAda - Ada95 binding for Gtk+/Gnome -- -- -- -- Copyright (C) 2010, AdaCore -- -- -- -- This library is free software; you can redistribute it and/or -- -- modify it under the terms of the GNU General Public -- -- License as published by the Free Software Foundation; either -- -- version 2 of the License, 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 -- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- -- General Public License for more details. -- -- -- -- You should have received a copy of the GNU General Public -- -- License along with this library; if not, write to the -- -- Free Software Foundation, Inc., 59 Temple Place - Suite 330, -- -- Boston, MA 02111-1307, USA. -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ----------------------------------------------------------------------- -- -- A Gtk_Link_Button is like a regular button with contents that -- appear like a web browser hyperlink. It is associated with a -- URI. The URI is passed to a callback procedure that is invoked -- when the user clicks the button. This widget also keeps track of -- whether it has been clicked, and changes color after it has been -- visited. -- -- 2.16.6 -- Buttons and Toggles -- create_link_buttons.adb with Interfaces.C.Strings; with Glib.Properties; with Gtk.Button; with Gtk.Widget; use Gtk.Widget; package Gtk.Link_Button is type Gtk_Link_Button_Record is new Gtk.Button.Gtk_Button_Record with private; type Gtk_Link_Button is access all Gtk_Link_Button_Record'Class; function Get_Type return GType; -- Return the internal value associated with a Gtk_Link_Button. function Get_Uri (Link_Button : access Gtk_Link_Button_Record) return String; -- Retrieves the URI set using Set_Uri. -- Return value: a valid URI. The returned string is owned by the -- link button and should not be modified or freed. function Get_Visited (Link_Button : access Gtk_Link_Button_Record) return Boolean; -- Retrieves the 'visited' state of the URI where the Link_Button -- points. The button becomes visited when it is clicked. If the URI -- is changed on the button, the 'visited' state is unset again. -- -- The state may also be changed using Set_Visited. -- -- Return value: True if the link has been visited, False otherwise procedure Gtk_New (Widget : out Gtk_Link_Button; Uri : String); -- Creates a new Gtk_Link_Button_Record with the URI as its text. procedure Initialize (Widget : access Gtk_Link_Button_Record'Class; Uri : String); -- Creates a new Gtk_Link_Button_Record with the URI as its text. procedure Gtk_New_With_Label (Widget : out Gtk_Link_Button; Uri : String; Label : String); -- Creates a new Gtk_Link_Button_Record containing a label. procedure Initialize_With_Label (Widget : access Gtk_Link_Button_Record'Class; Uri : String; Label : String); -- Creates a new Gtk_Link_Button containing a label. procedure Set_Uri (Link_Button : access Gtk_Link_Button_Record; Uri : String); -- Sets Uri as the URI where the Gtk_Link_Button points. As a side-effect -- this unsets the 'visited' state of the button. type Uri_Func is access procedure (Button : System.Address; Link : Interfaces.C.Strings.chars_ptr; Data : System.Address); pragma Convention (C, Uri_Func); -- This is a low-level callback function to be used with Set_Uri_Hook. -- See package Generic_Uri_Hook below for a higher-level interface. -- -- You could convert the parameters to Ada types with the following -- declarations: -- -- Stub : Gtk_Link_Button_Record; -- Link_Button : constant Gtk_Link_Button := -- Gtk_Link_Button (Get_User_Data (Button, Stub)); -- Link_String : constant String := Interfaces.C.Strings.Value (Link); -- -- You'd also perform an appropriate conversion on Data using -- Ada.Unchecked_Conversion. function Set_Uri_Hook (Func : Uri_Func; Data : System.Address; Destroy : G_Destroy_Notify) return Uri_Func; -- Func: a function called each time a Gtk_Link_Button is clicked, or null -- Data: user data to be passed to Func, or null -- Destroy: called when Data is no longer needed, or null -- -- Sets Func as the subprogram that should be invoked every time a user -- clicks a Gtk_Link_Button. This function is called before every -- callback registered for the "clicked" signal. -- -- Returns the previously set hook function. generic type Data_Type (<>) is private; package Generic_Uri_Hook is type Uri_Handler is access procedure (Button : access Gtk_Link_Button_Record'Class; Link : UTF8_String; User_Data : Data_Type); -- A callback that is invoked when the user presses a hyperlink. type Destroy_Notify is access procedure (User_Data : in out Data_Type); -- Destroy_Notify is called just prior to the destruction of -- User_Data. procedure Set_Uri_Hook (Handler : Uri_Handler; User_Data : Data_Type; Destroy : Destroy_Notify); -- Sets Handler as the subprogram that should be invoked every time -- a user clicks a Gtk_Link_Button. This subprogram is called before -- every callback registered for the "clicked" signal. -- -- If no uri hook has been set, GTK+ defaults to calling gtk_show_uri(). end Generic_Uri_Hook; procedure Set_Visited (Link_Button : access Gtk_Link_Button_Record; Visited : Boolean); -- Sets the 'visited' state of the URI where the #GtkLinkButton -- points. See Get_Visited for more details. Uri_Property : constant Glib.Properties.Property_String; Visited_Property : constant Glib.Properties.Property_Boolean; private type Gtk_Link_Button_Record is new Gtk.Button.Gtk_Button_Record with null record; Uri_Property : constant Glib.Properties.Property_String := Glib.Properties.Build ("uri"); Visited_Property : constant Glib.Properties.Property_Boolean := Glib.Properties.Build ("visited"); pragma Import (C, Get_Type, "gtk_link_button_get_type"); end Gtk.Link_Button;