diff options
author | Larry Jr <larry.olj@gmail.com> | 2015-03-19 19:08:14 -0300 |
---|---|---|
committer | Larry Jr <larry.olj@gmail.com> | 2015-03-19 19:08:14 -0300 |
commit | 056d9ad1fa7ed57ee85f5ae5b387763f10dcd11c (patch) | |
tree | 34080f564e0f40f4696c6a5d62cc833967b23d6d | |
parent | b2494ef738f3ad8b1bd12a258ba8867cd574eef1 (diff) | |
download | elementary-056d9ad1fa7ed57ee85f5ae5b387763f10dcd11c.tar.gz |
elmview: refactory do new emodel api
-rw-r--r-- | src/examples/filemvc.c | 5 | ||||
-rw-r--r-- | src/lib/elm_view_form.c | 78 | ||||
-rw-r--r-- | src/lib/elm_view_list.c | 29 |
3 files changed, 62 insertions, 50 deletions
diff --git a/src/examples/filemvc.c b/src/examples/filemvc.c index 580845275..254e8db71 100644 --- a/src/examples/filemvc.c +++ b/src/examples/filemvc.c @@ -59,16 +59,15 @@ _tree_selected_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Description *d printf("TREE selected model\n"); Emodel_Test_Filemvc_Data *priv = data; Eo *child = event_info; - Eina_Value vpath; + const Eina_Value *vpath; Eo *model; char *path; eo_do(child, emodel_property_get("path", &vpath)); - eina_value_get(&vpath, &path); + eina_value_get(vpath, &path); model = eo_add(EIO_MODEL_CLASS, NULL, eio_model_path_set(path)); eo_do(model, emodel_load()); eo_do(priv->fileview, elm_view_list_model_set(model)); - eina_value_flush(&vpath); // eo_unref(model); return EINA_TRUE; } diff --git a/src/lib/elm_view_form.c b/src/lib/elm_view_form.c index f08c00e8b..347c7173f 100644 --- a/src/lib/elm_view_form.c +++ b/src/lib/elm_view_form.c @@ -21,7 +21,7 @@ typedef struct _Elm_View_Form_Widget Elm_View_Form_Widget; * @brief Local-use callbacks */ typedef void (*Elm_View_Form_Event_Cb)(Elm_View_Form_Widget *, Elm_View_Form_Data *, Evas_Object *); -typedef void (*Elm_View_Form_Widget_Object_Set_Cb)(Eo *, Evas_Object *, Eina_Value *, const char *); +typedef void (*Elm_View_Form_Widget_Object_Set_Cb)(Eo *, Evas_Object *, const Eina_Value *, const char *); struct _Elm_View_Form_Widget { @@ -42,25 +42,31 @@ static Eina_Bool _emodel_properties_change_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info) { const Emodel_Property_Event *evt = event_info; + const Eina_Value *value; + const char *prop; + unsigned int i; Elm_View_Form_Data *priv = data; - Eina_Value value; Eina_List *l = NULL; Elm_View_Form_Widget *w = NULL; + Eina_Array_Iterator it; EINA_SAFETY_ON_NULL_RETURN_VAL(priv, EINA_TRUE); EINA_SAFETY_ON_NULL_RETURN_VAL(evt, EINA_TRUE); - if (evt->changed_properties && eina_value_type_get(evt->changed_properties) == EINA_VALUE_TYPE_STRUCT) + if (!evt->changed_properties) + return EINA_TRUE; + + //update all widgets with this property + EINA_LIST_FOREACH(priv->l, l, w) { - //update all widgets with this property - EINA_LIST_FOREACH(priv->l, l, w) - { - if (eina_value_struct_value_get(evt->changed_properties, w->widget_propname, &value) == EINA_TRUE) + EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it) + { + if (!strcmp(w->widget_propname, prop)) { - w->widget_obj_set_cb(priv->model_obj, w->widget_obj, &value, w->widget_propname); - eina_value_flush(&value); + eo_do(priv->model_obj, emodel_property_get(prop, &value)); + w->widget_obj_set_cb(priv->model_obj, w->widget_obj, value, w->widget_propname); } - } + } } return EINA_TRUE; @@ -69,15 +75,14 @@ _emodel_properties_change_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Des static void _update_model_properties(Elm_View_Form_Data *priv) { - Eina_Value value; + const Eina_Value *value; Eina_List *l; Elm_View_Form_Widget *w; //update all widgets property EINA_LIST_FOREACH(priv->l, l, w) { eo_do(priv->model_obj, emodel_property_get(w->widget_propname, &value)); - w->widget_obj_set_cb(priv->model_obj, w->widget_obj, &value, w->widget_propname); - eina_value_flush(&value); + w->widget_obj_set_cb(priv->model_obj, w->widget_obj, value, w->widget_propname); } } @@ -86,12 +91,20 @@ _update_model_properties(Elm_View_Form_Data *priv) * Works, so far, for widget(s): Entry, Label */ static void -_elm_evas_object_text_set_cb(Eo *obj EINA_UNUSED, Evas_Object *widget, Eina_Value *value, const char *propname EINA_UNUSED) +_elm_evas_object_text_set_cb(Eo *obj EINA_UNUSED, Evas_Object *widget, const Eina_Value *value, const char *propname EINA_UNUSED) { - char *text = eina_value_to_string(value); - const char *c_text = elm_object_text_get(widget); + const char *c_text = NULL; + char *text = NULL; + + EINA_SAFETY_ON_NULL_RETURN(value); + EINA_SAFETY_ON_NULL_RETURN(widget); + + text = eina_value_to_string(value); EINA_SAFETY_ON_NULL_RETURN(text); + c_text = elm_object_text_get(widget); + EINA_SAFETY_ON_NULL_RETURN(c_text); + if (strcmp(text, c_text) != 0) { elm_object_text_set(widget, text); @@ -100,14 +113,18 @@ _elm_evas_object_text_set_cb(Eo *obj EINA_UNUSED, Evas_Object *widget, Eina_Valu } static void -_elm_evas_object_thumb_set_cb(Eo *obj EINA_UNUSED, Evas_Object *thumb, Eina_Value *value, const char *propname EINA_UNUSED) +_elm_evas_object_thumb_set_cb(Eo *obj EINA_UNUSED, Evas_Object *thumb, const Eina_Value *value, const char *propname EINA_UNUSED) { - char *filename = eina_value_to_string(value); - EINA_SAFETY_ON_NULL_RETURN(filename); - EINA_SAFETY_ON_TRUE_RETURN(strlen(filename) >= PATH_MAX); + char *filename = NULL; - elm_thumb_file_set(thumb, filename, NULL); - elm_thumb_reload(thumb); + EINA_SAFETY_ON_NULL_RETURN(value); + filename = eina_value_to_string(value); + EINA_SAFETY_ON_NULL_RETURN(filename); + if (strlen(filename) < PATH_MAX) + { + elm_thumb_file_set(thumb, filename, NULL); + elm_thumb_reload(thumb); + } free(filename); } @@ -133,7 +150,7 @@ _elm_evas_object_text_changed_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *o EINA_SAFETY_ON_NULL_RETURN(w); eina_value_setup(&value, EINA_VALUE_TYPE_STRING); eina_value_set(&value, elm_object_text_get(obj)); - eo_do(priv->model_obj, emodel_property_set(w->widget_propname, value)); + eo_do(priv->model_obj, emodel_property_set(w->widget_propname, &value)); eina_value_flush(&value); } /** @@ -144,7 +161,7 @@ _elm_evas_object_text_changed_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *o static Eina_Bool _elm_view_widget_add(Elm_View_Form_Data *priv, const char *propname, Evas_Object *widget_obj) { - Eina_Value value; + const Eina_Value *value = NULL; Elm_View_Form_Widget *w = calloc(1, sizeof(Elm_View_Form_Widget)); EINA_SAFETY_ON_NULL_RETURN_VAL(w, EINA_FALSE); @@ -171,10 +188,10 @@ _elm_view_widget_add(Elm_View_Form_Data *priv, const char *propname, Evas_Object EINA_SAFETY_ON_NULL_RETURN_VAL(NULL, EINA_FALSE); } - if (eo_do(priv->model_obj, emodel_property_get(propname, &value)) == EINA_TRUE) + eo_do(priv->model_obj, emodel_property_get(propname, &value)); + if (value) { - w->widget_obj_set_cb(priv->model_obj, w->widget_obj, &value, w->widget_propname); - eina_value_flush(&value); + w->widget_obj_set_cb(priv->model_obj, w->widget_obj, value, w->widget_propname); } return EINA_TRUE; @@ -199,16 +216,11 @@ _elm_view_form_constructor(Eo *obj EINA_UNUSED, Elm_View_Form_Data *_pd, Eo *mod } } -static void -_elm_view_form_eo_base_constructor(Eo *obj, Elm_View_Form_Data *_pd EINA_UNUSED) -{ -} - /** * @brief destructor */ static void -_elm_view_form_eo_base_destructor(Eo *obj EINA_UNUSED, Elm_View_Form_Data *priv) +_elm_view_form_eo_base_destructor(Eo *obj, Elm_View_Form_Data *priv) { Elm_View_Form_Widget *w = NULL; EINA_LIST_FREE(priv->l, w) diff --git a/src/lib/elm_view_list.c b/src/lib/elm_view_list.c index 56b5df07b..8f78651b2 100644 --- a/src/lib/elm_view_list.c +++ b/src/lib/elm_view_list.c @@ -79,8 +79,7 @@ _item_del(void *data, Evas_Object *obj EINA_UNUSED) static Evas_Object * _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) { - //XXX: Add a Custon content function?? - Eina_Value value; + const Eina_Value *value = NULL; const Eina_Value_Type *vtype; Evas_Object *content = NULL; View_List_ItemData *idata = data; @@ -91,13 +90,15 @@ _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) const char *prop = eina_hash_find(priv->prop_con, part); if (prop == NULL) prop = part; - eina_value_setup(&value, EINA_VALUE_TYPE_STRING); eo_do(idata->model, emodel_property_get(prop, &value)); - vtype = eina_value_type_get(&value); + if (value == NULL) + return content; + + vtype = eina_value_type_get(value); if (vtype == EINA_VALUE_TYPE_STRING || vtype == EINA_VALUE_TYPE_STRINGSHARE) { - char *content_s; - eina_value_get(&value, &content_s); + char *content_s = NULL; + content_s = eina_value_to_string(value); content = elm_icon_add(obj); if (elm_icon_standard_set(content, content_s)) { @@ -108,19 +109,20 @@ _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) evas_object_del(content); content = NULL; } - } else - if (vtype == EINA_VALUE_TYPE_BLOB) + free(content_s); + } + else if (vtype == EINA_VALUE_TYPE_BLOB) { Eina_Value_Blob out; - eina_value_get(&value, &out); + eina_value_get(value, &out); if (out.memory != NULL) { content = elm_image_add(obj); + //XXX: need copy memory?? elm_image_memfile_set(content, out.memory, out.size, NULL, NULL); } } - eina_value_flush(&value); return content; } @@ -128,7 +130,7 @@ _item_content_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) static char * _item_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) { - Eina_Value value; + const Eina_Value *value = NULL; char *text = NULL; View_List_ItemData *idata = data; @@ -140,10 +142,9 @@ _item_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part) const char *prop = eina_hash_find(priv->prop_con, part); if (prop == NULL) prop = part; - eina_value_setup(&value, EINA_VALUE_TYPE_STRING); eo_do(idata->model, emodel_property_get(prop, &value)); - text = eina_value_to_string(&value); - eina_value_flush(&value); + if (value) + text = eina_value_to_string(value); return text; } |