Kestrel Interface
Loading...
Searching...
No Matches
kest_menu.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_menu.c";
8
10
12{
13 if (!item)
14 return ERR_NULL_PTR;
15
16 item->type = 0;
17
18 item->text = NULL;
19 item->desc = NULL;
20
21 item->action_cb = NULL;
22 item->click_cb = NULL;
23 item->cb_arg = NULL;
24
25 item->linked_page = NULL;
26 item->linked_page_indirect = NULL;
27
28 item->lp_configure_arg = NULL;
29
30 item->obj = NULL;
31 item->label = NULL;
32 item->extra = NULL;
33
34 item->data = NULL;
35 item->parent = NULL;
36
37 item->long_pressed = 0;
38
39 return NO_ERROR;
40}
41
42void menu_page_link_clicked_cb(lv_event_t *e)
43{
44 kest_menu_item *item = (kest_menu_item*)lv_event_get_user_data(e);
45
46 if (!item)
47 return;
48
49 if (!item->linked_page && !item->linked_page_indirect)
50 return;
51
52 if (item->linked_page_indirect)
54 else if (item->linked_page)
56}
57
59{
60 if (!item)
61 return ERR_NULL_PTR;
62
63 switch (item->type)
64 {
66 if (item->linked_page && !item->linked_page->configured)
68 break;
69
75 break;
76
80 break;
81
83 case MENU_ITEM_PAD:
84 break;
85
87 break;
88
89 default:
90 return ERR_BAD_ARGS;
91 }
92
93 return NO_ERROR;
94}
95
96
98{
99 if (!item)
100 return ERR_NULL_PTR;
101
102 if (item->timer)
103 {
104 lv_timer_del(item->timer);
105 }
106
107 lv_anim_del(item, NULL);
108
109 lv_obj_del_async(item->obj);
110
111 return NO_ERROR;
112}
113
115{
116 if (item->text)
117 kest_free(item->text);
118 if (item->desc)
119 kest_free(item->desc);
120
121 kest_free(item);
122
123 return NO_ERROR;
124}
125
127{
128 if (!item)
129 return ERR_NULL_PTR;
130
131 switch (item->type)
132 {
134 //profile_listing_menu_item_refresh_active(item);
135 break;
136
137 default:
138 break;
139 }
140
141 return NO_ERROR;
142}
143
145{
146 KEST_PRINTF("parameter_widget_change_cb_settings_wrapper\n");
147 kest_menu_item *item = lv_event_get_user_data(e);
148
149 if (!item)
150 return;
151
152 #ifdef KEST_USE_FREERTOS
153 xSemaphoreTake(state_mutex, portMAX_DELAY);
155 xSemaphoreGive(state_mutex);
156 #endif
157}
158
160{
161 kest_menu_item *item = lv_event_get_user_data(e);
162
163 if (!item)
164 return;
165
166 if (!item->extra)
167 return;
168
169 if (!item->extra[0])
170 return;
171
172 /*
173 const char *button_text = lv_msgbox_get_active_btn_text(item->extra[0]);
174
175 if (strncmp(DANGER_BUTTON_CONFIRM_TEXT, button_text, strlen(DANGER_BUTTON_CONFIRM_TEXT) + 1) == 0)
176 {
177 if (item->action_cb)
178 item->action_cb(item->cb_arg);
179 }
180
181 lv_msgbox_close(item->extra[0]);*/
182}
183
185{
186 kest_menu_item *item = lv_event_get_user_data(e);
187
188 if (!item)
189 return;
190
191 if (!item->parent)
192 return;
193 /*
194 if (!item->extra)
195 {
196 item->extra = kest_alloc(sizeof(lv_obj_t*));
197 if (!item->extra)
198 return;
199 }
200
201 static const char *btns[] = {DANGER_BUTTON_CONFIRM_TEXT, DANGER_BUTTON_CANCEL_TEXT, NULL};
202
203 item->extra[0] = lv_msgbox_create(item->parent->screen, item->text, "Are you sure?", btns, 1);
204 lv_obj_add_event_cb(item->extra[0], danger_button_value_changed_cb, LV_EVENT_VALUE_CHANGED, item);
205 lv_obj_center(item->extra[0]);*/
206}
207
209{
211
212 if (!item || !profile)
213 return NULL;
214
215 init_menu_item(item);
216
218 if (text)
220 else
221 item->text = "Profile";
222
223 item->linked_page_indirect = &profile->view_page;
224 item->data = profile;
225
226 item->parent = parent;
227
228 return item;
229}
230
232{
233 KEST_PRINTF("profile_listing_menu_item_refresh_active\n");
234 if (!item)
235 return ERR_NULL_PTR;
236
237 if (!item->extra)
238 return NO_ERROR;
239
240 if (!item->extra[1])
241 return NO_ERROR;
242
243 if (item->data && ((kest_profile*)item->data)->active)
244 {
245 KEST_PRINTF("profile is active. going about it\n");
246 lv_label_set_text(item->extra[1], LV_SYMBOL_PLAY);
247 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
248 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_CLICKABLE);
249 }
250 else
251 {
252 KEST_PRINTF("profile is not active. hiding play\n");
253 lv_label_set_text(item->extra[1], LV_SYMBOL_TRASH);
254 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
255 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_CLICKABLE);
256 }
257
258 KEST_PRINTF("profile_listing_menu_item_refresh_active done\n");
259 return NO_ERROR;
260}
261
263{
264 if (!item)
265 return ERR_NULL_PTR;
266
267 if (!item->extra)
268 return NO_ERROR;
269
270 item->text = strndup(name, 32);
271
272 lv_label_set_text(item->label, item->text);
273
274 return NO_ERROR;
275}
276
278{
279 kest_menu_item *item = lv_event_get_user_data(e);
280
281 if (!item)
282 return;
283
284 kest_profile *profile = (kest_profile*)item->data;
285
286 if (!profile)
287 return;
288
289 if (!profile->active)
290 {
292
293 menu_page_remove_item(item->parent, item);
294 }
295}
296
298{
299 kest_menu_item *item = lv_timer_get_user_data(timer);
300
301 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
302
303 item->timer = NULL;
304}
305
307{
308 kest_menu_item *item = (kest_menu_item*)lv_event_get_user_data(e);
309
310 if (!item)
311 return;
312
313 kest_profile *profile = item->data;
314
315 if (!item->long_pressed)
316 {
317 if (profile && profile->view_page)
318 {
319 profile->view_page->parent = &global_cxt.pages.main_menu;
320
321 enter_ui_page_forwards(profile->view_page);
322 }
323 }
324 else
325 {
326 if (profile && !profile->active)
327 {
329 lv_timer_set_repeat_count(item->timer, 1);
330 }
331 }
332
333 item->long_pressed = 0;
334}
335
337{
338 kest_menu_item *item = (kest_menu_item*)lv_event_get_user_data(e);
339
340 if (!item)
341 return;
342
343 item->long_pressed = 1;
344
345 kest_profile *profile = item->data;
346
347 if (profile && !profile->active)
348 {
349 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
350 }
351 else
352 {
353 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
354 }
355}
356
357int create_menu_item_ui(kest_menu_item *item, lv_obj_t *parent)
358{
359 if (!item)
360 return ERR_NULL_PTR;
361
362 switch (item->type)
363 {
366 create_standard_button_click(&item->obj, &item->label, parent, item->text, menu_page_link_clicked_cb, item);
367 break;
368
370 create_standard_button_click(&item->obj, &item->label, parent, item->text, item->click_cb, item->cb_arg);
371 break;
372
374 create_standard_button_click(&item->obj, &item->label, parent, item->text, danger_button_activate_popup_cb, item);
375 break;
376
378 create_standard_button_long_press_release(&item->obj, &item->label, parent, item->text,
381
382 item->extra = kest_alloc(sizeof(lv_obj_t*) * 2);
383
384 if (!item->extra)
385 return ERR_ALLOC_FAIL;
386
387 item->extra[0] = lv_btn_create(item->obj);
388
389 lv_obj_align(item->extra[0], LV_ALIGN_RIGHT_MID, 10, 0);
390 lv_obj_set_size(item->extra[0], 0.75 * STANDARD_BUTTON_HEIGHT, 0.75 * STANDARD_BUTTON_HEIGHT);
391 lv_obj_add_event_cb(item->extra[0], sequence_listing_delete_button_cb, LV_EVENT_CLICKED, item);
392 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
393
394 item->extra[1] = lv_label_create(item->extra[0]);
395 lv_label_set_text(item->extra[1], LV_SYMBOL_TRASH);
396
397 lv_obj_center(item->extra[1]);
398 break;
399
401 create_standard_button_long_press_release(&item->obj, &item->label, parent, item->text,
404
405 item->extra = kest_alloc(sizeof(lv_obj_t*) * 2);
406
407 if (!item->extra)
408 return ERR_ALLOC_FAIL;
409
410 item->extra[0] = lv_btn_create(item->obj);
411
412 lv_obj_align(item->extra[0], LV_ALIGN_RIGHT_MID, 10, 0);
413 lv_obj_set_size(item->extra[0], 0.75 * STANDARD_BUTTON_HEIGHT, 0.75 * STANDARD_BUTTON_HEIGHT);
414 lv_obj_add_event_cb(item->extra[0], profile_listing_delete_button_cb, LV_EVENT_CLICKED, item);
415 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
416
417 item->extra[1] = lv_label_create(item->extra[0]);
418 lv_label_set_text(item->extra[1], LV_SYMBOL_TRASH);
419
420 lv_obj_center(item->extra[1]);
421 break;
422
425 lv_obj_add_event_cb(((kest_parameter_widget*)item->data)->obj, parameter_widget_change_cb_settings_wrapper, LV_EVENT_VALUE_CHANGED, item);
426 break;
427
428 case MENU_ITEM_PAD:
429 item->obj = lv_obj_create(parent);
430 lv_obj_remove_style_all(item->obj);
431 lv_obj_set_size(item->obj, 1, (int)item->data);
432
433 default:
434 return ERR_BAD_ARGS;
435 }
436
437 return NO_ERROR;
438}
439
441{
443
444 if (!item)
445 return NULL;
446
447 init_menu_item(item);
448
449 item->type = MENU_ITEM_PAD;
450 item->data = (void*)pad_height;
451
452 return item;
453}
454
456{
458
459 if (!item)
460 return NULL;
461
462 KEST_PRINTF("create_page_link_menu_item. parent = %p\n", parent);
463
464 init_menu_item(item);
465
468
469 item->linked_page = linked_page;
470 item->parent = parent;
471
472 return item;
473}
474
476{
478
479 if (!item)
480 return NULL;
481
482 init_menu_item(item);
483
486 item->linked_page_indirect = linked_page;
487 item->parent = parent;
488
489 return item;
490}
491
493{
494 if (!param)
495 return NULL;
496
498
499 if (!item)
500 return NULL;
501
502 init_menu_item(item);
503
505
507
509
510 if (!pw)
511 {
512 free_menu_item(item);
513 return NULL;
514 }
515
516 item->data = pw;
517
518 configure_parameter_widget(item->data, param, NULL, parent);
519
520 return item;
521}
522
523kest_menu_item *create_danger_button_menu_item(void (*action_cb)(void* arg), void *arg, const char *text, kest_ui_page *parent)
524{
525 if (!action_cb)
526 return NULL;
527
529
530 if (!item)
531 return NULL;
532
533 init_menu_item(item);
534
536
537 item->text = kest_strndup(text, 128);
538 item->action_cb = action_cb;
539 item->cb_arg = arg;
540 item->parent = parent;
541
542 return item;
543}
544
546{
547 if (!str)
548 return ERR_NULL_PTR;
549
550 str->type = 0;
551
552 str->items = NULL;
553 str->next_page = NULL;
554 str->data = NULL;
555
556 return NO_ERROR;
557}
558
560{
561 if (!page)
562 return ERR_NULL_PTR;
563
564 init_ui_page(page);
565
567
568 page->data_struct = str;
569
570 if (!str)
571 return ERR_ALLOC_FAIL;
572
577
578 return init_menu_page_str(str);
579}
580
581int configure_menu_page(kest_ui_page *page, void *data)
582{
583 KEST_PRINTF("configure_menu_page\n");
584 if (!page)
585 return ERR_NULL_PTR;
586
587 if (page->configured)
588 return NO_ERROR;
589
590 int ret_val = NO_ERROR;
592
593 if (!str)
594 return ERR_BAD_ARGS;
595
596 page->panel = new_panel();
597 page->panel->text = str->name;
599
601
602 page->parent = data;
603 kest_menu_item_pll *current_item = str->items;
604
605 while (current_item)
606 {
607 configure_menu_item(current_item->data);
608 current_item = current_item->next;
609 }
610
611 if (str->next_page)
612 ret_val = configure_menu_page(str->next_page, page);
613
614 page->configured = (ret_val == NO_ERROR);
615
616 KEST_PRINTF("configure_menu_page done\n");
617 return ret_val;
618}
619
621{
622 KEST_PRINTF("create_menu_page_ui\n");
623 if (!page)
624 return ERR_NULL_PTR;
625
626 if (page->ui_created)
627 {
628 return NO_ERROR;
629 }
630
632
634
635 if (!str)
636 {
637 return ERR_BAD_ARGS;
638 }
639
640 kest_menu_item_pll *current = str->items;
641
642 int i = 0;
643 while (current)
644 {
645 KEST_PRINTF("Create menu item %d ui\n", i);
646 create_menu_item_ui(current->data, page->container);
647 current = current->next;
648 i++;
649 }
650
651 if (str->next_page)
653
654 page->ui_created = 1;
655
656 KEST_PRINTF("create_menu_page_ui done\n");
657 return NO_ERROR;
658}
659
660
662{
663 if (!page)
664 return ERR_NULL_PTR;
665
666 refresh_menu_page(page);
667
669
670 if (str)
671 {
672 kest_menu_item_pll *current = str->items;
673
674 KEST_PRINTF("Menu page menu items:\n");
675
676 while (current)
677 {
678 if (current->data)
679 {
680 KEST_PRINTF("Type %d\n", current->data->type);
681 if (current->data->type == MENU_ITEM_PARAMETER_WIDGET)
682 {
683 KEST_PRINTF("Requesting value for menu page parameter widget...\n");
684 //param_widget_request_value(current->data->data);
685 }
686 }
687
688 current = current->next;
689 }
690 }
691
692 return NO_ERROR;
693}
694
696{
697 if (!page)
698 return ERR_NULL_PTR;
699
701
702 if (!str)
703 return ERR_BAD_ARGS;
704
705 kest_menu_item_pll *current = str->items;
706
707 while (current)
708 {
709 refresh_menu_item(current->data);
710 current = current->next;
711 }
712
713 return NO_ERROR;
714}
715
717{
718 if (!page)
719 return ERR_NULL_PTR;
720
721
722
723 return ERR_UNIMPLEMENTED;
724}
725
727{
728 if (!str || !item)
729 return ERR_NULL_PTR;
730
731 //kest_printf("menu_page_add_item(%p, %p). str->items = %p\n", str, item, str->items);
732
733 kest_menu_item_pll *nl = kest_menu_item_pll_append(str->items, item);
734
735 if (!nl)
736 return ERR_ALLOC_FAIL;
737
738 str->items = nl;
739
740 return NO_ERROR;
741}
742
743void enter_main_menu_cb(lv_event_t *e)
744{
745 enter_ui_page(&global_cxt.pages.main_menu);
746}
747
749{
750 init_ui_page(page);
751
755
756 page->data_struct = NULL;
757
759
760 return NO_ERROR;
761}
762
763void kest_msc_button_cb(lv_event_t *e)
764{
765 int ret_val = kest_sd_toggle_msc();
766
767 kest_button *button = lv_event_get_user_data(e);//(kest_button*)arg;
768
769 if (sd_msc_mode)
770 {
771 //kest_button_set_label(button, "Mount SD card");
772 }
773 else
774 {
775 //kest_button_set_label(button, "Unmount SD card");
776 }
777}
778
779int configure_main_menu(kest_ui_page *page, void *data)
780{
781 if (!page)
782 return ERR_NULL_PTR;
783
784 page->parent = data;
785
787
788 if (!str)
789 return ERR_ALLOC_FAIL;
790
791 page->data_struct = str;
792
793 str->gains_container = NULL;
794
795 page->panel = new_panel();
796 page->panel->text = "Main Menu";
798
801
802 configure_parameter_widget( &str->input_gain, &global_cxt.input_gain, NULL, page);
803 configure_parameter_widget(&str->output_gain, &global_cxt.output_gain, NULL, page);
804
807 init_button(&str->msc_button);
809
810 kest_button_set_label(&str->profiles_button, "Profiles");
812 kest_button_set_label(&str->sequences_button, "Sequences");
814 kest_button_set_label(&str->msc_button, "Unmount SD card");
816 kest_button_set_label(&str->erase_sd_card_button.button, "Erase SD card");
818
822
823 /*
824 kest_menu_item *item = create_pad_menu_item(20);
825 menu_page_add_item(str, item);
826
827 item = create_parameter_widget_menu_item(&global_cxt.state.input_gain, page);
828 menu_page_add_item(str, item);
829
830 item = create_parameter_widget_menu_item(&global_cxt.state.output_gain, page);
831 menu_page_add_item(str, item);
832
833 kest_ui_page *profile_list = &global_cxt.pages.main_sequence_view;
834
835 profile_list->parent = page;
836
837 item = create_page_link_menu_item("Profiles", profile_list, page);
838
839 menu_page_add_item(str, item);
840
841 kest_ui_page *sequence_list = &global_cxt.pages.sequence_list;
842
843 sequence_list->parent = page;
844
845 item = create_page_link_menu_item("Sequences", sequence_list, page);
846
847 menu_page_add_item(str, item);
848
849 item = create_danger_button_menu_item(erase_sd_card_void_cb, NULL, "Erase SD card", page);
850
851 menu_page_add_item(str, item);*/
852
853 page->configured = 1;
854
855 return NO_ERROR;
856}
857
859{
860 if (!page)
861 return ERR_NULL_PTR;
862
863 if (page->ui_created)
864 {
865 return NO_ERROR;
866 }
867
869
870 if (!str)
871 {
872 return ERR_BAD_ARGS;
873 }
874
876
877 str->top_pad = lv_obj_create(page->container);
878
879 lv_obj_remove_style_all(str->top_pad);
880 lv_obj_set_size(str->top_pad, LV_PCT(100), 20);
881
882 /*
883 lv_obj_set_layout(page->container, LV_LAYOUT_FLEX);
884 lv_obj_set_flex_flow(page->container, LV_FLEX_FLOW_ROW_WRAP);
885 lv_obj_set_flex_align(page->container,
886 LV_FLEX_ALIGN_SPACE_EVENLY,
887 LV_FLEX_ALIGN_CENTER,
888 LV_FLEX_ALIGN_START);
889 */
890 str->gains_container = lv_obj_create(page->container);
891
892 lv_obj_remove_style_all(str->gains_container);
893 lv_obj_set_layout(str->gains_container, LV_LAYOUT_FLEX);
894 lv_obj_set_flex_flow (str->gains_container, LV_FLEX_FLOW_ROW_WRAP);
895 lv_obj_set_flex_align(str->gains_container, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_SPACE_EVENLY);
896
899
900 lv_obj_set_size(str->gains_container, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
901
902 str->top_pad = lv_obj_create(page->container);
903
904 lv_obj_remove_style_all(str->top_pad);
905 lv_obj_set_size(str->top_pad, LV_PCT(100), 20);
906
910
912
913 page->ui_created = 1;
914
915 return NO_ERROR;
916}
917
919{
920 if (!page)
921 return ERR_NULL_PTR;
922
923 return NO_ERROR;
924}
925
927{
928 if (!page)
929 return ERR_NULL_PTR;
930
932
933 if (!str)
934 return ERR_BAD_ARGS;
935
936 kest_menu_item_pll *current_item = str->items;
937 kest_menu_item_pll *prev_item = NULL;
938
939 while (current_item)
940 {
941 if (current_item->data == item)
942 {
943 delete_menu_item_ui(current_item->data);
944 free_menu_item(current_item->data);
945
946 if (prev_item)
947 prev_item->next = current_item->next;
948 else
949 str->items = current_item->next;
950
951 kest_free(current_item);
952 return NO_ERROR;
953 }
954
955 prev_item = current_item;
956 current_item = current_item->next;
957 }
958
959 return ERR_BAD_ARGS;
960}
void kest_free(void *ptr)
Definition kest_alloc.c:32
void * kest_alloc(size_t size)
Definition kest_alloc.c:11
char * kest_strndup(const char *str, size_t n)
Definition kest_alloc.c:73
int init_button(kest_button *button)
Definition kest_button.c:11
int init_danger_button(kest_danger_button *button, void(*action_cb)(void *data), void *cb_arg, kest_ui_page *parent)
int create_button_ui(kest_button *button, lv_obj_t *parent)
Definition kest_button.c:68
int button_set_clicked_cb(kest_button *button, lv_event_cb_t cb, void *cb_arg)
int kest_button_disable_alignment(kest_button *button)
int kest_button_set_label(kest_button *button, const char *label)
int kest_danger_button_create_ui(kest_danger_button *button, lv_obj_t *parent)
#define STANDARD_BUTTON_HEIGHT
Definition kest_button.h:8
#define STANDARD_DEL_BTN_REMAIN_MS
Definition kest_button.h:6
int cxt_remove_profile(kest_context *cxt, kest_profile *profile)
#define ERR_ALLOC_FAIL
#define ERR_BAD_ARGS
#define NO_ERROR
#define ERR_UNIMPLEMENTED
#define ERR_NULL_PTR
void erase_sd_card_void_cb(void *data)
kest_context global_cxt
Definition kest_int.c:12
#define IMPLEMENT_LINKED_PTR_LIST(X)
kest_menu_item * create_parameter_widget_menu_item(kest_parameter *param, kest_ui_page *parent)
Definition kest_menu.c:492
kest_menu_item * create_profile_listing_menu_item(char *text, kest_profile *profile, kest_ui_page *parent)
Definition kest_menu.c:208
int init_menu_item(kest_menu_item *item)
Definition kest_menu.c:11
void danger_button_activate_popup_cb(lv_event_t *e)
Definition kest_menu.c:184
int profile_listing_menu_item_refresh_active(kest_menu_item *item)
Definition kest_menu.c:231
kest_menu_item * create_page_link_menu_item(char *text, kest_ui_page *linked_page, kest_ui_page *parent)
Definition kest_menu.c:455
void menu_item_profile_listing_released_cb(lv_event_t *e)
Definition kest_menu.c:306
int configure_menu_item(kest_menu_item *item)
Definition kest_menu.c:58
int configure_menu_page(kest_ui_page *page, void *data)
Definition kest_menu.c:581
int free_menu_page_ui(kest_ui_page *page)
Definition kest_menu.c:716
int menu_page_add_item(kest_menu_page_str *str, kest_menu_item *item)
Definition kest_menu.c:726
void profile_listing_delete_button_cb(lv_event_t *e)
Definition kest_menu.c:277
void kest_msc_button_cb(lv_event_t *e)
Definition kest_menu.c:763
int refresh_menu_item(kest_menu_item *item)
Definition kest_menu.c:126
void disappear_profile_listing_delete_button(lv_timer_t *timer)
Definition kest_menu.c:297
int profile_listing_menu_item_change_name(kest_menu_item *item, char *name)
Definition kest_menu.c:262
void danger_button_value_changed_cb(lv_event_t *e)
Definition kest_menu.c:159
int create_menu_page_ui(kest_ui_page *page)
Definition kest_menu.c:620
int init_main_menu(kest_ui_page *page)
Definition kest_menu.c:748
int delete_menu_item_ui(kest_menu_item *item)
Definition kest_menu.c:97
kest_menu_item * create_page_linindirect_k_menu_item(char *text, kest_ui_page **linked_page, kest_ui_page *parent)
Definition kest_menu.c:475
int menu_page_remove_item(kest_ui_page *page, kest_menu_item *item)
Definition kest_menu.c:926
void menu_page_link_clicked_cb(lv_event_t *e)
Definition kest_menu.c:42
int configure_main_menu(kest_ui_page *page, void *data)
Definition kest_menu.c:779
int refresh_menu_page(kest_ui_page *page)
Definition kest_menu.c:695
void parameter_widget_change_cb_settings_wrapper(lv_event_t *e)
Definition kest_menu.c:144
void enter_main_menu_cb(lv_event_t *e)
Definition kest_menu.c:743
int init_menu_page(kest_ui_page *page)
Definition kest_menu.c:559
int create_menu_item_ui(kest_menu_item *item, lv_obj_t *parent)
Definition kest_menu.c:357
void menu_item_profile_listing_long_pressed_cb(lv_event_t *e)
Definition kest_menu.c:336
kest_menu_item * create_pad_menu_item(int pad_height)
Definition kest_menu.c:440
int create_main_menu_ui(kest_ui_page *page)
Definition kest_menu.c:858
int enter_main_menu(kest_ui_page *page)
Definition kest_menu.c:918
int free_menu_item(kest_menu_item *item)
Definition kest_menu.c:114
int enter_menu_page(kest_ui_page *page)
Definition kest_menu.c:661
int init_menu_page_str(kest_menu_page_str *str)
Definition kest_menu.c:545
kest_menu_item * create_danger_button_menu_item(void(*action_cb)(void *arg), void *arg, const char *text, kest_ui_page *parent)
Definition kest_menu.c:523
#define MENU_ITEM_TEXT_MAX_LEN
Definition kest_menu.h:6
#define MENU_ITEM_PROFILE_LISTING
Definition kest_menu.h:12
#define MENU_ITEM_SEQUENCE_LISTING
Definition kest_menu.h:13
#define MENU_ITEM_PAD
Definition kest_menu.h:8
#define MENU_ITEM_PAGE_LINK_INDIRECT
Definition kest_menu.h:10
#define MENU_ITEM_PARAMETER_WIDGET
Definition kest_menu.h:14
#define MENU_ITEM_PAGE_LINK
Definition kest_menu.h:9
#define MENU_ITEM_DANGER_BUTTON
Definition kest_menu.h:15
#define MENU_ITEM_CALLBACK_BUTTON
Definition kest_menu.h:11
int parameter_widget_create_ui_no_callback(kest_parameter_widget *pw, lv_obj_t *parent)
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)
int parameter_widget_create_ui(kest_parameter_widget *pw, lv_obj_t *parent)
void parameter_widget_change_cb_inner(kest_parameter_widget *pw)
#define KEST_PRINTF(...)
Definition kest_printf.h:10
int kest_sd_toggle_msc()
Definition kest_sd.c:195
int sd_msc_mode
Definition kest_sd.c:58
void menu_item_sequence_listing_released_cb(lv_event_t *e)
void sequence_listing_delete_button_cb(lv_event_t *e)
void menu_item_sequence_listing_long_pressed_cb(lv_event_t *e)
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_add_back_button(kest_ui_page *page)
Definition kest_ui.c:1129
int ui_page_create_base_ui(kest_ui_page *page)
Definition kest_ui.c:1207
int enter_ui_page_indirect_forwards(kest_ui_page **_page)
Definition kest_ui.c:421
void enter_ui_page_forwards_cb(lv_event_t *e)
Definition kest_ui.c:450
int create_standard_button_click(lv_obj_t **obj, lv_obj_t **label, lv_obj_t *parent, char *text, lv_event_cb_t click_cb, void *click_cb_arg)
Definition kest_ui.c:907
int init_ui_page(kest_ui_page *page)
Definition kest_ui.c:152
int enter_ui_page(kest_ui_page *page)
Definition kest_ui.c:244
int create_standard_button_long_press_release(lv_obj_t **obj, lv_obj_t **label, lv_obj_t *parent, char *text, lv_event_cb_t press_cb, void *press_cb_arg, lv_event_cb_t release_cb, void *release_cb_arg)
Definition kest_ui.c:949
int configure_ui_page(kest_ui_page *page, void *data)
Definition kest_ui.c:197
#define KEST_UI_PAGE_MAIN_MENU
Definition kest_ui.h:76
#define CONTAINER_TYPE_STD_BTN_LIST
Definition kest_ui.h:72
kest_button button
kest_button sequences_button
Definition kest_menu.h:73
kest_parameter_widget output_gain
Definition kest_menu.h:70
kest_button msc_button
Definition kest_menu.h:75
lv_obj_t * gains_container
Definition kest_menu.h:68
kest_parameter_widget input_gain
Definition kest_menu.h:69
lv_obj_t * top_pad
Definition kest_menu.h:66
kest_danger_button erase_sd_card_button
Definition kest_menu.h:77
kest_button profiles_button
Definition kest_menu.h:72
lv_obj_t * label
Definition kest_menu.h:31
void(* click_cb)(lv_event_t *e)
Definition kest_menu.h:25
void(* action_cb)(void *arg)
Definition kest_menu.h:24
kest_ui_page * linked_page
Definition kest_menu.h:36
void * cb_arg
Definition kest_menu.h:26
lv_timer_t * timer
Definition kest_menu.h:34
kest_ui_page * parent
Definition kest_menu.h:39
void * lp_configure_arg
Definition kest_menu.h:42
lv_obj_t * obj
Definition kest_menu.h:30
lv_obj_t ** extra
Definition kest_menu.h:32
kest_ui_page ** linked_page_indirect
Definition kest_menu.h:37
kest_ui_page * next_page
Definition kest_menu.h:58
kest_menu_item_pll * items
Definition kest_menu.h:57
int(* free_ui)(struct kest_ui_page *page)
Definition kest_ui.h:98
int ui_created
Definition kest_ui.h:107
kest_ui_page_panel * panel
Definition kest_ui.h:94
int(* create_ui)(struct kest_ui_page *page)
Definition kest_ui.h:97
int container_type
Definition kest_ui.h:91
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