Lines Matching refs:subject
34 static void group_notify_cb(lv_observer_t * observer, lv_subject_t * subject);
35 static lv_observer_t * bind_to_bitfield(lv_subject_t * subject, lv_obj_t * obj, lv_observer_cb_t cb…
37 static void obj_flag_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
38 static void obj_state_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
42 static void label_text_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
47 static void arc_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
52 static void slider_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
57 static void roller_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
62 static void dropdown_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject);
77 void lv_subject_init_int(lv_subject_t * subject, int32_t value) in lv_subject_init_int() argument
79 lv_memzero(subject, sizeof(lv_subject_t)); in lv_subject_init_int()
80 subject->type = LV_SUBJECT_TYPE_INT; in lv_subject_init_int()
81 subject->value.num = value; in lv_subject_init_int()
82 subject->prev_value.num = value; in lv_subject_init_int()
83 lv_ll_init(&(subject->subs_ll), sizeof(lv_observer_t)); in lv_subject_init_int()
86 void lv_subject_set_int(lv_subject_t * subject, int32_t value) in lv_subject_set_int() argument
88 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_subject_set_int()
93 subject->prev_value.num = subject->value.num; in lv_subject_set_int()
94 subject->value.num = value; in lv_subject_set_int()
95 lv_subject_notify(subject); in lv_subject_set_int()
98 int32_t lv_subject_get_int(lv_subject_t * subject) in lv_subject_get_int() argument
100 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_subject_get_int()
105 return subject->value.num; in lv_subject_get_int()
108 int32_t lv_subject_get_previous_int(lv_subject_t * subject) in lv_subject_get_previous_int() argument
110 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_subject_get_previous_int()
115 return subject->prev_value.num; in lv_subject_get_previous_int()
118 void lv_subject_init_string(lv_subject_t * subject, char * buf, char * prev_buf, size_t size, const… in lv_subject_init_string() argument
120 lv_memzero(subject, sizeof(lv_subject_t)); in lv_subject_init_string()
124 subject->type = LV_SUBJECT_TYPE_STRING; in lv_subject_init_string()
125 subject->size = size; in lv_subject_init_string()
126 subject->value.pointer = buf; in lv_subject_init_string()
127 subject->prev_value.pointer = prev_buf; in lv_subject_init_string()
129 lv_ll_init(&(subject->subs_ll), sizeof(lv_observer_t)); in lv_subject_init_string()
132 void lv_subject_copy_string(lv_subject_t * subject, const char * buf) in lv_subject_copy_string() argument
134 if(subject->type != LV_SUBJECT_TYPE_STRING) { in lv_subject_copy_string()
139 if(subject->size < 1) return; in lv_subject_copy_string()
140 if(subject->prev_value.pointer) { in lv_subject_copy_string()
141 lv_strlcpy((char *)subject->prev_value.pointer, subject->value.pointer, subject->size); in lv_subject_copy_string()
144 lv_strlcpy((char *)subject->value.pointer, buf, subject->size); in lv_subject_copy_string()
146 lv_subject_notify(subject); in lv_subject_copy_string()
150 void lv_subject_snprintf(lv_subject_t * subject, const char * format, ...) in lv_subject_snprintf() argument
152 if(subject->type != LV_SUBJECT_TYPE_STRING) { in lv_subject_snprintf()
157 if(subject->size < 1) return; in lv_subject_snprintf()
159 if(subject->prev_value.pointer) { in lv_subject_snprintf()
160 lv_strlcpy((char *)subject->prev_value.pointer, subject->value.pointer, subject->size); in lv_subject_snprintf()
165 const int ret = lv_vsnprintf((char *)subject->value.pointer, subject->size, format, va); in lv_subject_snprintf()
169 lv_subject_notify(subject); in lv_subject_snprintf()
172 const char * lv_subject_get_string(lv_subject_t * subject) in lv_subject_get_string() argument
174 if(subject->type != LV_SUBJECT_TYPE_STRING) { in lv_subject_get_string()
179 return subject->value.pointer; in lv_subject_get_string()
182 const char * lv_subject_get_previous_string(lv_subject_t * subject) in lv_subject_get_previous_string() argument
184 if(subject->type != LV_SUBJECT_TYPE_STRING) { in lv_subject_get_previous_string()
189 return subject->prev_value.pointer; in lv_subject_get_previous_string()
192 void lv_subject_init_pointer(lv_subject_t * subject, void * value) in lv_subject_init_pointer() argument
194 lv_memzero(subject, sizeof(lv_subject_t)); in lv_subject_init_pointer()
195 subject->type = LV_SUBJECT_TYPE_POINTER; in lv_subject_init_pointer()
196 subject->value.pointer = value; in lv_subject_init_pointer()
197 subject->prev_value.pointer = value; in lv_subject_init_pointer()
198 lv_ll_init(&(subject->subs_ll), sizeof(lv_observer_t)); in lv_subject_init_pointer()
201 void lv_subject_set_pointer(lv_subject_t * subject, void * ptr) in lv_subject_set_pointer() argument
203 if(subject->type != LV_SUBJECT_TYPE_POINTER) { in lv_subject_set_pointer()
208 subject->prev_value.pointer = subject->value.pointer; in lv_subject_set_pointer()
209 subject->value.pointer = ptr; in lv_subject_set_pointer()
210 lv_subject_notify(subject); in lv_subject_set_pointer()
213 const void * lv_subject_get_pointer(lv_subject_t * subject) in lv_subject_get_pointer() argument
215 if(subject->type != LV_SUBJECT_TYPE_POINTER) { in lv_subject_get_pointer()
220 return subject->value.pointer; in lv_subject_get_pointer()
223 const void * lv_subject_get_previous_pointer(lv_subject_t * subject) in lv_subject_get_previous_pointer() argument
225 if(subject->type != LV_SUBJECT_TYPE_POINTER) { in lv_subject_get_previous_pointer()
230 return subject->prev_value.pointer; in lv_subject_get_previous_pointer()
233 void lv_subject_init_color(lv_subject_t * subject, lv_color_t color) in lv_subject_init_color() argument
235 lv_memzero(subject, sizeof(lv_subject_t)); in lv_subject_init_color()
236 subject->type = LV_SUBJECT_TYPE_COLOR; in lv_subject_init_color()
237 subject->value.color = color; in lv_subject_init_color()
238 subject->prev_value.color = color; in lv_subject_init_color()
239 lv_ll_init(&(subject->subs_ll), sizeof(lv_observer_t)); in lv_subject_init_color()
242 void lv_subject_set_color(lv_subject_t * subject, lv_color_t color) in lv_subject_set_color() argument
244 if(subject->type != LV_SUBJECT_TYPE_COLOR) { in lv_subject_set_color()
249 subject->prev_value.color = subject->value.color; in lv_subject_set_color()
250 subject->value.color = color; in lv_subject_set_color()
251 lv_subject_notify(subject); in lv_subject_set_color()
254 lv_color_t lv_subject_get_color(lv_subject_t * subject) in lv_subject_get_color() argument
256 if(subject->type != LV_SUBJECT_TYPE_COLOR) { in lv_subject_get_color()
261 return subject->value.color; in lv_subject_get_color()
264 lv_color_t lv_subject_get_previous_color(lv_subject_t * subject) in lv_subject_get_previous_color() argument
266 if(subject->type != LV_SUBJECT_TYPE_COLOR) { in lv_subject_get_previous_color()
271 return subject->prev_value.color; in lv_subject_get_previous_color()
274 void lv_subject_init_group(lv_subject_t * subject, lv_subject_t * list[], uint32_t list_len) in lv_subject_init_group() argument
276 subject->type = LV_SUBJECT_TYPE_GROUP; in lv_subject_init_group()
277 subject->size = list_len; in lv_subject_init_group()
278 lv_ll_init(&(subject->subs_ll), sizeof(lv_observer_t)); in lv_subject_init_group()
279 subject->value.pointer = list; in lv_subject_init_group()
285 lv_subject_add_observer(list[i], group_notify_cb, subject); in lv_subject_init_group()
289 void lv_subject_deinit(lv_subject_t * subject) in lv_subject_deinit() argument
291 lv_observer_t * observer = lv_ll_get_head(&subject->subs_ll); in lv_subject_deinit()
293 lv_observer_t * observer_next = lv_ll_get_next(&subject->subs_ll, observer); in lv_subject_deinit()
297 lv_obj_remove_event_cb_with_user_data(observer->target, NULL, subject); in lv_subject_deinit()
304 lv_ll_clear(&subject->subs_ll); in lv_subject_deinit()
307 lv_subject_t * lv_subject_get_group_element(lv_subject_t * subject, int32_t index) in lv_subject_get_group_element() argument
309 if(subject->type != LV_SUBJECT_TYPE_GROUP) { in lv_subject_get_group_element()
314 if(index >= subject->size) return NULL; in lv_subject_get_group_element()
316 return ((lv_subject_t **)(subject->value.pointer))[index]; in lv_subject_get_group_element()
319 lv_observer_t * lv_subject_add_observer(lv_subject_t * subject, lv_observer_cb_t cb, void * user_da… in lv_subject_add_observer() argument
321 lv_observer_t * observer = lv_subject_add_observer_obj(subject, cb, NULL, user_data); in lv_subject_add_observer()
328 lv_observer_t * lv_subject_add_observer_obj(lv_subject_t * subject, lv_observer_cb_t cb, lv_obj_t *… in lv_subject_add_observer_obj() argument
331 LV_ASSERT_NULL(subject); in lv_subject_add_observer_obj()
332 if(subject->type == LV_SUBJECT_TYPE_INVALID) { in lv_subject_add_observer_obj()
336 lv_observer_t * observer = lv_ll_ins_tail(&(subject->subs_ll)); in lv_subject_add_observer_obj()
342 observer->subject = subject; in lv_subject_add_observer_obj()
353 if(observer->cb) observer->cb(observer, subject); in lv_subject_add_observer_obj()
358 lv_observer_t * lv_subject_add_observer_with_target(lv_subject_t * subject, lv_observer_cb_t cb, vo… in lv_subject_add_observer_with_target() argument
361 LV_ASSERT_NULL(subject); in lv_subject_add_observer_with_target()
362 if(subject->type == LV_SUBJECT_TYPE_INVALID) { in lv_subject_add_observer_with_target()
366 lv_observer_t * observer = lv_ll_ins_tail(&(subject->subs_ll)); in lv_subject_add_observer_with_target()
372 observer->subject = subject; in lv_subject_add_observer_with_target()
378 if(observer->cb) observer->cb(observer, subject); in lv_subject_add_observer_with_target()
388 observer->subject->notify_restart_query = 1; in lv_observer_remove()
390 lv_ll_remove(&(observer->subject->subs_ll), observer); in lv_observer_remove()
398 void lv_obj_remove_from_subject(lv_obj_t * obj, lv_subject_t * subject) in lv_obj_remove_from_subject() argument
406 if(subject == NULL || subject == observer->subject) { in lv_obj_remove_from_subject()
421 void lv_subject_notify(lv_subject_t * subject) in lv_subject_notify() argument
423 LV_ASSERT_NULL(subject); in lv_subject_notify()
426 LV_LL_READ(&(subject->subs_ll), observer) { in lv_subject_notify()
431 subject->notify_restart_query = 0; in lv_subject_notify()
432 LV_LL_READ(&(subject->subs_ll), observer) { in lv_subject_notify()
434 observer->cb(observer, subject); in lv_subject_notify()
435 if(subject->notify_restart_query) break; in lv_subject_notify()
439 } while(subject->notify_restart_query); in lv_subject_notify()
442 lv_observer_t * lv_obj_bind_flag_if_eq(lv_obj_t * obj, lv_subject_t * subject, lv_obj_flag_t flag, … in lv_obj_bind_flag_if_eq() argument
444 …lv_observer_t * observable = bind_to_bitfield(subject, obj, obj_flag_observer_cb, flag, ref_value,… in lv_obj_bind_flag_if_eq()
448 lv_observer_t * lv_obj_bind_flag_if_not_eq(lv_obj_t * obj, lv_subject_t * subject, lv_obj_flag_t fl… in lv_obj_bind_flag_if_not_eq() argument
451 …lv_observer_t * observable = bind_to_bitfield(subject, obj, obj_flag_observer_cb, flag, ref_value,… in lv_obj_bind_flag_if_not_eq()
455 lv_observer_t * lv_obj_bind_state_if_eq(lv_obj_t * obj, lv_subject_t * subject, lv_state_t state, i… in lv_obj_bind_state_if_eq() argument
457 …lv_observer_t * observable = bind_to_bitfield(subject, obj, obj_state_observer_cb, state, ref_valu… in lv_obj_bind_state_if_eq()
461 lv_observer_t * lv_obj_bind_state_if_not_eq(lv_obj_t * obj, lv_subject_t * subject, lv_state_t stat… in lv_obj_bind_state_if_not_eq() argument
463 …lv_observer_t * observable = bind_to_bitfield(subject, obj, obj_state_observer_cb, state, ref_valu… in lv_obj_bind_state_if_not_eq()
467 lv_observer_t * lv_obj_bind_checked(lv_obj_t * obj, lv_subject_t * subject) in lv_obj_bind_checked() argument
469 …lv_observer_t * observable = bind_to_bitfield(subject, obj, obj_state_observer_cb, LV_STATE_CHECKE… in lv_obj_bind_checked()
470 lv_obj_add_event_cb(obj, obj_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, subject); in lv_obj_bind_checked()
475 lv_observer_t * lv_label_bind_text(lv_obj_t * obj, lv_subject_t * subject, const char * fmt) in lv_label_bind_text() argument
477 LV_ASSERT_NULL(subject); in lv_label_bind_text()
481 if(subject->type != LV_SUBJECT_TYPE_STRING && subject->type != LV_SUBJECT_TYPE_POINTER) { in lv_label_bind_text()
482 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_label_bind_text()
487 if(subject->type != LV_SUBJECT_TYPE_STRING && subject->type != LV_SUBJECT_TYPE_POINTER && in lv_label_bind_text()
488 subject->type != LV_SUBJECT_TYPE_INT) { in lv_label_bind_text()
489 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_label_bind_text()
494 …lv_observer_t * observer = lv_subject_add_observer_obj(subject, label_text_observer_cb, obj, (void… in lv_label_bind_text()
500 lv_observer_t * lv_arc_bind_value(lv_obj_t * obj, lv_subject_t * subject) in lv_arc_bind_value() argument
502 LV_ASSERT_NULL(subject); in lv_arc_bind_value()
505 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_arc_bind_value()
506 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_arc_bind_value()
510 lv_obj_add_event_cb(obj, arc_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, subject); in lv_arc_bind_value()
512 … lv_observer_t * observer = lv_subject_add_observer_obj(subject, arc_value_observer_cb, obj, NULL); in lv_arc_bind_value()
518 lv_observer_t * lv_slider_bind_value(lv_obj_t * obj, lv_subject_t * subject) in lv_slider_bind_value() argument
520 LV_ASSERT_NULL(subject); in lv_slider_bind_value()
523 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_slider_bind_value()
524 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_slider_bind_value()
528 lv_obj_add_event_cb(obj, slider_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, subject); in lv_slider_bind_value()
530 …lv_observer_t * observer = lv_subject_add_observer_obj(subject, slider_value_observer_cb, obj, NUL… in lv_slider_bind_value()
537 lv_observer_t * lv_roller_bind_value(lv_obj_t * obj, lv_subject_t * subject) in lv_roller_bind_value() argument
539 LV_ASSERT_NULL(subject); in lv_roller_bind_value()
542 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_roller_bind_value()
543 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_roller_bind_value()
547 lv_obj_add_event_cb(obj, roller_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, subject); in lv_roller_bind_value()
549 …lv_observer_t * observer = lv_subject_add_observer_obj(subject, roller_value_observer_cb, obj, NUL… in lv_roller_bind_value()
557 lv_observer_t * lv_dropdown_bind_value(lv_obj_t * obj, lv_subject_t * subject) in lv_dropdown_bind_value() argument
559 LV_ASSERT_NULL(subject); in lv_dropdown_bind_value()
562 if(subject->type != LV_SUBJECT_TYPE_INT) { in lv_dropdown_bind_value()
563 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in lv_dropdown_bind_value()
567 lv_obj_add_event_cb(obj, dropdown_value_changed_event_cb, LV_EVENT_VALUE_CHANGED, subject); in lv_dropdown_bind_value()
569 …lv_observer_t * observer = lv_subject_add_observer_obj(subject, dropdown_value_observer_cb, obj, N… in lv_dropdown_bind_value()
592 static void group_notify_cb(lv_observer_t * observer, lv_subject_t * subject) in group_notify_cb() argument
594 LV_UNUSED(subject); in group_notify_cb()
605 static lv_observer_t * bind_to_bitfield(lv_subject_t * subject, lv_obj_t * obj, lv_observer_cb_t cb… in bind_to_bitfield() argument
608 LV_ASSERT_NULL(subject); in bind_to_bitfield()
611 if(subject->type != LV_SUBJECT_TYPE_INT) { in bind_to_bitfield()
612 LV_LOG_WARN("Incompatible subject type: %d", subject->type); in bind_to_bitfield()
626 lv_observer_t * observable = lv_subject_add_observer_obj(subject, cb, obj, p); in bind_to_bitfield()
631 static void obj_flag_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in obj_flag_observer_cb() argument
635 bool res = subject->value.num == p->value.num; in obj_flag_observer_cb()
646 static void obj_state_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in obj_state_observer_cb() argument
650 bool res = subject->value.num == p->value.num; in obj_state_observer_cb()
664 lv_subject_t * subject = lv_event_get_user_data(e); in obj_value_changed_event_cb() local
666 lv_subject_set_int(subject, lv_obj_has_state(obj, LV_STATE_CHECKED)); in obj_value_changed_event_cb()
671 static void label_text_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in label_text_observer_cb() argument
676 lv_label_set_text(observer->target, subject->value.pointer); in label_text_observer_cb()
679 switch(subject->type) { in label_text_observer_cb()
681 lv_label_set_text_fmt(observer->target, fmt, subject->value.num); in label_text_observer_cb()
685 lv_label_set_text_fmt(observer->target, fmt, subject->value.pointer); in label_text_observer_cb()
700 lv_subject_t * subject = lv_event_get_user_data(e); in arc_value_changed_event_cb() local
702 lv_subject_set_int(subject, lv_arc_get_value(arc)); in arc_value_changed_event_cb()
705 static void arc_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in arc_value_observer_cb() argument
707 lv_arc_set_value(observer->target, subject->value.num); in arc_value_observer_cb()
717 lv_subject_t * subject = lv_event_get_user_data(e); in slider_value_changed_event_cb() local
719 lv_subject_set_int(subject, lv_slider_get_value(slider)); in slider_value_changed_event_cb()
722 static void slider_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in slider_value_observer_cb() argument
724 lv_slider_set_value(observer->target, subject->value.num, LV_ANIM_OFF); in slider_value_observer_cb()
734 lv_subject_t * subject = lv_event_get_user_data(e); in roller_value_changed_event_cb() local
736 lv_subject_set_int(subject, lv_roller_get_selected(roller)); in roller_value_changed_event_cb()
739 static void roller_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in roller_value_observer_cb() argument
741 if((int32_t)lv_roller_get_selected(observer->target) != subject->value.num) { in roller_value_observer_cb()
742 lv_roller_set_selected(observer->target, subject->value.num, LV_ANIM_OFF); in roller_value_observer_cb()
753 lv_subject_t * subject = lv_event_get_user_data(e); in dropdown_value_changed_event_cb() local
755 lv_subject_set_int(subject, lv_dropdown_get_selected(dropdown)); in dropdown_value_changed_event_cb()
758 static void dropdown_value_observer_cb(lv_observer_t * observer, lv_subject_t * subject) in dropdown_value_observer_cb() argument
760 lv_dropdown_set_selected(observer->target, subject->value.num, LV_ANIM_OFF); in dropdown_value_observer_cb()