Log:
Use elm_widget_item common base.
This patch changes all Elm_*_Item to use new infrastructure of
Elm_Widget_Item. This patch is basically a find-and-replace, but even
that was a bit tricky since every code had different names for the
same things, particularly for "view" and "widget" the names ranged
from "o"/"obj" to "base"/"o", quite confusing!
It is worth noting that Genlist and variants that adopted its "item
class" style such as Gengrid and Slideshow already provide a "del()"
callback there and I'm keeping them, however we should reconsider if
it is good to remove them and use elm_widget_item_del_cb_set()
instead. The drawback is that onde would have to set it, while the
other is done automatically when you create the object with the
class. Nonetheless this patch already introduces support to use
elm_widget_item_pre_notify_del(), but it will be void in such code as
nobody ever sets it.
Some new setters and getters were introduced to normalize code... and
they would be required once people write python-bindings for them,
like index and carousel.
Author: barbieri
Date: 2010-09-09 19:05:45 -0700 (Thu, 09 Sep 2010)
New Revision: 52118
Modified:
trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_hoversel.c trunk/TMP/st/elementary/src/lib/elm_carousel.c trunk/TMP/st/elementary/src/lib/elm_gengrid.c trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_index.c trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_menu.c trunk/TMP/st/elementary/src/lib/elm_slideshow.c trunk/TMP/st/elementary/src/lib/elm_toolbar.c
Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in
===================================================================
--- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-10 02:05:45 UTC (rev 52118)
@@ -617,11 +617,11 @@
EAPI void elm_gengrid_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
EAPI void elm_gengrid_horizontal_set(Evas_Object *obj, Eina_Bool setting);
EAPI void elm_gengrid_clear(Evas_Object *obj);
- EAPI void *elm_gengrid_item_data_get(Elm_Gengrid_Item *item);
+ EAPI void *elm_gengrid_item_data_get(const Elm_Gengrid_Item *item);
EAPI void elm_gengrid_item_pos_get(const Elm_Gengrid_Item *item, unsigned int *x, unsigned int *y);
EAPI void elm_gengrid_item_selected_set(Elm_Gengrid_Item *item, Eina_Bool selected);
EAPI Eina_Bool elm_gengrid_item_selected_get(const Elm_Gengrid_Item *item);
- EAPI const Evas_Object *elm_gengrid_item_object_get(Elm_Gengrid_Item *item);
+ EAPI const Evas_Object *elm_gengrid_item_object_get(const Elm_Gengrid_Item *item);
EAPI const Eina_List *elm_gengrid_selected_items_get(const Evas_Object *obj);
EAPI const Eina_List *elm_gengrid_items_get(const Evas_Object *obj);
EAPI Elm_Gengrid_Item *elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gcc, const void *data, Evas_Smart_Cb func, const void *func_data);
@@ -1060,7 +1060,10 @@
EAPI Evas_Object *elm_carousel_add(Evas_Object *parent);
EAPI Elm_Carousel_Item *elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void *data);
EAPI void elm_carousel_item_del(Elm_Carousel_Item *item);
+
EAPI void elm_carousel_item_select(Elm_Carousel_Item *item);
+ EAPI void elm_carousel_item_del_cb_set(Elm_Carousel_Item *it, Evas_Smart_Cb func);
+ EAPI void *elm_carousel_item_data_get(const Elm_Carousel_Item *it);
/* smart callbacks called:
* "clicked" - when the user clicks on a carousel item and becomes selected
*/
@@ -1341,6 +1344,7 @@
EAPI void elm_index_item_go(Evas_Object *obj, int level);
EAPI void *elm_index_item_data_get(const Elm_Index_Item *item);
EAPI void elm_index_item_data_set(Elm_Index_Item *it, const void *data);
+ EAPI void elm_index_item_del_cb_set(Elm_Index_Item *it, Evas_Smart_Cb func);
EAPI const char *elm_index_item_letter_get(const Elm_Index_Item *item);
/* smart callbacks called:
* "changed" - when the selected index item changes
Modified: trunk/TMP/st/elementary/src/lib/elc_hoversel.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -31,14 +31,12 @@
struct _Elm_Hoversel_Item
{
- Evas_Object *obj;
+ Elm_Widget_Item base;
const char *label;
const char *icon_file;
const char *icon_group;
Elm_Icon_Type icon_type;
Evas_Smart_Cb func;
- Evas_Smart_Cb del_cb;
- void *data;
};
static const char *widtype = NULL;
@@ -59,11 +57,11 @@
elm_hoversel_hover_parent_set(obj, NULL);
EINA_LIST_FREE(wd->items, it)
{
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
+ elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->label);
eina_stringshare_del(it->icon_file);
eina_stringshare_del(it->icon_group);
- free(it);
+ elm_widget_item_del(it);
}
}
@@ -128,10 +126,10 @@
_item_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Elm_Hoversel_Item *it = data;
- Evas_Object *obj2 = it->obj;
+ Evas_Object *obj2 = it->base.widget;
elm_hoversel_hover_end(obj2);
- if (it->func) it->func(it->data, obj2, it);
+ if (it->func) it->func((void *)it->base.data, obj2, it);
evas_object_smart_callback_call(obj2, "selected", it);
}
@@ -520,15 +518,14 @@
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
- Elm_Hoversel_Item *it = calloc(1, sizeof(Elm_Hoversel_Item));
+ Elm_Hoversel_Item *it = elm_widget_item_new(obj, Elm_Hoversel_Item);
if (!it) return NULL;
wd->items = eina_list_append(wd->items, it);
- it->obj = obj;
it->label = eina_stringshare_add(label);
it->icon_file = eina_stringshare_add(icon_file);
it->icon_type = icon_type;
it->func = func;
- it->data = (void *)data;
+ it->base.data = data;
return it;
}
@@ -547,15 +544,15 @@
elm_hoversel_item_del(Elm_Hoversel_Item *it)
{
if (!it) return;
- Widget_Data *wd = elm_widget_data_get(it->obj);
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
- elm_hoversel_hover_end(it->obj);
+ elm_hoversel_hover_end(it->base.widget);
wd->items = eina_list_remove(wd->items, it);
+ elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->label);
eina_stringshare_del(it->icon_file);
eina_stringshare_del(it->icon_group);
- free(it);
+ elm_widget_item_del(it);
}
/**
@@ -574,8 +571,7 @@
EAPI void
elm_hoversel_item_del_cb_set(Elm_Hoversel_Item *it, Evas_Smart_Cb func)
{
- if (!it) return;
- it->del_cb = func;
+ elm_widget_item_del_cb_set(it, func);
}
/**
@@ -590,8 +586,7 @@
EAPI void *
elm_hoversel_item_data_get(Elm_Hoversel_Item *it)
{
- if (!it) return NULL;
- return it->data;
+ return elm_widget_item_data_get(it);
}
/**
Modified: trunk/TMP/st/elementary/src/lib/elm_carousel.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_carousel.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_carousel.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -14,10 +14,10 @@
struct _Elm_Carousel_Item
{
- Evas_Object *obj, *base, *icon;
+ Elm_Widget_Item base;
+ Evas_Object *icon;
const char *label;
Evas_Smart_Cb func;
- const void *data;
Eina_Bool selected : 1;
};
@@ -29,11 +29,11 @@
static void
_item_show(Elm_Carousel_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Coord x, y, w, h, bx, by;
if (!wd) return;
evas_object_geometry_get(wd->bx, &bx, &by, NULL, NULL);
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
elm_smart_scroller_child_region_show(wd->scr, x - bx, y - by, w, h);
}
@@ -41,7 +41,7 @@
_item_select(Elm_Carousel_Item *it)
{
Elm_Carousel_Item *it2;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Object *obj2;
const Eina_List *l;
if (!wd) return;
@@ -51,15 +51,15 @@
if (it2->selected)
{
it2->selected = EINA_FALSE;
- edje_object_signal_emit(it2->base, "elm,state,unselected", "elm");
+ edje_object_signal_emit(it2->base.view, "elm,state,unselected", "elm");
break;
}
}
it->selected = EINA_TRUE;
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
_item_show(it);
- obj2 = it->obj;
- if (it->func) it->func((void *)(it->data), it->obj, it);
+ obj2 = it->base.widget;
+ if (it->func) it->func((void *)(it->base.data), it->base.widget, it);
evas_object_smart_callback_call(obj2, "clicked", it);
}
@@ -83,20 +83,20 @@
Evas_Coord mw, mh;
if (it->selected)
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
- _elm_theme_object_set(obj, it->base, "carousel", "item", elm_widget_style_get(obj));
- edje_object_scale_set(it->base, elm_widget_scale_get(obj) * _elm_config->scale);
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
+ _elm_theme_object_set(obj, it->base.view, "carousel", "item", elm_widget_style_get(obj));
+ edje_object_scale_set(it->base.view, elm_widget_scale_get(obj) * _elm_config->scale);
if (it->icon)
{
edje_extern_object_min_size_set(it->icon,
(double)wd->icon_size * _elm_config->scale,
(double)wd->icon_size * _elm_config->scale);
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
+ edje_object_part_swallow(it->base.view, "elm.swallow.icon", it->icon);
}
- edje_object_part_text_set(it->base, "elm.text", it->label);
- edje_object_size_min_calc(it->base, &mw, &mh);
- evas_object_size_hint_min_set(it->base, mw, mh);
- evas_object_size_hint_max_set(it->base, 9999, mh);
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
+ edje_object_size_min_calc(it->base.view, &mw, &mh);
+ evas_object_size_hint_min_set(it->base.view, mw, mh);
+ evas_object_size_hint_max_set(it->base.view, 9999, mh);
}
_sizing_eval(obj);
}
@@ -200,37 +200,36 @@
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
Evas_Coord mw, mh;
- Elm_Carousel_Item *it = calloc(1, sizeof(Elm_Carousel_Item));
+ Elm_Carousel_Item *it = elm_widget_item_new(obj, Elm_Carousel_Item);
if (!it) return NULL;
wd->items = eina_list_append(wd->items, it);
- it->obj = obj;
it->label = eina_stringshare_add(label);
it->icon = icon;
it->func = func;
- it->data = data;
- it->base = edje_object_add(evas_object_evas_get(obj));
- _elm_theme_object_set(obj, it->base, "carousel", "item", elm_widget_style_get(obj));
- edje_object_signal_callback_add(it->base, "elm,action,click", "elm",
+ it->base.data = data;
+ it->base.view = edje_object_add(evas_object_evas_get(obj));
+ _elm_theme_object_set(obj, it->base.view, "carousel", "item", elm_widget_style_get(obj));
+ edje_object_signal_callback_add(it->base.view, "elm,action,click", "elm",
_select, it);
- elm_widget_sub_object_add(obj, it->base);
+ elm_widget_sub_object_add(obj, it->base.view);
if (it->icon)
{
edje_extern_object_min_size_set(it->icon,
(double)wd->icon_size * _elm_config->scale,
(double)wd->icon_size * _elm_config->scale);
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
+ edje_object_part_swallow(it->base.view, "elm.swallow.icon", it->icon);
evas_object_show(it->icon);
elm_widget_sub_object_add(obj, it->icon);
}
- edje_object_part_text_set(it->base, "elm.text", it->label);
- edje_object_size_min_calc(it->base, &mw, &mh);
- evas_object_size_hint_weight_set(it->base, 0.0, 0.0);
- evas_object_size_hint_align_set(it->base, -1.0, -1.0);
- evas_object_size_hint_min_set(it->base, mw, mh);
- evas_object_size_hint_max_set(it->base, 9999, mh);
- evas_object_box_append(wd->bx, it->base);
- evas_object_show(it->base);
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
+ edje_object_size_min_calc(it->base.view, &mw, &mh);
+ evas_object_size_hint_weight_set(it->base.view, 0.0, 0.0);
+ evas_object_size_hint_align_set(it->base.view, -1.0, -1.0);
+ evas_object_size_hint_min_set(it->base.view, mw, mh);
+ evas_object_size_hint_max_set(it->base.view, 9999, mh);
+ evas_object_box_append(wd->bx, it->base.view);
+ evas_object_show(it->base.view);
_sizing_eval(obj);
return it;
}
@@ -238,18 +237,46 @@
EAPI void
elm_carousel_item_del(Elm_Carousel_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
- Evas_Object *obj2 = it->obj;
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj2 = it->base.widget;
if (!wd) return;
wd->items = eina_list_remove(wd->items, it);
eina_stringshare_del(it->label);
if (it->icon) evas_object_del(it->icon);
- evas_object_del(it->base);
+ evas_object_del(it->base.view);
free(it);
_theme_hook(obj2);
}
+/**
+ * Set the function called when a carousel item is freed.
+ *
+ * @param it The item to set the callback on
+ * @param func The function called
+ *
+ * @ingroup Carousel
+ */
EAPI void
+elm_carousel_item_del_cb_set(Elm_Carousel_Item *it, Evas_Smart_Cb func)
+{
+ elm_widget_item_del_cb_set(it, func);
+}
+
+/**
+ * Returns the data associated with the item.
+ *
+ * @param it The carousel item
+ * @return The data associated with @p it
+ *
+ * @ingroup Carousel
+ */
+EAPI void *
+elm_carousel_item_data_get(const Elm_Carousel_Item *it)
+{
+ return elm_widget_item_data_get(it);
+}
+
+EAPI void
elm_carousel_item_select(Elm_Carousel_Item *item)
{
_item_select(item);
Modified: trunk/TMP/st/elementary/src/lib/elm_gengrid.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_gengrid.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_gengrid.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -142,12 +142,12 @@
struct _Elm_Gengrid_Item
{
- Evas_Object *base, *spacer;
+ Elm_Widget_Item base;
+ Evas_Object *spacer;
const Elm_Gengrid_Item_Class *gic;
Ecore_Timer *long_timer;
Widget_Data *wd;
Eina_List *labels, *icons, *states, *icon_objs;
- const void *data;
struct
{
Evas_Smart_Cb func;
@@ -442,7 +442,7 @@
_item_hilight(Elm_Gengrid_Item *item)
{
if ((item->wd->no_select) || (item->delete_me) || (item->hilighted)) return;
- edje_object_signal_emit(item->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,selected", "elm");
item->hilighted = EINA_TRUE;
}
@@ -453,35 +453,35 @@
char style[1024];
if ((item->realized) || (item->delete_me)) return;
- item->base = edje_object_add(evas_object_evas_get(item->wd->self));
- edje_object_scale_set(item->base, elm_widget_scale_get(item->wd->self) *
+ item->base.view = edje_object_add(evas_object_evas_get(item->wd->self));
+ edje_object_scale_set(item->base.view, elm_widget_scale_get(item->wd->self) *
_elm_config->scale);
- evas_object_smart_member_add(item->base, item->wd->pan_smart);
- elm_widget_sub_object_add(item->wd->self, item->base);
+ evas_object_smart_member_add(item->base.view, item->wd->pan_smart);
+ elm_widget_sub_object_add(item->wd->self, item->base.view);
snprintf(style, sizeof(style), "item/%s",
item->gic->item_style ? item->gic->item_style : "default");
- _elm_theme_object_set(item->wd->self, item->base, "gengrid", style,
+ _elm_theme_object_set(item->wd->self, item->base.view, "gengrid", style,
elm_widget_style_get(item->wd->self));
item->spacer = evas_object_rectangle_add(evas_object_evas_get(item->wd->self));
evas_object_color_set(item->spacer, 0, 0, 0, 0);
elm_widget_sub_object_add(item->wd->self, item->spacer);
evas_object_size_hint_min_set(item->spacer, 2 * _elm_config->scale, 1);
- edje_object_part_swallow(item->base, "elm.swallow.pad", item->spacer);
+ edje_object_part_swallow(item->base.view, "elm.swallow.pad", item->spacer);
if (item->gic->func.label_get)
{
const Eina_List *l;
const char *key;
- item->labels = _elm_stringlist_get(edje_object_data_get(item->base,
+ item->labels = _elm_stringlist_get(edje_object_data_get(item->base.view,
"labels"));
EINA_LIST_FOREACH(item->labels, l, key)
{
- char *s = item->gic->func.label_get(item->data, item->wd->self,
+ char *s = item->gic->func.label_get(item->base.data, item->wd->self,
l->data);
if (s)
{
- edje_object_part_text_set(item->base, l->data, s);
+ edje_object_part_text_set(item->base.view, l->data, s);
free(s);
}
}
@@ -492,17 +492,17 @@
const Eina_List *l;
const char *key;
- item->icons = _elm_stringlist_get(edje_object_data_get(item->base,
+ item->icons = _elm_stringlist_get(edje_object_data_get(item->base.view,
"icons"));
EINA_LIST_FOREACH(item->icons, l, key)
{
- Evas_Object *ic = item->gic->func.icon_get(item->data,
+ Evas_Object *ic = item->gic->func.icon_get(item->base.data,
item->wd->self,
l->data);
if (ic)
{
item->icon_objs = eina_list_append(item->icon_objs, ic);
- edje_object_part_swallow(item->base, key, ic);
+ edje_object_part_swallow(item->base.view, key, ic);
evas_object_show(ic);
elm_widget_sub_object_add(item->wd->self, ic);
}
@@ -514,42 +514,42 @@
const Eina_List *l;
const char *key;
- item->states = _elm_stringlist_get(edje_object_data_get(item->base,
+ item->states = _elm_stringlist_get(edje_object_data_get(item->base.view,
"states"));
EINA_LIST_FOREACH(item->states, l, key)
{
- Eina_Bool on = item->gic->func.state_get(item->data,
+ Eina_Bool on = item->gic->func.state_get(item->base.data,
item->wd->self, l->data);
if (on)
{
snprintf(buf, sizeof(buf), "elm,state,%s,active", key);
- edje_object_signal_emit(item->base, buf, "elm");
+ edje_object_signal_emit(item->base.view, buf, "elm");
}
}
}
if ((!item->wd->item_width) && (!item->wd->item_height))
{
- edje_object_size_min_restricted_calc(item->base,
+ edje_object_size_min_restricted_calc(item->base.view,
&item->wd->item_width, &item->wd->item_height,
item->wd->item_width, item->wd->item_height);
elm_coords_finger_size_adjust(1, &item->wd->item_width,
1, &item->wd->item_height);
}
- evas_object_event_callback_add(item->base, EVAS_CALLBACK_MOUSE_DOWN,
+ evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down, item);
- evas_object_event_callback_add(item->base, EVAS_CALLBACK_MOUSE_UP,
+ evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_MOUSE_UP,
_mouse_up, item);
- evas_object_event_callback_add(item->base, EVAS_CALLBACK_MOUSE_MOVE,
+ evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move, item);
if (item->selected)
- edje_object_signal_emit(item->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,selected", "elm");
if (item->disabled)
- edje_object_signal_emit(item->base, "elm,state,disabled", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,disabled", "elm");
- evas_object_show(item->base);
+ evas_object_show(item->base.view);
item->realized = EINA_TRUE;
item->want_unrealize = EINA_FALSE;
}
@@ -565,8 +565,8 @@
ecore_timer_del(item->long_timer);
item->long_timer = NULL;
}
- evas_object_del(item->base);
- item->base = NULL;
+ evas_object_del(item->base.view);
+ item->base.view = NULL;
evas_object_del(item->spacer);
item->spacer = NULL;
_elm_stringlist_free(item->labels);
@@ -644,8 +644,8 @@
_item_realize(item);
if (!was_realized)
evas_object_smart_callback_call(item->wd->self, "realized", item);
- evas_object_move(item->base, x, y);
- evas_object_resize(item->base, item->wd->item_width,
+ evas_object_move(item->base.view, x, y);
+ evas_object_resize(item->base.view, item->wd->item_width,
item->wd->item_height);
}
else
@@ -657,11 +657,11 @@
{
Elm_Gengrid_Item *item;
- item = calloc(1, sizeof(*item));
+ item = elm_widget_item_new(wd->self, Elm_Gengrid_Item);
if (!item) return NULL;
item->wd = wd;
item->gic = gic;
- item->data = data;
+ item->base.data = data;
item->func.func = func;
item->func.data = func_data;
return item;
@@ -670,15 +670,16 @@
static void
_item_del(Elm_Gengrid_Item *item)
{
+ elm_widget_item_pre_notify_del(item);
if (item->selected)
item->wd->selected = eina_list_remove(item->wd->selected, item);
if (item->realized) _item_unrealize(item);
if ((!item->delete_me) && (item->gic->func.del))
- item->gic->func.del(item->data, item->wd->self);
+ item->gic->func.del(item->base.data, item->wd->self);
item->delete_me = EINA_TRUE;
item->wd->items = eina_list_remove(item->wd->items, item);
if (item->long_timer) ecore_timer_del(item->long_timer);
- free(item);
+ elm_widget_item_del(item);
}
static void
@@ -707,7 +708,7 @@
_item_unselect(Elm_Gengrid_Item *item)
{
if ((item->delete_me) || (!item->hilighted)) return;
- edje_object_signal_emit(item->base, "elm,state,unselected", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,unselected", "elm");
item->hilighted = EINA_FALSE;
if (item->selected)
{
@@ -1150,10 +1151,11 @@
if ((item->relcount > 0) || (item->walking > 0))
{
item->delete_me = EINA_TRUE;
+ elm_widget_item_pre_notify_del(item);
if (item->selected)
item->wd->selected = eina_list_remove(item->wd->selected, item);
if (item->gic->func.del)
- item->gic->func.del(item->data, item->wd->self);
+ item->gic->func.del(item->base.data, item->wd->self);
return;
}
@@ -1214,11 +1216,12 @@
EINA_LIST_FOREACH_SAFE(wd->items, l, l_next, item)
{
+ wd->items = eina_list_remove_list(wd->items, l);
+ elm_widget_item_pre_notify_del(item);
if (item->realized) _item_unrealize(item);
- if (item->gic->func.del) item->gic->func.del(item->data, wd->self);
+ if (item->gic->func.del) item->gic->func.del(item->base.data, wd->self);
if (item->long_timer) ecore_timer_del(item->long_timer);
- free(item);
- wd->items = eina_list_remove_list(wd->items, l);
+ elm_widget_item_del(item);
}
if (wd->selected)
@@ -1253,10 +1256,10 @@
* @ingroup Gengrid
*/
EAPI const Evas_Object *
-elm_gengrid_item_object_get(Elm_Gengrid_Item *item)
+elm_gengrid_item_object_get(const Elm_Gengrid_Item *item)
{
if (!item) return NULL;
- return item->base;
+ return item->base.view;
}
/**
@@ -1274,10 +1277,9 @@
* @ingroup Gengrid
*/
EAPI void *
-elm_gengrid_item_data_get(Elm_Gengrid_Item *item)
+elm_gengrid_item_data_get(const Elm_Gengrid_Item *item)
{
- if (!item) return NULL;
- return (void *)item->data;
+ return elm_widget_item_data_get(item);
}
/**
@@ -1455,9 +1457,9 @@
if (item->realized)
{
if (item->disabled)
- edje_object_signal_emit(item->base, "elm,state,disabled", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,disabled", "elm");
else
- edje_object_signal_emit(item->base, "elm,state,enabled", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,enabled", "elm");
}
}
Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -287,13 +287,13 @@
struct _Elm_Genlist_Item
{
+ Elm_Widget_Item base;
EINA_INLIST;
Widget_Data *wd;
Item_Block *block;
Eina_List *items;
Evas_Coord x, y, w, h, minw, minh;
const Elm_Genlist_Item_Class *itc;
- const void *data;
Elm_Genlist_Item *parent;
Elm_Genlist_Item_Flags flags;
struct
@@ -302,7 +302,7 @@
const void *data;
} func;
- Evas_Object *base, *spacer;
+ Evas_Object *spacer;
Eina_List *labels, *icons, *states, *icon_objs;
Ecore_Timer *long_timer;
Evas_Coord dx, dy;
@@ -436,10 +436,10 @@
{
const char *selectraise;
if ((it->wd->no_select) || (it->delete_me) || (it->hilighted)) return;
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
- evas_object_raise(it->base);
+ evas_object_raise(it->base.view);
it->hilighted = EINA_TRUE;
}
@@ -510,6 +510,7 @@
static void
_item_del(Elm_Genlist_Item *it)
{
+ elm_widget_item_pre_notify_del(it);
elm_genlist_item_subitems_clear(it);
it->wd->walking -= it->walking;
if (it->wd->show_item == it) it->wd->show_item = NULL;
@@ -517,7 +518,7 @@
if (it->realized) _item_unrealize(it);
if (it->block) _item_block_del(it);
if ((!it->delete_me) && (it->itc->func.del))
- it->itc->func.del(it->data, it->wd->obj);
+ it->itc->func.del(it->base.data, it->base.widget);
it->delete_me = EINA_TRUE;
if (it->queued)
it->wd->queue = eina_list_remove(it->wd->queue, it);
@@ -525,7 +526,7 @@
if (it->parent)
it->parent->items = eina_list_remove(it->parent->items, it);
if (it->long_timer) ecore_timer_del(it->long_timer);
- free(it);
+ elm_widget_item_del(it);
}
static void
@@ -542,13 +543,13 @@
call:
it->walking++;
it->wd->walking++;
- if (it->func.func) it->func.func((void *)it->func.data, it->wd->obj, it);
+ if (it->func.func) it->func.func((void *)it->func.data, it->base.widget, it);
if (!it->delete_me)
- evas_object_smart_callback_call(it->wd->obj, "selected", it);
+ evas_object_smart_callback_call(it->base.widget, "selected", it);
it->walking--;
it->wd->walking--;
if ((it->wd->clear_me) && (it->wd->walking == 0))
- elm_genlist_clear(it->wd->obj);
+ elm_genlist_clear(it->base.widget);
else
{
if ((it->walking == 0) && (it->delete_me))
@@ -564,20 +565,20 @@
const char *stacking, *selectraise;
if ((it->delete_me) || (!it->hilighted)) return;
- edje_object_signal_emit(it->base, "elm,state,unselected", "elm");
- stacking = edje_object_data_get(it->base, "stacking");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,unselected", "elm");
+ stacking = edje_object_data_get(it->base.view, "stacking");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
{
if ((stacking) && (!strcmp(stacking, "below")))
- evas_object_lower(it->base);
+ evas_object_lower(it->base.view);
}
it->hilighted = EINA_FALSE;
if (it->selected)
{
it->selected = EINA_FALSE;
it->wd->selected = eina_list_remove(it->wd->selected, it);
- evas_object_smart_callback_call(it->wd->obj, "unselected", it);
+ evas_object_smart_callback_call(it->base.widget, "unselected", it);
}
}
@@ -604,7 +605,7 @@
ecore_timer_del(it->long_timer);
it->long_timer = NULL;
}
- evas_object_smart_callback_call(it->wd->obj, "drag", it);
+ evas_object_smart_callback_call(it->base.widget, "drag", it);
return;
}
if ((!it->down)/* || (it->wd->on_hold)*/ || (it->wd->longpressed))
@@ -642,29 +643,29 @@
if (dy < 0)
{
if (ady > adx)
- evas_object_smart_callback_call(it->wd->obj, "drag,start,up", it);
+ evas_object_smart_callback_call(it->base.widget, "drag,start,up", it);
else
{
if (dx < 0)
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"drag,start,left", it);
else
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"drag,start,right", it);
}
}
else
{
if (ady > adx)
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"drag,start,down", it);
else
{
if (dx < 0)
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"drag,start,left", it);
else
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"drag,start,right", it);
}
}
@@ -679,7 +680,7 @@
it->long_timer = NULL;
if ((it->disabled) || (it->dragging)) return ECORE_CALLBACK_CANCEL;
it->wd->longpressed = EINA_TRUE;
- evas_object_smart_callback_call(it->wd->obj, "longpressed", it);
+ evas_object_smart_callback_call(it->base.widget, "longpressed", it);
return ECORE_CALLBACK_CANCEL;
}
@@ -703,7 +704,7 @@
it->wd->wasselected = it->selected;
_item_hilight(it);
if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
- evas_object_smart_callback_call(it->wd->obj, "clicked", it);
+ evas_object_smart_callback_call(it->base.widget, "clicked", it);
if (it->long_timer) ecore_timer_del(it->long_timer);
if (it->realized)
it->long_timer = ecore_timer_add(it->wd->longpress_timeout, _long_press, it);
@@ -730,7 +731,7 @@
if (it->dragging)
{
it->dragging = 0;
- evas_object_smart_callback_call(it->wd->obj, "drag,stop", it);
+ evas_object_smart_callback_call(it->base.widget, "drag,stop", it);
dragged = 1;
}
if (it->wd->on_hold)
@@ -797,9 +798,9 @@
Elm_Genlist_Item *it = data;
if (it->expanded)
- evas_object_smart_callback_call(it->wd->obj, "contract,request", it);
+ evas_object_smart_callback_call(it->base.widget, "contract,request", it);
else
- evas_object_smart_callback_call(it->wd->obj, "expand,request", it);
+ evas_object_smart_callback_call(it->base.widget, "expand,request", it);
}
static void
@@ -808,7 +809,7 @@
Elm_Genlist_Item *it = data;
if (!it->expanded)
- evas_object_smart_callback_call(it->wd->obj, "expand,request", it);
+ evas_object_smart_callback_call(it->base.widget, "expand,request", it);
}
static void
@@ -817,7 +818,7 @@
Elm_Genlist_Item *it = data;
if (it->expanded)
- evas_object_smart_callback_call(it->wd->obj, "contract,request", it);
+ evas_object_smart_callback_call(it->base.widget, "contract,request", it);
}
static void
@@ -830,11 +831,11 @@
int depth, tsize = 20;
if ((it->realized) || (it->delete_me)) return;
- it->base = edje_object_add(evas_object_evas_get(it->wd->obj));
- edje_object_scale_set(it->base, elm_widget_scale_get(it->wd->obj) *
+ it->base.view = edje_object_add(evas_object_evas_get(it->base.widget));
+ edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.widget) *
_elm_config->scale);
- evas_object_smart_member_add(it->base, it->wd->pan_smart);
- elm_widget_sub_object_add(it->wd->obj, it->base);
+ evas_object_smart_member_add(it->base.view, it->wd->pan_smart);
+ elm_widget_sub_object_add(it->base.widget, it->base.view);
if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) strncpy(buf, "tree", sizeof(buf));
else strncpy(buf, "item", sizeof(buf));
@@ -844,42 +845,42 @@
strncat(buf, "/", sizeof(buf) - strlen(buf));
strncat(buf, it->itc->item_style, sizeof(buf) - strlen(buf));
- _elm_theme_object_set(it->wd->obj, it->base, "genlist", buf, elm_widget_style_get(it->wd->obj));
- it->spacer = evas_object_rectangle_add(evas_object_evas_get(it->wd->obj));
+ _elm_theme_object_set(it->base.widget, it->base.view, "genlist", buf, elm_widget_style_get(it->base.widget));
+ it->spacer = evas_object_rectangle_add(evas_object_evas_get(it->base.widget));
evas_object_color_set(it->spacer, 0, 0, 0, 0);
- elm_widget_sub_object_add(it->wd->obj, it->spacer);
+ elm_widget_sub_object_add(it->base.widget, it->spacer);
for (it2 = it, depth = 0; it2->parent; it2 = it2->parent) depth += 1;
- treesize = edje_object_data_get(it->base, "treesize");
+ treesize = edje_object_data_get(it->base.view, "treesize");
if (treesize) tsize = atoi(treesize);
evas_object_size_hint_min_set(it->spacer,
(depth * tsize) * _elm_config->scale, 1);
- edje_object_part_swallow(it->base, "elm.swallow.pad", it->spacer);
+ edje_object_part_swallow(it->base.view, "elm.swallow.pad", it->spacer);
if (!calc)
{
- edje_object_signal_callback_add(it->base, "elm,action,expand,toggle",
+ edje_object_signal_callback_add(it->base.view, "elm,action,expand,toggle",
"elm", _signal_expand_toggle, it);
- edje_object_signal_callback_add(it->base, "elm,action,expand", "elm",
+ edje_object_signal_callback_add(it->base.view, "elm,action,expand", "elm",
_signal_expand, it);
- edje_object_signal_callback_add(it->base, "elm,action,contract",
+ edje_object_signal_callback_add(it->base.view, "elm,action,contract",
"elm", _signal_contract, it);
- stacking = edje_object_data_get(it->base, "stacking");
+ stacking = edje_object_data_get(it->base.view, "stacking");
if (stacking)
{
- if (!strcmp(stacking, "below")) evas_object_lower(it->base);
- else if (!strcmp(stacking, "above")) evas_object_raise(it->base);
+ if (!strcmp(stacking, "below")) evas_object_lower(it->base.view);
+ else if (!strcmp(stacking, "above")) evas_object_raise(it->base.view);
}
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_UP,
_mouse_up, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_MOVE,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move, it);
if (it->selected)
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
if (it->disabled)
- edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm");
if (it->expanded)
- edje_object_signal_emit(it->base, "elm,state,expanded", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,expanded", "elm");
}
if (calc && it->wd->homogeneous && it->wd->item_width)
@@ -899,14 +900,14 @@
const Eina_List *l;
const char *key;
- it->labels = _elm_stringlist_get(edje_object_data_get(it->base, "labels"));
+ it->labels = _elm_stringlist_get(edje_object_data_get(it->base.view, "labels"));
EINA_LIST_FOREACH(it->labels, l, key)
{
- char *s = it->itc->func.label_get(it->data, it->wd->obj, l->data);
+ char *s = it->itc->func.label_get(it->base.data, it->base.widget, l->data);
if (s)
{
- edje_object_part_text_set(it->base, l->data, s);
+ edje_object_part_text_set(it->base.view, l->data, s);
free(s);
}
}
@@ -916,17 +917,17 @@
const Eina_List *l;
const char *key;
- it->icons = _elm_stringlist_get(edje_object_data_get(it->base, "icons"));
+ it->icons = _elm_stringlist_get(edje_object_data_get(it->base.view, "icons"));
EINA_LIST_FOREACH(it->icons, l, key)
{
- Evas_Object *ic = it->itc->func.icon_get(it->data, it->wd->obj, l->data);
+ Evas_Object *ic = it->itc->func.icon_get(it->base.data, it->base.widget, l->data);
if (ic)
{
it->icon_objs = eina_list_append(it->icon_objs, ic);
- edje_object_part_swallow(it->base, key, ic);
+ edje_object_part_swallow(it->base.view, key, ic);
evas_object_show(ic);
- elm_widget_sub_object_add(it->wd->obj, ic);
+ elm_widget_sub_object_add(it->base.widget, ic);
}
}
}
@@ -935,15 +936,15 @@
const Eina_List *l;
const char *key;
- it->states = _elm_stringlist_get(edje_object_data_get(it->base, "states"));
+ it->states = _elm_stringlist_get(edje_object_data_get(it->base.view, "states"));
EINA_LIST_FOREACH(it->states, l, key)
{
- Eina_Bool on = it->itc->func.state_get(it->data, it->wd->obj, l->data);
+ Eina_Bool on = it->itc->func.state_get(it->base.data, it->base.widget, l->data);
if (on)
{
snprintf(buf, sizeof(buf), "elm,state,%s,active", key);
- edje_object_signal_emit(it->base, buf, "elm");
+ edje_object_signal_emit(it->base.view, buf, "elm");
}
}
}
@@ -953,7 +954,7 @@
if (!it->display_only)
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
+ edje_object_size_min_restricted_calc(it->base.view, &mw, &mh, mw, mh);
if (!it->display_only)
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
it->w = it->minw = mw;
@@ -966,7 +967,7 @@
it->wd->item_height = mh;
}
}
- if (!calc) evas_object_show(it->base);
+ if (!calc) evas_object_show(it->base.view);
}
it->realized = EINA_TRUE;
it->want_unrealize = EINA_FALSE;
@@ -983,8 +984,8 @@
ecore_timer_del(it->long_timer);
it->long_timer = NULL;
}
- evas_object_del(it->base);
- it->base = NULL;
+ evas_object_del(it->base.view);
+ it->base.view = NULL;
evas_object_del(it->spacer);
it->spacer = NULL;
_elm_stringlist_free(it->labels);
@@ -1038,7 +1039,7 @@
_item_realize(it, in, 0);
if (!was_realized)
- evas_object_smart_callback_call(it->wd->obj, "realized", it);
+ evas_object_smart_callback_call(it->base.widget, "realized", it);
}
minh += it->minh;
if (minw < it->minw) minw = it->minw;
@@ -1071,7 +1072,7 @@
_item_realize(it, in, 0);
if (!was_realized)
- evas_object_smart_callback_call(it->wd->obj, "realized", it);
+ evas_object_smart_callback_call(it->base.widget, "realized", it);
}
in++;
}
@@ -1134,7 +1135,7 @@
_item_realize(it, in, 0);
if (!was_realized)
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"realized", it);
}
}
@@ -1142,11 +1143,11 @@
{
if (vis)
{
- evas_object_resize(it->base, it->w, it->h);
- evas_object_move(it->base,
+ evas_object_resize(it->base.view, it->w, it->h);
+ evas_object_move(it->base.view,
ox + itb->x + it->x - itb->wd->pan_x,
oy + itb->y + it->y - itb->wd->pan_y);
- evas_object_show(it->base);
+ evas_object_show(it->base.view);
}
else
{
@@ -1279,7 +1280,7 @@
{
_item_unrealize(it);
_item_realize(it, num, 0);
- evas_object_smart_callback_call(it->wd->obj,
+ evas_object_smart_callback_call(it->base.widget,
"realized", it);
}
else
@@ -1556,11 +1557,11 @@
{
Elm_Genlist_Item *it;
- it = calloc(1, sizeof(Elm_Genlist_Item));
+ it = elm_widget_item_new(wd->obj, Elm_Genlist_Item);
if (!it) return NULL;
it->wd = wd;
it->itc = itc;
- it->data = data;
+ it->base.data = data;
it->parent = parent;
it->flags = flags;
it->func.func = func;
@@ -1988,10 +1989,11 @@
Elm_Genlist_Item *it = ELM_GENLIST_ITEM_FROM_INLIST(wd->items);
wd->items = eina_inlist_remove(wd->items, wd->items);
+ elm_widget_item_pre_notify_del(it);
if (it->realized) _item_unrealize(it);
- if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj);
+ if (it->itc->func.del) it->itc->func.del(it->base.data, it->base.widget);
if (it->long_timer) ecore_timer_del(it->long_timer);
- free(it);
+ elm_widget_item_del(it);
}
while (wd->blocks)
{
@@ -2330,7 +2332,7 @@
elm_genlist_item_genlist_get(const Elm_Genlist_Item *it)
{
if (!it) return NULL;
- return it->wd->obj;
+ return it->base.widget;
}
/**
@@ -2387,7 +2389,7 @@
EAPI void
elm_genlist_item_selected_set(Elm_Genlist_Item *it, Eina_Bool selected)
{
- Widget_Data *wd = elm_widget_data_get(it->wd->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
if (!it) return;
if (it->delete_me) return;
@@ -2445,14 +2447,14 @@
if (it->expanded)
{
if (it->realized)
- edje_object_signal_emit(it->base, "elm,state,expanded", "elm");
- evas_object_smart_callback_call(it->wd->obj, "expanded", it);
+ edje_object_signal_emit(it->base.view, "elm,state,expanded", "elm");
+ evas_object_smart_callback_call(it->base.widget, "expanded", it);
}
else
{
if (it->realized)
- edje_object_signal_emit(it->base, "elm,state,contracted", "elm");
- evas_object_smart_callback_call(it->wd->obj, "contracted", it);
+ edje_object_signal_emit(it->base.view, "elm,state,contracted", "elm");
+ evas_object_smart_callback_call(it->base.widget, "contracted", it);
}
}
@@ -2495,9 +2497,9 @@
if (it->realized)
{
if (it->disabled)
- edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm");
else
- edje_object_signal_emit(it->base, "elm,state,enabled", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,enabled", "elm");
}
}
@@ -2794,6 +2796,7 @@
if (!it) return;
if ((it->relcount > 0) || (it->walking > 0))
{
+ elm_widget_item_pre_notify_del(it);
elm_genlist_item_subitems_clear(it);
it->delete_me = EINA_TRUE;
if (it->wd->show_item == it) it->wd->show_item = NULL;
@@ -2805,7 +2808,7 @@
if (it->wd->calc_job) ecore_job_del(it->wd->calc_job);
it->wd->calc_job = ecore_job_add(_calc_job, it->wd);
}
- if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj);
+ if (it->itc->func.del) it->itc->func.del(it->base.data, it->base.widget);
return;
}
_item_del(it);
@@ -2827,8 +2830,7 @@
EAPI void
elm_genlist_item_data_set(Elm_Genlist_Item *it, const void *data)
{
- if (!it) return;
- it->data = data;
+ elm_widget_item_data_set(it, data);
elm_genlist_item_update(it);
}
@@ -2846,8 +2848,7 @@
EAPI const void *
elm_genlist_item_data_get(const Elm_Genlist_Item *it)
{
- if (!it) return NULL;
- return it->data;
+ return elm_widget_item_data_get(it);
}
/**
@@ -2869,7 +2870,7 @@
elm_genlist_item_object_get(const Elm_Genlist_Item *it)
{
if (!it) return NULL;
- return it->base;
+ return it->base.view;
}
/**
Modified: trunk/TMP/st/elementary/src/lib/elm_index.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_index.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_index.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -27,11 +27,9 @@
struct _Elm_Index_Item
{
- Evas_Object *obj;
+ Elm_Widget_Item base;
const char *letter;
- const void *data;
int level;
- Evas_Object *base;
Eina_Bool selected : 1;
};
@@ -169,11 +167,10 @@
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Index_Item *it;
if (!wd) return NULL;
- it = calloc(1, sizeof(Elm_Index_Item));
+ it = elm_widget_item_new(obj, Elm_Index_Item);
if (!it) return NULL;
- it->obj = obj;
it->letter = eina_stringshare_add(letter);
- it->data = item;
+ it->base.data = item;
it->level = wd->level;
return it;
}
@@ -186,19 +183,19 @@
Elm_Index_Item *it;
if (!wd) return NULL;
EINA_LIST_FOREACH(wd->items, l, it)
- if (it->data == item) return it;
+ if (it->base.data == item) return it;
return NULL;
}
static void
_item_free(Elm_Index_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
wd->items = eina_list_remove(wd->items, it);
- if (it->base) evas_object_del(it->base);
+ elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->letter);
- free(it);
+ elm_widget_item_del(it);
}
// FIXME: always have index filled
@@ -220,7 +217,7 @@
if (it->level != level) continue;
o = edje_object_add(evas_object_evas_get(obj));
- it->base = o;
+ it->base.view = o;
if (i & 0x1)
_elm_theme_object_set(obj, o, "index", "item_odd/vertical", elm_widget_style_get(obj));
else
@@ -265,10 +262,10 @@
if (!wd->level_active[level]) return;
EINA_LIST_FOREACH(wd->items, l, it)
{
- if (!it->base) continue;
+ if (!it->base.view) continue;
if (it->level != level) continue;
- evas_object_del(it->base);
- it->base = 0;
+ evas_object_del(it->base.view);
+ it->base.view = NULL;
}
wd->level_active[level] = 0;
}
@@ -306,8 +303,8 @@
evas_object_geometry_get(wd->bx[i], &bx, &by, &bw, &bh);
EINA_LIST_FOREACH(wd->items, l, it)
{
- if (!((it->level == i) && (it->base))) continue;
- if ((it->base) && (it->level != wd->level))
+ if (!((it->level == i) && (it->base.view))) continue;
+ if ((it->base.view) && (it->level != wd->level))
{
if (it->selected)
{
@@ -321,7 +318,7 @@
it_last = it;
it->selected = 0;
}
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
xx = x + (w / 2);
yy = y + (h / 2);
x = evx - xx;
@@ -349,13 +346,13 @@
const char *stacking, *selectraise;
it = it_last;
- edje_object_signal_emit(it->base, "elm,state,inactive", "elm");
- stacking = edje_object_data_get(it->base, "stacking");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,inactive", "elm");
+ stacking = edje_object_data_get(it->base.view, "stacking");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
{
if ((stacking) && (!strcmp(stacking, "below")))
- evas_object_lower(it->base);
+ evas_object_lower(it->base.view);
}
}
if (it_closest)
@@ -363,11 +360,11 @@
const char *selectraise;
it = it_closest;
- edje_object_signal_emit(it->base, "elm,state,active", "elm");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,active", "elm");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
- evas_object_raise(it->base);
- evas_object_smart_callback_call((void *)obj, "changed", (void *)it->data);
+ evas_object_raise(it->base.view);
+ evas_object_smart_callback_call((void *)obj, "changed", (void *)it->base.data);
if (wd->delay) ecore_timer_del(wd->delay);
wd->delay = ecore_timer_add(0.2, _delay_change, obj);
}
@@ -646,7 +643,7 @@
Elm_Index_Item *it;
if (!wd) return NULL;
EINA_LIST_FOREACH(wd->items, l, it)
- if ((it->selected) && (it->level == level)) return it->data;
+ if ((it->selected) && (it->level == level)) return it->base.data;
return NULL;
}
@@ -813,8 +810,8 @@
else
{
Elm_Index_Item *p_it = eina_list_data_get(lnear);
- if (cmp_data_func(p_it->data, it->data) >= 0)
- p_it->data = it->data;
+ if (cmp_data_func(p_it->base.data, it->base.data) >= 0)
+ p_it->base.data = it->base.data;
_item_free(it);
}
}
@@ -914,8 +911,7 @@
EAPI void *
elm_index_item_data_get(const Elm_Index_Item *it)
{
- if (!it) return NULL;
- return (void *)it->data;
+ return elm_widget_item_data_get(it);
}
/**
@@ -931,11 +927,24 @@
EAPI void
elm_index_item_data_set(Elm_Index_Item *it, const void *data)
{
- if (!it) return;
- it->data = data;
+ elm_widget_item_data_set(it, data);
}
/**
+ * Set the function called when a index item is freed.
+ *
+ * @param it The item to set the callback on
+ * @param func The function called
+ *
+ * @ingroup Index
+ */
+EAPI void
+elm_index_item_del_cb_set(Elm_Index_Item *it, Evas_Smart_Cb func)
+{
+ elm_widget_item_del_cb_set(it, func);
+}
+
+/**
* Gets the letter of the item.
*
* @param it The list item
Modified: trunk/TMP/st/elementary/src/lib/elm_list.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_list.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_list.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -27,13 +27,11 @@
struct _Elm_List_Item
{
+ Elm_Widget_Item base;
Eina_List *node;
- Evas_Object *obj, *base;
const char *label;
Evas_Object *icon, *end;
Evas_Smart_Cb func;
- Evas_Smart_Cb del_cb;
- const void *data;
Ecore_Timer *long_timer;
Eina_Bool deleted : 1;
Eina_Bool even : 1;
@@ -72,41 +70,33 @@
return __VA_ARGS__; \
}
-
-
static inline void
-_elm_list_item_call_del_cb(Elm_List_Item *it)
-{
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
-}
-
-static inline void
_elm_list_item_free(Elm_List_Item *it)
{
evas_object_event_callback_del_full
- (it->base, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, it);
+ (it->base.view, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, it);
evas_object_event_callback_del_full
- (it->base, EVAS_CALLBACK_MOUSE_UP, _mouse_up, it);
+ (it->base.view, EVAS_CALLBACK_MOUSE_UP, _mouse_up, it);
evas_object_event_callback_del_full
- (it->base, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, it);
+ (it->base.view, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, it);
if (it->icon)
evas_object_event_callback_del_full
(it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, it->obj);
+ _changed_size_hints, it->base.widget);
if (it->end)
evas_object_event_callback_del_full
(it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, it->obj);
+ _changed_size_hints, it->base.widget);
eina_stringshare_del(it->label);
if (it->long_timer) ecore_timer_del(it->long_timer);
if (it->icon) evas_object_del(it->icon);
if (it->end) evas_object_del(it->end);
- if (it->base) evas_object_del(it->base);
- free(it);
+
+ elm_widget_item_del(it);
}
static void
@@ -118,7 +108,7 @@
EINA_LIST_FREE(wd->to_delete, it)
{
- _elm_list_item_call_del_cb(it);
+ elm_widget_item_pre_notify_del(it);
wd->items = eina_list_remove_list(wd->items, it->node);
_elm_list_item_free(it);
@@ -174,7 +164,7 @@
fprintf(stderr, "ERROR: list deleted while walking.\n");
_elm_list_walk(wd);
- EINA_LIST_FOREACH(wd->items, n, it) _elm_list_item_call_del_cb(it);
+ EINA_LIST_FOREACH(wd->items, n, it) elm_widget_item_pre_notify_del(it);
_elm_list_unwalk(wd);
if (wd->to_delete) fprintf(stderr, "ERROR: leaking nodes!\n");
@@ -303,7 +293,7 @@
static void
_item_hilight(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
const char *selectraise;
if (!wd) return;
@@ -311,10 +301,10 @@
if (it->hilighted) return;
_elm_list_walk(wd);
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
- evas_object_raise(it->base);
+ evas_object_raise(it->base.view);
it->hilighted = EINA_TRUE;
_elm_list_unwalk(wd);
@@ -323,7 +313,7 @@
static void
_item_select(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
@@ -337,8 +327,8 @@
call:
_elm_list_walk(wd);
- if (it->func) it->func((void *)it->data, it->obj, it);
- evas_object_smart_callback_call(it->obj, "selected", it);
+ if (it->func) it->func((void *)it->base.data, it->base.widget, it);
+ evas_object_smart_callback_call(it->base.widget, "selected", it);
_elm_list_unwalk(wd);
}
@@ -346,7 +336,7 @@
static void
_item_unselect(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
const char *stacking, *selectraise;
if (!wd) return;
@@ -354,20 +344,20 @@
if (!it->hilighted) return;
_elm_list_walk(wd);
- edje_object_signal_emit(it->base, "elm,state,unselected", "elm");
- stacking = edje_object_data_get(it->base, "stacking");
- selectraise = edje_object_data_get(it->base, "selectraise");
+ edje_object_signal_emit(it->base.view, "elm,state,unselected", "elm");
+ stacking = edje_object_data_get(it->base.view, "stacking");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
{
if ((stacking) && (!strcmp(stacking, "below")))
- evas_object_lower(it->base);
+ evas_object_lower(it->base.view);
}
it->hilighted = EINA_FALSE;
if (it->selected)
{
it->selected = EINA_FALSE;
wd->selected = eina_list_remove(wd->selected, it);
- evas_object_smart_callback_call(it->obj, "unselected", it);
+ evas_object_smart_callback_call(it->base.widget, "unselected", it);
}
_elm_list_unwalk(wd);
@@ -377,7 +367,7 @@
_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Event_Mouse_Move *ev = event_info;
if (!wd) return;
@@ -402,13 +392,13 @@
_long_press(void *data)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return ECORE_CALLBACK_CANCEL;
it->long_timer = NULL;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, 0);
wd->longpressed = EINA_TRUE;
- evas_object_smart_callback_call(it->obj, "longpressed", it);
+ evas_object_smart_callback_call(it->base.widget, "longpressed", it);
return ECORE_CALLBACK_CANCEL;
}
@@ -416,7 +406,7 @@
_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Event_Mouse_Down *ev = event_info;
if (!wd) return;
@@ -431,14 +421,14 @@
it->long_timer = ecore_timer_add(1.0, _long_press, it);
/* Always call the callbacks last - the user may delete our context! */
if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
- evas_object_smart_callback_call(it->obj, "clicked", it);
+ evas_object_smart_callback_call(it->base.widget, "clicked", it);
}
static void
_mouse_up(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Event_Mouse_Up *ev = event_info;
if (!wd) return;
@@ -506,22 +496,21 @@
Elm_List_Item *it;
if (!wd) return NULL;
- it = calloc(1, sizeof(Elm_List_Item));
- it->obj = obj;
+ it = elm_widget_item_new(obj, Elm_List_Item);
it->label = eina_stringshare_add(label);
it->icon = icon;
it->end = end;
it->func = func;
- it->data = data;
- it->base = edje_object_add(evas_object_evas_get(obj));
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
+ it->base.data = data;
+ it->base.view = edje_object_add(evas_object_evas_get(obj));
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_UP,
_mouse_up, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_MOVE,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move, it);
- evas_object_size_hint_weight_set(it->base, 1.0, 1.0);
- evas_object_size_hint_align_set(it->base, -1.0, -1.0);
+ evas_object_size_hint_weight_set(it->base.view, 1.0, 1.0);
+ evas_object_size_hint_align_set(it->base.view, -1.0, -1.0);
if (it->icon)
{
elm_widget_sub_object_add(obj, it->icon);
@@ -592,39 +581,39 @@
const char *stacking;
if (it->is_separator)
- _elm_theme_object_set(obj, it->base, "list", "separator", style);
+ _elm_theme_object_set(obj, it->base.view, "list", "separator", style);
else if (wd->mode == ELM_LIST_COMPRESS)
{
if (it->even)
- _elm_theme_object_set(obj, it->base, "list", "item_compress", style);
+ _elm_theme_object_set(obj, it->base.view, "list", "item_compress", style);
else
- _elm_theme_object_set(obj, it->base, "list", "item_compress_odd", style);
+ _elm_theme_object_set(obj, it->base.view, "list", "item_compress_odd", style);
}
else
{
if (it->even)
- _elm_theme_object_set(obj, it->base, "list", "item", style);
+ _elm_theme_object_set(obj, it->base.view, "list", "item", style);
else
- _elm_theme_object_set(obj, it->base, "list", "item_odd", style);
+ _elm_theme_object_set(obj, it->base.view, "list", "item_odd", style);
}
- stacking = edje_object_data_get(it->base, "stacking");
+ stacking = edje_object_data_get(it->base.view, "stacking");
if (stacking)
{
if (!strcmp(stacking, "below"))
- evas_object_lower(it->base);
+ evas_object_lower(it->base.view);
else if (!strcmp(stacking, "above"))
- evas_object_raise(it->base);
+ evas_object_raise(it->base.view);
}
- edje_object_part_text_set(it->base, "elm.text", it->label);
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
if ((!it->icon) && (minh[0] > 0))
{
- it->icon = evas_object_rectangle_add(evas_object_evas_get(it->base));
+ it->icon = evas_object_rectangle_add(evas_object_evas_get(it->base.view));
evas_object_color_set(it->icon, 0, 0, 0, 0);
it->dummy_icon = EINA_TRUE;
}
if ((!it->end) && (minh[1] > 0))
{
- it->end = evas_object_rectangle_add(evas_object_evas_get(it->base));
+ it->end = evas_object_rectangle_add(evas_object_evas_get(it->base.view));
evas_object_color_set(it->end, 0, 0, 0, 0);
it->dummy_end = EINA_TRUE;
}
@@ -632,28 +621,28 @@
{
evas_object_size_hint_min_set(it->icon, minw[0], minh[0]);
evas_object_size_hint_max_set(it->icon, 99999, 99999);
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
+ edje_object_part_swallow(it->base.view, "elm.swallow.icon", it->icon);
}
if (it->end)
{
evas_object_size_hint_min_set(it->end, minw[1], minh[1]);
evas_object_size_hint_max_set(it->end, 99999, 99999);
- edje_object_part_swallow(it->base, "elm.swallow.end", it->end);
+ edje_object_part_swallow(it->base.view, "elm.swallow.end", it->end);
}
if (!it->fixed)
{
// this may call up user and it may modify the list item
// but we're safe as we're flagged as walking.
// just don't process further
- edje_object_message_signal_process(it->base);
+ edje_object_message_signal_process(it->base.view);
if (it->deleted)
continue;
mw = mh = -1;
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
+ edje_object_size_min_restricted_calc(it->base.view, &mw, &mh, mw, mh);
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- evas_object_size_hint_min_set(it->base, mw, mh);
- evas_object_show(it->base);
+ evas_object_size_hint_min_set(it->base.view, mw, mh);
+ evas_object_show(it->base.view);
}
if ((it->selected) || (it->hilighted))
{
@@ -662,14 +651,14 @@
// this may call up user and it may modify the list item
// but we're safe as we're flagged as walking.
// just don't process further
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
if (it->deleted)
continue;
- selectraise = edje_object_data_get(it->base, "selectraise");
+ selectraise = edje_object_data_get(it->base.view, "selectraise");
if ((selectraise) && (!strcmp(selectraise, "on")))
- evas_object_raise(it->base);
- stacking = edje_object_data_get(it->base, "stacking");
+ evas_object_raise(it->base.view);
+ stacking = edje_object_data_get(it->base.view, "stacking");
}
it->fixed = EINA_TRUE;
it->is_even = it->even;
@@ -805,7 +794,7 @@
wd->items = eina_list_append(wd->items, it);
it->node = eina_list_last(wd->items);
- elm_box_pack_end(wd->box, it->base);
+ elm_box_pack_end(wd->box, it->base.view);
return it;
}
@@ -832,7 +821,7 @@
wd->items = eina_list_prepend(wd->items, it);
it->node = wd->items;
- elm_box_pack_start(wd->box, it->base);
+ elm_box_pack_start(wd->box, it->base.view);
return it;
}
@@ -866,7 +855,7 @@
it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_prepend_relative_list(wd->items, it, before->node);
it->node = before->node->prev;
- elm_box_pack_before(wd->box, it->base, before->base);
+ elm_box_pack_before(wd->box, it->base.view, before->base.view);
return it;
}
@@ -900,7 +889,7 @@
it = _item_new(obj, label, icon, end, func, data);
wd->items = eina_list_append_relative_list(wd->items, it, after->node);
it->node = after->node->next;
- elm_box_pack_after(wd->box, it->base, after->base);
+ elm_box_pack_after(wd->box, it->base.view, after->base.view);
return it;
}
@@ -933,13 +922,13 @@
if (!l)
{
it->node = eina_list_last(wd->items);
- elm_box_pack_end(wd->box, it->base);
+ elm_box_pack_end(wd->box, it->base.view);
}
else
{
Elm_List_Item *before = eina_list_data_get(l);
it->node = before->node->prev;
- elm_box_pack_before(wd->box, it->base, before->base);
+ elm_box_pack_before(wd->box, it->base.view, before->base.view);
}
return it;
}
@@ -981,7 +970,7 @@
EINA_LIST_FREE(wd->items, it)
{
- _elm_list_item_call_del_cb(it);
+ elm_widget_item_pre_notify_del(it);
_elm_list_item_free(it);
}
@@ -1208,7 +1197,7 @@
EAPI void
elm_list_item_selected_set(Elm_List_Item *it, Eina_Bool selected)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
selected = !!selected;
@@ -1257,13 +1246,13 @@
EAPI void
elm_list_item_show(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Coord bx, by, bw, bh;
Evas_Coord x, y, w, h;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
evas_object_geometry_get(wd->box, &bx, &by, &bw, &bh);
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
x -= bx;
y -= by;
if (wd->scr)
@@ -1280,7 +1269,7 @@
EAPI void
elm_list_item_del(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
@@ -1298,7 +1287,7 @@
_elm_list_walk(wd);
- _elm_list_item_call_del_cb(it);
+ elm_widget_item_pre_notify_del(it);
_elm_list_item_free(it);
_elm_list_unwalk(wd);
@@ -1316,7 +1305,7 @@
elm_list_item_del_cb_set(Elm_List_Item *it, Evas_Smart_Cb func)
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
- it->del_cb = func;
+ elm_widget_item_del_cb_set(it, func);
}
/**
@@ -1331,7 +1320,7 @@
elm_list_item_data_get(const Elm_List_Item *it)
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, NULL);
- return (void *)it->data;
+ return elm_widget_item_data_get(it);
}
/**
@@ -1375,7 +1364,7 @@
}
if (!icon)
{
- icon = evas_object_rectangle_add(evas_object_evas_get(it->obj));
+ icon = evas_object_rectangle_add(evas_object_evas_get(it->base.widget));
evas_object_color_set(icon, 0, 0, 0, 0);
it->dummy_icon = EINA_TRUE;
}
@@ -1385,8 +1374,8 @@
it->icon = NULL;
}
it->icon = icon;
- if (it->base)
- edje_object_part_swallow(it->base, "elm.swallow.icon", icon);
+ if (it->base.view)
+ edje_object_part_swallow(it->base.view, "elm.swallow.icon", icon);
}
/**
@@ -1430,7 +1419,7 @@
}
if (!end)
{
- end = evas_object_rectangle_add(evas_object_evas_get(it->obj));
+ end = evas_object_rectangle_add(evas_object_evas_get(it->base.widget));
evas_object_color_set(end, 0, 0, 0, 0);
it->dummy_end = EINA_TRUE;
}
@@ -1440,8 +1429,8 @@
it->end = NULL;
}
it->end = end;
- if (it->base)
- edje_object_part_swallow(it->base, "elm.swallow.end", end);
+ if (it->base.view)
+ edje_object_part_swallow(it->base.view, "elm.swallow.end", end);
}
/**
@@ -1456,7 +1445,7 @@
elm_list_item_base_get(const Elm_List_Item *it)
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, NULL);
- return it->base;
+ return it->base.view;
}
/**
@@ -1487,8 +1476,8 @@
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
if (!eina_stringshare_replace(&it->label, text)) return;
- if (it->base)
- edje_object_part_text_set(it->base, "elm.text", it->label);
+ if (it->base.view)
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
}
/**
Modified: trunk/TMP/st/elementary/src/lib/elm_menu.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_menu.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -14,8 +14,7 @@
struct _Elm_Menu_Item
{
- Evas_Object *menu;
- Evas_Object *o;
+ Elm_Widget_Item base;
Elm_Menu_Item *parent;
Eina_Bool separator;
@@ -26,8 +25,6 @@
const char *label;
Evas_Smart_Cb func;
- Evas_Smart_Cb del_cb;
- const void *data;
//if submenu
Eina_Bool open;
@@ -59,7 +56,7 @@
{
Elm_Menu_Item *child;
- if (item->del_cb) item->del_cb((void*)item->data, item->o, item);
+ elm_widget_item_pre_notify_del(item);
EINA_LIST_FREE(item->items, child)
_del_item(child);
@@ -67,8 +64,7 @@
if (item->label) eina_stringshare_del(item->label);
if (item->hv) evas_object_del(item->hv);
if (item->location) evas_object_del(item->location);
- if (item->o) evas_object_del(item->o);
- free(item);
+ elm_widget_item_del(item);
}
static void
@@ -108,28 +104,31 @@
{
ll = eina_list_append(ll, item->items);
if (item->separator)
- _elm_theme_object_set(obj, item->o, "menu", "separator",
+ _elm_theme_object_set(obj, item->base.view, "menu", "separator",
elm_widget_style_get(obj));
else if (item->bx)
{
- _elm_theme_object_set(obj, item->o, "menu", "item_with_submenu",
- elm_widget_style_get(obj));
+ _elm_theme_object_set
+ (obj, item->base.view, "menu", "item_with_submenu",
+ elm_widget_style_get(obj));
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
}
else
{
- _elm_theme_object_set(obj, item->o, "menu", "item",
+ _elm_theme_object_set(obj, item->base.view, "menu", "item",
elm_widget_style_get(obj));
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
}
if (item->disabled)
- edje_object_signal_emit(item->o, "elm,state,disabled", "elm");
+ edje_object_signal_emit
+ (item->base.view, "elm,state,disabled", "elm");
else
- edje_object_signal_emit(item->o, "elm,state,enabled", "elm");
- edje_object_message_signal_process(item->o);
- edje_object_scale_set(item->o, elm_widget_scale_get(obj) *
+ edje_object_signal_emit
+ (item->base.view, "elm,state,enabled", "elm");
+ edje_object_message_signal_process(item->base.view);
+ edje_object_scale_set(item->base.view, elm_widget_scale_get(obj) *
_elm_config->scale);
}
}
@@ -176,11 +175,11 @@
Eina_List *l;
Elm_Menu_Item *item;
Evas_Coord x_p, y_p, w_p, h_p, x2, y2, w2, h2, bx, by, bw, bh, px, py, pw, ph;
- Widget_Data *wd = elm_widget_data_get(parent->menu);
+ Widget_Data *wd = elm_widget_data_get(parent->base.widget);
if (!wd) return;
EINA_LIST_FOREACH(parent->items,l,item) _item_sizing_eval(item);
evas_object_geometry_get(parent->location, &x_p, &y_p, &w_p, &h_p);
- evas_object_geometry_get(parent->o, &x2, &y2, &w2, &h2);
+ evas_object_geometry_get(parent->base.view, &x2, &y2, &w2, &h2);
evas_object_geometry_get(parent->bx, &bx, &by, &bw, &bh);
evas_object_geometry_get(wd->parent, &px, &py, &pw, &ph);
@@ -214,11 +213,11 @@
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
if (!item->separator)
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- edje_object_size_min_restricted_calc(item->o, &minw, &minh, minw, minh);
+ edje_object_size_min_restricted_calc(item->base.view, &minw, &minh, minw, minh);
if (!item->separator)
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
- evas_object_size_hint_min_set(item->o, minw, minh);
- evas_object_size_hint_max_set(item->o, maxw, maxh);
+ evas_object_size_hint_min_set(item->base.view, minw, minh);
+ evas_object_size_hint_max_set(item->base.view, maxw, maxh);
}
static void
@@ -292,9 +291,9 @@
else _submenu_hide(it);
}
else
- _menu_hide(it->menu, NULL, NULL);
+ _menu_hide(it->base.widget, NULL, NULL);
- if (it->func) it->func((void *)(it->data), it->menu, it);
+ if (it->func) it->func((void *)(it->base.data), it->base.widget, it);
}
static void
@@ -312,7 +311,7 @@
}
else
{
- Widget_Data *wd = elm_widget_data_get(item->menu);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
EINA_LIST_FOREACH(wd->items, l, item2)
{
if ((item2->open) && (item2 != item)) _submenu_hide(item2);
@@ -326,7 +325,7 @@
Elm_Menu_Item *it = data;
it->open = EINA_TRUE;
evas_object_show(it->hv);
- _sizing_eval(it->menu);
+ _sizing_eval(it->base.widget);
}
static void
@@ -340,37 +339,37 @@
static void
_item_obj_create(Elm_Menu_Item *item)
{
- Widget_Data *wd = elm_widget_data_get(item->menu);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return;
- item->o = edje_object_add(evas_object_evas_get(wd->bx));
- evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- _elm_theme_object_set(item->menu, item->o, "menu", "item", elm_widget_style_get(item->menu));
- edje_object_signal_callback_add(item->o, "elm,action,click", "",
+ item->base.view = edje_object_add(evas_object_evas_get(wd->bx));
+ evas_object_size_hint_weight_set(item->base.view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_fill_set(item->base.view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ _elm_theme_object_set(item->base.widget, item->base.view, "menu", "item", elm_widget_style_get(item->base.widget));
+ edje_object_signal_callback_add(item->base.view, "elm,action,click", "",
_menu_item_select, item);
- edje_object_signal_callback_add(item->o, "elm,action,activate", "",
+ edje_object_signal_callback_add(item->base.view, "elm,action,activate", "",
_menu_item_activate, item);
- evas_object_show(item->o);
+ evas_object_show(item->base.view);
}
static void
_item_separator_obj_create(Elm_Menu_Item *item)
{
- Widget_Data *wd = elm_widget_data_get(item->menu);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return;
- item->o = edje_object_add(evas_object_evas_get(wd->bx));
- evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
- _elm_theme_object_set(item->menu, item->o, "menu", "separator", elm_widget_style_get(item->menu));
- edje_object_signal_callback_add(item->o, "elm,action,activate", "",
+ item->base.view = edje_object_add(evas_object_evas_get(wd->bx));
+ evas_object_size_hint_weight_set(item->base.view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_fill_set(item->base.view, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ _elm_theme_object_set(item->base.widget, item->base.view, "menu", "separator", elm_widget_style_get(item->base.widget));
+ edje_object_signal_callback_add(item->base.view, "elm,action,activate", "",
_menu_item_activate, item);
- evas_object_show(item->o);
+ evas_object_show(item->base.view);
}
static void
_item_submenu_obj_create(Elm_Menu_Item *item)
{
- Widget_Data *wd = elm_widget_data_get(item->menu);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return;
item->location = elm_icon_add(wd->bx);
item->hv = elm_hover_add(wd->bx);
@@ -383,16 +382,16 @@
evas_object_show(item->bx);
elm_hover_content_set(item->hv, elm_hover_best_content_location_get(item->hv, ELM_HOVER_AXIS_VERTICAL), item->bx);
- _elm_theme_object_set(item->menu, item->o, "menu", "item_with_submenu", elm_widget_style_get(item->menu));
+ _elm_theme_object_set(item->base.widget, item->base.view, "menu", "item_with_submenu", elm_widget_style_get(item->base.widget));
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
- edje_object_signal_callback_add(item->o, "elm,action,open", "",
+ edje_object_signal_callback_add(item->base.view, "elm,action,open", "",
_submenu_open, item);
- evas_object_event_callback_add(item->o, EVAS_CALLBACK_MOVE, _item_move_resize, item);
- evas_object_event_callback_add(item->o, EVAS_CALLBACK_RESIZE, _item_move_resize, item);
+ evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_MOVE, _item_move_resize, item);
+ evas_object_event_callback_add(item->base.view, EVAS_CALLBACK_RESIZE, _item_move_resize, item);
- evas_object_event_callback_add(item->bx, EVAS_CALLBACK_RESIZE, _menu_resize, item->menu);
+ evas_object_event_callback_add(item->bx, EVAS_CALLBACK_RESIZE, _menu_resize, item->base.widget);
}
/**
@@ -509,7 +508,7 @@
EAPI Evas_Object *
elm_menu_object_get(const Elm_Menu_Item *it)
{
- return it->o;
+ return it->base.view;
}
/**
@@ -532,11 +531,10 @@
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
- subitem = ELM_NEW(Elm_Menu_Item);
+ subitem = elm_widget_item_new(obj, Elm_Menu_Item);
if (!subitem) return NULL;
+ subitem->base.data = data;
subitem->func = func;
- subitem->data = data;
- subitem->menu = obj;
subitem->parent = parent;
_item_obj_create(subitem);
@@ -546,12 +544,12 @@
if (parent)
{
if (!parent->bx) _item_submenu_obj_create(parent);
- elm_box_pack_end(parent->bx, subitem->o);
+ elm_box_pack_end(parent->bx, subitem->base.view);
parent->items = eina_list_append(parent->items, subitem);
}
else
{
- elm_box_pack_end(wd->bx, subitem->o);
+ elm_box_pack_end(wd->bx, subitem->base.view);
wd->items = eina_list_append(wd->items, subitem);
}
@@ -573,13 +571,13 @@
eina_stringshare_replace(&item->label, label);
if (label)
- edje_object_signal_emit(item->o, "elm,state,text,visible", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,text,visible", "elm");
else
- edje_object_signal_emit(item->o, "elm,state,text,hidden", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,text,hidden", "elm");
- edje_object_message_signal_process(item->o);
- edje_object_part_text_set(item->o, "elm.text", label);
- _sizing_eval(item->menu);
+ edje_object_message_signal_process(item->base.view);
+ edje_object_part_text_set(item->base.view, "elm.text", label);
+ _sizing_eval(item->base.widget);
}
/**
@@ -615,14 +613,14 @@
item->icon = icon;
if (icon)
{
- elm_widget_sub_object_add(item->menu, icon);
+ elm_widget_sub_object_add(item->base.widget, icon);
evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints, item->menu);
- edje_object_part_swallow(item->o, "elm.swallow.content", icon);
- edje_object_signal_emit(item->o, "elm,state,icon,visible", "elm");
- edje_object_message_signal_process(item->o);
+ _changed_size_hints, item->base.widget);
+ edje_object_part_swallow(item->base.view, "elm.swallow.content", icon);
+ edje_object_signal_emit(item->base.view, "elm,state,icon,visible", "elm");
+ edje_object_message_signal_process(item->base.view);
}
- _sizing_eval(item->menu);
+ _sizing_eval(item->base.widget);
}
/**
@@ -640,12 +638,12 @@
item->disabled = disabled;
if (disabled)
{
- edje_object_signal_emit(item->o, "elm,state,disabled", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,disabled", "elm");
if (item->open) _submenu_hide(item);
}
else
- edje_object_signal_emit(item->o, "elm,state,enabled", "elm");
- edje_object_message_signal_process(item->o);
+ edje_object_signal_emit(item->base.view, "elm,state,enabled", "elm");
+ edje_object_message_signal_process(item->base.view);
}
/**
@@ -680,20 +678,20 @@
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
- subitem = ELM_NEW(Elm_Menu_Item);
+ subitem = elm_widget_item_new(obj, Elm_Menu_Item);
if (!subitem) return NULL;
- subitem->menu = obj;
+ subitem->base.widget = obj;
subitem->separator = 1;
_item_separator_obj_create(subitem);
if (!parent)
{
- elm_box_pack_end(wd->bx, subitem->o);
+ elm_box_pack_end(wd->bx, subitem->base.view);
wd->items = eina_list_append(wd->items, subitem);
}
else
{
if (!parent->bx) _item_submenu_obj_create(parent);
- elm_box_pack_end(parent->bx, subitem->o);
+ elm_box_pack_end(parent->bx, subitem->base.view);
parent->items = eina_list_append(parent->items, subitem);
}
_sizing_eval(obj);
@@ -745,24 +743,23 @@
Elm_Menu_Item *_item;
if (!item) return;
- if (item->del_cb) item->del_cb((void*)item->data, item->o, item);
+ elm_widget_item_pre_notify_del(item);
EINA_LIST_FREE(item->items, _item) elm_menu_item_del(_item);
if (item->label) eina_stringshare_del(item->label);
if (item->icon) evas_object_del(item->icon);
if (item->hv) evas_object_del(item->hv);
if (item->location) evas_object_del(item->location);
- if (item->o) evas_object_del(item->o);
if (item->parent)
item->parent->items = eina_list_remove(item->parent->items, item);
else
{
- Widget_Data *wd = elm_widget_data_get(item->menu);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
wd->items = eina_list_remove(wd->items, item);
}
- free(item);
+ elm_widget_item_del(item);
}
/**
@@ -776,8 +773,7 @@
EAPI void
elm_menu_item_del_cb_set(Elm_Menu_Item *it, Evas_Smart_Cb func)
{
- if (!it) return;
- it->del_cb = func;
+ elm_widget_item_del_cb_set(it, func);
}
/**
@@ -791,8 +787,7 @@
EAPI void *
elm_menu_item_data_get(const Elm_Menu_Item *it)
{
- if (!it) return NULL;
- return (void *)it->data;
+ return elm_widget_item_data_get(it);
}
/**
@@ -806,8 +801,7 @@
EAPI void
elm_menu_item_data_set(Elm_Menu_Item *item, const void *data)
{
- if (!item) return;
- item->data = data;
+ elm_widget_item_data_set(item, data);
}
/**
Modified: trunk/TMP/st/elementary/src/lib/elm_slideshow.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_slideshow.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_slideshow.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -19,14 +19,11 @@
struct _Elm_Slideshow_Item
{
- Evas_Object *obj;
+ Elm_Widget_Item base;
Eina_List *l, *l_built;
- const void *data;
const Elm_Slideshow_Item_Class *itc;
-
- Evas_Object *o;
};
struct _Widget_Data
@@ -99,7 +96,7 @@
static Elm_Slideshow_Item* _item_prev_get(Elm_Slideshow_Item* item)
{
- Widget_Data *wd = elm_widget_data_get(item->obj);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
Elm_Slideshow_Item* prev = eina_list_data_get(eina_list_prev(item->l));
if(!prev && wd->loop)
prev = eina_list_data_get(eina_list_last(item->l));
@@ -107,7 +104,7 @@
}
static Elm_Slideshow_Item* _item_next_get(Elm_Slideshow_Item* item)
{
- Widget_Data *wd = elm_widget_data_get(item->obj);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
Elm_Slideshow_Item* next = eina_list_data_get(eina_list_next(item->l));
if(!next && wd->loop)
next = eina_list_data_get(wd->items);
@@ -131,42 +128,42 @@
_item_realize(Elm_Slideshow_Item *item)
{
Elm_Slideshow_Item *_item;
- Evas_Object *obj = item->obj;
+ Evas_Object *obj = item->base.widget;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- if ((!item->o) && (item->itc->func.get))
+ if ((!item->base.view) && (item->itc->func.get))
{
- item->o = item->itc->func.get((void*)item->data, obj);
- evas_object_smart_member_add(item->o, obj);
+ item->base.view = item->itc->func.get((void*)item->base.data, obj);
+ evas_object_smart_member_add(item->base.view, obj);
item->l_built = eina_list_append(NULL, item);
wd->items_built = eina_list_merge(wd->items_built, item->l_built);
- evas_object_hide(item->o);
+ evas_object_hide(item->base.view);
}
else if (item->l_built)
wd->items_built = eina_list_demote_list(wd->items_built, item->l_built);
//pre-create previous and next item
_item = _item_next_get(item);
- if ((_item) && (!_item->o) && (_item->itc->func.get))
+ if ((_item) && (!_item->base.view) && (_item->itc->func.get))
{
- _item->o = _item->itc->func.get((void*)_item->data, obj);
- evas_object_smart_member_add(_item->o, obj);
+ _item->base.view = _item->itc->func.get((void*)_item->base.data, obj);
+ evas_object_smart_member_add(_item->base.view, obj);
_item->l_built = eina_list_append(NULL, _item);
wd->items_built = eina_list_merge(wd->items_built, _item->l_built);
- evas_object_hide(_item->o);
+ evas_object_hide(_item->base.view);
}
else if ((_item) && (_item->l_built))
wd->items_built = eina_list_demote_list(wd->items_built, _item->l_built);
_item = _item_prev_get(item);
- if ((_item) && (!_item->o) && (_item->itc->func.get))
+ if ((_item) && (!_item->base.view) && (_item->itc->func.get))
{
- _item->o = _item->itc->func.get((void*)_item->data, obj);
- evas_object_smart_member_add(_item->o, obj);
+ _item->base.view = _item->itc->func.get((void*)_item->base.data, obj);
+ evas_object_smart_member_add(_item->base.view, obj);
_item->l_built = eina_list_append(NULL, _item);
wd->items_built = eina_list_merge(wd->items_built, _item->l_built);
- evas_object_hide(_item->o);
+ evas_object_hide(_item->base.view);
}
else if ((_item) && (_item->l_built))
wd->items_built = eina_list_demote_list(wd->items_built, _item->l_built);
@@ -177,9 +174,9 @@
_item = eina_list_data_get(wd->items_built);
wd->items_built = eina_list_remove_list(wd->items_built, wd->items_built);
if(item->itc->func.del)
- item->itc->func.del((void*)item->data, _item->o);
- evas_object_del(_item->o);
- _item->o = NULL;
+ item->itc->func.del((void*)item->base.data, _item->base.view);
+ evas_object_del(_item->base.view);
+ _item->base.view = NULL;
}
}
@@ -193,21 +190,21 @@
item = wd->previous;
if(item)
{
- edje_object_part_unswallow(NULL, item->o);
- evas_object_hide(item->o);
+ edje_object_part_unswallow(NULL, item->base.view);
+ evas_object_hide(item->base.view);
wd->previous = NULL;
}
item = wd->current;
- if (!item || !item->o) return;
+ if (!item || !item->base.view) return;
_item_realize(item);
- edje_object_part_unswallow(NULL, item->o);
- evas_object_show(item->o);
+ edje_object_part_unswallow(NULL, item->base.view);
+ evas_object_show(item->base.view);
edje_object_signal_emit(wd->slideshow, "anim,end", "slideshow");
- edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->o);
+ edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->base.view);
}
@@ -293,10 +290,9 @@
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
- item = calloc(1, sizeof(Elm_Slideshow_Item));
- item->data = data;
+ item = elm_widget_item_new(obj, Elm_Slideshow_Item);
+ item->base.data = data;
item->itc = itc;
- item->obj = obj;
item->l = eina_list_append(item->l, item);
wd->items = eina_list_merge(wd->items, item->l);
@@ -322,22 +318,22 @@
Widget_Data *wd;
if (!item)
return;
- ELM_CHECK_WIDTYPE(item->obj, widtype);
- wd = elm_widget_data_get(item->obj);
+ ELM_CHECK_WIDTYPE(item->base.widget, widtype);
+ wd = elm_widget_data_get(item->base.widget);
if (!wd)
return;
if (item == wd->current)
return;
next = item;
- _end(item->obj, item->obj, NULL, NULL);
+ _end(item->base.widget, item->base.widget, NULL, NULL);
if (wd->timer) ecore_timer_del(wd->timer);
if (wd->timeout > 0)
- wd->timer = ecore_timer_add(wd->timeout, _timer_cb, item->obj);
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, item->base.widget);
_item_realize(next);
- edje_object_part_swallow(wd->slideshow, "elm.swallow.2", next->o);
- evas_object_show(next->o);
+ edje_object_part_swallow(wd->slideshow, "elm.swallow.2", next->base.view);
+ evas_object_show(next->base.view);
snprintf(buf, sizeof(buf), "%s,next", wd->transition);
edje_object_signal_emit(wd->slideshow, buf, "slideshow");
wd->previous = wd->current;
@@ -376,8 +372,8 @@
_item_realize(next);
- edje_object_part_swallow(wd->slideshow, "elm.swallow.2", next->o);
- evas_object_show(next->o);
+ edje_object_part_swallow(wd->slideshow, "elm.swallow.2", next->base.view);
+ evas_object_show(next->base.view);
snprintf(buf, sizeof(buf), "%s,next", wd->transition);
edje_object_signal_emit(wd->slideshow, buf, "slideshow");
@@ -416,8 +412,8 @@
_item_realize(prev);
- edje_object_part_swallow(wd->slideshow, "elm.swallow.2", prev->o);
- evas_object_show(prev->o);
+ edje_object_part_swallow(wd->slideshow, "elm.swallow.2", prev->base.view);
+ evas_object_show(prev->base.view);
snprintf(buf, 1024, "%s,previous", wd->transition);
edje_object_signal_emit(wd->slideshow, buf, "slideshow");
@@ -623,15 +619,16 @@
wd->current = NULL;
EINA_LIST_FREE(wd->items_built, item)
{
- if (item->itc->func.del)
- item->itc->func.del((void*)item->data, item->o);
- evas_object_del(item->o);
+ if (item->itc->func.del)
+ item->itc->func.del((void*)item->base.data, item->base.view);
+ evas_object_del(item->base.view);
+ item->base.view = NULL;
}
EINA_LIST_FREE(wd->items, item)
- {
- free(item);
- }
+ {
+ elm_widget_item_del(item);
+ }
}
@@ -646,7 +643,7 @@
elm_slideshow_item_del(Elm_Slideshow_Item *item)
{
if (!item) return;
- Widget_Data *wd = elm_widget_data_get(item->obj);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return;
if (wd->previous == item) wd->previous = NULL;
if (wd->current == item)
@@ -663,10 +660,10 @@
wd->items = eina_list_remove_list(wd->items, item->l);
wd->items_built = eina_list_remove_list(wd->items_built, item->l_built);
- if (item->o && item->itc->func.del)
- item->itc->func.del((void*)item->data, wd->previous->o);
- if (item->o)
- evas_object_del(item->o);
+ if (item->base.view && item->itc->func.del)
+ item->itc->func.del((void*)item->base.data, wd->previous->base.view);
+ if (item->base.view)
+ evas_object_del(item->base.view);
free(item);
}
@@ -716,7 +713,7 @@
elm_slideshow_item_object_get(Elm_Slideshow_Item * item)
{
if (!item) return NULL;
- return item->o;
+ return item->base.view;
}
/**
@@ -730,6 +727,5 @@
EAPI void *
elm_slideshow_item_data_get(Elm_Slideshow_Item * item)
{
- if (!item) return NULL;
- return (void *)item->data;
+ return elm_widget_item_data_get(item);
}
Modified: trunk/TMP/st/elementary/src/lib/elm_toolbar.c
===================================================================
--- trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-09-10 02:01:32 UTC (rev 52117)
+++ trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2010-09-10 02:05:45 UTC (rev 52118)
@@ -23,13 +23,10 @@
struct _Elm_Toolbar_Item
{
- Evas_Object *obj;
- Evas_Object *base;
+ Elm_Widget_Item base;
const char *label;
Evas_Object *icon;
Evas_Smart_Cb func;
- Evas_Smart_Cb del_cb;
- const void *data;
Eina_Bool selected : 1;
Eina_Bool disabled : 1;
Eina_Bool separator : 1;
@@ -53,12 +50,12 @@
static void
_item_show(Elm_Toolbar_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Coord x, y, w, h, bx, by;
if (!wd) return;
evas_object_geometry_get(wd->bx, &bx, &by, NULL, NULL);
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
elm_smart_scroller_child_region_show(wd->scr, x - bx, y - by, w, h);
}
@@ -66,7 +63,7 @@
_item_select(Elm_Toolbar_Item *it)
{
Elm_Toolbar_Item *it2;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
Evas_Object *obj2;
const Eina_List *l;
@@ -77,25 +74,26 @@
if (it2->selected)
{
it2->selected = EINA_FALSE;
- edje_object_signal_emit(it2->base, "elm,state,unselected", "elm");
+ edje_object_signal_emit
+ (it2->base.view, "elm,state,unselected", "elm");
break;
}
}
it->selected = EINA_TRUE;
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
_item_show(it);
- obj2 = it->obj;
+ obj2 = it->base.widget;
if(it->menu)
{
evas_object_show(it->o_menu);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_RESIZE,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_RESIZE,
_menu_move_resize, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOVE,
+ evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOVE,
_menu_move_resize, it);
_menu_move_resize(it, NULL, NULL, NULL);
}
- if (it->func) it->func((void *)(it->data), it->obj, it);
+ if (it->func) it->func((void *)(it->base.data), it->base.widget, it);
evas_object_smart_callback_call(obj2, "clicked", it);
}
@@ -103,7 +101,7 @@
_menu_hide(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Elm_Toolbar_Item *it = data;
- elm_toolbar_item_unselect_all(it->obj);
+ elm_toolbar_item_unselect_all(it->base.widget);
}
static void
@@ -119,25 +117,25 @@
{
Elm_Toolbar_Item *it = data;
Evas_Coord x,y,w,h;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if ((!wd) || (!wd->menu_parent)) return;
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ evas_object_geometry_get(it->base.view, &x, &y, &w, &h);
elm_menu_move(it->o_menu, x, y+h);
}
static void
_item_disable(Elm_Toolbar_Item *it, Eina_Bool disabled)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
if (!wd) return;
if (it->disabled == disabled) return;
it->disabled = disabled;
if (it->disabled)
- edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm");
else
- edje_object_signal_emit(it->base, "elm,state,enabled", "elm");
+ edje_object_signal_emit(it->base.view, "elm,state,enabled", "elm");
}
static void
@@ -149,12 +147,11 @@
if (!wd) return;
EINA_LIST_FREE(wd->items, it)
{
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
+ elm_widget_item_pre_notify_del(it);
eina_stringshare_del(it->label);
if (it->icon) evas_object_del(it->icon);
if ((!wd->menu_parent) && (it->o_menu)) evas_object_del(it->o_menu);
- evas_object_del(it->base);
- free(it);
+ elm_widget_item_del(it);
}
}
@@ -182,16 +179,17 @@
// edje_object_scale_set(wd->scr, scale);
EINA_LIST_FOREACH(wd->items, l, it)
{
+ Evas_Object *view = it->base.view;
Evas_Coord mw, mh;
- edje_object_scale_set(it->base, scale);
+ edje_object_scale_set(view, scale);
if (!it->separator)
{
if (it->selected)
- edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+ edje_object_signal_emit(view, "elm,state,selected", "elm");
if (it->disabled)
- edje_object_signal_emit(it->base, "elm,state,disabled", "elm");
- _elm_theme_object_set(obj, it->base, "toolbar", "item", style);
+ edje_object_signal_emit(view, "elm,state,disabled", "elm");
+ _elm_theme_object_set(obj, view, "toolbar", "item", style);
if (it->icon)
{
int ms = 0;
@@ -199,21 +197,21 @@
ms = ((double)wd->icon_size * _elm_config->scale);
evas_object_size_hint_min_set(it->icon, ms, ms);
evas_object_size_hint_max_set(it->icon, ms, ms);
- edje_object_part_swallow(it->base, "elm.swallow.icon",
+ edje_object_part_swallow(view, "elm.swallow.icon",
it->icon);
}
- edje_object_part_text_set(it->base, "elm.text", it->label);
+ edje_object_part_text_set(view, "elm.text", it->label);
}
else
- _elm_theme_object_set(obj, it->base, "toolbar", "separator", style);
+ _elm_theme_object_set(obj, view, "toolbar", "separator", style);
mw = mh = -1;
if (!it->separator)
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
+ edje_object_size_min_restricted_calc(view, &mw, &mh, mw, mh);
if (!it->separator)
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- evas_object_size_hint_min_set(it->base, mw, mh);
+ evas_object_size_hint_min_set(view, mw, mh);
}
_sizing_eval(obj);
}
@@ -403,20 +401,20 @@
Elm_Toolbar_Item *it;
if (!wd) return NULL;
- it = ELM_NEW(Elm_Toolbar_Item);
+ it = elm_widget_item_new(obj, Elm_Toolbar_Item);
if (!it) return NULL;
wd->items = eina_list_append(wd->items, it);
- it->obj = obj;
it->label = eina_stringshare_add(label);
it->icon = icon;
it->func = func;
- it->data = data;
it->separator = EINA_FALSE;
- it->base = edje_object_add(evas_object_evas_get(obj));
- _elm_theme_object_set(obj, it->base, "toolbar", "item", elm_widget_style_get(obj));
- edje_object_signal_callback_add(it->base, "elm,action,click", "elm",
+ it->base.data = data;
+ it->base.view = edje_object_add(evas_object_evas_get(obj));
+ _elm_theme_object_set
+ (obj, it->base.view, "toolbar", "item", elm_widget_style_get(obj));
+ edje_object_signal_callback_add(it->base.view, "elm,action,click", "elm",
_select, it);
- elm_widget_sub_object_add(obj, it->base);
+ elm_widget_sub_object_add(obj, it->base.view);
if (it->icon)
{
int ms = 0;
@@ -424,20 +422,20 @@
ms = ((double)wd->icon_size * _elm_config->scale);
evas_object_size_hint_min_set(it->icon, ms, ms);
evas_object_size_hint_max_set(it->icon, ms, ms);
- edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon);
+ edje_object_part_swallow(it->base.view, "elm.swallow.icon", it->icon);
evas_object_show(it->icon);
elm_widget_sub_object_add(obj, it->icon);
}
- edje_object_part_text_set(it->base, "elm.text", it->label);
+ edje_object_part_text_set(it->base.view, "elm.text", it->label);
mw = mh = -1;
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh);
+ edje_object_size_min_restricted_calc(it->base.view, &mw, &mh, mw, mh);
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- evas_object_size_hint_weight_set(it->base, -1.0, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(it->base, 0.5, EVAS_HINT_FILL);
- evas_object_size_hint_min_set(it->base, mw, mh);
- evas_object_box_append(wd->bx, it->base);
- evas_object_show(it->base);
+ evas_object_size_hint_weight_set(it->base.view, -1.0, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(it->base.view, 0.5, EVAS_HINT_FILL);
+ evas_object_size_hint_min_set(it->base.view, mw, mh);
+ evas_object_box_append(wd->bx, it->base.view);
+ evas_object_show(it->base.view);
_sizing_eval(obj);
return it;
}
@@ -502,14 +500,14 @@
if (!item) return;
eina_stringshare_replace(&item->label, label);
- edje_object_part_text_set(item->base, "elm.text", item->label);
+ edje_object_part_text_set(item->base.view, "elm.text", item->label);
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- edje_object_size_min_restricted_calc(item->base, &mw, &mh, mw, mh);
+ edje_object_size_min_restricted_calc(item->base.view, &mw, &mh, mw, mh);
elm_coords_finger_size_adjust(1, &mw, 1, &mh);
- evas_object_size_hint_weight_set(item->base, -1.0, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(item->base, 0.5, EVAS_HINT_FILL);
- evas_object_size_hint_min_set(item->base, mw, mh);
+ evas_object_size_hint_weight_set(item->base.view, -1.0, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(item->base.view, 0.5, EVAS_HINT_FILL);
+ evas_object_size_hint_min_set(item->base.view, mw, mh);
}
@@ -523,16 +521,15 @@
EAPI void
elm_toolbar_item_del(Elm_Toolbar_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->obj);
- Evas_Object *obj2 = it->obj;
+ Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj2 = it->base.widget;
if ((!wd) || (!it)) return;
- if (it->del_cb) it->del_cb((void *)it->data, it->obj, it);
+ elm_widget_item_pre_notify_del(it);
wd->items = eina_list_remove(wd->items, it);
eina_stringshare_del(it->label);
if (it->icon) evas_object_del(it->icon);
- evas_object_del(it->base);
- free(it);
+ elm_widget_item_del(it);
_theme_hook(obj2);
}
@@ -547,7 +544,7 @@
EAPI void
elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *it, Evas_Smart_Cb func)
{
- it->del_cb = func;
+ elm_widget_item_del_cb_set(it, func);
}
/**
@@ -608,7 +605,7 @@
if (!item) return;
if (item->separator == separator) return;
item->separator = separator;
- _theme_hook(item->obj);
+ _theme_hook(item->base.view);
}
/**
@@ -765,7 +762,8 @@
if (it->selected)
{
it->selected = EINA_FALSE;
- edje_object_signal_emit(it->base, "elm,state,unselected", "elm");
+ edje_object_signal_emit
+ (it->base.view, "elm,state,unselected", "elm");
break;
}
}
@@ -783,7 +781,7 @@
{
if ((!item) || (!item->selected)) return;
item->selected = EINA_FALSE;
- edje_object_signal_emit(item->base, "elm,state,unselected", "elm");
+ edje_object_signal_emit(item->base.view, "elm,state,unselected", "elm");
}
/**
@@ -835,14 +833,14 @@
EAPI void
elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu)
{
- Widget_Data *wd = elm_widget_data_get(item->obj);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if ((!wd) || (!item)) return;
if (item->menu == menu) return;
item->menu = menu;
if (menu)
{
- item->o_menu = elm_menu_add(item->base);
+ item->o_menu = elm_menu_add(item->base.view);
if (wd->menu_parent)
elm_menu_parent_set(item->o_menu, wd->menu_parent);
evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE,
@@ -869,7 +867,7 @@
elm_toolbar_item_menu_get(Elm_Toolbar_Item *item)
{
if (!item) return NULL;
- Widget_Data *wd = elm_widget_data_get(item->obj);
+ Widget_Data *wd = elm_widget_data_get(item->base.widget);
if (!wd) return NULL;
elm_toolbar_item_menu_set(item, 1);
return item->o_menu;
|