-----------------------------------------------------------------------
-- GtkAda - Ada95 binding for the Gimp Toolkit --
-- --
-- Copyright (C) 2009, 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. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
-----------------------------------------------------------------------
-- This program demonstraites how to use tooltips for different widgets.
with Glib.Object;
with Glib.Properties;
with Glib.Values;
with Gdk.Color;
with Gtk.Box;
with Gtk.Cell_Renderer_Text;
with Gtk.Check_Button;
with Gtk.Enums;
with Gtk.Handlers;
with Gtk.Label;
with Gtk.Main;
with Gtk.Stock;
with Gtk.Tooltips;
with Gtk.Tree_Model;
with Gtk.Tree_Store;
with Gtk.Tree_View;
with Gtk.Tree_View_Column;
with Gtk.Widget;
with Gtk.Window;
procedure Tooltips is
function On_Delete_Event
(Sender : access Gtk.Window.Gtk_Window_Record'Class)
return Boolean;
function On_Check_Button_Query_Tooltip
(Sender : access Gtk.Check_Button.Gtk_Check_Button_Record'Class;
Params : Glib.Values.GValues)
return Boolean;
-- Application defined "query-tooltip" signal handler. Shows how to setup
-- application defined text and icon.
function On_Label_Query_Tooltip_Custom
(Sender : access Gtk.Label.Gtk_Label_Record'Class;
Params : Glib.Values.GValues)
return Boolean;
-- Application defined "query-tooltip" signal handler. Shows how to use
-- custom tooltip window.
function On_Tree_View_Query_Tooltip
(Sender : access Gtk.Tree_View.Gtk_Tree_View_Record'Class;
Params : Glib.Values.GValues)
return Boolean;
-- Application defined "query-tooltip" signal handler. Shows how to setup
-- tooltips for items in tree view.
package Gtk_Window_Callbacks is
new Gtk.Handlers.Return_Callback (Gtk.Window.Gtk_Window_Record, Boolean);
package Gtk_Check_Button_Callbacks is
new Gtk.Handlers.Return_Callback
(Gtk.Check_Button.Gtk_Check_Button_Record, Boolean);
package Gtk_Label_Callbacks is
new Gtk.Handlers.Return_Callback (Gtk.Label.Gtk_Label_Record, Boolean);
package Gtk_Tree_View_Callbacks is
new Gtk.Handlers.Return_Callback
(Gtk.Tree_View.Gtk_Tree_View_Record, Boolean);
-----------------------------------
-- On_Check_Button_Query_Tooltip --
-----------------------------------
function On_Check_Button_Query_Tooltip
(Sender : access Gtk.Check_Button.Gtk_Check_Button_Record'Class;
Params : Glib.Values.GValues)
return Boolean
is
Stub : Gtk.Tooltips.Gtk_Tooltips_Record;
Tooltip : constant Gtk.Tooltips.Gtk_Tooltips :=
Gtk.Tooltips.Gtk_Tooltips
(Glib.Object.Get_User_Data
(Glib.Values.Get_Address
(Glib.Values.Nth (Params, 4)), Stub));
begin
Tooltip.Set_Markup (Sender.Get_Label);
Tooltip.Set_Icon_From_Stock
(Gtk.Stock.Stock_Delete, Gtk.Enums.Icon_Size_Menu);
return True;
end On_Check_Button_Query_Tooltip;
---------------------
-- On_Delete_Event --
---------------------
function On_Delete_Event
(Sender : access Gtk.Window.Gtk_Window_Record'Class)
return Boolean
is
begin
Gtk.Main.Main_Quit;
return True;
end On_Delete_Event;
-----------------------------------
-- On_Label_Query_Tooltip_Custom --
-----------------------------------
function On_Label_Query_Tooltip_Custom
(Sender : access Gtk.Label.Gtk_Label_Record'Class;
Params : Glib.Values.GValues)
return Boolean
is
Window : constant Gtk.Window.Gtk_Window :=
Gtk.Window.Gtk_Window (Sender.Get_Tooltip_Window);
Color : Gdk.Color.Gdk_Color;
begin
Gdk.Color.Set_Rgb (Color, 0, 0, 65535);
Window.Modify_Bg (Gtk.Enums.State_Normal, Color);
return True;
end On_Label_Query_Tooltip_Custom;
--------------------------------
-- On_Tree_View_Query_Tooltip --
--------------------------------
function On_Tree_View_Query_Tooltip
(Sender : access Gtk.Tree_View.Gtk_Tree_View_Record'Class;
Params : Glib.Values.GValues)
return Boolean
is
X : Glib.Gint := Glib.Values.Get_Int (Glib.Values.Nth (Params, 1));
Y : Glib.Gint := Glib.Values.Get_Int (Glib.Values.Nth (Params, 2));
Mode : constant Boolean :=
Glib.Values.Get_Boolean (Glib.Values.Nth (Params, 3));
Stub : Gtk.Tooltips.Gtk_Tooltips_Record;
Tooltip : constant Gtk.Tooltips.Gtk_Tooltips :=
Gtk.Tooltips.Gtk_Tooltips
(Glib.Object.Get_User_Data
(Glib.Values.Get_Address
(Glib.Values.Nth (Params, 4)), Stub));
Model : Gtk.Tree_Model.Gtk_Tree_Model;
Path : Gtk.Tree_Model.Gtk_Tree_Path;
Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
Success : Boolean;
begin
Sender.Get_Tooltip_Context (X, Y, Mode, Model, Path, Iter, Success);
if not Success then
return False;
end if;
Tooltip.Set_Markup
("Path "
& Gtk.Tree_Model.To_String (Path)
& ": "
& Model.Get_String (Iter, 0));
Sender.Set_Tooltip_Row (Tooltip, Path);
Gtk.Tree_Model.Path_Free (Path);
return True;
end On_Tree_View_Query_Tooltip;
Tree_Types : constant Glib.GType_Array := (1 => Glib.GType_String);
Window : Gtk.Window.Gtk_Window;
Box : Gtk.Box.Gtk_Vbox;
Button : Gtk.Check_Button.Gtk_Check_Button;
Label : Gtk.Label.Gtk_Label;
Tooltip_Window : Gtk.Window.Gtk_Window;
Tooltip_Label : Gtk.Label.Gtk_Label;
Tree_Store : Gtk.Tree_Store.Gtk_Tree_Store;
Tree_View : Gtk.Tree_View.Gtk_Tree_View;
Column : Gtk.Tree_View_Column.Gtk_Tree_View_Column;
Renderer : Gtk.Cell_Renderer_Text.Gtk_Cell_Renderer_Text;
Iter : Gtk.Tree_Model.Gtk_Tree_Iter;
Dummy : Glib.Gint;
begin
Gtk.Main.Init;
Gtk.Window.Gtk_New (Window, Gtk.Enums.Window_Toplevel);
Window.Set_Title ("Tooltip example");
Window.Set_Border_Width (10);
Gtk_Window_Callbacks.Connect
(Window,
Gtk.Widget.Signal_Delete_Event,
Gtk_Window_Callbacks.To_Marshaller (On_Delete_Event'Access));
Gtk.Box.Gtk_New_Vbox (Box, False, 3);
Window.Add (Box);
-- A check button using the tooltip-markup property
Gtk.Check_Button.Gtk_New
(Button, "This one uses the tooltip-markup property");
Button.Set_Tooltip_Text ("Hello, I am a static tooltip.");
Box.Pack_Start (Button, False, False, 0);
-- A check button using the query-tooltip signal
Gtk.Check_Button.Gtk_New (Button, "I use the query-tooltip signal");
Glib.Properties.Set_Property
(Button, Gtk.Widget.Has_Tooltip_Property, True);
Gtk_Check_Button_Callbacks.Connect
(Button,
Gtk.Widget.Signal_Query_Tooltip,
On_Check_Button_Query_Tooltip'Access);
Box.Pack_Start (Button, False, False, 0);
-- A selectable label
Gtk.Label.Gtk_New (Label, "I am a selectable label");
Label.Set_Selectable (True);
Label.Set_Tooltip_Markup ("Another Label tooltip");
Box.Pack_Start (Label, False, False, 0);
-- Another one, with a custom tooltip window
Gtk.Label.Gtk_New (Label, "This one has a custom tooltip window!");
Box.Pack_Start (Label, False, False, 0);
Gtk.Window.Gtk_New (Tooltip_Window, Gtk.Enums.Window_Popup);
Gtk.Label.Gtk_New (Tooltip_Label, "blaat!");
Tooltip_Window.Add (Tooltip_Label);
Tooltip_Label.Show;
Label.Set_Tooltip_Window (Tooltip_Window);
Glib.Properties.Set_Property
(Label, Gtk.Widget.Has_Tooltip_Property, True);
Gtk_Label_Callbacks.Connect
(Label,
Gtk.Widget.Signal_Query_Tooltip,
On_Label_Query_Tooltip_Custom'Access);
-- Tree view
Gtk.Tree_Store.Gtk_New (Tree_Store, Tree_Types);
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "File Manager");
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "Gossip");
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "System Settings");
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "The GIMP");
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "Terminal");
Tree_Store.Append (Iter, Gtk.Tree_Model.Null_Iter);
Tree_Store.Set (Iter, 0, "Word Processor");
Gtk.Tree_View.Gtk_New (Tree_View, Tree_Store);
Tree_View.Set_Size_Request (200, 240);
Glib.Properties.Set_Property
(Tree_View, Gtk.Widget.Has_Tooltip_Property, True);
Gtk_Tree_View_Callbacks.Connect
(Tree_View,
Gtk.Widget.Signal_Query_Tooltip,
On_Tree_View_Query_Tooltip'Access);
Box.Pack_Start (Tree_View, False, False, 2);
Gtk.Tree_View_Column.Gtk_New (Column);
Column.Set_Title ("Test");
Gtk.Cell_Renderer_Text.Gtk_New (Renderer);
Column.Pack_Start (Renderer, False);
Column.Add_Attribute (Renderer, "text", 0);
Dummy := Tree_View.Append_Column (Column);
-- Set a tooltip on column's header
Window.Realize;
Column.Set_Clickable (True);
Column.Get_Widget.Set_Tooltip_Text ("Header");
Gtk.Window.Show_All (Window);
Gtk.Main.Main;
end Tooltips;