Kestrel Interface
Loading...
Searching...
No Matches
kest_effect_view.c
Go to the documentation of this file.
1#include "kest_int.h"
2
3#ifndef PRINTLINES_ALLOWED
4#define PRINTLINES_ALLOWED 0
5#endif
6
7static const char *FNAME = "kest_effect_view.c";
8
10{
11 KEST_PRINTF("create_effect_view_for(effect = %p)\n", effect);
12
13 if (!effect)
14 return NULL;
15
16 kest_ui_page *page = kest_alloc(sizeof(kest_ui_page));
17
18 if (!page)
19 return NULL;
20
21 init_ui_page(page);
22
23 int ret_val = init_effect_view(page);
24
25 if (ret_val != NO_ERROR)
26 {
27 free_effect_view(page);
28 return NULL;
29 }
30
31 ret_val = configure_effect_view(page, effect);
32
33 if (ret_val != NO_ERROR)
34 {
35 free_effect_view(page);
36 return NULL;
37 }
38
39 KEST_PRINTF("create_effect_view_for done\n");
40 return page;
41}
42
44{
45 //kest_printf("Init effect view...\n");
46 if (!page)
47 return ERR_NULL_PTR;
48
49 init_ui_page(page);
50
52
53 page->panel = new_panel();
54
55 if (!page->panel)
56 return ERR_ALLOC_FAIL;
57
59
60 page->data_struct = str;
61
62 if (!str)
63 return ERR_ALLOC_FAIL;
64
65 str->effect = NULL;
66 str->parameter_widgets = NULL;
67 str->setting_widgets = NULL;
68
69 str->container = NULL;
70
74
75 for (int i = 0; i < TRANSFORMER_VIEW_MAX_GROUPS; i++)
76 {
77 str->group_containers[i] = NULL;
78 str->group_inhabited[i] = 0;
79 }
80
82
83 if (!str->settings_page)
84 return ERR_ALLOC_FAIL;
85
87
88 return NO_ERROR;
89}
90
92{
93 kest_ui_page *page = lv_event_get_user_data(e);
94
95 if (!page)
96 return;
97
99
100 if (!str)
101 return;
102
104}
105
107{
108 //kest_printf("Conpfigure effect view... page = %p, data = %p\n", page, data);
109 if (!page || !data)
110 {
111 if (page)
112 page->data_struct = NULL;
113 return ERR_NULL_PTR;
114 }
115
116 if (page->configured)
117 return NO_ERROR;
118
121
122 kest_effect *effect = (kest_effect*)data;
123
124 page->panel->text = kest_effect_name(effect);
125
127
128 if (!str)
129 return ERR_BAD_ARGS;
130
131 str->effect = effect;
132
135 int ret_val;
136
137 kest_parameter_pll *current_param = effect->parameters;
138
139 int i = 0;
140 int group;
141 while (current_param)
142 {
143 if (current_param->data)
144 {
145 pw = kest_alloc(sizeof(kest_parameter_widget));
146
147 if (!pw)
148 return ERR_ALLOC_FAIL;
149
151 ret_val = configure_parameter_widget(pw, current_param->data, effect->profile, page);
152
153 str->parameter_widgets = kest_parameter_widget_pll_append(str->parameter_widgets, pw);
154
155 group = current_param->data->group;
156
157 if (0 <= group && group < TRANSFORMER_VIEW_MAX_GROUPS)
158 str->group_inhabited[group] = 1;
159 }
160
161 current_param = current_param->next;
162 }
163
164 kest_setting_pll *current_setting = effect->settings;
165
166 while (current_setting)
167 {
168 if (current_setting->data && current_setting->data->page == TRANSFORMER_SETTING_PAGE_MAIN)
169 {
170 sw = kest_alloc(sizeof(kest_setting_widget));
171
172 if (!sw)
173 return ERR_ALLOC_FAIL;
174
176 ret_val = configure_setting_widget(sw, current_setting->data, effect->profile, page);
177
178 str->setting_widgets = kest_setting_widget_pll_append(str->setting_widgets, sw);
179 }
180
181 current_setting = current_setting->next;
182 }
183
185 str->settings_page->parent = page;
186
187 page->configured = 1;
188
189 return NO_ERROR;
190}
191
193{
194 KEST_PRINTF("create_effect_view_ui\n");
195 if (!page)
196 return ERR_NULL_PTR;
197
198 if (page->ui_created)
199 return NO_ERROR;
200
202
204
205 if (!str)
206 return ERR_BAD_ARGS;
207
208 if (!str->effect)
209 return ERR_BAD_ARGS;
210
211 page->panel->text = kest_effect_name(str->effect);
212
213 lv_obj_set_layout(page->container, LV_LAYOUT_FLEX);
214 lv_obj_set_flex_flow(page->container, LV_FLEX_FLOW_ROW_WRAP);
215 lv_obj_set_flex_align(page->container, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_SPACE_EVENLY);
216
217 for (int i = 0; i < TRANSFORMER_VIEW_MAX_GROUPS; i++)
218 {
219 if (str->group_inhabited[i])
220 {
221 str->group_containers[i] = lv_obj_create(page->container);
222
223 lv_obj_remove_style_all(str->group_containers[i]);
224 lv_obj_set_flex_flow (str->group_containers[i], LV_FLEX_FLOW_ROW_WRAP);
225 lv_obj_set_flex_align(str->group_containers[i], LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_SPACE_EVENLY);
226 lv_obj_set_size(str->group_containers[i], 0, 0);
227 }
228 }
229
230 kest_setting_widget_pll *current_setting = str->setting_widgets;
231
232 int group;
233 int i = 0;
234
235 while (current_setting)
236 {
237 if (current_setting->data)
238 {
239 if (current_setting->data->setting)
240 {
241 group = current_setting->data->setting->group;
242 if (0 <= group && group < TRANSFORMER_VIEW_MAX_GROUPS)
243 {
244 setting_widget_create_ui(current_setting->data, str->group_containers[group]);
245 }
246 else
247 {
248 setting_widget_create_ui(current_setting->data, page->container);
249 }
250 }
251 }
252 current_setting = current_setting->next;
253 i++;
254 }
255
256 kest_parameter_widget_pll *current_param = str->parameter_widgets;
257 i = 0;
258
259 while (current_param)
260 {
261 if (current_param->data)
262 {
263 if (current_param->data->param)
264 {
265 group = current_param->data->param->group;
266 KEST_PRINTF("Creating parameter widget for parameter \"%s\" (%s). Group = %d\n",
267 current_param->data->param->name, current_param->data->param->name_internal, group);
268 if (0 <= group && group < TRANSFORMER_VIEW_MAX_GROUPS)
269 {
270 parameter_widget_create_ui(current_param->data, str->group_containers[group]);
271 }
272 else
273 {
274 parameter_widget_create_ui(current_param->data, page->container);
275 }
276 }
277 }
278 current_param = current_param->next;
279 i++;
280 }
281
282 for (int i = 0; i < TRANSFORMER_VIEW_MAX_GROUPS; i++)
283 {
284 if (str->group_containers[i] && str->group_inhabited[i])
285 {
286 lv_obj_set_width(str->group_containers[i], LV_SIZE_CONTENT);
287 lv_obj_set_height(str->group_containers[i], LV_SIZE_CONTENT);
288
289 lv_obj_set_style_max_width(str->group_containers[i], STANDARD_CONTAINER_WIDTH - 20, 0);
290 }
291 }
292
294
295 page->ui_created = 1;
296
297 KEST_PRINTF("create_effect_view_ui done\n");
298 return NO_ERROR;
299}
300
302{
303 #ifdef USE_TEENSY
305 #endif
306 return NO_ERROR;
307}
308
310{
311 return ERR_UNIMPLEMENTED;
312}
313
315{
316 if (!page)
317 return ERR_NULL_PTR;
318
319 lv_obj_del(page->screen);
320
321 return NO_ERROR;
322}
323
325{
326 if (!page)
327 return ERR_NULL_PTR;
328
330
331 if (str)
332 kest_parameter_widget_pll_destroy(str->parameter_widgets, free_parameter_widget);
333
334 if (page->screen)
335 lv_obj_del(page->screen);
336
337 kest_free(page);
338
339 return NO_ERROR;
340}
void kest_free(void *ptr)
Definition kest_alloc.c:32
void * kest_alloc(size_t size)
Definition kest_alloc.c:11
const char * kest_effect_name(kest_effect *effect)
Definition kest_effect.c:17
int configure_effect_settings_page(kest_ui_page *page, void *data)
int init_effect_settings_page(kest_ui_page *page)
int create_effect_settings_page_ui(kest_ui_page *page)
void effect_view_enter_settings_cb(lv_event_t *e)
int clear_effect_view()
int free_effect_view_ui(kest_ui_page *page)
int init_effect_view(kest_ui_page *page)
int create_effect_view_ui(kest_ui_page *page)
kest_ui_page * create_effect_view_for(kest_effect *effect)
int free_effect_view(kest_ui_page *page)
int enter_effect_view(kest_ui_page *page)
int configure_effect_view(kest_ui_page *page, void *data)
int effect_view_request_parameter_values(kest_ui_page *page)
#define TRANSFORMER_VIEW_MAX_GROUPS
#define ERR_ALLOC_FAIL
#define ERR_BAD_ARGS
#define NO_ERROR
#define ERR_UNIMPLEMENTED
#define ERR_NULL_PTR
#define TRANSFORMER_SETTING_PAGE_MAIN
int configure_setting_widget(kest_setting_widget *sw, kest_setting *setting, kest_profile *profile, kest_ui_page *parent)
int setting_widget_create_ui(kest_setting_widget *sw, lv_obj_t *parent)
int nullify_setting_widget(kest_setting_widget *sw)
int configure_parameter_widget(kest_parameter_widget *pw, kest_parameter *param, kest_profile *profile, kest_ui_page *parent)
int nullify_parameter_widget(kest_parameter_widget *pw)
void free_parameter_widget(kest_parameter_widget *pw)
int parameter_widget_create_ui(kest_parameter_widget *pw, lv_obj_t *parent)
#define KEST_PRINTF(...)
Definition kest_printf.h:10
kest_ui_page_panel * new_panel()
Definition kest_ui.c:991
int enter_ui_page_forwards(kest_ui_page *page)
Definition kest_ui.c:299
int ui_page_create_base_ui(kest_ui_page *page)
Definition kest_ui.c:1207
int init_ui_page(kest_ui_page *page)
Definition kest_ui.c:152
int ui_page_add_right_panel_button(kest_ui_page *page, const char *label, lv_event_cb_t cb)
Definition kest_ui.c:1189
int ui_page_add_parent_button(kest_ui_page *page)
Definition kest_ui.c:1150
#define STANDARD_CONTAINER_WIDTH
Definition kest_ui.h:38
#define KEST_UI_PAGE_TRANS_VIEW
Definition kest_ui.h:81
kest_parameter_widget_pll * parameter_widgets
kest_ui_page * settings_page
int group_inhabited[TRANSFORMER_VIEW_MAX_GROUPS]
lv_obj_t * group_containers[TRANSFORMER_VIEW_MAX_GROUPS]
kest_setting_widget_pll * setting_widgets
kest_setting_pll * settings
Definition kest_effect.h:35
struct kest_profile * profile
Definition kest_effect.h:37
kest_parameter_pll * parameters
Definition kest_effect.h:34
int ui_created
Definition kest_ui.h:107
lv_obj_t * screen
Definition kest_ui.h:89
kest_ui_page_panel * panel
Definition kest_ui.h:94
int(* create_ui)(struct kest_ui_page *page)
Definition kest_ui.h:97
lv_obj_t * container
Definition kest_ui.h:92
struct kest_ui_page * parent
Definition kest_ui.h:109
void * data_struct
Definition kest_ui.h:104
int configured
Definition kest_ui.h:106
int(* enter_page)(struct kest_ui_page *page)
Definition kest_ui.h:100
int(* configure)(struct kest_ui_page *page, void *data)
Definition kest_ui.h:96