ctxpopup - code refactoring.

use the enum type for the  candidate types extension later.
This commit is contained in:
ChunEon Park 2014-03-16 00:59:02 +09:00
parent 2c98f69475
commit a098df0ad7
3 changed files with 98 additions and 67 deletions

View File

@ -16,7 +16,7 @@ btn_plus_cb(void *data, Evas_Object *obj EINA_UNUSED,
attr_value *attr = evas_object_data_get(slider, "attr");
double value = elm_slider_value_get(slider);
if (attr->integer) elm_slider_value_set(slider, value + 1);
if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value + 1);
else elm_slider_value_set(slider, value + 0.01);
}
@ -28,7 +28,7 @@ btn_minus_cb(void *data, Evas_Object *obj EINA_UNUSED,
attr_value *attr = evas_object_data_get(slider, "attr");
double value = elm_slider_value_get(slider);
if (attr->integer) elm_slider_value_set(slider, value - 1);
if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value - 1);
else elm_slider_value_set(slider, value - 0.01);
}
@ -50,7 +50,7 @@ slider_dismiss_cb(void *data EINA_UNUSED, Evas_Object *obj,
"elm.swallow.slider");
char buf[128];
attr_value *attr = evas_object_data_get(slider, "attr");
if (attr->integer)
if (attr->type & ATTR_VALUE_INTEGER)
{
snprintf(buf, sizeof(buf), "%d",
(int) roundf(elm_slider_value_get(slider)));
@ -80,6 +80,53 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
free(data);
}
static void
slider_layout_create(Evas_Object *ctxpopup, attr_value *attr, double slider_val,
void *slider_dismiss_cb_data, Eina_Bool integer)
{
//Layout
Evas_Object *layout = elm_layout_add(ctxpopup);
elm_layout_file_set(layout, EDJE_PATH, "slider_layout");
elm_object_content_set(ctxpopup, layout);
//Slider
Evas_Object *slider = elm_slider_add(layout);
if (integer) elm_slider_unit_format_set(slider, "%1.0f");
else elm_slider_unit_format_set(slider, "%1.2f");
elm_slider_span_size_set(slider, 120);
elm_slider_indicator_show_set(slider, EINA_FALSE);
elm_slider_min_max_set(slider, attr->min, attr->max);
elm_slider_value_set(slider, slider_val);
evas_object_data_set(slider, "attr", attr);
elm_object_part_content_set(layout, "elm.swallow.slider", slider);
Evas_Object *btn;
Evas_Object *img;
//Minus Button
btn = elm_button_add(layout);
evas_object_smart_callback_add(btn, "clicked", btn_minus_cb, slider);
elm_object_part_content_set(layout, "elm.swallow.minus", btn);
//Minus Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "minus");
elm_object_content_set(btn, img);
//Plus Button
btn = elm_button_add(layout);
evas_object_smart_callback_add(btn, "clicked", btn_plus_cb, slider);
elm_object_part_content_set(layout, "elm.swallow.plus", btn);
//Plus Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "plus");
elm_object_content_set(btn, img);
evas_object_smart_callback_add(ctxpopup, "dismissed",
slider_dismiss_cb, slider_dismiss_cb_data);
}
Evas_Object *
ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
double slider_val,
@ -99,60 +146,28 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
ctxdata->data = data;
evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata);
//case of strings
if (attr->strs)
switch (attr->type)
{
Eina_List *l;
Eina_Stringshare *candidate;
EINA_LIST_FOREACH(attr->strs, l, candidate)
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb,
data);
}
//case of numbers
else
{
//Layout
Evas_Object *layout = elm_layout_add(ctxpopup);
elm_layout_file_set(layout, EDJE_PATH, "slider_layout");
elm_object_content_set(ctxpopup, layout);
//Slider
Evas_Object *slider = elm_slider_add(layout);
if (attr->integer) elm_slider_unit_format_set(slider, "%1.0f");
else elm_slider_unit_format_set(slider, "%1.2f");
elm_slider_span_size_set(slider, 120);
elm_slider_indicator_show_set(slider, EINA_FALSE);
elm_slider_min_max_set(slider, attr->min, attr->max);
elm_slider_value_set(slider, slider_val);
evas_object_data_set(slider, "attr", attr);
elm_object_part_content_set(layout, "elm.swallow.slider", slider);
Evas_Object *btn;
Evas_Object *img;
//Minus Button
btn = elm_button_add(layout);
evas_object_smart_callback_add(btn, "clicked", btn_minus_cb, slider);
elm_object_part_content_set(layout, "elm.swallow.minus", btn);
//Minus Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "minus");
elm_object_content_set(btn, img);
//Plus Button
btn = elm_button_add(layout);
evas_object_smart_callback_add(btn, "clicked", btn_plus_cb, slider);
elm_object_part_content_set(layout, "elm.swallow.plus", btn);
//Plus Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "plus");
elm_object_content_set(btn, img);
evas_object_smart_callback_add(ctxpopup, "dismissed",
slider_dismiss_cb, data);
}
case ATTR_VALUE_INTEGER:
{
slider_layout_create(ctxpopup, attr, slider_val, data, EINA_TRUE);
break;
}
case ATTR_VALUE_FLOAT:
{
slider_layout_create(ctxpopup, attr, slider_val, data, EINA_FALSE);
break;
}
case ATTR_VALUE_CONSTANT:
{
Eina_List *l;
Eina_Stringshare *candidate;
EINA_LIST_FOREACH(attr->strs, l, candidate)
elm_ctxpopup_item_append(ctxpopup, candidate, NULL,
ctxpopup_it_cb, data);
break;
}
}
evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, ctxpopup_del_cb,
ctxdata);

View File

@ -12,6 +12,7 @@ typedef struct parser_attr_s
EINA_INLIST;
Eina_Stringshare *keyword;
attr_value value;
Eina_Bool instring : 1;
} parser_attr;
typedef struct cur_name_thread_data_s
@ -55,6 +56,7 @@ parser_type_init(parser_data *pd)
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("type");
attr->value.strs = types;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *comps = NULL;
@ -66,6 +68,7 @@ parser_type_init(parser_data *pd)
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("image");
attr->value.strs = comps;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *trans = NULL;
@ -83,6 +86,7 @@ parser_type_init(parser_data *pd)
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("transition");
attr->value.strs = trans;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *aspect = NULL;
@ -94,6 +98,7 @@ parser_type_init(parser_data *pd)
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("aspect_preference");
attr->value.strs = aspect;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *effect = NULL;
@ -112,73 +117,77 @@ parser_type_init(parser_data *pd)
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("effect");
attr->value.strs = effect;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("color");
attr->value.min = 0;
attr->value.max = 255;
attr->value.integer = EINA_TRUE;
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("relative");
attr->value.min = 0.0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("scale");
attr->value.min = 0;
attr->value.max = 1;
attr->value.integer = EINA_TRUE;
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("fixed");
attr->value.min = 0;
attr->value.max = 1;
attr->value.integer = EINA_TRUE;
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("aspect");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("align");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("size");
attr->value.min = 1;
attr->value.max = 255;
attr->value.integer = EINA_TRUE;
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("min");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.integer = EINA_TRUE;
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("max");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.integer = EINA_TRUE;
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("mouse_events");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.integer = EINA_TRUE;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
}
@ -218,7 +227,7 @@ parser_attribute_get(parser_data *pd, const char *text, const char *cur)
if (*p == '\"') instring = !instring;
p--;
}
if (!p || instring || !necessary) return NULL;
if (!p || !necessary) return NULL;
while (p > text)
{
@ -231,7 +240,7 @@ parser_attribute_get(parser_data *pd, const char *text, const char *cur)
EINA_INLIST_FOREACH(pd->attrs, attr)
{
if (strstr(p, attr->keyword))
if ((instring == attr->instring) && strstr(p, attr->keyword))
return &attr->value;
}
@ -678,4 +687,4 @@ Eina_Stringshare
p++;
}
return NULL;
}
}

View File

@ -1,9 +1,16 @@
typedef enum attr_value_type
{
ATTR_VALUE_INTEGER = 1,
ATTR_VALUE_FLOAT = 2,
ATTR_VALUE_CONSTANT = 4,
} attr_value_type;
struct attr_value_s
{
Eina_List *strs;
float min;
float max;
Eina_Bool integer : 1;
attr_value_type type;
};
Evas_Object * ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb, void *data);