1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
-----------------------------------------------------------------------
-- GtkAda - Ada95 binding for the Gimp Toolkit --
-- --
-- Copyright (C) 2011-2013, 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. --
-- --
-----------------------------------------------------------------------
with Glib.Main; use Glib.Main;
with Glib.Properties; use Glib.Properties;
with Gtk.Enums; use Gtk.Enums;
with Gtk.Label; use Gtk.Label;
with Gtk.Spinner; use Gtk.Spinner;
with Gtk.Table; use Gtk.Table;
package body Create_Spinners is
-- Timer for pulsing activity of one of our spinners.
package Time_Cb is new Glib.Main.Generic_Sources (Gtk_Spinner);
-- Function passed to Time_Cb.Timeout_Add, to be invoked periodically.
function Spinner_Timeout (Spinner : Gtk_Spinner) return Boolean;
----------
-- Help --
----------
function Help return String is
begin
return "A %bGtk_Spinner%B widget displays an icon-size spinning"
& " animation. It is often used as an alternative to a"
& " %bGtk_Progress%B for displaying indefinite activity, instead"
& " of actual progress. To start the animation, use"
& " %bGtk.Spinner.Start%B; to stop it use $bGtk.Spinner.Stop$B.";
end Help;
---------
-- Run --
---------
procedure Run (Frame : access Gtk.Frame.Gtk_Frame_Record'Class) is
Active_Spinner, Transition_Spinner, Inactive_Spinner : Gtk_Spinner;
Active_Label, Transition_Label, Inactive_Label : Gtk_Label;
Table1 : Gtk_Table;
Timer : G_Source_Id;
begin
Set_Label (Frame, "Spinners");
Gtk_New (Table1, Rows => 3, Columns => 2, Homogeneous => False);
Add (Frame, Table1);
Gtk_New (Active_Label, "Active spinner:");
Gtk_New (Active_Spinner);
Attach
(Table1, Active_Label, 0, 1, 0, 1,
Xpadding => 10, Ypadding => 10);
Attach
(Table1, Active_Spinner, 1, 2, 0, 1,
Xpadding => 25, Ypadding => 25);
Gtk_New (Transition_Label, "On/Off spinner:");
Gtk_New (Transition_Spinner);
Attach
(Table1, Transition_Label, 0, 1, 1, 2,
Xpadding => 10, Ypadding => 10);
Attach
(Table1, Transition_Spinner, 1, 2, 1, 2,
Xpadding => 25, Ypadding => 25);
Gtk_New (Inactive_Label, "Inactive spinner:");
Gtk_New (Inactive_Spinner);
Attach
(Table1, Inactive_Label, 0, 1, 2, 3,
Xpadding => 10, Ypadding => 10);
Attach
(Table1, Inactive_Spinner, 1, 2, 2, 3,
Xpadding => 25, Ypadding => 25);
-- Start one spinner, set another pulsing, and don't touch the
-- third (so that it stays off).
Gtk.Spinner.Start (Active_Spinner);
Timer := Time_Cb.Timeout_Add
(1_000, Spinner_Timeout'Access, Transition_Spinner);
Show_All (Frame);
end Run;
---------------------
-- Spinner_Timeout --
---------------------
function Spinner_Timeout (Spinner : Gtk_Spinner) return Boolean is
begin
case Get_Property (Spinner, Active_Property) is
when True => Stop (Spinner);
when False => Start (Spinner);
end case;
return True;
end Spinner_Timeout;
end Create_Spinners;
|