summaryrefslogtreecommitdiff
path: root/src/fltk_binding/fltk-widgets-menus.ads
blob: 0346d2d77494eabaa32bc3e2b112e64ed13ad437 (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


private with Interfaces;
private with System;


package FLTK.Widgets.Menus is


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


    type Menu_Item is tagged limited private;


    type Index is new Positive;


    type Shortcut_Key is private;
    subtype Pressable_Key is Character range Character'Val (32) .. Character'Val (126);
    function Shortcut (Key : Pressable_Key) return Shortcut_Key;
    No_Key : constant Shortcut_Key;


    type Modifier_Key is private;
    function "+" (Left, Right : in Modifier_Key) return Modifier_Key;
    function "+" (Left : in Modifier_Key; Right : in Pressable_Key) return Shortcut_Key;
    function "+" (Left : in Modifier_Key; Right : in Shortcut_Key) return Shortcut_Key;
    Mod_None  : constant Modifier_Key;
    Mod_Shift : constant Modifier_Key;
    Mod_Ctrl  : constant Modifier_Key;
    Mod_Alt   : constant Modifier_Key;


    type Menu_Flag is private;
    function "+" (Left, Right : in Menu_Flag) return Menu_Flag;
    Flag_Normal    : constant Menu_Flag;
    Flag_Inactive  : constant Menu_Flag;
    Flag_Toggle    : constant Menu_Flag;
    Flag_Value     : constant Menu_Flag;
    Flag_Radio     : constant Menu_Flag;
    Flag_Invisible : constant Menu_Flag;
    Flag_Submenu   : constant Menu_Flag;
    Flag_Divider   : constant Menu_Flag;


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


    procedure Add
           (This     : in out Menu;
            Text     : in     String;
            Action   : in     Widget_Callback := null;
            Shortcut : in     Shortcut_Key := No_Key;
            Flags    : in     Menu_Flag := Flag_Normal);


    function Find_Item
           (This : in Menu'Class;
            Name : in String)
        return Menu_Item;


    function Chosen
           (This : in Menu'Class)
        return Menu_Item;


    function Value
           (Item : in Menu_Item)
        return Boolean;


    procedure Activate
           (Item : in Menu_Item);


    procedure Deactivate
           (Item : in Menu_Item);


private


    type Menu is abstract new Widget with null record;


    type Menu_Item is tagged limited
        record
            Void_Ptr : System.Address;
        end record;


    --  these values designed to align with FLTK enumeration types
    type Modifier_Key is new Interfaces.Unsigned_8;
    Mod_None  : constant Modifier_Key := 2#00000000#;
    Mod_Shift : constant Modifier_Key := 2#00000001#;
    Mod_Ctrl  : constant Modifier_Key := 2#00000100#;
    Mod_Alt   : constant Modifier_Key := 2#00001000#;


    type Shortcut_Key is
        record
            Modifier : Modifier_Key;
            Keypress : Character;
        end record;
    No_Key : constant Shortcut_Key :=
        (Modifier => Mod_None, Keypress => Character'Val (0));


    type Menu_Flag is new Interfaces.Unsigned_8;
    Flag_Normal    : constant Menu_Flag := 2#00000000#;
    Flag_Inactive  : constant Menu_Flag := 2#00000001#;
    Flag_Toggle    : constant Menu_Flag := 2#00000010#;
    Flag_Value     : constant Menu_Flag := 2#00000100#;
    Flag_Radio     : constant Menu_Flag := 2#00001000#;
    Flag_Invisible : constant Menu_Flag := 2#00010000#;
    --  Flag_Submenu_Pointer unlikely to be used
    Flag_Submenu   : constant Menu_Flag := 2#01000000#;
    Flag_Divider   : constant Menu_Flag := 2#10000000#;


end FLTK.Widgets.Menus;