forked from enlightenment/efl
elementary: migrate elm_view_list to use the new Efl.Model API.
This commit is contained in:
parent
90e0190161
commit
2c2df5b18b
|
@ -13,13 +13,8 @@
|
||||||
#define MY_CLASS ELM_VIEW_LIST_CLASS
|
#define MY_CLASS ELM_VIEW_LIST_CLASS
|
||||||
#define MY_CLASS_NAME "View List"
|
#define MY_CLASS_NAME "View List"
|
||||||
|
|
||||||
struct _Elm_View_List_Data;
|
|
||||||
typedef struct _Elm_View_List_Data Elm_View_List_Data;
|
typedef struct _Elm_View_List_Data Elm_View_List_Data;
|
||||||
|
|
||||||
struct _View_List_ItemData;
|
|
||||||
typedef struct _View_List_ItemData View_List_ItemData;
|
typedef struct _View_List_ItemData View_List_ItemData;
|
||||||
|
|
||||||
struct _View_List_ValueItem;
|
|
||||||
typedef struct _View_List_ValueItem View_List_ValueItem;
|
typedef struct _View_List_ValueItem View_List_ValueItem;
|
||||||
|
|
||||||
struct _Elm_View_List_Data
|
struct _Elm_View_List_Data
|
||||||
|
@ -29,8 +24,11 @@ struct _Elm_View_List_Data
|
||||||
View_List_ItemData *rootdata;
|
View_List_ItemData *rootdata;
|
||||||
Elm_Genlist_Item_Class *itc;
|
Elm_Genlist_Item_Class *itc;
|
||||||
Elm_Genlist_Item_Type itype;
|
Elm_Genlist_Item_Type itype;
|
||||||
Eina_Hash *prop_con;
|
|
||||||
|
struct {
|
||||||
|
Eina_Hash *properties;
|
||||||
Eo *model;
|
Eo *model;
|
||||||
|
} connect;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _View_List_ItemData
|
struct _View_List_ItemData
|
||||||
|
@ -50,7 +48,8 @@ struct _View_List_ValueItem
|
||||||
};
|
};
|
||||||
|
|
||||||
static void _efl_model_load_children(View_List_ItemData *);
|
static void _efl_model_load_children(View_List_ItemData *);
|
||||||
static void _efl_model_children_count_change_cb(void *, const Efl_Event *event);
|
static void _efl_model_children_added_cb(void *, const Efl_Event *event);
|
||||||
|
static void _efl_model_children_removed_cb(void *, const Efl_Event *event);
|
||||||
static void _efl_model_properties_change_cb(void *, const Efl_Event *event);
|
static void _efl_model_properties_change_cb(void *, const Efl_Event *event);
|
||||||
|
|
||||||
static void _expand_request_cb(void *data EINA_UNUSED, const Efl_Event *event);
|
static void _expand_request_cb(void *data EINA_UNUSED, const Efl_Event *event);
|
||||||
|
@ -59,7 +58,8 @@ static void _contracted_cb(void *data EINA_UNUSED, const Efl_Event *event);
|
||||||
|
|
||||||
/* --- Genlist Callbacks --- */
|
/* --- Genlist Callbacks --- */
|
||||||
EFL_CALLBACKS_ARRAY_DEFINE(model_callbacks,
|
EFL_CALLBACKS_ARRAY_DEFINE(model_callbacks,
|
||||||
{ EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, _efl_model_children_count_change_cb });
|
{ EFL_MODEL_EVENT_CHILD_ADDED, _efl_model_children_added_cb },
|
||||||
|
{ EFL_MODEL_EVENT_CHILD_REMOVED, _efl_model_children_removed_cb });
|
||||||
EFL_CALLBACKS_ARRAY_DEFINE(genlist_callbacks,
|
EFL_CALLBACKS_ARRAY_DEFINE(genlist_callbacks,
|
||||||
{ ELM_GENLIST_EVENT_EXPAND_REQUEST, _expand_request_cb },
|
{ ELM_GENLIST_EVENT_EXPAND_REQUEST, _expand_request_cb },
|
||||||
{ ELM_GENLIST_EVENT_CONTRACT_REQUEST, _contract_request_cb },
|
{ ELM_GENLIST_EVENT_CONTRACT_REQUEST, _contract_request_cb },
|
||||||
|
@ -79,8 +79,8 @@ static void
|
||||||
_item_del(void *data, Evas_Object *obj EINA_UNUSED)
|
_item_del(void *data, Evas_Object *obj EINA_UNUSED)
|
||||||
{
|
{
|
||||||
View_List_ItemData *idata = data;
|
View_List_ItemData *idata = data;
|
||||||
if (!idata)
|
|
||||||
return;
|
if (!idata) return;
|
||||||
|
|
||||||
efl_event_callback_array_del(idata->model, model_callbacks(), idata);
|
efl_event_callback_array_del(idata->model, model_callbacks(), idata);
|
||||||
efl_event_callback_del(idata->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _efl_model_properties_change_cb, idata);
|
efl_event_callback_del(idata->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _efl_model_properties_change_cb, idata);
|
||||||
|
@ -94,120 +94,30 @@ _item_del(void *data, Evas_Object *obj EINA_UNUSED)
|
||||||
free(idata);
|
free(idata);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_property_get_cb(void* data, Efl_Event const* event)
|
|
||||||
{
|
|
||||||
View_List_ValueItem *vitem = data;
|
|
||||||
Eina_Value *value = (Eina_Value*)((Efl_Future_Event_Success*)event->info)->value;
|
|
||||||
vitem->value = eina_value_new(eina_value_type_get(value));
|
|
||||||
eina_value_copy(value, vitem->value);
|
|
||||||
|
|
||||||
if (vitem->item)
|
|
||||||
elm_genlist_item_update(vitem->item);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_property_get_error_cb(void* data, Efl_Event const* event EINA_UNUSED)
|
|
||||||
{
|
|
||||||
View_List_ValueItem *vitem = data;
|
|
||||||
eina_stringshare_del(vitem->part);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Value *
|
|
||||||
_item_get_value(View_List_ItemData *idata, const char *part)
|
|
||||||
{
|
|
||||||
View_List_ValueItem *vitem = NULL;
|
|
||||||
Eina_Value *value = NULL;
|
|
||||||
Eina_List *l, *ln;
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH_SAFE(idata->values, l, ln, vitem)
|
|
||||||
{
|
|
||||||
if (vitem->part == NULL)
|
|
||||||
{
|
|
||||||
unsigned i = eina_list_count(idata->values);
|
|
||||||
if (i == 1)
|
|
||||||
{
|
|
||||||
idata->values = eina_list_remove(idata->values, vitem);
|
|
||||||
free(vitem);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
idata->values = eina_list_remove_list(idata->values, l);
|
|
||||||
free(vitem);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(vitem->part, part) == 0)
|
|
||||||
{
|
|
||||||
value = vitem->value;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value == NULL)
|
|
||||||
{
|
|
||||||
Efl_Future *future;
|
|
||||||
vitem = calloc(1, sizeof(View_List_ValueItem));
|
|
||||||
const char *prop = eina_hash_find(idata->priv->prop_con, part);
|
|
||||||
|
|
||||||
if (prop == NULL) prop = part;
|
|
||||||
|
|
||||||
vitem->part = eina_stringshare_add(part);
|
|
||||||
vitem->item = idata->item;
|
|
||||||
idata->values = eina_list_append(idata->values, vitem);
|
|
||||||
future = efl_model_property_get(idata->model, prop);
|
|
||||||
efl_future_then(future, &_property_get_cb,
|
|
||||||
&_property_get_error_cb, NULL, vitem);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned i = eina_list_count(idata->values);
|
|
||||||
idata->values = eina_list_remove(idata->values, vitem);
|
|
||||||
if (i == 1) idata->values = NULL;
|
|
||||||
|
|
||||||
eina_stringshare_del(vitem->part);
|
|
||||||
free(vitem);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Evas_Object *
|
static Evas_Object *
|
||||||
_item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
_item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
||||||
{
|
{
|
||||||
const Eina_Value_Type *vtype;
|
const Eina_Value_Type *vtype;
|
||||||
|
const char *prop;
|
||||||
|
Eina_Value *value = NULL;
|
||||||
Evas_Object *content = NULL;
|
Evas_Object *content = NULL;
|
||||||
View_List_ItemData *idata = data;
|
View_List_ItemData *idata = data;
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
||||||
|
|
||||||
if (!idata->item)
|
if (!idata->item) return NULL;
|
||||||
return NULL;
|
|
||||||
|
|
||||||
Eina_Value *value = _item_get_value(idata, part);
|
prop = eina_hash_find(idata->priv->connect.properties, part);
|
||||||
|
if (!prop) prop = part;
|
||||||
|
|
||||||
if (value == NULL)
|
value = efl_model_property_get(idata->model, prop);
|
||||||
return NULL;
|
if (value == NULL) return NULL;
|
||||||
|
|
||||||
vtype = eina_value_type_get(value);
|
vtype = eina_value_type_get(value);
|
||||||
if (vtype == EINA_VALUE_TYPE_STRING || vtype == EINA_VALUE_TYPE_STRINGSHARE)
|
if (vtype == EINA_VALUE_TYPE_BLOB)
|
||||||
{
|
|
||||||
char *content_s = NULL;
|
|
||||||
content_s = eina_value_to_string(value);
|
|
||||||
content = elm_icon_add(obj);
|
|
||||||
if (elm_icon_standard_set(content, content_s))
|
|
||||||
{
|
|
||||||
evas_object_size_hint_aspect_set(content, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
evas_object_del(content);
|
|
||||||
content = NULL;
|
|
||||||
}
|
|
||||||
free(content_s);
|
|
||||||
}
|
|
||||||
else if (vtype == EINA_VALUE_TYPE_BLOB)
|
|
||||||
{
|
{
|
||||||
Eina_Value_Blob out;
|
Eina_Value_Blob out;
|
||||||
|
|
||||||
eina_value_get(value, &out);
|
eina_value_get(value, &out);
|
||||||
if (out.memory != NULL)
|
if (out.memory != NULL)
|
||||||
{
|
{
|
||||||
|
@ -216,7 +126,36 @@ _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
||||||
elm_image_memfile_set(content, out.memory, out.size, NULL, NULL);
|
elm_image_memfile_set(content, out.memory, out.size, NULL, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
eina_value_flush(value);
|
else if (vtype == EINA_VALUE_TYPE_FILE)
|
||||||
|
{
|
||||||
|
Eina_File *f = NULL;
|
||||||
|
|
||||||
|
eina_value_get(value, &f);
|
||||||
|
|
||||||
|
content = elm_image_add(obj);
|
||||||
|
elm_image_mmap_set(content, f, NULL);
|
||||||
|
}
|
||||||
|
else if (vtype == EINA_VALUE_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
eina_value_get(value, &content);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *str = NULL;
|
||||||
|
str = eina_value_to_string(value);
|
||||||
|
content = elm_icon_add(obj);
|
||||||
|
if (elm_icon_standard_set(content, str))
|
||||||
|
{
|
||||||
|
evas_object_size_hint_aspect_set(content, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evas_object_del(content);
|
||||||
|
content = NULL;
|
||||||
|
}
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
eina_value_free(value);
|
||||||
|
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
@ -224,21 +163,24 @@ _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
||||||
static char *
|
static char *
|
||||||
_item_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
_item_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part)
|
||||||
{
|
{
|
||||||
|
Eina_Value *value = NULL;
|
||||||
|
const char *prop;
|
||||||
char *text = NULL;
|
char *text = NULL;
|
||||||
View_List_ItemData *idata = data;
|
View_List_ItemData *idata = data;
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
||||||
if (!idata->item)
|
if (!idata->item) return NULL;
|
||||||
return text;
|
|
||||||
|
|
||||||
Eina_Value *value = _item_get_value(idata, part);
|
prop = eina_hash_find(idata->priv->connect.properties, part);
|
||||||
|
if (!prop) prop = part;
|
||||||
|
|
||||||
|
value = efl_model_property_get(idata->model, prop);
|
||||||
|
if (value == NULL) return NULL;
|
||||||
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
text = eina_value_to_string(value);
|
text = eina_value_to_string(value);
|
||||||
eina_value_flush(value);
|
|
||||||
}
|
eina_value_free(value);
|
||||||
|
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
@ -300,75 +242,101 @@ _efl_model_properties_change_cb(void *data, const Efl_Event *event)
|
||||||
elm_genlist_item_update(idata->item);
|
elm_genlist_item_update(idata->item);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static Eina_Value
|
||||||
_efl_model_load_children_then(void * data, Efl_Event const* event)
|
_efl_model_load_children_then(void *data, const Eina_Value v,
|
||||||
|
const Eina_Future *ev EINA_UNUSED)
|
||||||
{
|
{
|
||||||
View_List_ItemData *pdata = data;
|
View_List_ItemData *pdata = data;
|
||||||
Eina_Accessor *accessor = (Eina_Accessor*)((Efl_Future_Event_Success*)event->info)->value;
|
|
||||||
Eo *child;
|
|
||||||
unsigned i = 0;
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(pdata);
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(pdata->priv);
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(accessor);
|
|
||||||
|
|
||||||
Elm_View_List_Data *priv = pdata->priv;
|
Elm_View_List_Data *priv = pdata->priv;
|
||||||
|
unsigned int i, len;
|
||||||
|
Efl_Model *child = NULL;
|
||||||
|
|
||||||
EINA_ACCESSOR_FOREACH(accessor, i, child)
|
if (eina_value_type_get(&v) == EINA_VALUE_TYPE_ERROR)
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
|
||||||
{
|
{
|
||||||
View_List_ItemData *idata = calloc(1, sizeof(View_List_ItemData));
|
View_List_ItemData *idata = calloc(1, sizeof(View_List_ItemData));
|
||||||
EINA_SAFETY_ON_NULL_RETURN(idata);
|
if (!idata) continue ;
|
||||||
|
|
||||||
idata->priv = priv;
|
idata->priv = priv;
|
||||||
idata->parent = pdata;
|
idata->parent = pdata;
|
||||||
idata->model = child;
|
idata->model = efl_ref(child);
|
||||||
efl_ref(child);
|
|
||||||
efl_event_callback_add(child, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _efl_model_properties_change_cb, idata);
|
efl_event_callback_add(idata->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
|
||||||
|
_efl_model_properties_change_cb, idata);
|
||||||
|
|
||||||
idata->item = elm_genlist_item_append(priv->genlist, priv->itc, idata, pdata->item,
|
idata->item = elm_genlist_item_append(priv->genlist, priv->itc, idata, pdata->item,
|
||||||
priv->itype, _item_sel_cb, idata);
|
priv->itype, _item_sel_cb, idata);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > 0 && pdata->item)
|
if (i > 0 && pdata->item)
|
||||||
elm_genlist_item_expanded_set(pdata->item, EINA_TRUE);
|
elm_genlist_item_expanded_set(pdata->item, EINA_TRUE);
|
||||||
|
|
||||||
|
end:
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_efl_model_load_children(View_List_ItemData *pdata)
|
_efl_model_load_children(View_List_ItemData *pdata)
|
||||||
{
|
{
|
||||||
efl_future_then(efl_model_children_slice_get(pdata->model, 0, 0),
|
Eina_Future *f;
|
||||||
&_efl_model_load_children_then, NULL, NULL, pdata);
|
|
||||||
|
f = efl_model_children_slice_get(pdata->priv->connect.model, 0,
|
||||||
|
efl_model_children_count_get(pdata->priv->connect.model));
|
||||||
|
f = eina_future_then(f, _efl_model_load_children_then, pdata);
|
||||||
|
efl_future_Eina_FutureXXX_then(pdata->priv->genlist, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_efl_model_children_count_change_cb(void *data, const Efl_Event *event EINA_UNUSED)
|
_efl_model_children_removed_cb(void *data, const Efl_Event *event)
|
||||||
{
|
{
|
||||||
|
Efl_Model_Children_Event* evt = event->info;
|
||||||
View_List_ItemData *idata = data;
|
View_List_ItemData *idata = data;
|
||||||
EINA_SAFETY_ON_NULL_RETURN(idata);
|
Elm_Object_Item *item;
|
||||||
EINA_SAFETY_ON_NULL_RETURN(idata->priv);
|
const Eina_List *subitems, *l;
|
||||||
EINA_SAFETY_ON_NULL_RETURN(idata->priv->genlist);
|
unsigned int i = 0;
|
||||||
|
|
||||||
elm_genlist_item_subitems_clear(idata->item);
|
subitems = elm_genlist_item_subitems_get(idata->item);
|
||||||
|
|
||||||
_efl_model_load_children(idata);
|
EINA_LIST_FOREACH(subitems, l, item)
|
||||||
|
{
|
||||||
|
if (i == evt->index) break ;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != evt->index) return ;
|
||||||
|
elm_object_item_del(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_efl_model_children_added_cb(void *data, const Efl_Event *event)
|
||||||
|
{
|
||||||
|
Efl_Model_Children_Event* evt = event->info;
|
||||||
|
View_List_ItemData *idata = data;
|
||||||
|
Eina_Future *f;
|
||||||
|
|
||||||
|
f = efl_model_children_slice_get(idata->priv->connect.model, evt->index, 1);
|
||||||
|
f = eina_future_then(f, _efl_model_load_children_then, idata);
|
||||||
|
efl_future_Eina_FutureXXX_then(idata->priv->genlist, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_priv_model_set(Elm_View_List_Data *priv, Eo *model)
|
_priv_model_set(Elm_View_List_Data *priv, Eo *model)
|
||||||
{
|
{
|
||||||
if (priv->model != NULL)
|
if (priv->connect.model)
|
||||||
{
|
{
|
||||||
efl_event_callback_array_del(priv->model, model_callbacks(), priv->rootdata);
|
efl_event_callback_array_del(priv->connect.model, model_callbacks(), priv->rootdata);
|
||||||
elm_obj_genlist_clear(priv->genlist);
|
elm_obj_genlist_clear(priv->genlist);
|
||||||
efl_unref(priv->model);
|
|
||||||
priv->model = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (model == NULL)
|
efl_replace(&priv->connect.model, model);
|
||||||
return;
|
|
||||||
|
|
||||||
priv->model = model;
|
if (model == NULL) return;
|
||||||
priv->rootdata->model = priv->model;
|
|
||||||
efl_ref(priv->model);
|
|
||||||
|
|
||||||
efl_event_callback_array_add(priv->model, model_callbacks(), priv->rootdata);
|
priv->rootdata->model = priv->connect.model;
|
||||||
|
|
||||||
|
efl_event_callback_array_add(priv->connect.model, model_callbacks(), priv->rootdata);
|
||||||
_efl_model_load_children(priv->rootdata);
|
_efl_model_load_children(priv->rootdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,7 +363,7 @@ _elm_view_list_genlist_set(Eo *obj, Elm_View_List_Data *priv, Evas_Object *genli
|
||||||
priv->itc->func.content_get = _item_content_get;
|
priv->itc->func.content_get = _item_content_get;
|
||||||
priv->itc->func.state_get = NULL;
|
priv->itc->func.state_get = NULL;
|
||||||
priv->itc->func.del = _item_del;
|
priv->itc->func.del = _item_del;
|
||||||
priv->prop_con = eina_hash_string_superfast_new(free);
|
priv->connect.properties = eina_hash_string_superfast_new(free);
|
||||||
|
|
||||||
efl_event_callback_array_add(priv->genlist, genlist_callbacks(), priv);
|
efl_event_callback_array_add(priv->genlist, genlist_callbacks(), priv);
|
||||||
evas_object_event_callback_add(priv->genlist, EVAS_CALLBACK_DEL, _genlist_deleted, priv);
|
evas_object_event_callback_add(priv->genlist, EVAS_CALLBACK_DEL, _genlist_deleted, priv);
|
||||||
|
@ -408,15 +376,16 @@ _elm_view_list_efl_object_destructor(Eo *obj, Elm_View_List_Data *priv)
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv);
|
EINA_SAFETY_ON_NULL_RETURN(priv);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(obj);
|
EINA_SAFETY_ON_NULL_RETURN(obj);
|
||||||
|
|
||||||
efl_event_callback_array_del(priv->model, model_callbacks(), priv->rootdata);
|
efl_event_callback_array_del(priv->connect.model, model_callbacks(), priv->rootdata);
|
||||||
|
|
||||||
elm_obj_genlist_clear(priv->genlist);
|
elm_obj_genlist_clear(priv->genlist);
|
||||||
free((void *)priv->itc->item_style);
|
free((void *)priv->itc->item_style);
|
||||||
elm_genlist_item_class_free(priv->itc);
|
elm_genlist_item_class_free(priv->itc);
|
||||||
|
|
||||||
eina_hash_free(priv->prop_con);
|
eina_hash_free(priv->connect.properties);
|
||||||
free(priv->rootdata);
|
free(priv->rootdata);
|
||||||
priv->rootdata = NULL;
|
priv->rootdata = NULL;
|
||||||
|
|
||||||
if (priv->genlist)
|
if (priv->genlist)
|
||||||
{
|
{
|
||||||
evas_object_event_callback_del(priv->genlist, EVAS_CALLBACK_DEL, _genlist_deleted);
|
evas_object_event_callback_del(priv->genlist, EVAS_CALLBACK_DEL, _genlist_deleted);
|
||||||
|
@ -424,7 +393,7 @@ _elm_view_list_efl_object_destructor(Eo *obj, Elm_View_List_Data *priv)
|
||||||
efl_unref(priv->genlist);
|
efl_unref(priv->genlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
efl_unref(priv->model);
|
efl_unref(priv->connect.model);
|
||||||
|
|
||||||
efl_destructor(efl_super(obj, MY_CLASS));
|
efl_destructor(efl_super(obj, MY_CLASS));
|
||||||
}
|
}
|
||||||
|
@ -445,33 +414,22 @@ _elm_view_list_property_connect(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv,
|
||||||
{
|
{
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv);
|
EINA_SAFETY_ON_NULL_RETURN(priv);
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv->prop_con);
|
EINA_SAFETY_ON_NULL_RETURN(priv->connect.properties);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(property);
|
EINA_SAFETY_ON_NULL_RETURN(property);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(part);
|
EINA_SAFETY_ON_NULL_RETURN(part);
|
||||||
|
|
||||||
free(eina_hash_set(priv->prop_con, part, strdup(property)));
|
free(eina_hash_set(priv->connect.properties, part, strdup(property)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_view_list_model_set(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv, Efl_Model *model)
|
_elm_view_list_model_set(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv, Efl_Model *model)
|
||||||
{
|
{
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv);
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(model);
|
|
||||||
_priv_model_set(priv, model);
|
_priv_model_set(priv, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static Efl_Model *
|
||||||
_elm_view_list_model_unset(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv)
|
_elm_view_list_model_get(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv)
|
||||||
{
|
{
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv);
|
return priv->connect.model;
|
||||||
_priv_model_set(priv, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_elm_view_list_model_get(Eo *obj EINA_UNUSED, Elm_View_List_Data *priv, Eo **model)
|
|
||||||
{
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(priv);
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN(model);
|
|
||||||
*model = priv->model;
|
|
||||||
}
|
}
|
||||||
#include "elm_view_list.eo.c"
|
#include "elm_view_list.eo.c"
|
||||||
|
|
|
@ -34,28 +34,21 @@ class Elm.View.List (Efl.Object)
|
||||||
@in part: string; [[Edje's theme part]]
|
@in part: string; [[Edje's theme part]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
model_set {
|
@property model {
|
||||||
|
set {
|
||||||
[[Set model
|
[[Set model
|
||||||
|
|
||||||
@since 1.11
|
@since 1.11
|
||||||
]]
|
]]
|
||||||
params {
|
|
||||||
@in model: Efl.Model; [[New Emodel to set]]
|
|
||||||
}
|
}
|
||||||
}
|
get {
|
||||||
model_unset {
|
|
||||||
[[Unset model
|
|
||||||
|
|
||||||
@since 1.11
|
|
||||||
]]
|
|
||||||
}
|
|
||||||
model_get {
|
|
||||||
[[Get model
|
[[Get model
|
||||||
|
|
||||||
@since 1.11
|
@since 1.11
|
||||||
]]
|
]]
|
||||||
params {
|
}
|
||||||
@out model: Efl.Model; [[Returned Emodel]]
|
values {
|
||||||
|
model: Efl.Model; [[Efl.Model to set]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue