diff options
Diffstat (limited to 'src/genlist.c')
-rw-r--r-- | src/genlist.c | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/src/genlist.c b/src/genlist.c new file mode 100644 index 0000000..b52a4ce --- /dev/null +++ b/src/genlist.c @@ -0,0 +1,260 @@ +#include "main.h" + +#define N_ITEMS 10 +#define BUFFER_SIZE 256 + + +char *_gl_item_styles[] = +{ + "default", + "1icon", + "1icon/no_padding", + "groupindex", + "select_all", + "groupindex.sub", + "1line", + "1line.2", + "2line.top", + "2line.top.2", + "2line.top.3", + "2line.top.4", + "2line.bottom", + "2line.bottom.2", + "2line.bottom.3", + "2line.bottom.4", + "multiline_sub", + "multiline_main", + "multiline_sub.main", + "multiline_sub.main.sub", + "multiline_sub.sub.main", + "multiline_main.sub", + "multiline_sub.main.1icon", + "multiline_sub.main.1icon.1", + "multiline_sub.sub.main.1icon", + "multiline_sub.sub.main.1icon.1", + NULL +}; + +static void _item_sel_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Coord x = 0, y = 0, w = 0, h = 0; + Eina_Bool visible; + Elm_Object_Item *it = event_info; + Evas_Object *track = elm_object_item_track(it); + evas_object_geometry_get(track, &x, &y, &w, &h); + + visible = evas_object_visible_get(track); + printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n", + data, obj, event_info); + printf("track geometry = (%d %d %d %d) visible(%d)\n", + x, y, w, h, visible); + elm_object_item_untrack(it); +} + +static void _item_longpressed_cb(void *data, Evas_Object *obj, void *event_info) +{ + printf("item longpressed! %p \n", event_info); +} + +static Evas_Object *_item_content_get_default(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *ic = NULL; + + if (!strcmp(part, "elm.swallow.icon")) + { + ic = elm_icon_add(obj); + elm_icon_standard_set(ic, "clock"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + else if (!strcmp(part, "elm.swallow.content")) + { + ic = elm_icon_add(obj); + elm_icon_standard_set(ic, "home"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + else if (!strcmp(part, "elm.swallow.icon.1")) + { + ic = elm_icon_add(obj); + elm_icon_standard_set(ic, "folder"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + else if (!strcmp(part, "elm.swallow.icon.2")) + { + ic = elm_icon_add(obj); + elm_icon_standard_set(ic, "home"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + else if (!strcmp(part, "elm.swallow.bottom")) + { + ic = elm_progressbar_add(obj); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ic, EVAS_HINT_FILL, 0.5); + } + else if (!strcmp(part, "elm.swallow.end")) + { + ic = elm_check_add(obj); + elm_object_focus_allow_set(ic, EINA_FALSE); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ic, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + else + { + ic = elm_icon_add(obj); + elm_icon_standard_set(ic, "home"); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + + return ic; +} + +static Evas_Object *_item_content_get_progress(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *ic = NULL; + + if (!strcmp(part, "elm.swallow.icon")) + { + ic = elm_progressbar_add(obj); + elm_progressbar_span_size_set(ic, 200); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_style_set(ic, "default"); + evas_object_size_hint_align_set(ic, EVAS_HINT_FILL, 0.5); + } + else if (!strcmp(part, "elm.swallow.end")) + { + ic = elm_check_add(obj); + elm_object_focus_allow_set(ic, EINA_FALSE); + evas_object_size_hint_weight_set(ic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ic, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + } + + return ic; +} + +static char *_item_label_get(void *data, Evas_Object *obj, const char *part) +{ + char buf[BUFFER_SIZE]; + + if (!strcmp(part, "elm.text")) + { + if ((int) data == 0) sprintf(buf, "%s", "Time Warner Cable(Cable)"); + else if ((int) data == 1) sprintf(buf, "%s", "ComCast (Cable)"); + else if ((int) data == 2) sprintf(buf, "%s", "Dish (Satellite)"); + else if ((int) data == 3) sprintf(buf, "%s", "DirecTV (Satellite)"); + else if ((int) data == 4) sprintf(buf, "%s", "Tata Sky (Satellite)"); + else if ((int) data == 5) sprintf(buf, "%s", "Nextra Cable(Cable)"); + else if ((int) data == 6) sprintf(buf, "%s", "DD Plus (Cable)"); + else if ((int) data == 7) sprintf(buf, "%s", "Tikona Cable(Cable)"); + else if ((int) data == 8) sprintf(buf, "%s", "True Provider (Cable)"); + else if ((int) data == 9) sprintf(buf, "%s", "Vodafone (Satellite)"); + else sprintf(buf, "%s", "Sample Text"); + } + else if (!strcmp(part, "elm.text2")) + { + sprintf(buf, "sub text (%d)", (int) data); + } + else if (!strcmp(part, "elm.text3")) + { + sprintf(buf, "sub text#2 (%d)", (int) data); + } + else if (!strcmp(part, "elm.text4")) + { + sprintf(buf, "sub text#3 (%d)", (int) data); + } + else + { + sprintf(buf, "genlist item text sample (%d)", (int) data); + } + + return strdup(buf); +} + +static void _genlist_renew(Evas_Object *obj, const char *style) +{ + Elm_Genlist_Item_Class *ic; + int i; + + if (!obj) return; + + elm_genlist_clear(obj); + + ic = elm_genlist_item_class_new(); + ic->item_style = style; + ic->func.text_get = _item_label_get; + if (!strcmp(style, "progress")) + ic->func.content_get = _item_content_get_progress; + else + ic->func.content_get = _item_content_get_default; + ic->func.state_get = NULL; + ic->func.del = NULL; + + for (i = 0; i < N_ITEMS; i++) + elm_genlist_item_append(obj, ic, (void *)i, NULL, ELM_GENLIST_ITEM_NONE, _item_sel_cb, NULL); + + elm_genlist_item_class_free(ic); +} + +static void +_gl_focus_item_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + printf("genlist item focused: %s\n", elm_object_item_text_get(event_info)); +} + +static void +_gl_unfocus_item_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + printf("genlist item unfocused: %s\n", elm_object_item_text_get(event_info)); +} + +static void +_gl_focus_key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Evas_Event_Key_Down *ev = event_info; + printf("\n=== Key Down : %s ===\n", ev->keyname); +} + +static void +_gl_it_selected(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + const char *txt = elm_object_item_text_get(event_info); + elm_object_text_set(obj, txt); + + _genlist_renew(gl, txt); +} + +void genlist_del_cb(void *data) +{ + appdata *ad = data; + evas_object_smart_callback_del(ad->item_hov, "selected", _gl_it_selected); +} + +Evas_Object *genlist_cb(void *data) +{ + Evas_Object *wbox, *gl; + appdata *ad = data; + + wbox = ad->widget_box; + + gl = elm_genlist_add(wbox); + evas_object_smart_callback_add(ad->item_hov, "selected", _gl_it_selected, gl); + + elm_genlist_select_mode_set(gl, ELM_OBJECT_SELECT_MODE_ALWAYS); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + + _genlist_renew(gl, "default"); + evas_object_show(gl); + + evas_object_smart_callback_add(gl, "item,focused", _gl_focus_item_cb, "item,focused"); + evas_object_smart_callback_add(gl, "item,unfocused", _gl_unfocus_item_cb, "item,unfocused"); + evas_object_smart_callback_add(gl, "activated", _gl_focus_item_cb, "activated"); + evas_object_event_callback_add(gl, EVAS_CALLBACK_KEY_DOWN, _gl_focus_key_down_cb, NULL); + evas_object_smart_callback_add(gl, "longpressed", _item_longpressed_cb, NULL); + + elm_box_pack_end(wbox, gl); + + return gl; +} |