diff options
author | Michael Bouchaud <yoz@efl.so> | 2013-09-18 00:46:46 +0200 |
---|---|---|
committer | Michael Bouchaud <yoz@efl.so> | 2013-09-18 16:21:10 +0200 |
commit | 2028f0779b4f347a350579f7e8277fbfab5fd7f2 (patch) | |
tree | 72f0de5fa43a96822982c33b4fa17915353e6987 /src/lib/elm_widget.c | |
parent | 8dc639286398df3f53422e5a98cd50822b7ce429 (diff) | |
download | elementary-2028f0779b4f347a350579f7e8277fbfab5fd7f2.tar.gz |
elementary: add a way to add some custom part text and save it for Elm_Object_Item
Diffstat (limited to 'src/lib/elm_widget.c')
-rw-r--r-- | src/lib/elm_widget.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 3c20ecc28..235fc1524 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -30,6 +30,7 @@ EAPI Eo_Op ELM_WIDGET_BASE_ID = EO_NOOP; (elm_widget_focus_get(obj))) typedef struct _Elm_Event_Cb_Data Elm_Event_Cb_Data; +typedef struct _Elm_Label_Data Elm_Label_Data; typedef struct _Elm_Translate_String_Data Elm_Translate_String_Data; struct _Elm_Event_Cb_Data @@ -38,6 +39,12 @@ struct _Elm_Event_Cb_Data const void *data; }; +struct _Elm_Label_Data +{ + const char *part; + const char *text; +}; + struct _Elm_Translate_String_Data { EINA_INLIST; @@ -5003,6 +5010,7 @@ _elm_widget_item_free(Elm_Widget_Item *item) item->translate_strings); free(ts); } + eina_hash_free(item->labels); EINA_MAGIC_SET(item, EINA_MAGIC_NONE); free(item); @@ -5754,6 +5762,77 @@ _elm_widget_item_part_text_get(const Elm_Widget_Item *item, return item->text_get_func((Elm_Object_Item *)item, part); } +static void +_elm_widget_item_part_text_custom_free(void *data) +{ + Elm_Label_Data *label; + label = data; + eina_stringshare_del(label->part); + eina_stringshare_del(label->text); + free(label); +} + +EAPI void +_elm_widget_item_part_text_custom_set(Elm_Widget_Item *item, + const char *part, + const char *text) +{ + Elm_Label_Data *label; + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); + + if (!item->text_get_func) + { + ERR("%s does not support elm_object_item_part_text_get() API.", + elm_widget_type_get(item->widget)); + return; + } + if (!item->labels) + item->labels = + eina_hash_stringshared_new(_elm_widget_item_part_text_custom_free); + label = eina_hash_find(item->labels, part); + if (!label) + { + label = malloc(sizeof(Elm_Label_Data)); + label->part = eina_stringshare_add(part); + label->text = eina_stringshare_add(text); + eina_hash_add(item->labels, part, label); + } + else + eina_stringshare_replace(&label->text, text); +} + +EAPI const char * +_elm_widget_item_part_text_custom_get(Elm_Widget_Item *item, + const char *part) +{ + Elm_Label_Data *label; + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL); + label = eina_hash_find(item->labels, part); + return label ? label->text : NULL; +} + +static Eina_Bool +_elm_widget_item_part_text_custom_foreach(const Eina_Hash *labels EINA_UNUSED, + const void *key EINA_UNUSED, + void *data, + void *func_data) +{ + Elm_Label_Data *label; + Elm_Widget_Item *item; + label = data; + item = func_data; + item->text_set_func((Elm_Object_Item *)item, label->part, label->text); + return EINA_TRUE; +} + +EAPI void +_elm_widget_item_part_text_custom_update(Elm_Widget_Item *item) +{ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); + eina_hash_foreach(item->labels, + _elm_widget_item_part_text_custom_foreach, item); +} + EAPI void _elm_widget_item_content_set_hook_set(Elm_Widget_Item *item, Elm_Widget_Content_Set_Cb func) |