};
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,
}
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);
}
/**
}
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;
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);
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.
*
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.
*
};
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,
}
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
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);
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);
}
/**
+ * 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
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,