Mercurial > molko
annotate libmlk-ui/mlk/ui/gridmenu.h @ 609:d97674d33764
ui: grid menu be more flexible
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 11 Aug 2023 18:01:28 +0200 |
parents | 2527b000aaa5 |
children | 91ef0df9f501 |
rev | line source |
---|---|
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * gridmenu.h -- GUI grid menu |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
445
773a082f0b91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
433
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
19 #ifndef MLK_UI_GRIDMENU_H |
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
20 #define MLK_UI_GRIDMENU_H |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <stddef.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
24 struct mlk_gridmenu; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
25 struct mlk_gridmenu_delegate; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
26 struct mlk_style; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
505
6100c643dba0
ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents:
495
diff
changeset
|
28 union mlk_event; |
6100c643dba0
ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents:
495
diff
changeset
|
29 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
30 struct mlk_gridmenu { |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
31 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
32 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
33 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
34 * Position in x. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
35 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
36 int x; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
38 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
39 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
40 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
41 * Position in y. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
42 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
43 int y; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
44 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
45 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
46 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
47 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
48 * Menu frame width. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
49 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
50 unsigned int w; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
51 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
52 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
53 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
54 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
55 * Menu frame height. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
56 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
57 unsigned int h; |
507
d49a05e7a5b5
ui: separate delegate/style
David Demelier <markand@malikania.fr>
parents:
506
diff
changeset
|
58 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
59 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
60 * (read-write, borrowed) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
61 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
62 * List of strings to show. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
63 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
64 const char * const *items; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
65 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
66 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
67 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
68 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
69 * Number of items in ::mlk_gridmenu::items. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
70 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
71 size_t itemsz; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
73 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
74 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
75 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
76 * Current selected item in the grid. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
77 */ |
505
6100c643dba0
ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents:
495
diff
changeset
|
78 size_t selected; |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
79 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
80 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
81 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
82 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
83 * Number of rows to be shown within the frame height. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
84 */ |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 unsigned int nrows; |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
86 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
87 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
88 * (read-write) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
89 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
90 * Number of colums to be shown within the frame width. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
91 */ |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 unsigned int ncols; |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
93 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
94 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
95 * (read-write, borrowed) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
96 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
97 * Grid menu delegate. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
98 */ |
507
d49a05e7a5b5
ui: separate delegate/style
David Demelier <markand@malikania.fr>
parents:
506
diff
changeset
|
99 struct mlk_gridmenu_delegate *delegate; |
505
6100c643dba0
ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents:
495
diff
changeset
|
100 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
101 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
102 * (read-write, borrowed) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
103 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
104 * Grid menu style. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
105 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
106 struct mlk_style *style; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
107 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
108 /** \cond MLK_PRIVATE_DECLS */ |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
109 unsigned int eltw; /* maximum entry label width */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
110 unsigned int elth; /* maximum entry label height */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
111 unsigned int spacew; /* space between element horizontally */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
112 unsigned int spaceh; /* and vertically */ |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
113 /** \endcond MLK_PRIVATE_DECLS */ |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 }; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
116 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
117 * \struct mlk_gridmenu_delegate |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
118 * \brief Grid menu delegate. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
119 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
120 struct mlk_gridmenu_delegate { |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
121 /* |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
122 * (read-write, borrowed, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
123 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
124 * Arbitrary user data. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
125 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
126 void *data; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
127 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
128 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
129 * (read-write, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
130 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
131 * Called after resizing the grid menu dimensions. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
132 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
133 * \param self this delegate |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
134 * \param menu the grid menu |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
135 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
136 void (*resize)(struct mlk_gridmenu_delegate *self, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
137 struct mlk_gridmenu *menu); |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
138 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
139 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
140 * (read-write, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
141 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
142 * Handle an event. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
143 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
144 * \param self this delegate |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
145 * \param menu the menu |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
146 * \param ev the event |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
147 * \return non-zero if an item has been selected |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
148 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
149 int (*handle)(struct mlk_gridmenu_delegate *self, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
150 struct mlk_gridmenu *menu, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
151 const union mlk_event *ev); |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
152 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
153 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
154 * (read-write, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
155 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
156 * Update the grid menu. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
157 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
158 * \param self this delegate |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
159 * \param menu the menu to update |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
160 * \param ticks number of ticks since last frame |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
161 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
162 void (*update)(struct mlk_gridmenu_delegate *self, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
163 struct mlk_gridmenu *menu, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
164 unsigned int ticks); |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
165 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
166 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
167 * (read-write, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
168 * |
609
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
169 * Draw a frame box for this menu. |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
170 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
171 * \param self this delegate |
609
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
172 * \param menu the underlying menu |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
173 */ |
609
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
174 void (*draw_frame)(struct mlk_gridmenu_delegate *self, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
175 const struct mlk_gridmenu *menu); |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
176 |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
177 /** |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
178 * (read-write, optional) |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
179 * |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
180 * Draw a specific item. |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
181 * |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
182 * \param self this delegate |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
183 * \param menu the underlying menu |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
184 * \param item the item content |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
185 * \param row the row number (relative) |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
186 * \param col the column number (relative) |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
187 * \param selected non-zero if the item is currently selected |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
188 */ |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
189 void (*draw_item)(struct mlk_gridmenu_delegate *self, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
190 const struct mlk_gridmenu *menu, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
191 const char *item, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
192 unsigned int row, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
193 unsigned int col, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
194 int selected); |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
195 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
196 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
197 * (read-write, optional) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
198 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
199 * Cleanup this delegate associated with the menu. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
200 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
201 * \param self this delegate |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
202 * \param frame the underlying frame |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
203 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
204 void (*finish)(struct mlk_gridmenu_delegate *self, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
205 struct mlk_gridmenu *menu); |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
206 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
207 }; |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
208 |
609
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
209 /** |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
210 * \brief Default stateless delegate for gridmenu. |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
211 */ |
507
d49a05e7a5b5
ui: separate delegate/style
David Demelier <markand@malikania.fr>
parents:
506
diff
changeset
|
212 extern struct mlk_gridmenu_delegate mlk_gridmenu_delegate; |
505
6100c643dba0
ui: finally ditch theme
David Demelier <markand@malikania.fr>
parents:
495
diff
changeset
|
213 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
214 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
215 extern "C" { |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
216 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
217 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
218 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
219 * Initialize the menu with default values. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
220 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
221 * This is not required if you use designated initializers. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
222 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
223 * \pre menu != NULL |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
224 * \param menu the grid menu to default initialize |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
225 * \param st style to use (or NULL to use a default) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
226 * \param dt delegate to use (or NULL to use a default) |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
227 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
228 void |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
229 mlk_gridmenu_init(struct mlk_gridmenu *menu, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
230 struct mlk_gridmenu_delegate *dt, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
231 struct mlk_style *st); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
233 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
234 * Copy new dimensions and then invoke ::mlk_gridmenu_delegate::resize. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
235 * |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
236 * \pre menu != NULL |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
237 * \param menu the menu to resize |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
238 * \param x new position in x |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
239 * \param y new position in y |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
240 * \param w new width |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
241 * \param h new height |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
242 */ |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 void |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
244 mlk_gridmenu_resize(struct mlk_gridmenu *menu, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
245 int x, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
246 int y, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
247 unsigned int w, |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
248 unsigned int h); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
250 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
251 * Invoke ::mlk_gridmenu_delegate::handle. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
252 */ |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
253 int |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
254 mlk_gridmenu_handle(struct mlk_gridmenu *menu, const union mlk_event *ev); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
256 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
257 * Invoke ::mlk_gridmenu_delegate::update. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
258 */ |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 void |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
260 mlk_gridmenu_update(struct mlk_gridmenu *menu, unsigned int ticks); |
506
e205625015ba
ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents:
505
diff
changeset
|
261 |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
262 /** |
609
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
263 * Invoke the functions: |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
264 * |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
265 * - ::mlk_gridmenu_delegate::draw_frame, |
d97674d33764
ui: grid menu be more flexible
David Demelier <markand@malikania.fr>
parents:
608
diff
changeset
|
266 * - ::mlk_gridmenu_delegate::draw_item. |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
267 */ |
506
e205625015ba
ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents:
505
diff
changeset
|
268 void |
608
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
269 mlk_gridmenu_draw(const struct mlk_gridmenu *menu); |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
270 |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
271 /** |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
272 * Invoke ::mlk_gridmenu_delegate::finish. |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
273 */ |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
274 void |
2527b000aaa5
ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents:
517
diff
changeset
|
275 mlk_gridmenu_finish(struct mlk_gridmenu *menu); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 |
517
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
277 #if defined(__cplusplus) |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
278 } |
6e8f6640e05b
misc: use extern C manually
David Demelier <markand@malikania.fr>
parents:
507
diff
changeset
|
279 #endif |
292
08ab73b32832
misc: add extern "C" {} blocks for C++ friends
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
280 |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
320
diff
changeset
|
281 #endif /* !MLK_UI_GRIDMENU_H */ |