Kestrel Interface
Loading...
Searching...
No Matches
kest_sequence_list.c
Go to the documentation of this file.
1#include "kest_int.h"
2
3static const char *FNAME = "kest_sequence_list.c";
4
5#ifndef PRINTLINES_ALLOWED
6#define PRINTLINES_ALLOWED 0
7#endif
8
10{
12
13 if (!item || !sequence)
14 return NULL;
15
16 init_menu_item(item);
17
19 if (text)
21 else
22 item->text = "Sequence";
23
24 item->linked_page_indirect = &sequence->view_page;
25 item->data = sequence;
26
27
28
29 if (sequence)
30 kest_sequence_add_menu_listing(sequence, item);
31
32 item->parent = parent;
33
34 return item;
35}
36
38{
39 KEST_PRINTF("sequence_listing_menu_item_refresh_active\n");
40 if (!item)
41 return ERR_NULL_PTR;
42
43 if (!item->extra)
44 return NO_ERROR;
45
46 if (!item->extra[1])
47 return NO_ERROR;
48
49 if (item->data && ((kest_sequence*)item->data)->active)
50 {
51 KEST_PRINTF("sequence is active. going about it\n");
52
53 if (item->extra && item->extra[0] && item->extra[1])
54 {
55 lv_label_set_text(item->extra[1], LV_SYMBOL_PLAY);
56 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
57 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_CLICKABLE);
58 }
59 }
60 else
61 {
62 KEST_PRINTF("sequence is not active. hiding play\n");
63 if (item->extra && item->extra[0] && item->extra[1])
64 {
65 lv_label_set_text(item->extra[1], LV_SYMBOL_TRASH);
66 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
67 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_CLICKABLE);
68 }
69 }
70
71 KEST_PRINTF("sequence_listing_menu_item_refresh_active done\n");
72 return NO_ERROR;
73}
74
76{
77 if (!item)
78 return ERR_NULL_PTR;
79
80 if (!item->extra)
81 return NO_ERROR;
82
83 item->text = kest_strndup(name, 32);
84
85 lv_label_set_text(item->label, item->text);
86
87 return NO_ERROR;
88}
89
91{
92 if (!page)
93 return ERR_NULL_PTR;
94
95 //kest_printf("init_sequence_list\n");
96 init_menu_page(page);
97
99
100 //kest_printf("init_sequence_list done\n");
101 return NO_ERROR;
102}
103
104void sequence_list_add_cb(lv_event_t *e)
105{
106 kest_ui_page *page = lv_event_get_user_data(e);
107
108 if (!page)
109 return;
110
111 kest_menu_page_str *str = page->data_struct;
112
113 if (!str)
114 return;
115
117
118 if (!new_sequence)
119 {
120 KEST_PRINTF("ERROR: Couldn't create new sequence\n");
121 return;
122 }
123
124 create_sequence_view_for(new_sequence);
125
126 if (new_sequence->view_page)
127 {
128 new_sequence->view_page->parent = page;
129 enter_ui_page_forwards(new_sequence->view_page);
130 }
131
132 kest_menu_item *new_listing = create_sequence_listing_menu_item(new_sequence->name, new_sequence, page);
133
134 if (!new_listing)
135 {
136 KEST_PRINTF("Failed to create sequence listing menu item\n");
137 return;
138 }
139
140 menu_page_add_item(str, new_listing);
141 create_menu_item_ui(new_listing, page->container);
143}
144
146{
147 KEST_PRINTF("Configure sequence list\n");
148 if (!page)
149 return ERR_NULL_PTR;
150
151 if (page->configured)
152 return NO_ERROR;
153
154 page->parent = (kest_ui_page*)data;
155
156 kest_menu_page_str *str = page->data_struct;
157
158 if (!str)
159 return ERR_BAD_ARGS;
160
161 str->name = "Sequences";
162
163 page->panel = new_panel();
164 page->panel->text = str->name;
166
168
169 ui_page_add_bottom_button(page, LV_SYMBOL_PLUS, sequence_list_add_cb);
170
171 sequence_ll *current = global_cxt.sequences;
172 KEST_PRINTF("current = global_cxt.sequences = %p\n", current);
173 kest_menu_item_pll *nl;
174
175 int i = 0;
176 while (current)
177 {
178 KEST_PRINTF("current = %p, current->data = %p\n",
179 current, current->data);
180 if (current->data)
181 {
182 KEST_PRINTF("Add list item for sequence %d, %p = %s\n", i, current->data, current->data->name);
183 KEST_PRINTF("Sequence view page pointer: %p, dbl ptr: %p\n", current->data->view_page, &current->data->view_page);
184 menu_page_add_item(str, create_sequence_listing_menu_item(current->data->name, current->data, page));
185 }
186
187 current = current->next;
188 i++;
189 }
190
191 page->configured = 1;
192
193 return NO_ERROR;
194}
195
197{
198 if (!page)
199 return ERR_NULL_PTR;
200
201
202
203 return NO_ERROR;
204}
205
207{
208 kest_menu_item *item = lv_event_get_user_data(e);
209
210 if (!item)
211 return;
212
213 kest_sequence *sequence = (kest_sequence*)item->data;
214
215 if (!sequence)
216 return;
217
218 if (!sequence->active)
219 {
221
222 menu_page_remove_item(item->parent, item);
223 }
224}
225
227{
228 kest_menu_item *item = lv_timer_get_user_data(timer);
229
230 lv_obj_add_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
231
232 item->timer = NULL;
233}
234
236{
237 KEST_PRINTF("menu_item_sequence_listing_released_cb\n");
238 kest_menu_item *item = (kest_menu_item*)lv_event_get_user_data(e);
239
240 if (!item)
241 return;
242
243 int ret_val;
244 kest_sequence *sequence = item->data;
245
246 if (!sequence)
247 {
248 KEST_PRINTF("Error: sequence listing has no associated sequence!\n");
249 }
250
251 if (!item->long_pressed)
252 {
253 if (!sequence->view_page)
254 {
255 ret_val = create_sequence_view_for(sequence);
256 if (ret_val != NO_ERROR)
257 {
258 KEST_PRINTF("Error creating sequence view for sequence: %s\n", kest_error_code_to_string(ret_val));
259 return;
260 }
261 }
262
263 sequence->view_page->parent = item->parent;
264 enter_ui_page_forwards(sequence->view_page);
265 }
266 else
267 {
268 if (sequence && !sequence->active)
269 {
271 lv_timer_set_repeat_count(item->timer, 1);
272 }
273 }
274
275 item->long_pressed = 0;
276}
277
279{
280 kest_menu_item *item = (kest_menu_item*)lv_event_get_user_data(e);
281
282 if (!item)
283 return;
284
285 item->long_pressed = 1;
286
287 kest_sequence *sequence = item->data;
288
289 if (sequence && !sequence->active)
290 {
291 if (item->extra && item->extra[0])
292 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
293 }
294 else
295 {
296 if (item->extra && item->extra[0])
297 lv_obj_clear_flag(item->extra[0], LV_OBJ_FLAG_HIDDEN);
298 }
299}
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
#define STANDARD_DEL_BTN_REMAIN_MS
Definition kest_button.h:6
int cxt_remove_sequence(kest_context *cxt, kest_sequence *sequence)
kest_sequence * kest_context_add_sequence_rp(kest_context *cxt)
const char * kest_error_code_to_string(int error_code)
#define ERR_BAD_ARGS
#define NO_ERROR
#define ERR_NULL_PTR
kest_context global_cxt
Definition kest_int.c:12
int init_menu_item(kest_menu_item *item)
Definition kest_menu.c:11
int menu_page_add_item(kest_menu_page_str *str, kest_menu_item *item)
Definition kest_menu.c:726
int menu_page_remove_item(kest_ui_page *page, kest_menu_item *item)
Definition kest_menu.c:926
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
#define MENU_ITEM_TEXT_MAX_LEN
Definition kest_menu.h:6
#define MENU_ITEM_SEQUENCE_LISTING
Definition kest_menu.h:13
#define KEST_PRINTF(...)
Definition kest_printf.h:10
int kest_sequence_add_menu_listing(kest_sequence *sequence, kest_menu_item *listing)
kest_sequence_pll sequence_ll
kest_menu_item * create_sequence_listing_menu_item(char *text, kest_sequence *sequence, kest_ui_page *parent)
void menu_item_sequence_listing_released_cb(lv_event_t *e)
int init_sequence_list(kest_ui_page *page)
void sequence_listing_delete_button_cb(lv_event_t *e)
int sequence_listing_menu_item_change_name(kest_menu_item *item, char *name)
void menu_item_sequence_listing_long_pressed_cb(lv_event_t *e)
void disappear_sequence_listing_delete_button(lv_timer_t *timer)
int free_sequence_list_ui(kest_ui_page *page)
void sequence_list_add_cb(lv_event_t *e)
int sequence_listing_menu_item_refresh_active(kest_menu_item *item)
int configure_sequence_list(kest_ui_page *page, void *data)
int create_sequence_view_for(kest_sequence *sequence)
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
kest_button * ui_page_add_bottom_button(kest_ui_page *page, const char *label, lv_event_cb_t cb)
Definition kest_ui.c:1308
#define CONTAINER_TYPE_STD_BTN_LIST
Definition kest_ui.h:72
lv_obj_t * label
Definition kest_menu.h:31
lv_timer_t * timer
Definition kest_menu.h:34
kest_ui_page * parent
Definition kest_menu.h:39
lv_obj_t ** extra
Definition kest_menu.h:32
kest_ui_page ** linked_page_indirect
Definition kest_menu.h:37
kest_ui_page_panel * panel
Definition kest_ui.h:94
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(* configure)(struct kest_ui_page *page, void *data)
Definition kest_ui.h:96