ctxpopup - support part candidates list.

This commit is contained in:
ChunEon Park 2014-03-16 04:36:33 +09:00
parent a098df0ad7
commit 56cab4a95c
5 changed files with 51 additions and 1 deletions

View File

@ -141,7 +141,7 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
//ctxpopup data
ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data));
if (!ctxdata) return NULL;
if (!ctxdata) goto err;
ctxdata->selected_cb = ctxpopup_selected_cb;
ctxdata->data = data;
evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata);
@ -167,6 +167,19 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
ctxpopup_it_cb, data);
break;
}
case ATTR_VALUE_PART:
{
view_data *vd = edj_mgr_view_get(NULL);
if (!vd) goto err;
Eina_List *parts = view_parts_list_get(vd);
Eina_List *l;
char *part;
EINA_LIST_FOREACH(parts, l, part)
elm_ctxpopup_item_append(ctxpopup, part, NULL,
ctxpopup_it_cb, data);
view_parts_list_free(parts);
break;
}
}
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb,
@ -174,6 +187,10 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismiss_cb,
data);
return ctxpopup;
err:
free(ctxdata);
evas_object_del(ctxpopup);
}
static void

View File

@ -189,6 +189,24 @@ parser_type_init(parser_data *pd)
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("target");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("to");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("source");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
}
char *parser_name_get(parser_data *pd EINA_UNUSED, const char *cur)

View File

@ -397,3 +397,15 @@ view_scale_set(view_data *vd, double scale)
evas_object_resize(vd->layout, 0, 0);
evas_object_resize(vd->layout, w, h);
}
Eina_List *
view_parts_list_get(view_data *vd)
{
return edje_edit_parts_list_get(vd->layout);
}
void
view_parts_list_free(Eina_List *list)
{
edje_edit_string_list_free(list);
}

View File

@ -3,6 +3,7 @@ typedef enum attr_value_type
ATTR_VALUE_INTEGER = 1,
ATTR_VALUE_FLOAT = 2,
ATTR_VALUE_CONSTANT = 4,
ATTR_VALUE_PART = 8,
} attr_value_type;
struct attr_value_s

View File

@ -9,3 +9,5 @@ void view_program_run(view_data *vd, const char *program);
Eina_Stringshare *view_group_name_get(view_data *vd);
void *view_data_get(view_data *vd);
void view_scale_set(view_data *vd, double scale);
Eina_List *view_parts_list_get(view_data *vd);
void view_parts_list_free(Eina_List *list);