forked from enlightenment/enventor
ctxpopup - code refactoring.
use the enum type for the candidate types extension later.
This commit is contained in:
parent
2c98f69475
commit
a098df0ad7
|
@ -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,37 +80,10 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
free(data);
|
||||
}
|
||||
|
||||
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)
|
||||
static void
|
||||
slider_layout_create(Evas_Object *ctxpopup, attr_value *attr, double slider_val,
|
||||
void *slider_dismiss_cb_data, Eina_Bool integer)
|
||||
{
|
||||
//create ctxpopup
|
||||
Evas_Object *ctxpopup = elm_ctxpopup_add(parent);
|
||||
if (!ctxpopup) return NULL;
|
||||
|
||||
elm_object_style_set(ctxpopup, elm_app_name_get());
|
||||
|
||||
//ctxpopup data
|
||||
ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data));
|
||||
if (!ctxdata) return NULL;
|
||||
ctxdata->selected_cb = ctxpopup_selected_cb;
|
||||
ctxdata->data = data;
|
||||
evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata);
|
||||
|
||||
//case of strings
|
||||
if (attr->strs)
|
||||
{
|
||||
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");
|
||||
|
@ -118,7 +91,7 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
|
|||
|
||||
//Slider
|
||||
Evas_Object *slider = elm_slider_add(layout);
|
||||
if (attr->integer) elm_slider_unit_format_set(slider, "%1.0f");
|
||||
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);
|
||||
|
@ -151,7 +124,49 @@ ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr,
|
|||
elm_object_content_set(btn, img);
|
||||
|
||||
evas_object_smart_callback_add(ctxpopup, "dismissed",
|
||||
slider_dismiss_cb, data);
|
||||
slider_dismiss_cb, slider_dismiss_cb_data);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
//create ctxpopup
|
||||
Evas_Object *ctxpopup = elm_ctxpopup_add(parent);
|
||||
if (!ctxpopup) return NULL;
|
||||
|
||||
elm_object_style_set(ctxpopup, elm_app_name_get());
|
||||
|
||||
//ctxpopup data
|
||||
ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data));
|
||||
if (!ctxdata) return NULL;
|
||||
ctxdata->selected_cb = ctxpopup_selected_cb;
|
||||
ctxdata->data = data;
|
||||
evas_object_data_set(ctxpopup, "ctxpopup_data", ctxdata);
|
||||
|
||||
switch (attr->type)
|
||||
{
|
||||
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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue