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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */