1 #include <Elementary.h>
4 /* TODO: ideally, the default theme would use map{} blocks on the TEXT
5 parts to implement their fading in/out propertly (as in the clock
7 /* TODO: if one ever wants to extend it to receiving generic widgets
8 as items, be my guest. in this case, remember to implement the
9 items tooltip infra. */
11 /* TODO: implement disabled mode -- disable_hook() and stuff. */
13 >>>>>>> remotes/origin/upstream
14 /* TODO: fix default theme image borders for looong strings as item
16 /* TODO: set text elipsis on labels if one enforces mininum size on
17 * the overall widget less the required for displaying it. */
18 /* TODO: find a way to, in the default theme, to detect we are
19 * bootstrapping (receiving the 1st message) and populate the downmost
20 * TEXT parts with the same text as the upmost, where appropriate. */
22 #define FLIP_FIRST_INTERVAL (0.85)
23 #define FLIP_MIN_INTERVAL (0.1)
24 #define MSG_FLIP_DOWN (1)
25 #define MSG_FLIP_UP (2)
26 #define MAX_LEN_DEFAULT (50)
28 #define DATA_GET eina_list_data_get
30 struct _Elm_Flipselector_Item
39 typedef struct _Widget_Data Widget_Data;
40 typedef struct _Elm_Flipselector_Item Elm_Flipselector_Item;
48 Eina_List *sentinel; /* item containing the largest label string */
52 double interval, first_interval;
55 static const char *widtype = NULL;
56 static void _del_hook(Evas_Object *obj);
57 static void _theme_hook(Evas_Object *obj);
58 static void _sizing_eval(Evas_Object *obj);
59 static void _update_view(Evas_Object *obj);
60 static void _callbacks_set(Evas_Object *obj);
61 static void _flip_up(Widget_Data *wd);
62 static void _flip_down(Widget_Data *wd);
63 static Eina_Bool _item_del_pre_hook(Elm_Object_Item *it);
65 static const char SIG_SELECTED[] = "selected";
66 static const char SIG_UNDERFLOWED[] = "underflowed";
67 static const char SIG_OVERFLOWED[] = "overflowed";
68 static const Evas_Smart_Cb_Description _signals[] = {
70 {SIG_UNDERFLOWED, ""},
76 _item_text_set_hook(Elm_Object_Item *it,
81 ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
84 >>>>>>> remotes/origin/upstream
87 Elm_Flipselector_Item *item;
91 if (part && strcmp(part ,"default")) return;
94 item = (Elm_Flipselector_Item *) it;
96 item = (Elm_Flipselector_Item *)it;
97 >>>>>>> remotes/origin/upstream
98 wd = elm_widget_data_get(WIDGET(item));
99 if ((!wd) || (!wd->items)) return;
101 l = eina_list_data_find_list(wd->items, item);
104 eina_stringshare_del(item->label);
105 item->label = eina_stringshare_add_length(label, wd->max_len);
107 if (strlen(label) > strlen(elm_object_item_text_get(DATA_GET(wd->sentinel))))
110 if (wd->current == l)
112 _update_view(WIDGET(item));
113 _sizing_eval(wd->self);
118 _item_text_get_hook(const Elm_Object_Item *it, const char *part)
121 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
123 Elm_Flipselector_Item *item, *_item;
127 if (part && strcmp(part ,"default")) return NULL;
129 item = (Elm_Flipselector_Item *) it;
130 wd = elm_widget_data_get(WIDGET(item));
131 if ((!wd) || (!wd->items)) return NULL;
133 EINA_LIST_FOREACH(wd->items, l, _item)
134 if (_item == item) return item->label;
137 if (part && strcmp(part ,"default")) return NULL;
139 return ((Elm_Flipselector_Item *)it)->label;
140 >>>>>>> remotes/origin/upstream
144 _item_signal_emit_hook(Elm_Object_Item *it,
145 const char *emission,
149 ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
150 Elm_Flipselector_Item *item = (Elm_Flipselector_Item *) it;
152 Elm_Flipselector_Item *item = (Elm_Flipselector_Item *)it;
153 >>>>>>> remotes/origin/upstream
154 edje_object_signal_emit(VIEW(item), emission, source);
157 static Elm_Flipselector_Item *
158 _item_new(Evas_Object *obj, const char *label, Evas_Smart_Cb func, const void *data)
161 Elm_Flipselector_Item *it;
162 Widget_Data *wd = elm_widget_data_get(obj);
164 it = elm_widget_item_new(obj, Elm_Flipselector_Item);
165 if (!it) return NULL;
167 elm_widget_item_del_pre_hook_set(it, _item_del_pre_hook);
168 elm_widget_item_text_set_hook_set(it, _item_text_set_hook);
169 elm_widget_item_text_get_hook_set(it, _item_text_get_hook);
170 elm_widget_item_signal_emit_hook_set(it, _item_signal_emit_hook);
173 if (len > wd->max_len)
176 it->label = eina_stringshare_add_length(label, len);
178 it->base.data = data;
180 /* TODO: no view here, but if one desires general contents in the
186 _item_free(Elm_Flipselector_Item *it)
188 eina_stringshare_del(it->label);
189 elm_widget_item_free(it);
193 _del_hook(Evas_Object *obj)
195 Elm_Flipselector_Item *item;
197 Widget_Data *wd = elm_widget_data_get(obj);
200 if (wd->walking) ERR("flipselector deleted while walking.\n");
202 EINA_LIST_FREE(wd->items, item)
205 if (wd->spin) ecore_timer_del(wd->spin);
212 _disable_hook(Evas_Object *obj)
214 Widget_Data *wd = elm_widget_data_get(obj);
217 if (elm_widget_disabled_get(obj))
218 edje_object_signal_emit(wd->base, "elm,state,disabled", "elm");
220 edje_object_signal_emit(wd->base, "elm,state,enabled", "elm");
224 >>>>>>> remotes/origin/upstream
225 _theme_hook(Evas_Object *obj)
230 wd = elm_widget_data_get(obj);
233 _elm_theme_object_set(obj, wd->base, "flipselector", "base",
234 elm_widget_style_get(obj));
235 edje_object_scale_set(wd->base,
236 elm_widget_scale_get(obj) * _elm_config->scale);
238 max_len = edje_object_data_get(wd->base, "max_len");
240 wd->max_len = MAX_LEN_DEFAULT;
243 wd->max_len = atoi(max_len);
245 wd->max_len = MAX_LEN_DEFAULT;
253 _sentinel_eval(Widget_Data *wd)
255 Elm_Flipselector_Item *it;
264 wd->sentinel = wd->items;
266 EINA_LIST_FOREACH(wd->items, l, it)
269 if (strlen(elm_object_item_text_get((Elm_Object_Item *) it)) >
271 if (strlen(elm_object_item_text_get((Elm_Object_Item *)it)) >
272 >>>>>>> remotes/origin/upstream
273 strlen(elm_object_item_text_get(DATA_GET(wd->sentinel))))
278 /* TODO: create a flag to avoid looping here all times */
280 _flipselector_process_deletions(Widget_Data *wd)
282 Elm_Flipselector_Item *it;
284 Eina_Bool skip = EINA_TRUE;
285 Eina_Bool sentinel_eval = EINA_FALSE;
287 wd->walking++; /* avoid nested deletions */
289 EINA_LIST_FOREACH(wd->items, l, it)
291 if (!it->deleted) continue;
293 if (wd->current == l)
295 if (wd->current == wd->sentinel)
296 sentinel_eval = EINA_TRUE;
297 wd->current = eina_list_prev(wd->current);
299 wd->items = eina_list_remove(wd->items, it);
302 wd->current = wd->items;
307 if (eina_list_count(wd->items) <= 1)
308 edje_object_signal_emit(wd->base, "elm,state,button,hidden", "elm");
310 edje_object_signal_emit(wd->base, "elm,state,button,visible", "elm");
314 _update_view(wd->self);
323 _flipselector_walk(Widget_Data *wd)
327 ERR("walking was negative. fixed!\n");
334 _flipselector_unwalk(Widget_Data *wd)
339 ERR("walking became negative. fixed!\n");
342 if (wd->walking) return;
344 _flipselector_process_deletions(wd);
348 _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
350 Evas_Event_Key_Down *ev;
352 Eina_Bool is_up = EINA_TRUE;
354 if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
356 wd = elm_widget_data_get(obj);
357 if (!wd) return EINA_FALSE;
360 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
362 if (elm_widget_disabled_get(obj)) return EINA_FALSE;
364 if ((!strcmp(ev->keyname, "Down")) || (!strcmp(ev->keyname, "KP_Down")))
366 else if ((strcmp(ev->keyname, "Up")) && (strcmp(ev->keyname, "KP_Up")))
369 if (wd->spin) ecore_timer_del(wd->spin);
371 /* TODO: if direction setting via API is not coming in, replace
372 these calls by flip_{next,prev} */
373 _flipselector_walk(wd);
374 if (is_up) _flip_up(wd);
376 _flipselector_unwalk(wd);
378 ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
383 _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
385 Widget_Data *wd = elm_widget_data_get(obj);
388 /* FIXME: no treatment of this signal so far */
389 if (elm_widget_focus_get(obj))
391 edje_object_signal_emit(wd->base, "elm,action,focus", "elm");
392 evas_object_focus_set(wd->base, EINA_TRUE);
396 edje_object_signal_emit(wd->base, "elm,action,unfocus", "elm");
397 evas_object_focus_set(wd->base, EINA_FALSE);
402 _sizing_eval(Evas_Object *obj)
405 const char *tmp = NULL;
406 Evas_Coord minw = -1, minh = -1, w, h;
408 wd = elm_widget_data_get(obj);
411 elm_coords_finger_size_adjust(1, &minw, 2, &minh);
415 const char *label = elm_object_item_text_get(DATA_GET(wd->sentinel));
416 tmp = edje_object_part_text_get(wd->base, "top");
417 edje_object_part_text_set(wd->base, "top", label);
420 edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);
421 elm_coords_finger_size_adjust(1, &minw, 2, &minh);
422 evas_object_size_hint_min_get(obj, &w, &h);
424 if (wd->sentinel) edje_object_part_text_set(wd->base, "top", tmp);
426 if (w > minw) minw = w;
427 if (h > minh) minh = h;
429 evas_object_size_hint_min_set(obj, minw, minh);
433 _update_view(Evas_Object *obj)
437 Elm_Flipselector_Item *item;
439 wd = elm_widget_data_get(obj);
443 item = DATA_GET(wd->current);
444 if (item) label = item->label;
446 edje_object_part_text_set(wd->base, "top", label ? label : "");
447 edje_object_part_text_set(wd->base, "bottom", label ? label : "");
448 edje_object_message_signal_process(wd->base);
452 _changed(Widget_Data *wd)
454 Elm_Flipselector_Item *item;
456 item = DATA_GET(wd->current);
460 item->func((void *)item->base.data, WIDGET(item), item);
462 evas_object_smart_callback_call(wd->self, SIG_SELECTED, item);
466 _send_msg(Widget_Data *wd, int flipside, char *label)
468 Edje_Message_String msg;
471 edje_object_message_send(wd->base, EDJE_MESSAGE_STRING, flipside, &msg);
472 edje_object_message_signal_process(wd->base);
478 _flip_up(Widget_Data *wd)
480 Elm_Flipselector_Item *item;
482 if (!wd->current) return;
484 if (wd->current == wd->items)
486 wd->current = eina_list_last(wd->items);
487 evas_object_smart_callback_call(wd->self, SIG_UNDERFLOWED, NULL);
490 wd->current = eina_list_prev(wd->current);
492 item = DATA_GET(wd->current);
495 _send_msg(wd, MSG_FLIP_UP, (char *)item->label);
499 _signal_val_up(void *data)
501 Widget_Data *wd = elm_widget_data_get(data);
503 if (!wd) goto val_up_exit_on_error;
505 _flipselector_walk(wd);
507 if (wd->interval > FLIP_MIN_INTERVAL)
508 wd->interval = wd->interval / 1.05;
510 ecore_timer_interval_set(wd->spin, wd->interval);
514 _flipselector_unwalk(wd);
516 return ECORE_CALLBACK_RENEW;
518 val_up_exit_on_error:
519 return ECORE_CALLBACK_CANCEL;
523 _signal_val_up_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
525 Widget_Data *wd = elm_widget_data_get(data);
528 wd->interval = wd->first_interval;
530 if (wd->spin) ecore_timer_del(wd->spin);
531 wd->spin = ecore_timer_add(wd->interval, _signal_val_up, data);
533 _signal_val_up(data);
537 _flip_down(Widget_Data *wd)
539 Elm_Flipselector_Item *item;
541 if (!wd->current) return;
543 wd->current = eina_list_next(wd->current);
546 wd->current = wd->items;
547 evas_object_smart_callback_call(wd->self, SIG_OVERFLOWED, NULL);
550 item = DATA_GET(wd->current);
553 _send_msg(wd, MSG_FLIP_DOWN, (char *)item->label);
557 _signal_val_down(void *data)
559 Widget_Data *wd = elm_widget_data_get(data);
561 if (!wd) goto val_down_exit_on_error;
563 _flipselector_walk(wd);
565 if (wd->interval > FLIP_MIN_INTERVAL)
566 wd->interval = wd->interval / 1.05;
567 ecore_timer_interval_set(wd->spin, wd->interval);
571 _flipselector_unwalk(wd);
573 return ECORE_CALLBACK_RENEW;
575 val_down_exit_on_error:
576 return ECORE_CALLBACK_CANCEL;
580 _signal_val_down_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
582 Widget_Data *wd = elm_widget_data_get(data);
585 wd->interval = wd->first_interval;
587 if (wd->spin) ecore_timer_del(wd->spin);
588 wd->spin = ecore_timer_add(wd->interval, _signal_val_down, data);
590 _signal_val_down(data);
594 _signal_val_change_stop(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
596 Widget_Data *wd = elm_widget_data_get(data);
599 if (wd->spin) ecore_timer_del(wd->spin);
604 _callbacks_set(Evas_Object *obj)
606 Widget_Data *wd = elm_widget_data_get(obj);
608 edje_object_signal_callback_add(wd->base, "elm,action,up,start",
609 "", _signal_val_up_start, obj);
610 edje_object_signal_callback_add(wd->base, "elm,action,up,stop",
611 "", _signal_val_change_stop, obj);
612 edje_object_signal_callback_add(wd->base, "elm,action,down,start",
613 "", _signal_val_down_start, obj);
614 edje_object_signal_callback_add(wd->base, "elm,action,down,stop",
615 "", _signal_val_change_stop, obj);
619 _item_del_pre_hook(Elm_Object_Item *it)
622 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
624 >>>>>>> remotes/origin/upstream
626 Elm_Flipselector_Item *item, *item2;
630 item = (Elm_Flipselector_Item *) it;
632 item = (Elm_Flipselector_Item *)it;
633 >>>>>>> remotes/origin/upstream
634 wd = elm_widget_data_get(WIDGET(item));
635 if (!wd) return EINA_FALSE;
639 item->deleted = EINA_TRUE;
643 _flipselector_walk(wd);
645 EINA_LIST_FOREACH(wd->items, l, item2)
649 wd->items = eina_list_remove_list(wd->items, l);
650 if (wd->current == l)
652 wd->current = l->prev;
653 if (!wd->current) wd->current = l->next;
656 item2 = wd->current->data;
657 _send_msg(wd, MSG_FLIP_DOWN, (char *)item2->label);
660 _send_msg(wd, MSG_FLIP_DOWN, "");
665 eina_stringshare_del(item->label);
667 _flipselector_unwalk(wd);
673 elm_flipselector_add(Evas_Object *parent)
679 ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
681 ELM_SET_WIDTYPE(widtype, "flipselector");
682 elm_widget_type_set(obj, "flipselector");
683 elm_widget_sub_object_add(parent, obj);
684 elm_widget_data_set(obj, wd);
687 elm_widget_del_hook_set(obj, _del_hook);
688 elm_widget_theme_hook_set(obj, _theme_hook);
690 /* TODO: elm_widget_disable_hook_set(obj, _disable_hook); */
692 elm_widget_disable_hook_set(obj, _disable_hook);
693 >>>>>>> remotes/origin/upstream
695 elm_widget_can_focus_set(obj, EINA_TRUE);
696 elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);
697 elm_widget_event_hook_set(obj, _event_hook);
699 wd->base = edje_object_add(e);
700 elm_widget_resize_object_set(obj, wd->base);
704 wd->first_interval = FLIP_FIRST_INTERVAL;
708 evas_object_smart_callbacks_descriptions_set(obj, _signals);
713 elm_flipselector_flip_next(Evas_Object *obj)
715 ELM_CHECK_WIDTYPE(obj, widtype);
717 Widget_Data *wd = elm_widget_data_get(obj);
720 if (wd->spin) ecore_timer_del(wd->spin);
722 _flipselector_walk(wd);
724 _flipselector_unwalk(wd);
728 elm_flipselector_flip_prev(Evas_Object *obj)
730 ELM_CHECK_WIDTYPE(obj, widtype);
732 Widget_Data *wd = elm_widget_data_get(obj);
735 if (wd->spin) ecore_timer_del(wd->spin);
737 _flipselector_walk(wd);
739 _flipselector_unwalk(wd);
742 EAPI Elm_Object_Item *
743 elm_flipselector_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
745 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
747 Elm_Flipselector_Item *item;
750 wd = elm_widget_data_get(obj);
751 if (!wd) return NULL;
753 item = _item_new(obj, label, func, data);
754 if (!item) return NULL;
756 wd->items = eina_list_append(wd->items, item);
759 wd->current = wd->items;
765 (strlen(elm_object_item_text_get((Elm_Object_Item *) item)) >
767 (strlen(elm_object_item_text_get((Elm_Object_Item *)item)) >
768 >>>>>>> remotes/origin/upstream
769 strlen(elm_object_item_text_get(DATA_GET(wd->sentinel)))))
771 wd->sentinel = eina_list_last(wd->items);
775 if (eina_list_count(wd->items) >= 2)
776 edje_object_signal_emit(wd->base, "elm,state,button,visible", "elm");
779 return (Elm_Object_Item *) item;
781 return (Elm_Object_Item *)item;
782 >>>>>>> remotes/origin/upstream
785 EAPI Elm_Object_Item *
786 elm_flipselector_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data)
788 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
790 Elm_Flipselector_Item *item;
793 wd = elm_widget_data_get(obj);
794 if (!wd) return NULL;
796 item = _item_new(obj, label, func, data);
797 if (!item) return NULL;
799 wd->items = eina_list_prepend(wd->items, item);
802 wd->current = wd->items;
808 (strlen(elm_object_item_text_get((Elm_Object_Item *) item)) >
810 (strlen(elm_object_item_text_get((Elm_Object_Item *)item)) >
811 >>>>>>> remotes/origin/upstream
812 strlen(elm_object_item_text_get(DATA_GET(wd->sentinel)))))
814 wd->sentinel = wd->items;
818 if (eina_list_count(wd->items) >= 2)
819 edje_object_signal_emit(wd->base, "elm,state,button,visible", "elm");
822 return (Elm_Object_Item *) item;
825 /* TODO: account for deleted items? */
827 return (Elm_Object_Item *)item;
830 >>>>>>> remotes/origin/upstream
831 EAPI const Eina_List *
832 elm_flipselector_items_get(const Evas_Object *obj)
834 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
836 Widget_Data *wd = elm_widget_data_get(obj);
837 if (!wd) return NULL;
841 EAPI Elm_Object_Item *
842 elm_flipselector_first_item_get(const Evas_Object *obj)
844 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
846 Elm_Flipselector_Item *it;
850 wd = elm_widget_data_get(obj);
851 if (!wd || !wd->items) return NULL;
853 EINA_LIST_FOREACH(wd->items, l, it)
855 if (it->deleted) continue;
857 return (Elm_Object_Item *) it;
859 return (Elm_Object_Item *)it;
860 >>>>>>> remotes/origin/upstream
865 EAPI Elm_Object_Item *
866 elm_flipselector_last_item_get(const Evas_Object *obj)
868 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
870 Elm_Flipselector_Item *it;
874 wd = elm_widget_data_get(obj);
875 if (!wd || !wd->items) return NULL;
877 EINA_LIST_REVERSE_FOREACH(wd->items, l, it)
879 if (it->deleted) continue;
881 return (Elm_Object_Item *) it;
883 return (Elm_Object_Item *)it;
884 >>>>>>> remotes/origin/upstream
889 EAPI Elm_Object_Item *
890 elm_flipselector_selected_item_get(const Evas_Object *obj)
892 ELM_CHECK_WIDTYPE(obj, widtype) NULL;
894 Widget_Data *wd = elm_widget_data_get(obj);
896 if (!wd || !wd->current) return NULL;
898 if (!wd) return NULL;
899 >>>>>>> remotes/origin/upstream
900 return DATA_GET(wd->current);
904 elm_flipselector_item_selected_set(Elm_Object_Item *it, Eina_Bool selected)
906 ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
908 Elm_Flipselector_Item *item, *_item, *cur;
909 int flipside = MSG_FLIP_UP;
914 item = (Elm_Flipselector_Item *) it;
916 item = (Elm_Flipselector_Item *)it;
917 >>>>>>> remotes/origin/upstream
918 wd = elm_widget_data_get(WIDGET(item));
921 cur = DATA_GET(wd->current);
922 if ((selected) && (cur == item)) return;
924 _flipselector_walk(wd);
926 if ((!selected) && (cur == item))
928 EINA_LIST_FOREACH(wd->items, l, _item)
933 _send_msg(wd, MSG_FLIP_UP, (char *)_item->label);
937 _flipselector_unwalk(wd);
941 EINA_LIST_FOREACH(wd->items, l, _item)
943 if (_item == cur) flipside = MSG_FLIP_DOWN;
948 _send_msg(wd, flipside, (char *)item->label);
953 _flipselector_unwalk(wd);
957 elm_flipselector_item_selected_get(const Elm_Object_Item *it)
959 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, EINA_FALSE);
961 Elm_Flipselector_Item *item;
964 item = (Elm_Flipselector_Item *) it;
966 item = (Elm_Flipselector_Item *)it;
967 >>>>>>> remotes/origin/upstream
968 wd = elm_widget_data_get(WIDGET(item));
969 if (!wd) return EINA_FALSE;
970 return (eina_list_data_get(wd->current) == item);
975 elm_flipselector_item_del(Elm_Object_Item *it)
977 elm_object_item_del(it);
981 elm_flipselector_item_label_get(const Elm_Object_Item *it)
983 return _item_text_get_hook(it, NULL);
987 elm_flipselector_item_label_set(Elm_Object_Item *it, const char *label)
989 _item_text_set_hook(it, NULL, label);
992 EAPI Elm_Object_Item *
993 elm_flipselector_item_prev_get(Elm_Object_Item *it)
995 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
997 Elm_Flipselector_Item *item, *_item;
1001 item = (Elm_Flipselector_Item *) it;
1002 wd = elm_widget_data_get(WIDGET(item));
1003 if ((!wd) || (!wd->items)) return NULL;
1005 EINA_LIST_FOREACH(wd->items, l, _item)
1008 l = eina_list_prev(l);
1009 if (!l) return NULL;
1013 EAPI Elm_Object_Item *
1014 elm_flipselector_item_prev_get(const Elm_Object_Item *it)
1016 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1020 Elm_Flipselector_Item *item = (Elm_Flipselector_Item *)it;
1022 wd = elm_widget_data_get(WIDGET(item));
1023 if ((!wd) || (!wd->items)) return NULL;
1025 l = eina_list_data_find_list(wd->items, it);
1026 if (l && l->prev) return DATA_GET(l->prev);
1028 >>>>>>> remotes/origin/upstream
1032 EAPI Elm_Object_Item *
1034 elm_flipselector_item_next_get(Elm_Object_Item *it)
1036 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1038 Elm_Flipselector_Item *item, *_item;
1042 item = (Elm_Flipselector_Item *) it;
1043 wd = elm_widget_data_get(WIDGET(item));
1044 if ((!wd) || (!wd->items)) return NULL;
1046 EINA_LIST_FOREACH(wd->items, l, _item)
1049 l = eina_list_next(l);
1050 if (!l) return NULL;
1054 elm_flipselector_item_next_get(const Elm_Object_Item *it)
1056 ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
1060 Elm_Flipselector_Item *item = (Elm_Flipselector_Item *)it;
1062 wd = elm_widget_data_get(WIDGET(item));
1063 if ((!wd) || (!wd->items)) return NULL;
1065 l = eina_list_data_find_list(wd->items, it);
1066 if (l && l->next) return DATA_GET(l->next);
1068 >>>>>>> remotes/origin/upstream
1074 elm_flipselector_interval_set(Evas_Object *obj, double interval)
1076 elm_flipselector_first_interval_set(Evas_Object *obj, double interval)
1077 >>>>>>> remotes/origin/upstream
1079 ELM_CHECK_WIDTYPE(obj, widtype);
1081 Widget_Data *wd = elm_widget_data_get(obj);
1083 wd->first_interval = interval;
1088 elm_flipselector_interval_get(const Evas_Object *obj)
1090 ELM_CHECK_WIDTYPE(obj, widtype) 0.0;
1092 elm_flipselector_first_interval_get(const Evas_Object *obj)
1094 ELM_CHECK_WIDTYPE(obj, widtype) 0;
1095 >>>>>>> remotes/origin/upstream
1097 Widget_Data *wd = elm_widget_data_get(obj);
1099 return wd->first_interval;
1104 EINA_DEPRECATED EAPI void
1105 elm_flipselector_interval_set(Evas_Object *obj, double interval)
1107 elm_flipselector_first_interval_set(obj, interval);
1110 EINA_DEPRECATED EAPI double
1111 elm_flipselector_interval_get(const Evas_Object *obj)
1113 return elm_flipselector_first_interval_get(obj);
1116 >>>>>>> remotes/origin/upstream