hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=d09c073fb0bbcfe4835f12cdeeb8e12e53797948
commit d09c073fb0bbcfe4835f12cdeeb8e12e53797948 Author: Hermet Park <her...@hermet.pe.kr> Date: Mon Feb 29 17:24:49 2016 +0900 edc_navigator: support program list --- data/themes/default/images.edc | 2 + data/themes/default/images/navi_program.png | Bin 0 -> 548 bytes data/themes/default/images/navi_state.png | Bin 205 -> 204 bytes src/bin/edc_navigator.c | 217 +++++++++++++++++++++++----- src/lib/enventor_object.eo | 3 + src/lib/enventor_smart.c | 7 + 6 files changed, 190 insertions(+), 39 deletions(-) diff --git a/data/themes/default/images.edc b/data/themes/default/images.edc index 53f2b7d..60d7036 100644 --- a/data/themes/default/images.edc +++ b/data/themes/default/images.edc @@ -30,6 +30,7 @@ images { image: "navi_textblock.png" COMP; image: "navi_spacer.png" COMP; image: "navi_state.png" COMP; + image: "navi_program.png" COMP; image: "navi_unknown.png" COMP; } @@ -74,6 +75,7 @@ ICON_GROUP("navi_text", "navi_text.png") ICON_GROUP("navi_textblock", "navi_textblock.png") ICON_GROUP("navi_spacer", "navi_spacer.png") ICON_GROUP("navi_state", "navi_state.png") +ICON_GROUP("navi_program", "navi_program.png") ICON_GROUP("navi_unknown", "navi_unknown.png") #undef ICON_GROUP diff --git a/data/themes/default/images/navi_program.png b/data/themes/default/images/navi_program.png new file mode 100644 index 0000000..b5ed263 Binary files /dev/null and b/data/themes/default/images/navi_program.png differ diff --git a/data/themes/default/images/navi_state.png b/data/themes/default/images/navi_state.png index 1a4d229..4eb3038 100644 Binary files a/data/themes/default/images/navi_state.png and b/data/themes/default/images/navi_state.png differ diff --git a/src/bin/edc_navigator.c b/src/bin/edc_navigator.c index fba395c..9a1f63a 100644 --- a/src/bin/edc_navigator.c +++ b/src/bin/edc_navigator.c @@ -3,6 +3,7 @@ typedef struct edc_navigator_s { Evas_Object *genlist; + Elm_Object_Item *programs_it; Eina_List *group_items; //group object item Eina_List *part_items; //part object item @@ -17,6 +18,7 @@ typedef struct edc_navigator_s Elm_Genlist_Item_Class *group_itc; Elm_Genlist_Item_Class *part_itc; Elm_Genlist_Item_Class *state_itc; + Elm_Genlist_Item_Class *programs_itc; Elm_Genlist_Item_Class *program_itc; } navi_data; @@ -35,6 +37,17 @@ gl_part_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info); /*****************************************************************************/ /* Internal method implementation */ /*****************************************************************************/ + +static char * +gl_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED, + const char *part EINA_UNUSED) +{ + const char *text = data; + return strdup(text); +} + +/* State Related */ + static void gl_state_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) { @@ -76,74 +89,151 @@ states_reload(navi_data *nd, Elm_Object_Item *part_it) } } +static Evas_Object * +gl_state_content_get_cb(void *data, Evas_Object *obj, const char *part) +{ + if (strcmp("elm.swallow.icon", part)) return NULL; + + Evas_Object *image = elm_image_add(obj); + elm_image_file_set(image, EDJE_PATH, "navi_state"); + + return image; +} + +/* Program Related */ + +static Evas_Object * +gl_program_content_get_cb(void *data, Evas_Object *obj, const char *part) +{ + if (strcmp("elm.swallow.icon", part)) return NULL; + + Evas_Object *image = elm_image_add(obj); + elm_image_file_set(image, EDJE_PATH, "navi_state"); + + return image; +} + + static void -parts_reload(navi_data *nd, Elm_Object_Item *group_it) +gl_program_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info) { - Eina_List *l; - Elm_Object_Item *it; + Elm_Object_Item *it = event_info; - //Remove Previous Parts + //TODO: Search Current Program +} - //FIXME: Maybe we could optimize if parts list hasn't been changed. - EINA_LIST_FREE(nd->part_items, it) elm_object_item_del(it); - nd->state_items = NULL; - edje_edit_string_list_free(nd->part_list); +static void +sub_programs_reload(navi_data *nd, Elm_Object_Item *programs_it) +{ + const Eina_List *programs = elm_genlist_item_subitems_get(programs_it); + + //We already reloaded items + if (programs) return; - //Append Parts - Evas_Object *enventor = base_enventor_get(); - nd->part_list = enventor_object_parts_list_get(enventor); char *name; - part_item_data *data; - Edje_Part_Type part_type; + Eina_List *l; + Elm_Object_Item *it; - EINA_LIST_FOREACH(nd->part_list, l, name) + EINA_LIST_FOREACH(nd->program_list, l, name) { - part_type = enventor_object_part_type_get(enventor, name); - data = malloc(sizeof(part_item_data)); - data->text = name; - data->type = part_type; - it = elm_genlist_item_append(nd->genlist, - nd->part_itc, /* item class */ - data, /* item data */ - group_it, /* parent */ + nd->program_itc, /* item class */ + name, /* item data */ + programs_it, /* parent */ ELM_GENLIST_ITEM_NONE, /* item type */ - gl_part_selected_cb, /* select cb */ + gl_program_selected_cb,/* select cb */ nd); /* select cb data */ - nd->part_items = eina_list_append(nd->part_items, it); + nd->program_items = eina_list_append(nd->program_items, it); } } -static char * -gl_text_get_cb(void *data, Evas_Object *obj EINA_UNUSED, - const char *part EINA_UNUSED) +static void +sub_programs_remove(navi_data *nd) { - const char *text = data; - return strdup(text); + if (!nd->programs_it) return; + + Eina_List *l; + Elm_Object_Item *it; + EINA_LIST_FREE(nd->program_items, it) elm_object_item_del(it); + edje_edit_string_list_free(nd->program_list); + nd->program_list = NULL; } -static Evas_Object * -gl_program_content_get_cb(void *data, Evas_Object *obj, const char *part) +static void +gl_programs_del_cb(void *data, Evas_Object *obj EINA_UNUSED) { - if (strcmp("elm.swallow.icon", part)) return NULL; + navi_data *nd = g_nd; + if (!nd) return; - Evas_Object *image = elm_image_add(obj); - elm_image_file_set(image, EDJE_PATH, "navi_program"); + Elm_Object_Item *it = data; + if (nd->programs_it == it) nd->programs_it = NULL; +} - return image; +/* Programs Related */ + +static void +gl_programs_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + navi_data *nd = data; + Elm_Object_Item *it = event_info; + + //TODO: Search Current Programs + + sub_programs_reload(nd, it); } +static void +programs_reload(navi_data *nd, Elm_Object_Item *group_it) +{ + //FIXME: Maybe we could optimize if programs list hasn't been changed. + sub_programs_remove(nd); + + //Append Parts + Evas_Object *enventor = base_enventor_get(); + nd->program_list = enventor_object_programs_list_get(enventor); + + //FIXME: Maybe we could optimize if programs list hasn't been changed. + elm_object_item_del(nd->programs_it); + nd->programs_it = NULL; + + if (!nd->program_list) return; + + //Programs Item + nd->programs_it = + elm_genlist_item_append(nd->genlist, + nd->programs_itc, /* item class */ + NULL, /* item data */ + group_it, /* parent */ + ELM_GENLIST_ITEM_NONE, /* item type */ + gl_programs_selected_cb, /* select cb */ + nd); /* select cb data */ + elm_object_item_data_set(nd->programs_it, nd->programs_it); +} + +static char * +gl_programs_text_get_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + const char *part EINA_UNUSED) +{ + return strdup("PROGRAMS"); +} + + static Evas_Object * -gl_state_content_get_cb(void *data, Evas_Object *obj, const char *part) +gl_programs_content_get_cb(void *data, Evas_Object *obj, const char *part) { if (strcmp("elm.swallow.icon", part)) return NULL; Evas_Object *image = elm_image_add(obj); - elm_image_file_set(image, EDJE_PATH, "navi_state"); + elm_image_file_set(image, EDJE_PATH, "navi_program"); return image; } + +/* Part Related */ + static void gl_part_del_cb(void *data, Evas_Object *obj EINA_UNUSED) { @@ -209,6 +299,46 @@ gl_part_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) states_reload(nd, it); } +static void +parts_reload(navi_data *nd, Elm_Object_Item *group_it) +{ + Eina_List *l; + Elm_Object_Item *it; + + //Remove Previous Parts + + //FIXME: Maybe we could optimize if parts list hasn't been changed. + EINA_LIST_FREE(nd->part_items, it) elm_object_item_del(it); + nd->state_items = NULL; + edje_edit_string_list_free(nd->part_list); + + //Append Parts + Evas_Object *enventor = base_enventor_get(); + nd->part_list = enventor_object_parts_list_get(enventor); + char *name; + part_item_data *data; + Edje_Part_Type part_type; + + EINA_LIST_FOREACH(nd->part_list, l, name) + { + part_type = enventor_object_part_type_get(enventor, name); + data = malloc(sizeof(part_item_data)); + data->text = name; + data->type = part_type; + + it = elm_genlist_item_append(nd->genlist, + nd->part_itc, /* item class */ + data, /* item data */ + group_it, /* parent */ + ELM_GENLIST_ITEM_NONE, /* item type */ + gl_part_selected_cb, /* select cb */ + nd); /* select cb data */ + nd->part_items = eina_list_append(nd->part_items, it); + } +} + +/* Group Related */ + static Evas_Object * gl_group_content_get_cb(void *data, Evas_Object *obj, const char *part) { @@ -278,8 +408,7 @@ edc_navigator_group_update(const char *cur_group) if (!group_it) return; parts_reload(nd, group_it); - - //Append Programs + programs_reload(nd, group_it); } void @@ -375,6 +504,15 @@ edc_navigator_init(Evas_Object *parent) nd->state_itc = itc; + //Programs Item Class + itc = elm_genlist_item_class_new(); + itc->item_style = "default"; + itc->func.text_get = gl_programs_text_get_cb; + itc->func.content_get = gl_programs_content_get_cb; + itc->func.del = gl_programs_del_cb; + + nd->programs_itc = itc; + //Program Item Class itc = elm_genlist_item_class_new(); itc->item_style = "default"; @@ -407,6 +545,7 @@ edc_navigator_term(void) elm_genlist_item_class_free(nd->group_itc); elm_genlist_item_class_free(nd->part_itc); elm_genlist_item_class_free(nd->state_itc); + elm_genlist_item_class_free(nd->programs_itc); elm_genlist_item_class_free(nd->program_itc); free(nd); diff --git a/src/lib/enventor_object.eo b/src/lib/enventor_object.eo index 9ceb16d..9fb7322 100644 --- a/src/lib/enventor_object.eo +++ b/src/lib/enventor_object.eo @@ -113,6 +113,9 @@ class Enventor.Object (Elm.Widget, Efl.File) { @in type: Enventor_Path_Type; } } + programs_list_get { + return: Eina_List *; + } part_states_list_get { return: Eina_List *; params { diff --git a/src/lib/enventor_smart.c b/src/lib/enventor_smart.c index be3c0e8..b30751d 100644 --- a/src/lib/enventor_smart.c +++ b/src/lib/enventor_smart.c @@ -316,6 +316,13 @@ err: } EOLIAN static Eina_List * +_enventor_object_programs_list_get(Eo *obj EINA_UNUSED, + Enventor_Object_Data *pd EINA_UNUSED) +{ + return view_programs_list_get(VIEW_DATA); +} + +EOLIAN static Eina_List * _enventor_object_part_states_list_get(Eo *obj EINA_UNUSED, Enventor_Object_Data *pd EINA_UNUSED, const char *part) --