forked from enlightenment/efl
elementary: add a way to add some custom part text and save it for Elm_Object_Item
This commit is contained in:
parent
edb3f6a237
commit
91848c5b43
|
@ -707,6 +707,7 @@ _items_fix(Evas_Object *obj)
|
|||
{
|
||||
edje_object_part_text_escaped_set
|
||||
(VIEW(it), "elm.text", it->label);
|
||||
elm_widget_item_part_text_custom_update(it);
|
||||
|
||||
if ((!it->icon) && (minh[0] > 0))
|
||||
{
|
||||
|
@ -1411,6 +1412,7 @@ _item_text_set_hook(Elm_Object_Item *it,
|
|||
|
||||
if (part && strcmp(part, "default"))
|
||||
{
|
||||
elm_widget_item_part_text_custom_set(list_it, part, text);
|
||||
edje_object_part_text_escaped_set(VIEW(list_it), part, text);
|
||||
return;
|
||||
}
|
||||
|
@ -1423,7 +1425,8 @@ static const char *
|
|||
_item_text_get_hook(const Elm_Object_Item *it,
|
||||
const char *part)
|
||||
{
|
||||
if (part && strcmp(part, "default")) return NULL;
|
||||
if (part && strcmp(part, "default"))
|
||||
return elm_widget_item_part_text_custom_get(it, part);
|
||||
return ((Elm_List_Item *)it)->label;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -579,6 +579,7 @@ struct _Elm_Widget_Item
|
|||
Eina_List *access_order;
|
||||
Eina_Inlist *translate_strings;
|
||||
Eina_List *signals;
|
||||
Eina_Hash *labels;
|
||||
Evas_Object *track_obj;
|
||||
|
||||
Eina_Bool disabled : 1;
|
||||
|
@ -753,6 +754,9 @@ EAPI Evas_Object *_elm_widget_item_part_content_get(const Elm_Widget_Item *i
|
|||
EAPI Evas_Object *_elm_widget_item_part_content_unset(Elm_Widget_Item *item, const char *part);
|
||||
EAPI void _elm_widget_item_part_text_set(Elm_Widget_Item *item, const char *part, const char *label);
|
||||
EAPI const char *_elm_widget_item_part_text_get(const Elm_Widget_Item *item, const char *part);
|
||||
EAPI void _elm_widget_item_part_text_custom_set(Elm_Widget_Item *item, const char *part, const char *label);
|
||||
EAPI const char *_elm_widget_item_part_text_custom_get(Elm_Widget_Item *item, const char *part);
|
||||
EAPI void _elm_widget_item_part_text_custom_update(Elm_Widget_Item *item);
|
||||
|
||||
EAPI void _elm_widget_item_signal_callback_add(Elm_Widget_Item *item, const char *emission, const char *source, Elm_Widget_Item_Signal_Cb func, void *data);
|
||||
EAPI void *_elm_widget_item_signal_callback_del(Elm_Widget_Item *it, const char *emission, const char *source, Elm_Widget_Item_Signal_Cb func);
|
||||
|
@ -1014,6 +1018,27 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out
|
|||
#define elm_widget_item_translate(item) \
|
||||
_elm_widget_item_translate((Elm_Widget_Item *)item)
|
||||
|
||||
/**
|
||||
* Convenience function to save additional text part content.
|
||||
* @see _elm_widget_item_part_text_custom_set()
|
||||
*/
|
||||
#define elm_widget_item_part_text_custom_set(item, part, text) \
|
||||
_elm_widget_item_part_text_custom_set((Elm_Widget_Item *)item, part, text)
|
||||
|
||||
/**
|
||||
* Convenience function to get additional text part content.
|
||||
* @see _elm_widget_item_part_text_custom_set()
|
||||
*/
|
||||
#define elm_widget_item_part_text_custom_get(item, part) \
|
||||
_elm_widget_item_part_text_custom_get((Elm_Widget_Item *)item, part)
|
||||
|
||||
/**
|
||||
* Convenience function to update additional text part content.
|
||||
* @see _elm_widget_item_part_text_custom_set()
|
||||
*/
|
||||
#define elm_widget_item_part_text_custom_update(item) \
|
||||
_elm_widget_item_part_text_custom_update((Elm_Widget_Item *)item)
|
||||
|
||||
#define ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, ...) \
|
||||
do { \
|
||||
if (!item) { \
|
||||
|
|
Loading…
Reference in New Issue