SVN revision: 76082devs/bu5hm4n/develop
parent
a8ce8a5be5
commit
9a47d016c6
5 changed files with 222 additions and 184 deletions
@ -0,0 +1,140 @@ |
||||
#include "entrance_client.h" |
||||
|
||||
struct Entrance_Fill_ |
||||
{ |
||||
const char *item_style; //maybee need to be provided by theme ?
|
||||
struct |
||||
{ |
||||
EntranceFillTextGetFunc text_get; |
||||
EntranceFillContentGetFunc content_get; |
||||
EntranceFillStateGetFunc state_get; |
||||
EntranceFillDelFunc del; |
||||
} func; |
||||
Elm_Genlist_Item_Class *glc; |
||||
Elm_Gengrid_Item_Class *ggc; |
||||
}; |
||||
|
||||
///////////////// LIST ///////////////////////////////
|
||||
static void |
||||
_entrance_fill_list(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func) |
||||
{ |
||||
Eina_List *l; |
||||
void *content; |
||||
|
||||
EINA_LIST_FOREACH(contents, l, content) |
||||
elm_list_item_append(obj, ef->func.text_get(content, NULL, NULL), NULL, |
||||
NULL, func, content); |
||||
elm_list_go(obj); |
||||
} |
||||
|
||||
///////////////// GENLIST /////////////////////////////
|
||||
static void |
||||
_entrance_fill_genlist(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func) |
||||
{ |
||||
Eina_List *l; |
||||
Elm_Genlist_Item_Class *glc; |
||||
void *content; |
||||
|
||||
if (!ef->glc) |
||||
{ |
||||
glc = elm_genlist_item_class_new(); |
||||
ef->glc = glc; |
||||
} |
||||
else |
||||
glc = ef->glc; |
||||
glc->item_style = ef->item_style; |
||||
glc->func.text_get = ef->func.text_get; |
||||
glc->func.content_get = ef->func.content_get; |
||||
glc->func.state_get = ef->func.state_get; |
||||
glc->func.del = ef->func.del; |
||||
|
||||
|
||||
EINA_LIST_FOREACH(contents, l, content) |
||||
elm_genlist_item_append(obj, glc, |
||||
content, NULL, ELM_GENLIST_ITEM_NONE, |
||||
func, content); |
||||
} |
||||
|
||||
///////////////// GENGRID /////////////////////////////
|
||||
static void |
||||
_entrance_fill_gengrid(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func) |
||||
{ |
||||
Eina_List *l; |
||||
Elm_Gengrid_Item_Class *ggc; |
||||
void *content; |
||||
|
||||
if (!ef->ggc) |
||||
{ |
||||
ggc = elm_gengrid_item_class_new(); |
||||
ef->ggc = ggc; |
||||
} |
||||
else |
||||
ggc = ef->ggc; |
||||
ggc->item_style = ef->item_style; |
||||
ggc->func.text_get = ef->func.text_get; |
||||
ggc->func.content_get = ef->func.content_get; |
||||
ggc->func.state_get = ef->func.state_get; |
||||
ggc->func.del = ef->func.del; |
||||
|
||||
EINA_LIST_FOREACH(contents, l, content) |
||||
elm_gengrid_item_append(obj, ggc, |
||||
content, func, content); |
||||
} |
||||
|
||||
///////////////// GENGRID /////////////////////////////
|
||||
static void |
||||
_entrance_fill_hoversell(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func) |
||||
{ |
||||
Eina_List *l; |
||||
char *str = NULL; |
||||
void *content; |
||||
|
||||
EINA_LIST_FOREACH(contents, l, content) |
||||
{ |
||||
if (ef->func.text_get) |
||||
str = ef->func.text_get(content, obj, NULL); |
||||
elm_hoversel_item_add(obj, str, NULL, |
||||
ELM_ICON_FILE, func, content); |
||||
free(str); |
||||
} |
||||
} |
||||
|
||||
Entrance_Fill * |
||||
entrance_fill_new(const char *item_style, EntranceFillTextGetFunc text_get, EntranceFillContentGetFunc content_get, EntranceFillStateGetFunc state_get, EntranceFillDelFunc del_func) |
||||
{ |
||||
Entrance_Fill *ef; |
||||
ef = (Entrance_Fill *)malloc(sizeof(Entrance_Fill)); |
||||
ef->item_style = eina_stringshare_add(item_style); |
||||
ef->func.text_get = text_get; |
||||
ef->func.content_get = content_get; |
||||
ef->func.state_get = state_get; |
||||
ef->func.del = del_func; |
||||
return ef; |
||||
} |
||||
|
||||
void |
||||
entrance_fill_del(Entrance_Fill *ef) |
||||
{ |
||||
eina_stringshare_del(ef->item_style); |
||||
free(ef); |
||||
} |
||||
|
||||
void |
||||
entrance_fill(Evas_Object *obj, Entrance_Fill *ef, Eina_List *contents, Evas_Smart_Cb func) |
||||
{ |
||||
const char *type; |
||||
if (!obj) return; |
||||
if ((type = elm_object_widget_type_get(obj))) |
||||
{ |
||||
if (!strcmp(type, "elm_list")) |
||||
_entrance_fill_list(obj, ef, contents, func); |
||||
else if (!strcmp(type, "elm_genlist")) |
||||
_entrance_fill_genlist(obj, ef, contents, func); |
||||
else if (!strcmp(type, "elm_gengrid")) |
||||
_entrance_fill_gengrid(obj, ef, contents, func); |
||||
else if (!strcmp(type, "elm_hoversel")) |
||||
_entrance_fill_hoversell(obj, ef, contents, func); |
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,16 @@ |
||||
#ifndef ENTRANCE_FILL_H |
||||
#define ENTRANCE_FILL_H |
||||
|
||||
typedef struct Entrance_Fill_ Entrance_Fill; |
||||
|
||||
typedef char *(*EntranceFillTextGetFunc) (void *data, Evas_Object *obj, const char *part); |
||||
typedef Evas_Object *(*EntranceFillContentGetFunc) (void *data, Evas_Object *obj, const char *part); |
||||
typedef Eina_Bool (*EntranceFillStateGetFunc) (void *data, Evas_Object *obj, const char *part); |
||||
typedef void (*EntranceFillDelFunc) (void *data, Evas_Object *obj); |
||||
|
||||
Entrance_Fill *entrance_fill_new(const char *item_style, EntranceFillTextGetFunc label_get, EntranceFillContentGetFunc content_get, EntranceFillStateGetFunc state_get, EntranceFillDelFunc del_func); |
||||
void entrance_fill(Evas_Object *obj, Entrance_Fill *egf, Eina_List *contents, Evas_Smart_Cb func); |
||||
void entrance_fill_del(Entrance_Fill *ef); |
||||
|
||||
|
||||
#endif /* ENTRANCE_FILL_H */ |
Loading…
Reference in new issue