forked from enlightenment/enventor
edc_navigator: support program list
This commit is contained in:
parent
647dbde8ca
commit
d09c073fb0
|
@ -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
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 548 B |
Binary file not shown.
Before Width: | Height: | Size: 205 B After Width: | Height: | Size: 204 B |
|
@ -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,63 +89,6 @@ states_reload(navi_data *nd, Elm_Object_Item *part_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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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_program");
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
static Evas_Object *
|
||||
gl_state_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
||||
{
|
||||
|
@ -144,6 +100,140 @@ gl_state_content_get_cb(void *data, Evas_Object *obj, const char *part)
|
|||
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
|
||||
gl_program_selected_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
||||
void *event_info)
|
||||
{
|
||||
Elm_Object_Item *it = event_info;
|
||||
|
||||
//TODO: Search Current Program
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
char *name;
|
||||
Eina_List *l;
|
||||
Elm_Object_Item *it;
|
||||
|
||||
EINA_LIST_FOREACH(nd->program_list, l, name)
|
||||
{
|
||||
it = elm_genlist_item_append(nd->genlist,
|
||||
nd->program_itc, /* item class */
|
||||
name, /* item data */
|
||||
programs_it, /* parent */
|
||||
ELM_GENLIST_ITEM_NONE, /* item type */
|
||||
gl_program_selected_cb,/* select cb */
|
||||
nd); /* select cb data */
|
||||
nd->program_items = eina_list_append(nd->program_items, it);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sub_programs_remove(navi_data *nd)
|
||||
{
|
||||
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 void
|
||||
gl_programs_del_cb(void *data, Evas_Object *obj EINA_UNUSED)
|
||||
{
|
||||
navi_data *nd = g_nd;
|
||||
if (!nd) return;
|
||||
|
||||
Elm_Object_Item *it = data;
|
||||
if (nd->programs_it == it) nd->programs_it = NULL;
|
||||
}
|
||||
|
||||
/* 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_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_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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -315,6 +315,13 @@ err:
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue