Change the way of activating candidate ctxpopup.
Summary: Change the way of activating candidate ctxpopup. @feature Reviewers: Hermet Differential Revision: https://phab.enlightenment.org/D1729
This commit is contained in:
parent
20e1f20e6f
commit
f05dca3a22
|
@ -43,44 +43,66 @@ btn_minus_cb(void *data, Evas_Object *obj EINA_UNUSED,
|
|||
}
|
||||
|
||||
static void
|
||||
ctxpopup_it_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info)
|
||||
ctxpopup_it_cb(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
attr_value *attr = data;
|
||||
Elm_Object_Item *it = event_info;
|
||||
ctxpopup_data *ctxdata = evas_object_data_get(obj, "ctxpopup_data");
|
||||
ctxdata->selected_cb(ctxdata->data, obj,
|
||||
(void *) elm_object_item_text_get(it));
|
||||
const char *text = elm_object_item_text_get(it);
|
||||
char candidate[128];
|
||||
|
||||
snprintf(candidate, sizeof(candidate), "%s%s%s", attr->prepend_str, text,
|
||||
attr->append_str);
|
||||
|
||||
ctxdata->selected_cb(ctxdata->data, obj, (void *) candidate);
|
||||
}
|
||||
|
||||
static void
|
||||
slider_dismiss_cb(void *data EINA_UNUSED, Evas_Object *obj,
|
||||
void *event_info EINA_UNUSED)
|
||||
slider_dismiss_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *layout = elm_object_content_get(obj);
|
||||
Evas_Object *slider = elm_object_part_content_get(layout,
|
||||
"elm.swallow.slider");
|
||||
attr_value *attr = data;
|
||||
Evas_Object *box = elm_object_content_get(obj);
|
||||
Evas_Object *layout;
|
||||
Evas_Object *slider;
|
||||
Eina_List *box_children = elm_box_children_get(box);
|
||||
Eina_List *l;
|
||||
char candidate[512];
|
||||
char buf[128];
|
||||
attr_value *attr = evas_object_data_get(slider, "attr");
|
||||
if (attr->type & ATTR_VALUE_INTEGER)
|
||||
|
||||
if (eina_list_count(box_children) == 0) return;
|
||||
|
||||
snprintf(candidate, sizeof(candidate), "%s", attr->prepend_str);
|
||||
|
||||
EINA_LIST_FOREACH(box_children, l, layout)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%d",
|
||||
(int) roundf(elm_slider_value_get(slider)));
|
||||
}
|
||||
else
|
||||
{
|
||||
//if the last digit number is 0 then round up.
|
||||
double val = elm_slider_value_get(slider);
|
||||
snprintf(buf, sizeof(buf), "%0.2f", val);
|
||||
double round_down = atof(buf);
|
||||
snprintf(buf, sizeof(buf), "%0.1f", val);
|
||||
double round_down2 = atof(buf);
|
||||
if (fabs(round_down - round_down2) < 0.0005)
|
||||
snprintf(buf, sizeof(buf), "%0.1f", val);
|
||||
slider = elm_object_part_content_get(layout,
|
||||
"elm.swallow.slider");
|
||||
if (attr->type & ATTR_VALUE_INTEGER)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%d",
|
||||
(int) roundf(elm_slider_value_get(slider)));
|
||||
}
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%0.2f", val);
|
||||
{
|
||||
//if the last digit number is 0 then round up.
|
||||
double val = elm_slider_value_get(slider);
|
||||
snprintf(buf, sizeof(buf), "%0.2f", val);
|
||||
double round_down = atof(buf);
|
||||
snprintf(buf, sizeof(buf), "%0.1f", val);
|
||||
double round_down2 = atof(buf);
|
||||
if (fabs(round_down - round_down2) < 0.0005)
|
||||
snprintf(buf, sizeof(buf), "%0.1f", val);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%0.2f", val);
|
||||
}
|
||||
strcat(candidate, buf);
|
||||
strcat(candidate, " ");
|
||||
}
|
||||
candidate[strlen(candidate) - 1] = '\0'; //Remove last appended " ".
|
||||
strcat(candidate, attr->append_str);
|
||||
|
||||
ctxpopup_data *ctxdata = evas_object_data_get(obj, "ctxpopup_data");
|
||||
ctxdata->selected_cb(ctxdata->data, obj, buf);
|
||||
ctxdata->selected_cb(ctxdata->data, obj, candidate);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -90,14 +112,14 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
|
|||
free(data);
|
||||
}
|
||||
|
||||
static void
|
||||
slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, double slider_val,
|
||||
void *data, Eina_Bool integer)
|
||||
static Evas_Object *
|
||||
slider_layout_create(Evas_Object *parent, attr_value *attr,
|
||||
double slider_val, Eina_Bool integer)
|
||||
{
|
||||
//Layout
|
||||
Evas_Object *layout = elm_layout_add(ctxpopup);
|
||||
Evas_Object *layout = elm_layout_add(parent);
|
||||
elm_layout_file_set(layout, EDJE_PATH, "slider_layout");
|
||||
elm_object_content_set(ctxpopup, layout);
|
||||
evas_object_show(layout);
|
||||
|
||||
/* FIXME: Disable slider and it's button's focus since scroller has weired
|
||||
focus region show from this. Actually we don't need focus from here
|
||||
|
@ -140,37 +162,69 @@ slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, double slider_val,
|
|||
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);
|
||||
return layout;
|
||||
}
|
||||
|
||||
static void
|
||||
constant_candidate_set(Evas_Object *ctxpopup, attr_value *attr, void *data)
|
||||
slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, Eina_Bool integer)
|
||||
{
|
||||
Eina_Stringshare *type;
|
||||
Eina_Array_Iterator itr;
|
||||
int i;
|
||||
|
||||
//Box
|
||||
Evas_Object *box = elm_box_add(ctxpopup);
|
||||
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
|
||||
EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||
evas_object_show(box);
|
||||
|
||||
//Layout
|
||||
Evas_Object *layout;
|
||||
for (i = 0; i < attr->cnt; i++)
|
||||
{
|
||||
layout = slider_layout_create(box, attr, attr->val[i], integer);
|
||||
elm_box_pack_end(box, layout);
|
||||
}
|
||||
|
||||
elm_object_content_set(ctxpopup, box);
|
||||
evas_object_smart_callback_add(ctxpopup, "dismissed", slider_dismiss_cb,
|
||||
(void *) attr);
|
||||
}
|
||||
|
||||
static void
|
||||
constant_candidate_set(Evas_Object *ctxpopup, attr_value *attr)
|
||||
{
|
||||
Eina_Stringshare *candidate;
|
||||
Eina_Array_Iterator itr;
|
||||
unsigned int i;
|
||||
|
||||
EINA_ARRAY_ITER_NEXT(attr->strs, i, candidate, itr)
|
||||
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb, data);
|
||||
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb,
|
||||
(void *) attr);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
part_candidate_set(Evas_Object *ctxpopup, void *data)
|
||||
part_candidate_set(Evas_Object *ctxpopup, attr_value *attr)
|
||||
{
|
||||
view_data *vd = edj_mgr_view_get(NULL);
|
||||
if (!vd) return EINA_FALSE;
|
||||
Eina_List *parts = view_parts_list_get(vd);
|
||||
Eina_List *l;
|
||||
char *part;
|
||||
char candidate[128];
|
||||
EINA_LIST_FOREACH(parts, l, part)
|
||||
elm_ctxpopup_item_append(ctxpopup, part, NULL, ctxpopup_it_cb, data);
|
||||
{
|
||||
snprintf(candidate, sizeof(candidate), "\"%s\"", part);
|
||||
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb,
|
||||
(void *) attr);
|
||||
}
|
||||
view_string_list_free(parts);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
image_candidate_set(Evas_Object *ctxpopup, void *data)
|
||||
image_candidate_set(Evas_Object *ctxpopup, attr_value *attr)
|
||||
{
|
||||
view_data *vd = edj_mgr_view_get(NULL);
|
||||
if (!vd) return EINA_FALSE;
|
||||
|
@ -178,39 +232,44 @@ image_candidate_set(Evas_Object *ctxpopup, void *data)
|
|||
Eina_List *l;
|
||||
char *part;
|
||||
EINA_LIST_FOREACH(parts, l, part)
|
||||
elm_ctxpopup_item_append(ctxpopup, part, NULL, ctxpopup_it_cb, data);
|
||||
elm_ctxpopup_item_append(ctxpopup, part, NULL, ctxpopup_it_cb,
|
||||
(void *) attr);
|
||||
view_string_list_free(parts);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
program_candidate_set(Evas_Object *ctxpopup, void *data)
|
||||
program_candidate_set(Evas_Object *ctxpopup, attr_value *attr)
|
||||
{
|
||||
view_data *vd = edj_mgr_view_get(NULL);
|
||||
if (!vd) return EINA_FALSE;
|
||||
Eina_List *parts = view_programs_list_get(vd);
|
||||
Eina_List *l;
|
||||
char *part;
|
||||
char candidate[128];
|
||||
EINA_LIST_FOREACH(parts, l, part)
|
||||
elm_ctxpopup_item_append(ctxpopup, part, NULL, ctxpopup_it_cb, data);
|
||||
{
|
||||
snprintf(candidate, sizeof(candidate), "\"%s\"", part);
|
||||
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb,
|
||||
(void *) attr);
|
||||
}
|
||||
view_string_list_free(parts);
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
state_candidate_set(Evas_Object *ctxpopup, void *data, Eina_Bool prog)
|
||||
state_candidate_set(Evas_Object *ctxpopup, attr_value *attr, edit_data *ed)
|
||||
{
|
||||
view_data *vd = edj_mgr_view_get(NULL);
|
||||
if (!vd) return EINA_FALSE;
|
||||
|
||||
edit_data *ed = data;
|
||||
Eina_Stringshare *program = NULL;
|
||||
Eina_List *targets = NULL;
|
||||
Eina_Stringshare *target = NULL;
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
|
||||
//Trace the part name from the program.
|
||||
if (prog)
|
||||
if (attr->program)
|
||||
{
|
||||
program = edit_cur_prog_name_get(ed);
|
||||
if (!program) return EINA_FALSE;
|
||||
|
@ -233,9 +292,12 @@ state_candidate_set(Evas_Object *ctxpopup, void *data, Eina_Bool prog)
|
|||
|
||||
Eina_List *l;
|
||||
char *state;
|
||||
char candidate[128];
|
||||
EINA_LIST_FOREACH(converted, l, state)
|
||||
{
|
||||
elm_ctxpopup_item_append(ctxpopup, state, NULL, ctxpopup_it_cb, data);
|
||||
snprintf(candidate, sizeof(candidate), "\"%s\"", state);
|
||||
elm_ctxpopup_item_append(ctxpopup, candidate, NULL, ctxpopup_it_cb,
|
||||
(void *) attr);
|
||||
free(state);
|
||||
}
|
||||
view_string_list_free(states);
|
||||
|
@ -244,7 +306,7 @@ state_candidate_set(Evas_Object *ctxpopup, void *data, Eina_Bool prog)
|
|||
end:
|
||||
eina_stringshare_del(program);
|
||||
view_string_list_free(targets);
|
||||
if (!prog && target) eina_stringshare_del(target);
|
||||
if (!attr->program && target) eina_stringshare_del(target);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -338,7 +400,6 @@ ctxpopup_img_preview_create(edit_data *ed,
|
|||
|
||||
Evas_Object *
|
||||
ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr,
|
||||
double slider_val,
|
||||
Evas_Smart_Cb ctxpopup_dismiss_cb,
|
||||
Evas_Smart_Cb ctxpopup_selected_cb)
|
||||
{
|
||||
|
@ -347,7 +408,10 @@ ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr,
|
|||
if (!ctxpopup) return NULL;
|
||||
|
||||
elm_object_style_set(ctxpopup, "enventor");
|
||||
|
||||
elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_RIGHT,
|
||||
ELM_CTXPOPUP_DIRECTION_LEFT,
|
||||
ELM_CTXPOPUP_DIRECTION_UP,
|
||||
ELM_CTXPOPUP_DIRECTION_DOWN);
|
||||
//ctxpopup data
|
||||
ctxpopup_data *ctxdata = malloc(sizeof(ctxpopup_data));
|
||||
if (!ctxdata)
|
||||
|
@ -363,37 +427,37 @@ ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr,
|
|||
{
|
||||
case ATTR_VALUE_INTEGER:
|
||||
{
|
||||
slider_layout_set(ctxpopup, attr, slider_val, ed, EINA_TRUE);
|
||||
slider_layout_set(ctxpopup, attr, EINA_TRUE);
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_FLOAT:
|
||||
{
|
||||
slider_layout_set(ctxpopup, attr, slider_val, ed, EINA_FALSE);
|
||||
slider_layout_set(ctxpopup, attr, EINA_FALSE);
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_CONSTANT:
|
||||
{
|
||||
constant_candidate_set(ctxpopup, attr, ed);
|
||||
constant_candidate_set(ctxpopup, attr);
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_PART:
|
||||
{
|
||||
if (!part_candidate_set(ctxpopup, ed)) goto err;
|
||||
if (!part_candidate_set(ctxpopup, attr)) goto err;
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_STATE:
|
||||
{
|
||||
if (!state_candidate_set(ctxpopup, ed, attr->program)) goto err;
|
||||
if (!state_candidate_set(ctxpopup, attr, ed)) goto err;
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_IMAGE:
|
||||
{
|
||||
if (!image_candidate_set(ctxpopup, ed)) goto err;
|
||||
if (!image_candidate_set(ctxpopup, attr)) goto err;
|
||||
break;
|
||||
}
|
||||
case ATTR_VALUE_PROGRAM:
|
||||
{
|
||||
if (!program_candidate_set(ctxpopup, ed)) goto err;
|
||||
if (!program_candidate_set(ctxpopup, attr)) goto err;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -276,6 +276,31 @@ ctxpopup_candidate_selected_cb(void *data, Evas_Object *obj, void *event_info)
|
|||
{
|
||||
edit_data *ed = data;
|
||||
const char *text = event_info;
|
||||
char *ch;
|
||||
int cur_pos, end_pos;
|
||||
int i;
|
||||
|
||||
cur_pos = elm_entry_cursor_pos_get(ed->en_edit);
|
||||
elm_entry_cursor_line_end_set(ed->en_edit);
|
||||
end_pos = elm_entry_cursor_pos_get(ed->en_edit);
|
||||
|
||||
for (i = cur_pos; i <= end_pos; i++)
|
||||
{
|
||||
elm_entry_cursor_pos_set(ed->en_edit, i);
|
||||
ch = elm_entry_cursor_content_get(ed->en_edit);
|
||||
if (!strcmp(ch, ";"))
|
||||
{
|
||||
//1 more space for end_pos to replace until ';'.
|
||||
end_pos = elm_entry_cursor_pos_get(ed->en_edit) + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
elm_entry_cursor_pos_set(ed->en_edit, cur_pos);
|
||||
elm_entry_cursor_selection_begin(ed->en_edit);
|
||||
elm_entry_cursor_pos_set(ed->en_edit, end_pos);
|
||||
elm_entry_cursor_selection_end(ed->en_edit);
|
||||
|
||||
redoundo_text_relative_push(ed->rd, text);
|
||||
elm_entry_entry_insert(ed->en_edit, text);
|
||||
elm_ctxpopup_dismiss(obj);
|
||||
|
@ -438,12 +463,14 @@ image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y)
|
|||
static void
|
||||
candidate_list_show(edit_data *ed, char *text, char *cur, char *selected)
|
||||
{
|
||||
attr_value * attr = parser_attribute_get(ed->pd, text, cur);
|
||||
attr_value * attr = parser_attribute_get(ed->pd, text, cur, selected);
|
||||
if (!attr) return;
|
||||
|
||||
parser_attribute_value_set(attr, cur);
|
||||
|
||||
//Show up the list of the types
|
||||
Evas_Object *ctxpopup =
|
||||
ctxpopup_candidate_list_create(ed, attr, atof(selected),
|
||||
ctxpopup_candidate_list_create(ed, attr,
|
||||
ctxpopup_candidate_dismiss_cb,
|
||||
ctxpopup_candidate_selected_cb);
|
||||
if (!ctxpopup) return;
|
||||
|
|
|
@ -7,6 +7,11 @@
|
|||
#include <Enventor.h>
|
||||
#include "enventor_private.h"
|
||||
|
||||
const char ATTR_PREPEND_COLON[] = ": ";
|
||||
const char ATTR_PREPEND_NONE[] = " ";
|
||||
const char ATTR_APPEND_SEMICOLON[] = ";";
|
||||
const char ATTR_APPEND_STATE_VAL[] = " 0.0;";
|
||||
|
||||
struct parser_s
|
||||
{
|
||||
Eina_Inarray *attrs;
|
||||
|
@ -18,7 +23,6 @@ typedef struct parser_attr_s
|
|||
{
|
||||
Eina_Stringshare *keyword;
|
||||
attr_value value;
|
||||
Eina_Bool instring : 1;
|
||||
} parser_attr;
|
||||
|
||||
typedef struct cur_name_thread_data_s
|
||||
|
@ -263,9 +267,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(types, eina_stringshare_add("SPACER"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("type:");
|
||||
attr.keyword = eina_stringshare_add("type");
|
||||
attr.value.strs = types;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *comps = eina_array_new(4);
|
||||
|
@ -275,9 +281,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(comps, eina_stringshare_add("LOSSY"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("image:");
|
||||
attr.keyword = eina_stringshare_add("image");
|
||||
attr.value.strs = comps;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *trans = eina_array_new(11);
|
||||
|
@ -294,9 +302,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(trans, eina_stringshare_add("CUBIC_BEZIER"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("transition:");
|
||||
attr.keyword = eina_stringshare_add("transition");
|
||||
attr.value.strs = trans;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *aspect_mode = eina_array_new(5);
|
||||
|
@ -307,9 +317,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(aspect_mode, eina_stringshare_add("BOTH"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("aspect_mode:");
|
||||
attr.keyword = eina_stringshare_add("aspect_mode");
|
||||
attr.value.strs = aspect_mode;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *aspect_prefer = eina_array_new(4);
|
||||
|
@ -319,9 +331,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(aspect_prefer, eina_stringshare_add("BOTH"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("aspect_preference:");
|
||||
attr.keyword = eina_stringshare_add("aspect_preference");
|
||||
attr.value.strs = aspect_prefer;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *effect = eina_array_new(11);
|
||||
|
@ -338,9 +352,11 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(effect, eina_stringshare_add("GLOW"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("effect:");
|
||||
attr.keyword = eina_stringshare_add("effect");
|
||||
attr.value.strs = effect;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *action = eina_array_new(23);
|
||||
|
@ -369,148 +385,194 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
eina_array_push(action, eina_stringshare_add("PHYSICS_ROT_SET"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("action:");
|
||||
attr.keyword = eina_stringshare_add("action");
|
||||
attr.value.strs = action;
|
||||
attr.value.type = ATTR_VALUE_CONSTANT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: Integer
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("color:");
|
||||
attr.keyword = eina_stringshare_add("color");
|
||||
attr.value.cnt = 4;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 255;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("color2:");
|
||||
attr.keyword = eina_stringshare_add("color2");
|
||||
attr.value.cnt = 4;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 255;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("color3:");
|
||||
attr.keyword = eina_stringshare_add("color3");
|
||||
attr.value.cnt = 4;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 255;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("scale:");
|
||||
attr.keyword = eina_stringshare_add("scale");
|
||||
attr.value.cnt = 1;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("fixed:");
|
||||
attr.keyword = eina_stringshare_add("fixed");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("size:");
|
||||
attr.keyword = eina_stringshare_add("size");
|
||||
attr.value.cnt = 1;
|
||||
attr.value.min = 1;
|
||||
attr.value.max = 255;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("min:");
|
||||
attr.keyword = eina_stringshare_add("min");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1000;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("max:");
|
||||
attr.keyword = eina_stringshare_add("max");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1000;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("mouse_events:");
|
||||
attr.keyword = eina_stringshare_add("mouse_events");
|
||||
attr.value.cnt = 1;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_INTEGER;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: Float
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("relative:");
|
||||
attr.keyword = eina_stringshare_add("relative");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0.0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_FLOAT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("aspect:");
|
||||
attr.keyword = eina_stringshare_add("aspect");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0.0;
|
||||
attr.value.max = 1.0;
|
||||
attr.value.type = ATTR_VALUE_FLOAT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("align:");
|
||||
attr.keyword = eina_stringshare_add("align");
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0.0;
|
||||
attr.value.max = 1.0;
|
||||
attr.value.type = ATTR_VALUE_FLOAT;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: Part
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("target:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("target");
|
||||
attr.value.type = ATTR_VALUE_PART;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("to:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("to");
|
||||
attr.value.type = ATTR_VALUE_PART;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("source:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("source");
|
||||
attr.value.type = ATTR_VALUE_PART;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: State
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("STATE_SET");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.value.type = ATTR_VALUE_STATE;
|
||||
attr.value.prepend_str = ATTR_PREPEND_NONE;
|
||||
attr.value.append_str = ATTR_APPEND_STATE_VAL;
|
||||
attr.value.program = EINA_TRUE;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("inherit:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("inherit");
|
||||
attr.value.type = ATTR_VALUE_STATE;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_STATE_VAL;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: Image
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("normal:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("normal");
|
||||
attr.value.type = ATTR_VALUE_IMAGE;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("tween:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("tween");
|
||||
attr.value.type = ATTR_VALUE_IMAGE;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
//Type: Program
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("after:");
|
||||
attr.instring = EINA_TRUE;
|
||||
attr.keyword = eina_stringshare_add("after");
|
||||
attr.value.type = ATTR_VALUE_PROGRAM;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
}
|
||||
|
||||
|
@ -646,47 +708,73 @@ parser_colon_pos_get(parser_data *pd EINA_UNUSED, const char *cur)
|
|||
}
|
||||
|
||||
attr_value *
|
||||
parser_attribute_get(parser_data *pd, const char *text, const char *cur)
|
||||
parser_attribute_get(parser_data *pd, const char *text, const char *cur,
|
||||
const char *selected)
|
||||
{
|
||||
if (!text || !cur) return NULL;
|
||||
if ((*cur == ';') || (*cur == ':')) return NULL;
|
||||
|
||||
parser_attr *attr;
|
||||
Eina_Bool instring = EINA_FALSE;
|
||||
Eina_Bool necessary = EINA_FALSE;
|
||||
|
||||
char *p = (char *) cur;
|
||||
|
||||
while (p >= text)
|
||||
{
|
||||
if (*p == ':')
|
||||
{
|
||||
necessary = EINA_TRUE;
|
||||
break;
|
||||
}
|
||||
if (*p == '\"') instring = !instring;
|
||||
p--;
|
||||
}
|
||||
if (!p || !necessary) return NULL;
|
||||
|
||||
while (p > text)
|
||||
{
|
||||
if ((*p == ';') || (*p == '.') || (*p == ' ')) break;
|
||||
p--;
|
||||
}
|
||||
|
||||
if (!p) return NULL;
|
||||
if (p != text) p++;
|
||||
if (instring) return NULL;
|
||||
|
||||
EINA_INARRAY_FOREACH(pd->attrs, attr)
|
||||
{
|
||||
if ((instring == attr->instring) && strstr(p, attr->keyword))
|
||||
return &attr->value;
|
||||
if (!strcmp(selected, attr->keyword))
|
||||
return &attr->value;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Function is_numberic is refer to the following url.
|
||||
http://rosettacode.org/wiki/Determine_if_a_string_is_numeric#C */
|
||||
static Eina_Bool
|
||||
is_numberic(const char *str)
|
||||
{
|
||||
Eina_Bool ret = EINA_FALSE;
|
||||
char *p;
|
||||
|
||||
if (!str || (*str == '\0') || isspace(*str))
|
||||
return EINA_FALSE;
|
||||
|
||||
strtod(str, &p);
|
||||
if (*p == '\0') ret = EINA_TRUE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
parser_attribute_value_set(attr_value *value, char *cur)
|
||||
{
|
||||
const char token[4] = " ;:";
|
||||
char *str = strtok(cur, token);
|
||||
int i;
|
||||
|
||||
if (!str) return;
|
||||
str = strtok(NULL, token); //Skip the keyword
|
||||
|
||||
//Initialize attribute values
|
||||
for (i = 0; i < value->cnt; i++)
|
||||
value->val[i] = 0;
|
||||
|
||||
for (i = 0; str && (i < value->cnt); str = strtok(NULL, token))
|
||||
{
|
||||
if (!is_numberic(str)) continue;
|
||||
|
||||
value->val[i] = atof(str);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
Eina_Stringshare *
|
||||
parser_paragh_name_get(parser_data *pd EINA_UNUSED, Evas_Object *entry)
|
||||
{
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#define REL2_X 0.75f
|
||||
#define REL2_Y 0.75f
|
||||
#define VIEW_DATA edj_mgr_view_get(NULL)
|
||||
#define ATTR_VALUE_MAX_CNT 4
|
||||
|
||||
extern char EDJE_PATH[PATH_MAX];
|
||||
extern const char SIG_CURSOR_LINE_CHANGED[];
|
||||
|
@ -51,9 +52,13 @@ typedef enum attr_value_type
|
|||
struct attr_value_s
|
||||
{
|
||||
Eina_Array *strs;
|
||||
int cnt;
|
||||
float val[ATTR_VALUE_MAX_CNT];
|
||||
float min;
|
||||
float max;
|
||||
attr_value_type type;
|
||||
const char *prepend_str;
|
||||
const char *append_str;
|
||||
Eina_Bool program : 1;
|
||||
};
|
||||
|
||||
|
@ -82,7 +87,8 @@ void parser_cur_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *d
|
|||
void parser_cur_group_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data);
|
||||
Eina_Stringshare *parser_cur_name_fast_get(Evas_Object *entry, const char *scope);
|
||||
Eina_Bool parser_type_name_compare(parser_data *pd, const char *str);
|
||||
attr_value *parser_attribute_get(parser_data *pd, const char *text, const char *cur);
|
||||
attr_value *parser_attribute_get(parser_data *pd, const char *text, const char *cur, const char *selected);
|
||||
void parser_attribute_value_set(attr_value *attr, char *cur);
|
||||
Eina_Stringshare *parser_paragh_name_get(parser_data *pd, Evas_Object *entry);
|
||||
char *parser_name_get(parser_data *pd, const char *cur);
|
||||
void parser_cancel(parser_data *pd);
|
||||
|
@ -179,7 +185,7 @@ Eina_Bool template_insert(edit_data *ed, Enventor_Template_Insert_Type insert_ty
|
|||
|
||||
|
||||
/* ctxpopup */
|
||||
Evas_Object *ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb);
|
||||
Evas_Object *ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb);
|
||||
Evas_Object *ctxpopup_img_preview_create(edit_data*ed, const char *imgpath, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_relay_cb);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue