From: cedric Date: Sat, 25 Jun 2011 23:20:22 +0000 (+0000) Subject: elementary: add some usefull function around sorted insert. X-Git-Tag: REL_F_I9200_20110722_1~8^2~50^2~89 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4645b5aff90919e2f52c5920ef46300bbfbe5033;p=framework%2Fuifw%2Felementary.git elementary: add some usefull function around sorted insert. git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@60691 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 1648be2..7e35b03 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -296,6 +296,7 @@ static const Evas_Smart_Cb_Description _signals[] = { }; static Eina_Compare_Cb _elm_gengrid_item_compare_cb; +static Eina_Compare_Cb _elm_gengrid_item_compare_data_cb; static Eina_Bool _event_hook(Evas_Object *obj, @@ -1731,12 +1732,21 @@ _scr_scroll(void *data, } static int +_elm_gengrid_item_compare_data(const void *data, const void *data1) +{ + const Elm_Gengrid_Item *item = data; + const Elm_Gengrid_Item *item1 = data1; + + return _elm_gengrid_item_compare_data_cb(item->base.data, item1->base.data); +} + +static int _elm_gengrid_item_compare(const void *data, const void *data1) { Elm_Gengrid_Item *item, *item1; item = ELM_GENGRID_ITEM_FROM_INLIST(data); item1 = ELM_GENGRID_ITEM_FROM_INLIST(data1); - return _elm_gengrid_item_compare_cb(item->base.data, item1->base.data); + return _elm_gengrid_item_compare_cb(item, item1); } /** @@ -2106,12 +2116,12 @@ elm_gengrid_item_insert_after(Evas_Object *obj, } EAPI Elm_Gengrid_Item * -elm_gengrid_item_sorted_insert(Evas_Object *obj, - const Elm_Gengrid_Item_Class *gic, - const void *data, - Eina_Compare_Cb comp, - Evas_Smart_Cb func, - const void *func_data) +elm_gengrid_item_direct_sorted_insert(Evas_Object *obj, + const Elm_Gengrid_Item_Class *gic, + const void *data, + Eina_Compare_Cb comp, + Evas_Smart_Cb func, + const void *func_data) { Elm_Gengrid_Item *item; ELM_CHECK_WIDTYPE(obj, widtype) NULL; @@ -2120,8 +2130,8 @@ elm_gengrid_item_sorted_insert(Evas_Object *obj, item = _item_create(wd, gic, data, func, func_data); if (!item) return NULL; - _elm_gengrid_item_compare_cb = comp; + _elm_gengrid_item_compare_cb = comp; wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(item), _elm_gengrid_item_compare); if (wd->calc_job) ecore_job_del(wd->calc_job); @@ -2130,6 +2140,19 @@ elm_gengrid_item_sorted_insert(Evas_Object *obj, return item; } +EAPI Elm_Gengrid_Item * +elm_gengrid_item_sorted_insert(Evas_Object *obj, + const Elm_Gengrid_Item_Class *gic, + const void *data, + Eina_Compare_Cb comp, + Evas_Smart_Cb func, + const void *func_data) +{ + _elm_gengrid_item_compare_data_cb = comp; + + return elm_gengrid_item_direct_sorted_insert(obj, gic, data, _elm_gengrid_item_compare_data, func, func_data); +} + /** * Remove an item from the Gengrid. * @@ -2351,6 +2374,25 @@ elm_gengrid_item_data_set(Elm_Gengrid_Item *item, elm_gengrid_item_update(item); } +EAPI const Elm_Gengrid_Item_Class * +elm_gengrid_item_item_class_get(const Elm_Gengrid_Item *item) +{ + ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item, NULL); + if (item->delete_me) return NULL; + return item->gic; +} + +EAPI void +elm_gengrid_item_item_class_set(Elm_Gengrid_Item *item, + const Elm_Gengrid_Item_Class *gic) +{ + ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item); + EINA_SAFETY_ON_NULL_RETURN(gic); + if (item->delete_me) return; + item->gic = gic; + elm_gengrid_item_update(item); +} + /** * Get the item's coordinates. * diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 005541e..c3358de 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -469,6 +469,7 @@ static const Evas_Smart_Cb_Description _signals[] = { }; static Eina_Compare_Cb _elm_genlist_item_compare_cb; +static Eina_Compare_Cb _elm_genlist_item_compare_data_cb; static Eina_Bool _event_hook(Evas_Object *obj, @@ -3483,12 +3484,21 @@ _item_queue(Widget_Data *wd, } static int +_elm_genlist_item_compare_data(const void *data, const void *data1) +{ + const Elm_Genlist_Item *item = data; + const Elm_Genlist_Item *item1 = data1; + + return _elm_genlist_item_compare_data_cb(item->base.data, item1->base.data); +} + +static int _elm_genlist_item_compare(const void *data, const void *data1) { Elm_Genlist_Item *item, *item1; item = ELM_GENLIST_ITEM_FROM_INLIST(data); item1 = ELM_GENLIST_ITEM_FROM_INLIST(data1); - return _elm_genlist_item_compare_cb(item->base.data, item1->base.data); + return _elm_genlist_item_compare_cb(item, item1); } static void @@ -3697,30 +3707,15 @@ elm_genlist_item_insert_before(Evas_Object *obj, return it; } -/** - * Insert a new item into the sorted genlist object - * - * @param obj The genlist object - * @param itc The item class for the item - * @param data The item data - * @param parent The parent item, or NULL if none - * @param flags Item flags - * @param comp The function called for the sort - * @param func Convenience function called when item selected - * @param func_data Data passed to @p func above. - * @return A handle to the item added or NULL if not possible - * - * @ingroup Genlist - */ EAPI Elm_Genlist_Item * -elm_genlist_item_sorted_insert(Evas_Object *obj, - const Elm_Genlist_Item_Class *itc, - const void *data, - Elm_Genlist_Item *parent, - Elm_Genlist_Item_Flags flags, - Eina_Compare_Cb comp, - Evas_Smart_Cb func, - const void *func_data) +elm_genlist_item_direct_sorted_insert(Evas_Object *obj, + const Elm_Genlist_Item_Class *itc, + const void *data, + Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + Eina_Compare_Cb comp, + Evas_Smart_Cb func, + const void *func_data) { ELM_CHECK_WIDTYPE(obj, widtype) NULL; Widget_Data *wd = elm_widget_data_get(obj); @@ -3730,10 +3725,11 @@ elm_genlist_item_sorted_insert(Evas_Object *obj, if (!it) return NULL; _elm_genlist_item_compare_cb = comp; + if (it->parent) { it->parent->items = - eina_list_sorted_insert(it->parent->items, comp, it); + eina_list_sorted_insert(it->parent->items, _elm_genlist_item_compare, it); } wd->items = eina_inlist_sorted_insert(wd->items, EINA_INLIST_GET(it), _elm_genlist_item_compare); @@ -3755,6 +3751,37 @@ elm_genlist_item_sorted_insert(Evas_Object *obj, } /** + * Insert a new item into the sorted genlist object + * + * @param obj The genlist object + * @param itc The item class for the item + * @param data The item data + * @param parent The parent item, or NULL if none + * @param flags Item flags + * @param comp The function called for the sort + * @param func Convenience function called when item selected + * @param func_data Data passed to @p func above. + * @return A handle to the item added or NULL if not possible + * + * @ingroup Genlist + */ +EAPI Elm_Genlist_Item * +elm_genlist_item_sorted_insert(Evas_Object *obj, + const Elm_Genlist_Item_Class *itc, + const void *data, + Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + Eina_Compare_Cb comp, + Evas_Smart_Cb func, + const void *func_data) +{ + _elm_genlist_item_compare_data_cb = comp; + + return elm_genlist_item_direct_sorted_insert(obj, itc, data, parent, flags, + _elm_genlist_item_compare_data, func, func_data); +} + +/** * Insert an item after another in the genlst * * This inserts an item after another in the list. It will be in the @@ -4876,6 +4903,14 @@ elm_genlist_item_item_class_update(Elm_Genlist_Item *it, elm_genlist_item_update(it); } +EAPI const Elm_Genlist_Item_Class * +elm_genlist_item_item_class_get(const Elm_Genlist_Item *it) +{ + ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(it, NULL); + if (it->delete_me) return NULL; + return it->itc; +} + static Evas_Object * _elm_genlist_item_label_create(void *data, Evas_Object *obj,