1 #include <Elementary.h>
5 * @defgroup SegmentControl SegmentControl
8 * SegmentControl object is a horizontal control made of multiple segments,
9 * each segment item functioning as a discrete button. A segmented control affords a compact means to group together a number of controls.
10 * A segmented control can display a title or an image. The UISegmentedControl object automatically resizes segment items to fit proportionally
11 * within their superview unless they have a specific width set. When you add and remove segments,
12 * you can request that the action be animated with sliding and fading effects.
14 typedef struct _Widget_Data Widget_Data;
24 Elm_Segment_Item *ani_it;
27 unsigned int insert_index;
28 unsigned int del_index;
29 unsigned int cur_seg_id;
31 Eina_Bool selected : 1;
34 struct _Elm_Segment_Item
40 Evas_Object *label_wd;
41 Eina_Bool delete_me : 1;
45 static void _mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info);
46 static void _mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
47 static void _signal_segment_on(void *data);
48 static void _signal_segment_off(void *data);
49 static void _theme_hook(Evas_Object *obj);
50 static void _item_free(Evas_Object *obj, Elm_Segment_Item *it);
51 static void _del_hook(Evas_Object *obj);
52 static void _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data);
53 static void _segment_resizing(void *data);
54 static void _object_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
55 static void _update_list(Evas_Object *obj);
56 static void _refresh_segment_ids(Evas_Object *obj);
57 static void _state_value_set(Evas_Object *obj);
59 static Elm_Segment_Item* _item_new(Evas_Object *obj, const char *label, Evas_Object *icon);
60 static Elm_Segment_Item *_item_find(Evas_Object *obj, unsigned int index);
62 static int * _animator_animate_add_cb(Evas_Object *obj);
63 static int * _animator_animate_del_cb(Evas_Object *obj);
66 _on_focus_hook(void *data, Evas_Object *obj)
68 Widget_Data *wd = elm_widget_data_get(obj);
71 if (elm_widget_focus_get(obj))
72 evas_object_focus_set((Evas_Object *)wd->seg_ctrl, 1);
74 evas_object_focus_set((Evas_Object *)wd->seg_ctrl, 0);
78 _signal_segment_off(void *data)
80 Elm_Segment_Item *item = (Elm_Segment_Item *) data;
81 Widget_Data *wd = elm_widget_data_get(item->obj);
84 edje_object_signal_emit(item->base, "elm,action,unfocus", "elm");
85 edje_object_signal_emit(item->base, "elm,state,segment,off", "elm");
88 edje_object_signal_emit(item->base, "elm,state,text,visible", "elm");
92 elm_label_text_color_set(item->label_wd, 0xff,0xff, 0xff, 0xff);
99 _signal_segment_on(void *data)
101 Elm_Segment_Item *item = (Elm_Segment_Item *) data;
102 Elm_Segment_Item *it;
105 Widget_Data *wd = elm_widget_data_get(item->obj);
108 wd->selected = EINA_TRUE;
110 edje_object_signal_emit(item->base, "elm,state,segment,on", "elm");
112 edje_object_signal_emit(item->base, "elm,state,text,change", "elm");
114 if (item->segment_id == wd->cur_seg_id) return;
116 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
118 if (it->segment_id == wd->cur_seg_id)
120 _signal_segment_off (it);
124 wd->cur_seg_id = item->segment_id;
125 evas_object_smart_callback_call(item->obj, "changed", (void*)wd->cur_seg_id);
131 _mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
133 Elm_Segment_Item *item = (Elm_Segment_Item *) data;
134 Widget_Data *wd = elm_widget_data_get(item->obj);
136 Evas_Coord wrap_width = 0, wrap_height = 0;
138 if (item->segment_id == wd->cur_seg_id)
140 wd->selected = EINA_TRUE;
143 _signal_segment_on(item);
146 wrap_width = elm_label_wrap_width_get(item->label_wd);
147 wrap_height = elm_label_wrap_height_get(item->label_wd);
148 elm_label_wrap_width_set(item->label_wd, wrap_width);
149 elm_label_wrap_height_set(item->label_wd, wrap_height);
150 elm_label_text_color_set(item->label_wd, 0x00,0x00, 0x00, 0xff);
153 wd->selected = EINA_FALSE;
159 _mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
161 Elm_Segment_Item *item = (Elm_Segment_Item *) data;
162 Widget_Data *wd = elm_widget_data_get(item->obj);
166 edje_object_signal_emit(item->base, "elm,action,focus", "elm");
171 _theme_hook(Evas_Object *obj)
173 _elm_theme_object_set(obj, obj, "segmented-control", "base", elm_widget_style_get(obj));
179 _item_free(Evas_Object *obj, Elm_Segment_Item *it)
181 Widget_Data *wd = elm_widget_data_get(obj);
185 wd->seg_ctrl = eina_list_remove(wd->seg_ctrl, it);
187 if(it->icon) evas_object_del(it->icon);
190 evas_object_del(it->label_wd);
192 if (edje_object_part_swallow_get(it->base, "elm.swallow.label.content") == NULL)
194 edje_object_part_unswallow(it->base, it->label_wd);
197 if(it->base) evas_object_del(it->base);
198 if(it->label) eina_stringshare_del(it->label);
207 _del_hook(Evas_Object *obj)
209 Widget_Data *wd = elm_widget_data_get(obj);
210 Elm_Segment_Item *it;
211 Eina_List *l, *clear = NULL;
213 EINA_LIST_FOREACH(wd->seg_ctrl, l, it) clear = eina_list_append(clear, it);
214 EINA_LIST_FREE(clear, it) _item_free(obj, it);
224 _layout(Evas_Object *o, Evas_Object_Box_Data *priv, void *data)
226 Widget_Data *wd = data;
228 _els_box_layout(o, priv, 1, 0); /* making box layout non homogenous */
234 _segment_resizing(void *data)
236 Widget_Data *wd = elm_widget_data_get((Evas_Object *)data);
238 Evas_Coord w = 0, h = 0;
240 evas_object_geometry_get(wd->base, NULL, NULL, &w, &h);
241 wd->item_width = wd->width = w;
244 _state_value_set((Evas_Object *)data);
248 _object_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
252 wd = elm_widget_data_get((Evas_Object *)data);
255 ecore_job_add(_segment_resizing, (Evas_Object *)data);
259 _segment_item_resizing(void *data)
262 Elm_Segment_Item *it = (Elm_Segment_Item *)data;
263 wd = elm_widget_data_get(it->obj);
266 Evas_Coord w = 0, h = 0;
267 const char *minfont, *deffont, *maxfont, *maxheight;
268 int minfontsize, maxfontsize, cur_fontsize = 0, max_height = 0;
270 minfont = edje_object_data_get(wd->base, "min_font_size");
271 if (minfont) minfontsize = atoi(minfont);
272 else minfontsize = 1;
274 maxfont = edje_object_data_get(wd->base, "max_font_size");
275 if (maxfont) maxfontsize = atoi(maxfont);
276 else maxfontsize = 1;
278 deffont = edje_object_data_get(wd->base, "default_font_size");
279 if (deffont) cur_fontsize = atoi(deffont);
280 else cur_fontsize = 1;
282 _update_list(it->obj);
283 evas_object_geometry_get(it->base, NULL, NULL, &w, &h);
285 maxheight = edje_object_data_get(wd->base, "max_height");
286 if (maxheight) max_height = atoi(maxheight);
291 elm_label_fontsize_set(it->label_wd, cur_fontsize);
292 elm_label_wrap_width_set(it->label_wd, w-4);
293 elm_label_wrap_height_set(it->label_wd, max_height-6);
294 elm_label_text_color_set(it->label_wd, 0xFF,0xFF, 0xFF, 0xff);
295 if (edje_object_part_swallow_get(it->base, "elm.swallow.label.content") == NULL)
297 edje_object_part_unswallow(it->base, it->label_wd);
299 edje_object_part_swallow(it->base, "elm.swallow.label.content", it->label_wd);
300 edje_object_signal_emit(it->base, "elm,state,label,visible", "elm");
305 _object_item_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
307 ecore_job_add(_segment_item_resizing, (Evas_Object *)data);
310 static Elm_Segment_Item*
311 _item_new(Evas_Object *obj, const char *label, Evas_Object *icon)
313 Elm_Segment_Item *it;
315 Widget_Data *wd = elm_widget_data_get(obj);
316 if (!wd) return NULL;
318 it = calloc(1, sizeof( Elm_Segment_Item));
319 if (!it) return NULL;
321 if(obj) it->obj = obj;
322 it->delete_me = EINA_FALSE;
323 it->segment_id = wd->id;
326 it->base = edje_object_add(evas_object_evas_get(obj));
327 _elm_theme_object_set(obj, it->base, "segment", "base", elm_object_style_get(it->base));
329 if (it->label) eina_stringshare_del(it->label);
332 it->label = eina_stringshare_add(label);
338 if ((it->icon != icon) && (it->icon))
339 elm_widget_sub_object_del(obj, it->icon);
343 elm_widget_sub_object_add(obj, icon);
344 Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
345 elm_coords_finger_size_adjust(1, &minw, 1, &minh);
346 elm_coords_finger_size_adjust(1, &minw, 1, &minh);
348 evas_object_size_hint_weight_set(it->base, 1.0, -1.0);
349 evas_object_size_hint_align_set(it->base, 1.0, -1.0);
350 evas_object_size_hint_min_set(it->base, -1, -1);
351 evas_object_size_hint_max_set(it->base, maxw, maxh);
354 edje_object_size_min_restricted_calc(obj, &mw, &mh, 0, 0);
355 evas_object_size_hint_weight_set(obj, 1.0, 1.0);
356 evas_object_size_hint_align_set(obj, -1.0, -1.0);
363 _update_list(Evas_Object *obj)
365 Elm_Segment_Item *it;
369 Widget_Data *wd = elm_widget_data_get(obj);
372 wd->count = eina_list_count(wd->seg_ctrl);
375 it = _item_find(obj, 0);
376 _elm_theme_object_set(obj, it->base, "segment", "base", "single");
\r
377 edje_object_signal_emit(it->base, "elm,state,segment,on", "elm");
380 edje_object_signal_emit(it->base, "elm,state,text,visible", "elm");
381 edje_object_signal_emit(it->base, "elm,state,text,change", "elm");
383 edje_object_message_signal_process(it->base);
386 edje_object_part_text_set(it->base, "elm.text", it->label);
388 edje_object_part_swallow(it->base, "elm.swallow.content", it->icon);
389 edje_object_signal_emit(it->base, "elm,state,icon,visible", "elm");
394 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
398 _elm_theme_object_set(obj, it->base, "segment", "base", "first");
400 else if(i==wd->count-1)
402 _elm_theme_object_set(obj, it->base, "segment", "base", "last");
406 _elm_theme_object_set(obj, it->base, "segment", "base", "default");
412 edje_object_signal_emit(it->base, "elm,state,text,visible", "elm");
414 edje_object_message_signal_process(it->base);
417 edje_object_part_text_set(it->base, "elm.text", it->label);
419 edje_object_part_swallow(it->base, "elm.swallow.content", it->icon);
420 edje_object_signal_emit(it->base, "elm,state,icon,visible", "elm");
428 _refresh_segment_ids(Evas_Object *obj)
430 Elm_Segment_Item *it;
433 Widget_Data *wd = elm_widget_data_get(obj);
436 if (wd->insert_index && wd->cur_seg_id >= wd->insert_index)
439 wd->insert_index = 0;
443 if (wd->cur_seg_id >= wd->del_index)
448 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
456 _state_value_set(Evas_Object *obj)
458 Elm_Segment_Item *it;
460 Evas_Coord mw, mh, x, y, w, h, xx = 0, yy;
464 Widget_Data *wd = elm_widget_data_get(obj);
467 count = eina_list_count(wd->seg_ctrl);
469 wd->item_width = wd->width/count;
472 evas_object_geometry_get(wd->ani_it->base, &x, &y, &w1, NULL);
473 if (wd->ani_it->delete_me)
475 w1-=(wd->item_width/5);
480 w1+=(wd->item_width/5);
481 if( w1 > wd->item_width )
484 w2 = (wd->width-w1)/(count -1);
489 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
491 edje_object_size_min_restricted_calc(it->base, &mw, &mh, 0, 0);
492 evas_object_size_hint_weight_set(it->base, 1.0, 1.0);
493 evas_object_size_hint_align_set(it->base, -1.0, -1.0);
494 evas_object_geometry_get(wd->base, &x, &y, &w, &h);
501 if(wd->ani_it && it == wd->ani_it)
503 evas_object_resize(it->base, w1, wd->height);
504 evas_object_size_hint_min_set(it->base, w1, wd->height);
505 evas_object_size_hint_max_set(it->base, w1, wd->height);
507 evas_object_move(it->base, xx, yy);
513 evas_object_resize(it->base, w2, wd->height);
514 evas_object_size_hint_min_set(it->base, w2, wd->height);
515 evas_object_size_hint_max_set(it->base, w2, wd->height);
517 evas_object_move(it->base, xx, yy);
529 _animator_animate_add_cb(Evas_Object *obj)
532 Widget_Data *wd = elm_widget_data_get(obj);
535 evas_object_geometry_get(wd->ani_it->base, NULL, NULL, &w, NULL);
536 if( w < wd->item_width )
538 _state_value_set(obj);
539 evas_object_geometry_get(wd->ani_it->base, NULL, NULL, &w, NULL);
540 return ECORE_CALLBACK_RENEW;
544 ecore_animator_del(wd->ani);
547 return ECORE_CALLBACK_CANCEL;
553 _animator_animate_del_cb(Evas_Object *obj)
556 Widget_Data *wd = elm_widget_data_get(obj);
559 evas_object_geometry_get(wd->ani_it->base, NULL, NULL, &w, NULL);
562 _state_value_set(obj);
563 evas_object_geometry_get(wd->ani_it->base, NULL, NULL, &w, NULL);
564 return ECORE_CALLBACK_RENEW;
568 _item_free(obj, wd->ani_it );
569 _refresh_segment_ids(obj);
570 ecore_animator_del(wd->ani);
574 wd->id = eina_list_count(wd->seg_ctrl);
575 return ECORE_CALLBACK_CANCEL;
579 static Elm_Segment_Item *
580 _item_find(Evas_Object *obj, unsigned int index)
582 Elm_Segment_Item *it;
585 Widget_Data *wd = elm_widget_data_get(obj);
586 if (!wd) return NULL;
588 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
590 if (i == index) return it;
597 static Elm_Segment_Item *
598 _item_search(Evas_Object *obj, Elm_Segment_Item *item)
600 Elm_Segment_Item *it;
602 Widget_Data *wd = elm_widget_data_get(obj);
606 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
617 * Add a new segmentcontrol to the parent
618 * @param parent The parent object
619 * @return The new object or NULL if it cannot be created
621 * @ingroup SegmentControl SegmentControl
624 elm_segment_control_add(Evas_Object *parent)
630 wd = ELM_NEW(Widget_Data);
631 e = evas_object_evas_get(parent);
633 obj = elm_widget_add(e);
634 elm_widget_type_set(obj, "segmented-control");
635 elm_widget_sub_object_add(parent, obj);
636 elm_widget_on_focus_hook_set( obj, _on_focus_hook, NULL );
637 elm_widget_data_set(obj, wd);
638 elm_widget_del_hook_set(obj, _del_hook);
639 elm_widget_theme_hook_set(obj, _theme_hook);
641 wd->base = edje_object_add(e);
642 _elm_theme_object_set(obj, wd->base, "segmented-control", "base", "default");
643 elm_widget_resize_object_set(obj, wd->base);
644 wd->box = evas_object_box_add(e);
645 evas_object_box_layout_set(wd->box, _layout, wd, NULL);
646 elm_widget_sub_object_add(obj, wd->box);
647 edje_object_part_swallow(wd->base, "elm.swallow.content", wd->box);
648 evas_object_show(wd->box);
650 wd->box = elm_layout_add(e);
651 elm_layout_theme_set(wd->box, "segmented-control", "base", "default");
652 edje_object_part_swallow(wd->base, "elm.swallow.content", wd->box);
653 evas_object_show(wd->box);
656 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _object_resize, obj);
659 wd->insert_index = 0;
661 wd->selected = EINA_FALSE;
667 * Add a new segment item to segmentcontrol
668 * @param obj The SegmentControl object
669 * @param icon The icon object for added segment item
670 * @param label The label for added segment item
671 * @param animate If 1 the action be animated with sliding effects default 0.
672 * @return The new segment item or NULL if it cannot be created
674 * @ingroup SegmentControl SegmentControl
677 EAPI Elm_Segment_Item *
678 elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Eina_Bool animate)
680 Elm_Segment_Item *it;
681 Widget_Data *wd = elm_widget_data_get(obj);
684 it = _item_new(obj, label, icon);
687 wd->seg_ctrl = eina_list_append(wd->seg_ctrl, it);
688 wd->id = eina_list_count(wd->seg_ctrl);
690 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, it);
691 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, _mouse_up, it);
692 evas_object_event_callback_add(it->base, EVAS_CALLBACK_RESIZE, _object_item_resize, it);
693 wd->insert_index = 0;
695 _refresh_segment_ids(obj);
697 if(animate && it->segment_id && wd->ani_it == NULL)
699 evas_object_resize(it->base, 1, wd->height);
701 wd->ani = ecore_animator_add( _animator_animate_add_cb, obj );
704 _state_value_set(obj);
705 evas_object_show( it->base);
707 evas_object_box_append(wd->box, it->base);
709 elm_layout_content_set(wd->box, "elm.swallow.content", it->base);
711 evas_object_smart_calculate(wd->box);
717 * Add a new segment item to segmentcontrol
718 * @param obj The SegmentControl object
719 * @param icon The icon object for added segment item
720 * @param label The label for added segment item
721 * @param animate If 1 the action be animated with sliding effects default 0.
722 * @return The new segment item or NULL if it cannot be created
724 * @ingroup SegmentControl SegmentControl
727 EAPI Elm_Segment_Item *
728 elm_segment_control_add_segment(Evas_Object *obj, Evas_Object *icon, const char *label, Eina_Bool animate)
730 EAPI Elm_Segment_Item * it;
731 it = elm_segment_control_item_add(obj, icon, label, animate);
737 * Insert a new segment item to segmentcontrol
738 * @param obj The SegmentControl object
739 * @param icon The icon object for added segment item
740 * @param label The label for added segment item
741 * @param index The position at which segment item to be inserted
742 * @param animate If 1 the action be animated with sliding effects default 0.
743 * @return The new segment item or NULL if it cannot be created
745 * @ingroup SegmentControl SegmentControl
748 EAPI Elm_Segment_Item *
749 elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, unsigned int index, Eina_Bool animate)
751 Elm_Segment_Item *it, *it_rel;
752 Widget_Data *wd = elm_widget_data_get(obj);
755 it = _item_new(obj, label, icon);
756 it_rel = _item_find(obj, index);
759 wd->seg_ctrl = eina_list_append(wd->seg_ctrl, it);
763 if (!it) return NULL;
764 wd->seg_ctrl = eina_list_prepend_relative(wd->seg_ctrl, it, it_rel);
766 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, it);
767 evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, _mouse_up, it);
768 evas_object_event_callback_add(it->base, EVAS_CALLBACK_RESIZE, _object_item_resize, it);
769 wd->insert_index = index;
770 wd->id = eina_list_count(wd->seg_ctrl);
771 _refresh_segment_ids(obj);
774 if(animate && it->segment_id && wd->ani_it == NULL)
777 evas_object_resize(it->base, 1, wd->height);
778 wd->ani = ecore_animator_add( _animator_animate_add_cb, obj );
781 _state_value_set(obj);
783 evas_object_show( it->base);
785 if(index >= wd->id-1)
787 evas_object_box_append(wd->box, it->base);
791 evas_object_box_insert_at(wd->box, it->base, index);
794 evas_object_smart_calculate(wd->box);
800 * Insert a new segment item to segmentcontrol
801 * @param obj The SegmentControl object
802 * @param icon The icon object for added segment item
803 * @param label The label for added segment item
804 * @param index The position at which segment item to be inserted
805 * @param animate If 1 the action be animated with sliding effects default 0.
807 * @ingroup SegmentControl SegmentControl
811 elm_segment_control_insert_segment_at(Evas_Object *obj, Evas_Object *icon, const char *label, unsigned int index, Eina_Bool animate)
813 Elm_Segment_Item *it;
814 it = elm_segment_control_item_insert_at(obj, icon, label, index, animate);
820 * Delete a segment item to segmentcontrol
821 * @param obj The SegmentControl object
822 * @param item The Segment item to be deleted
823 * @param animate If 1 the action be animated with sliding effects default 0.
825 * @ingroup SegmentControl SegmentControl
828 elm_segment_control_item_del(Evas_Object *obj, Elm_Segment_Item *item, Eina_Bool animate)
830 Elm_Segment_Item *it;
831 Widget_Data *wd = elm_widget_data_get(obj);
836 it = _item_search(obj, item);
839 wd->del_index = it->segment_id;
840 if(animate && it->segment_id && wd->ani_it == NULL)
842 it->delete_me = EINA_TRUE;
844 wd->ani = ecore_animator_add( _animator_animate_del_cb, obj );
848 evas_object_box_remove(wd->box, it->base);
849 evas_object_smart_calculate(wd->box);
851 elm_layout_content_unset(wd->box, "elm.swallow.content");
854 _refresh_segment_ids(obj);
855 _state_value_set(obj);
858 wd->id = eina_list_count(wd->seg_ctrl);
863 * Delete a segment item to segmentcontrol
864 * @param obj The SegmentControl object
865 * @param item The Segment item to be deleted
866 * @param animate If 1 the action be animated with sliding effects default 0.
868 * @ingroup SegmentControl SegmentControl
872 elm_segment_control_delete_segment(Evas_Object *obj, Elm_Segment_Item *item, Eina_Bool animate)
874 elm_segment_control_item_del(obj, item, animate);
880 * Delete a segment item to segmentcontrol
881 * @param obj The SegmentControl object
882 * @param index The position at which segment item to be deleted
883 * @param animate If 1 the action be animated with sliding effects default 0.
885 * @ingroup SegmentControl SegmentControl
889 elm_segment_control_item_del_at(Evas_Object *obj, unsigned int index, Eina_Bool animate)
891 Elm_Segment_Item *it;
892 Widget_Data *wd = elm_widget_data_get(obj);
895 it = _item_find(obj, index);
899 wd->del_index = index;
900 if(animate && it->segment_id)
902 if(wd->ani_it == NULL)
905 it->delete_me = EINA_TRUE;
906 wd->ani = ecore_animator_add( _animator_animate_del_cb, obj );
911 evas_object_box_remove(wd->box, it->base);
912 evas_object_smart_calculate(wd->box);
914 _refresh_segment_ids(obj);
915 _state_value_set(obj);
918 wd->id = eina_list_count(wd->seg_ctrl);
923 * Delete a segment item to segmentcontrol
924 * @param obj The SegmentControl object
925 * @param index The position at which segment item to be deleted
926 * @param animate If 1 the action be animated with sliding effects default 0.
928 * @ingroup SegmentControl SegmentControl
932 elm_segment_control_delete_segment_at(Evas_Object *obj, unsigned int index, Eina_Bool animate)
934 elm_segment_control_item_del_at( obj, index, animate);
940 * Get the label of a segment item of segmentcontrol
941 * @param obj The SegmentControl object
942 * @param index The index of the segment item
943 * @return The label of the segment item
945 * @ingroup SegmentControl SegmentControl
949 elm_segment_control_item_label_get(Evas_Object *obj, unsigned int index)
951 Elm_Segment_Item *it_rel;
952 Widget_Data *wd = elm_widget_data_get(obj);
955 it_rel = _item_find(obj, index);
957 if(it_rel) return it_rel->label;
963 * Get the label of a segment item of segmentcontrol
964 * @param obj The SegmentControl object
965 * @param index The index of the segment item
966 * @return The label of the segment item
968 * @ingroup SegmentControl SegmentControl
972 elm_segment_control_get_segment_label_at(Evas_Object *obj, unsigned int index)
975 label = elm_segment_control_item_label_get( obj, index);
981 * Get the icon of a segment item of segmentcontrol
982 * @param obj The SegmentControl object
983 * @param index The index of the segment item
984 * @return The icon object or NULL if it is not found.
986 * @ingroup SegmentControl SegmentControl
990 elm_segment_control_item_icon_get(Evas_Object *obj, unsigned int index)
992 Elm_Segment_Item *seg_rel;
993 Widget_Data *wd = elm_widget_data_get(obj);
996 seg_rel = _item_find(obj, index);
998 if(seg_rel) return seg_rel->icon;
1004 * Get the icon of a segment item of segmentcontrol
1005 * @param obj The SegmentControl object
1006 * @param index The index of the segment item
1007 * @return The icon object or NULL if it is not found.
1009 * @ingroup SegmentControl SegmentControl
1013 elm_segment_control_get_segment_icon_at(Evas_Object *obj, unsigned int index)
1016 icon = elm_segment_control_item_icon_get( obj, index);
1022 * Get the currently selected segment item of segmentcontrol
1023 * @param obj The SegmentControl object
1024 * @return The selected Segment item
1026 * @ingroup SegmentControl SegmentControl
1029 EAPI Elm_Segment_Item *
1030 elm_segment_control_item_selected_get(const Evas_Object *obj)
1032 Elm_Segment_Item *it;
1034 Widget_Data *wd = elm_widget_data_get(obj);
1035 if(!wd || !wd->seg_ctrl) return NULL;
1037 EINA_LIST_FOREACH(wd->seg_ctrl, l, it)
1039 if(it->segment_id == wd->cur_seg_id)
1046 * Get the currently selected segment item of segmentcontrol
1047 * @param obj The SegmentControl object
1048 * @param value The current segment item id
1049 * @return The selected Segment item
1051 * @ingroup SegmentControl SegmentControl
1054 EAPI Elm_Segment_Item *
1055 elm_segment_control_selected_segment_get(const Evas_Object *obj, int *value)
1057 Elm_Segment_Item *it;
1058 it = elm_segment_control_item_selected_get( obj);
1059 *value = it->segment_id;
1065 * Get the count of segments of segmentcontrol
1066 * @param obj The SegmentControl object
1067 * @return The count of Segment items
1069 * @ingroup SegmentControl SegmentControl
1073 elm_segment_control_item_count_get(Evas_Object *obj)
1075 Widget_Data *wd = elm_widget_data_get(obj);
1082 * Get the count of segments of segmentcontrol
1083 * @param obj The SegmentControl object
1084 * @return The count of Segment items
1086 * @ingroup SegmentControl SegmentControl
1090 elm_segment_control_get_segment_count(Evas_Object *obj)
1093 id = elm_segment_control_item_count_get( obj);
1099 * Get the base object of segment item in segmentcontrol
1100 * @param obj The Segment item
1101 * @return obj The base object of the segment item
1103 * @ingroup SegmentControl SegmentControl
1107 elm_segment_control_item_object_get(Elm_Segment_Item *it)
1109 if (!it) return NULL;
1115 * Select/unselect a particular segment item of segmentcontrol
1116 * @param item The Segment item that is to be selected or unselected.
1117 * @param select If 1 the segment item is selected and if 0 it will be unselected.
1119 * @ingroup SegmentControl SegmentControl
1123 elm_segment_control_item_selected_set( Elm_Segment_Item *item, Eina_Bool select)
1126 Widget_Data *wd = elm_widget_data_get(item->obj);
1131 if(item->segment_id == wd->cur_seg_id) return;
1135 edje_object_signal_emit(item->base, "elm,action,focus", "elm");
1136 edje_object_signal_emit(item->base, "elm,state,text,visible", "elm");
1138 _signal_segment_on(item);
1141 else if(item->segment_id == wd->cur_seg_id)
1143 wd->selected = EINA_FALSE;
1144 wd->cur_seg_id = -1;
1145 _signal_segment_off(item);
1153 * Get a particular indexed segment item of segmentcontrol
1154 * @param obj The Segment control object.
1155 * @param index The index of the segment item.
1156 * @return The corresponding Segment item.
1158 * @ingroup SegmentControl SegmentControl
1161 EAPI Elm_Segment_Item *
1162 elm_segment_control_item_get_at(Evas_Object *obj, unsigned int index)
1164 Elm_Segment_Item *it;
1165 it = _item_find(obj, index);
1171 * Get the index of a Segment item of Segmentcontrol
1172 * @param item The Segment item.
1173 * @return The corresponding index of the Segment item.
1175 * @ingroup SegmentControl SegmentControl
1179 elm_segment_control_item_index_get(Elm_Segment_Item *item)
1181 if(!item) return -1;
1182 Widget_Data *wd = elm_widget_data_get(item->obj);
1183 if(!wd) return NULL;
1185 return item->segment_id;
1189 * Set The Label widget to a Segment item of Segmentcontrol
1190 * @param item The Segment item.
1191 * @param label The Label.
1192 * @return Evas_Object The Label widget.
1194 * @ingroup SegmentControl SegmentControl
1198 elm_segment_control_item_label_object_set(Elm_Segment_Item *item, char *label)
1200 if(!item) return NULL;
1201 Widget_Data *wd = elm_widget_data_get(item->obj);
1202 if(!wd) return NULL;
1203 if(!label) return NULL;
1205 item->label_wd = elm_label_add(item->obj);
1206 elm_label_label_set(item->label_wd, label);
1207 elm_label_text_align_set(item->label_wd, "middle");
1208 elm_label_ellipsis_set(item->label_wd, 1);
1209 elm_label_line_wrap_set(item->label_wd, 1);
1210 eina_stringshare_replace(&item->label, label);
1212 return item->label_wd;