summaryrefslogtreecommitdiff
path: root/test/cursor.adb
blob: e968b6fbb963b2461fb321a16a0e1746aaa7110a (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
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


--  Programmed by Jedidiah Barber
--  Released into the public domain


--  Cursor test program functionality reproduced in Ada


with

    FLTK.Draw,
    FLTK.Widgets.Groups.Windows.Double,
    FLTK.Widgets.Menus.Choices,
    FLTK.Widgets.Valuators.Sliders.Value.Horizontal;

use type

    FLTK.Widgets.Callback_Flag;


function Cursor
    return Integer
is


    package FD renames FLTK.Draw;
    package WD renames FLTK.Widgets.Groups.Windows.Double;
    package MC renames FLTK.Widgets.Menus.Choices;
    package HV renames FLTK.Widgets.Valuators.Sliders.Value.Horizontal;


    The_Cursor : FLTK.Mouse_Cursor_Kind := FLTK.Default_Mouse;

    Cursor_Index_Low : constant Long_Float :=
        Long_Float (FLTK.Mouse_Cursor_Kind'Pos (FLTK.Mouse_Cursor_Kind'First));
    Cursor_Index_High : constant Long_Float :=
        Long_Float (FLTK.Mouse_Cursor_Kind'Pos (FLTK.Mouse_Cursor_Kind'Last));


    The_Window : WD.Double_Window := WD.Forge.Create (400, 300);

    The_Choices : MC.Choice := MC.Forge.Create
        (The_Window, 80, 100, 200, 25, "Cursor:");

    The_Slider : HV.Horizontal_Value_Slider := HV.Forge.Create
        (The_Window, 80, 180, 310, 30, "Cursor:");


    procedure Choice_Callback
           (This : in out FLTK.Widgets.Widget'Class)
    is
        My_Choice : MC.Choice renames MC.Choice (This);
    begin
        The_Cursor := FLTK.Mouse_Cursor_Kind'Val (My_Choice.Chosen_Index - 1);
        The_Slider.Set_Value (Long_Float (FLTK.Mouse_Cursor_Kind'Pos (The_Cursor)));
        FD.Set_Cursor (The_Cursor);
    end Choice_Callback;


    procedure Slider_Callback
           (This : in out FLTK.Widgets.Widget'Class)
    is
        My_Slider : HV.Horizontal_Value_Slider renames HV.Horizontal_Value_Slider (This);
    begin
        The_Cursor := FLTK.Mouse_Cursor_Kind'Val (Integer (My_Slider.Get_Value));
        The_Choices.Set_Chosen (FLTK.Mouse_Cursor_Kind'Pos (The_Cursor) + 1);
        FD.Set_Cursor (The_Cursor);
    end Slider_Callback;


begin


    The_Choices.Add ("FL_CURSOR_DEFAULT", Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_ARROW",   Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_CROSS",   Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_WAIT",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_INSERT",  Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_HAND",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_HELP",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_MOVE",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NS",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_WE",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NWSE",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NESW",    Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_N",       Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NE",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_E",       Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_SE",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_S",       Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_SW",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_W",       Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NW",      Choice_Callback'Unrestricted_Access);
    The_Choices.Add ("FL_CURSOR_NONE",    Choice_Callback'Unrestricted_Access);

    The_Choices.Set_Callback (Choice_Callback'Unrestricted_Access);
    The_Choices.Set_When (FLTK.Widgets.When_Release + FLTK.Widgets.When_Interact);
    The_Choices.Set_Chosen (1);

    The_Slider.Set_Alignment (FLTK.Align_Left);
    The_Slider.Set_Step_Bottom (1);
    The_Slider.Set_Precision (0);
    The_Slider.Set_Bounds (Cursor_Index_Low, Cursor_Index_High);
    The_Slider.Set_Value (Cursor_Index_Low);
    The_Slider.Set_Callback (Slider_Callback'Unrestricted_Access);

    The_Window.Set_Resizable (The_Window);
    The_Window.Show_With_Args;

    return FLTK.Run;


end Cursor;