1with agar.core.event;
2with agar.core.timeout;
3
4package agar.gui.widget.scrollbar is
5
6  use type c.unsigned;
7
8  type type_t is (SCROLLBAR_HORIZ, SCROLLBAR_VERT);
9   for type_t use (SCROLLBAR_HORIZ => 0, SCROLLBAR_VERT => 1);
10   for type_t'size use c.unsigned'size;
11  pragma convention (c, type_t);
12
13  type button_t is (
14    SCROLLBAR_BUTTON_NONE,
15    SCROLLBAR_BUTTON_DEC,
16    SCROLLBAR_BUTTON_INC,
17    SCROLLBAR_BUTTON_SCROLL
18  );
19  for button_t use (
20    SCROLLBAR_BUTTON_NONE   => 0,
21    SCROLLBAR_BUTTON_DEC    => 1,
22    SCROLLBAR_BUTTON_INC    => 2,
23    SCROLLBAR_BUTTON_SCROLL => 3
24  );
25  for button_t'size use c.unsigned'size;
26  pragma convention (c, button_t);
27
28  type flags_t is new c.unsigned;
29  SCROLLBAR_HFILL     : constant flags_t := 16#01#;
30  SCROLLBAR_VFILL     : constant flags_t := 16#02#;
31  SCROLLBAR_EXPAND    : constant flags_t := SCROLLBAR_HFILL or SCROLLBAR_VFILL;
32
33  type scrollbar_t is limited private;
34  type scrollbar_access_t is access all scrollbar_t;
35  pragma convention (c, scrollbar_access_t);
36
37  -- API
38
39  function allocate_integer
40    (parent   : widget_access_t;
41     bar_type : type_t;
42     flags    : flags_t;
43     min      : agar.core.types.integer_access_t;
44     max      : agar.core.types.integer_access_t;
45     visible  : agar.core.types.integer_access_t) return scrollbar_access_t;
46  pragma import (c, allocate_integer, "AG_ScrollbarNewInt");
47
48  function allocate_unsigned
49    (parent   : widget_access_t;
50     bar_type : type_t;
51     flags    : flags_t;
52     min      : agar.core.types.unsigned_access_t;
53     max      : agar.core.types.unsigned_access_t;
54     visible  : agar.core.types.unsigned_access_t) return scrollbar_access_t;
55  pragma import (c, allocate_unsigned, "AG_ScrollbarNewUint");
56
57  function allocate_float
58    (parent   : widget_access_t;
59     bar_type : type_t;
60     flags    : flags_t;
61     min      : agar.core.types.float_access_t;
62     max      : agar.core.types.float_access_t;
63     visible  : agar.core.types.float_access_t) return scrollbar_access_t;
64  pragma import (c, allocate_float, "AG_ScrollbarNewFloat");
65
66  function allocate_double
67    (parent   : widget_access_t;
68     bar_type : type_t;
69     flags    : flags_t;
70     min      : agar.core.types.double_access_t;
71     max      : agar.core.types.double_access_t;
72     visible  : agar.core.types.double_access_t) return scrollbar_access_t;
73  pragma import (c, allocate_double, "AG_ScrollbarNewDouble");
74
75  function allocate_uint8
76    (parent   : widget_access_t;
77     bar_type : type_t;
78     flags    : flags_t;
79     value    : agar.core.types.uint8_ptr_t;
80     min      : agar.core.types.uint8_ptr_t;
81     max      : agar.core.types.uint8_ptr_t;
82     visible  : agar.core.types.uint8_ptr_t) return scrollbar_access_t;
83  pragma import (c, allocate_uint8, "AG_ScrollbarNewUint8");
84
85  function allocate_int8
86    (parent   : widget_access_t;
87     bar_type : type_t;
88     flags    : flags_t;
89     value    : agar.core.types.int8_ptr_t;
90     min      : agar.core.types.int8_ptr_t;
91     max      : agar.core.types.int8_ptr_t;
92     visible  : agar.core.types.int8_ptr_t) return scrollbar_access_t;
93  pragma import (c, allocate_int8, "AG_ScrollbarNewSint8");
94
95  function allocate_uint16
96    (parent   : widget_access_t;
97     bar_type : type_t;
98     flags    : flags_t;
99     value    : agar.core.types.uint16_ptr_t;
100     min      : agar.core.types.uint16_ptr_t;
101     max      : agar.core.types.uint16_ptr_t;
102     visible  : agar.core.types.uint16_ptr_t) return scrollbar_access_t;
103  pragma import (c, allocate_uint16, "AG_ScrollbarNewUint16");
104
105  function allocate_int16
106    (parent   : widget_access_t;
107     bar_type : type_t;
108     flags    : flags_t;
109     value    : agar.core.types.int16_ptr_t;
110     min      : agar.core.types.int16_ptr_t;
111     max      : agar.core.types.int16_ptr_t;
112     visible  : agar.core.types.int16_ptr_t) return scrollbar_access_t;
113  pragma import (c, allocate_int16, "AG_ScrollbarNewSint16");
114
115  function allocate_uint32
116    (parent   : widget_access_t;
117     bar_type : type_t;
118     flags    : flags_t;
119     value    : agar.core.types.uint32_ptr_t;
120     min      : agar.core.types.uint32_ptr_t;
121     max      : agar.core.types.uint32_ptr_t;
122     visible  : agar.core.types.uint32_ptr_t) return scrollbar_access_t;
123  pragma import (c, allocate_uint32, "AG_ScrollbarNewUint32");
124
125  function allocate_int32
126    (parent   : widget_access_t;
127     bar_type : type_t;
128     flags    : flags_t;
129     value    : agar.core.types.int32_ptr_t;
130     min      : agar.core.types.int32_ptr_t;
131     max      : agar.core.types.int32_ptr_t;
132     visible  : agar.core.types.int32_ptr_t) return scrollbar_access_t;
133  pragma import (c, allocate_int32, "AG_ScrollbarNewSint32");
134
135  procedure set_size
136    (scrollbar : scrollbar_access_t;
137     size      : natural);
138  pragma inline (set_size);
139
140  function get_size (scrollbar : scrollbar_access_t) return natural;
141  pragma inline (get_size);
142
143  function visible (scrollbar : scrollbar_access_t) return boolean;
144  pragma inline (visible);
145
146  procedure set_increment
147    (scrollbar : scrollbar_access_t;
148     increment : positive);
149  pragma inline (set_increment);
150
151  procedure set_increment
152    (scrollbar : scrollbar_access_t;
153     increment : long_float);
154  pragma inline (set_increment);
155
156  function widget (scrollbar : scrollbar_access_t) return widget_access_t;
157  pragma inline (widget);
158
159private
160
161  type scrollbar_t is record
162    widget          : aliased widget_t;
163    flags           : flags_t;
164
165    value           : c.int;
166    min             : c.int;
167    max             : c.int;
168    visible         : c.int;
169    bar_type        : type_t;
170    bar_button      : button_t;
171    button_width    : c.int;
172    bar_width       : c.int;
173    arrow_height    : c.int;
174    button_inc_func : access agar.core.event.event_t;
175    button_dec_func : access agar.core.event.event_t;
176    scroll_to       : agar.core.timeout.timeout_t;
177    inc_to          : agar.core.timeout.timeout_t;
178    dec_to          : agar.core.timeout.timeout_t;
179    x_offset        : c.int;
180    extent          : c.int;
181    r_inc           : c.double;
182    i_inc           : c.int;
183  end record;
184  pragma convention (c, scrollbar_t);
185
186end agar.gui.widget.scrollbar;
187