+static void
+_item_text_set_hook(Elm_Object_Item *it, const char *part, const char *label)
+{
+ Widget_Data *wd;
+ Elm_Segment_Item *item;
+
+ if (part && strcmp(part, "default")) return;
+
+ item = (Elm_Segment_Item *)it;
+ wd = elm_widget_item_data_get(item);
+ if (!wd) return;
+
+ eina_stringshare_replace(&item->label, label);
+ if (item->label)
+ edje_object_signal_emit(VIEW(item), "elm,state,text,visible", "elm");
+ else
+ edje_object_signal_emit(VIEW(item), "elm,state,text,hidden", "elm");
+ edje_object_message_signal_process(VIEW(item));
+ //label can be NULL also.
+ edje_object_part_text_set(VIEW(item), "elm.text", item->label);
+}
+
+static const char *
+_item_text_get_hook(const Elm_Object_Item *it, const char *part)
+{
+ if (part && strcmp(part, "default")) return NULL;
+ return ((Elm_Segment_Item *)it)->label;
+}
+
+static void
+_item_content_set_hook(Elm_Object_Item *it,
+ const char *part,
+ Evas_Object *content)
+{
+ Elm_Segment_Item *item;
+
+ if (part && strcmp(part, "icon")) return;
+
+ item = (Elm_Segment_Item *)it;
+
+ //Remove the existing icon
+ if (item->icon)
+ {
+ edje_object_part_unswallow(VIEW(item), item->icon);
+ evas_object_del(item->icon);
+ item->icon = NULL;
+ }
+ item->icon = content;
+ if (item->icon)
+ {
+ elm_widget_sub_object_add(VIEW(item), item->icon);
+ edje_object_part_swallow(VIEW(item), "elm.swallow.icon", item->icon);
+ edje_object_signal_emit(VIEW(item), "elm,state,icon,visible", "elm");
+ }
+ else
+ edje_object_signal_emit(VIEW(item), "elm,state,icon,hidden", "elm");
+}
+
+static Evas_Object *
+_item_content_get_hook(const Elm_Object_Item *it, const char *part)
+{
+ if (part && strcmp(part, "icon")) return NULL;
+ return ((Elm_Segment_Item *)it)->icon;
+}
+
+static Eina_Bool
+_item_del_pre_hook(Elm_Object_Item *it)
+{
+ Widget_Data *wd;
+ Elm_Segment_Item *item = (Elm_Segment_Item *)it;
+
+ wd = elm_widget_item_data_get(item);
+ if (!wd) return EINA_FALSE;
+
+ _item_free(item);
+ _update_list(wd);
+
+ return EINA_TRUE;
+}
+