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
|
edje_object_part_text_escaped_set
|
||||||
(VIEW(it), "elm.text", it->label);
|
(VIEW(it), "elm.text", it->label);
|
||||||
|
elm_widget_item_part_text_custom_update(it);
|
||||||
|
|
||||||
if ((!it->icon) && (minh[0] > 0))
|
if ((!it->icon) && (minh[0] > 0))
|
||||||
{
|
{
|
||||||
|
@ -1411,6 +1412,7 @@ _item_text_set_hook(Elm_Object_Item *it,
|
||||||
|
|
||||||
if (part && strcmp(part, "default"))
|
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);
|
edje_object_part_text_escaped_set(VIEW(list_it), part, text);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1423,7 +1425,8 @@ static const char *
|
||||||
_item_text_get_hook(const Elm_Object_Item *it,
|
_item_text_get_hook(const Elm_Object_Item *it,
|
||||||
const char *part)
|
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;
|
return ((Elm_List_Item *)it)->label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ EAPI Eo_Op ELM_WIDGET_BASE_ID = EO_NOOP;
|
||||||
(elm_widget_focus_get(obj)))
|
(elm_widget_focus_get(obj)))
|
||||||
|
|
||||||
typedef struct _Elm_Event_Cb_Data Elm_Event_Cb_Data;
|
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;
|
typedef struct _Elm_Translate_String_Data Elm_Translate_String_Data;
|
||||||
|
|
||||||
struct _Elm_Event_Cb_Data
|
struct _Elm_Event_Cb_Data
|
||||||
|
@ -38,6 +39,12 @@ struct _Elm_Event_Cb_Data
|
||||||
const void *data;
|
const void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _Elm_Label_Data
|
||||||
|
{
|
||||||
|
const char *part;
|
||||||
|
const char *text;
|
||||||
|
};
|
||||||
|
|
||||||
struct _Elm_Translate_String_Data
|
struct _Elm_Translate_String_Data
|
||||||
{
|
{
|
||||||
EINA_INLIST;
|
EINA_INLIST;
|
||||||
|
@ -5003,6 +5010,7 @@ _elm_widget_item_free(Elm_Widget_Item *item)
|
||||||
item->translate_strings);
|
item->translate_strings);
|
||||||
free(ts);
|
free(ts);
|
||||||
}
|
}
|
||||||
|
eina_hash_free(item->labels);
|
||||||
|
|
||||||
EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
|
EINA_MAGIC_SET(item, EINA_MAGIC_NONE);
|
||||||
free(item);
|
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);
|
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
|
EAPI void
|
||||||
_elm_widget_item_content_set_hook_set(Elm_Widget_Item *item,
|
_elm_widget_item_content_set_hook_set(Elm_Widget_Item *item,
|
||||||
Elm_Widget_Content_Set_Cb func)
|
Elm_Widget_Content_Set_Cb func)
|
||||||
|
|
|
@ -579,6 +579,7 @@ struct _Elm_Widget_Item
|
||||||
Eina_List *access_order;
|
Eina_List *access_order;
|
||||||
Eina_Inlist *translate_strings;
|
Eina_Inlist *translate_strings;
|
||||||
Eina_List *signals;
|
Eina_List *signals;
|
||||||
|
Eina_Hash *labels;
|
||||||
Evas_Object *track_obj;
|
Evas_Object *track_obj;
|
||||||
|
|
||||||
Eina_Bool disabled : 1;
|
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 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 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 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_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);
|
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) \
|
#define elm_widget_item_translate(item) \
|
||||||
_elm_widget_item_translate((Elm_Widget_Item *)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, ...) \
|
#define ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, ...) \
|
||||||
do { \
|
do { \
|
||||||
if (!item) { \
|
if (!item) { \
|
||||||
|
|
Loading…
Reference in New Issue