summaryrefslogtreecommitdiff
path: root/src/lib/elm_widget.c
diff options
context:
space:
mode:
authorMichael Bouchaud <yoz@efl.so>2013-09-18 00:46:46 +0200
committerMichael Bouchaud <yoz@efl.so>2013-09-18 16:21:10 +0200
commit2028f0779b4f347a350579f7e8277fbfab5fd7f2 (patch)
tree72f0de5fa43a96822982c33b4fa17915353e6987 /src/lib/elm_widget.c
parent8dc639286398df3f53422e5a98cd50822b7ce429 (diff)
downloadelementary-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.c79
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)