summaryrefslogtreecommitdiff
path: root/src/fltk_binding/fltk-widgets.ads
blob: c0f89c147357a531c8ea2dded2073185eb14d2d1 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133


with FLTK.Enums; use FLTK.Enums;
limited with FLTK.Widgets.Groups;
private with System;
private with System.Address_To_Access_Conversions;


package FLTK.Widgets is


    type Widget is abstract new Wrapper with private;
    type Widget_Cursor (Data : access Widget'Class) is limited null record
        with Implicit_Dereference => Data;


    type Widget_Callback is interface;
    procedure Call
           (This : in     Widget_Callback;
            Item : in out Widget'Class) is abstract;


    --  would like to move this definition to FLTK.Widgets.Groups somehow
    type Group_Cursor (Data : access FLTK.Widgets.Groups.Group'Class) is limited null record
        with Implicit_Dereference => Data;


    type Font_Size is new Natural;
    Normal_Size : constant Font_Size := 14;
    type Color is new Natural;


    function Create
           (X, Y, W, H : in Integer;
            Text       : in String)
        return Widget is abstract;


    function Parent
           (This : in Widget)
        return Group_Cursor;


    function Get_Box
           (This : in Widget)
        return Box_Kind;


    procedure Set_Box
           (This : in out Widget;
            Box  : in     Box_Kind);


    function Get_Label
           (This : in out Widget)
        return String;


    procedure Set_Label
           (This : in out Widget;
            Text : in     String);


    function Get_Label_Font
           (This : in Widget)
        return Font_Kind;


    procedure Set_Label_Font
           (This : in out Widget;
            Font : in     Font_Kind);


    function Get_Label_Size
           (This : in Widget)
        return Font_Size;


    procedure Set_Label_Size
           (This : in out Widget;
            Size : in     Font_Size);


    function Get_Label_Type
           (This : in Widget)
        return Label_Kind;


    procedure Set_Label_Type
           (This  : in out Widget;
            Label : in     Label_Kind);


    procedure Set_Callback
           (This : in out Widget;
            Func : not null access Widget_Callback'Class);


    function Get_X (This : in Widget) return Integer;
    function Get_Y (This : in Widget) return Integer;
    function Get_W (This : in Widget) return Integer;
    function Get_H (This : in Widget) return Integer;


    procedure Resize (This : in out Widget; W, H : in Integer);
    procedure Reposition (This : in out Widget; X, Y : in Integer);

private


    type Widget is abstract new Wrapper with
        record
            Callback : access Widget_Callback'Class;
        end record;


    package Widget_Convert is new System.Address_To_Access_Conversions (Widget'Class);
    package Callback_Convert is new System.Address_To_Access_Conversions (Widget_Callback'Class);


    function fl_widget_get_user_data
           (W : in System.Address)
        return System.Address;
    pragma Import (C, fl_widget_get_user_data, "fl_widget_get_user_data");


    procedure fl_widget_set_user_data
           (W, D : in System.Address);
    pragma Import (C, fl_widget_set_user_data, "fl_widget_set_user_data");


end FLTK.Widgets;