summaryrefslogtreecommitdiff
path: root/src/callback_test.adb
blob: 9abd734133795523b96e4003e66f35a7fee897ff (plain)
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


with FLTK.Widgets;
use FLTK.Widgets;
with FLTK.Widgets.Buttons;
use FLTK.Widgets.Buttons;
with FLTK.Widgets.Groups.Windows;
use FLTK.Widgets.Groups.Windows;
with Ada.Text_IO;
with Ada.Strings.Unbounded;
use Ada.Strings.Unbounded;


function Callback_Test return Integer is


    Main_View : Window := Create (0, 0, 300, 300, "Tester");
    Pusher : Button := Create (75, 75, 150, 150, "Push me");


    type My_Callback is new Widget_Callback with
        record
            Msg : Unbounded_String;
        end record;

    SC : aliased My_Callback := (Msg => To_Unbounded_String ("Hello!"));
    OC : aliased My_Callback := (Msg => To_Unbounded_String ("And again!"));

    overriding procedure Call
           (This : in     My_Callback;
            Item : in out Widget'Class) is
    begin
        Ada.Text_IO.Put_Line ("Pushed a button :O");
        Ada.Text_IO.Put_Line (To_String (This.Msg));
        if This.Msg = "Hello!" then
            Item.Set_Callback (OC'Access);
            Item.Set_Label ("Push me again!");
        else
            Item.Set_Callback (SC'Access);
            Item.Set_Label ("Push me");
        end if;
    end Call;


begin


    Main_View.Add (Pusher);
    Pusher.Set_Callback (SC'Access);
    Main_View.Show;

    return FLTK.Run;


end Callback_Test;