ctxpopup: Change slider candidate style to contain type and entry.

Summary:
Change slider candidate style to contain value type and entry.
@feature

Reviewers: Hermet

Differential Revision: https://phab.enlightenment.org/D1743
This commit is contained in:
Jaehyun Cho 2014-12-16 09:08:15 +09:00 committed by ChunEon Park
parent 0f78075ead
commit 48e56a4c4c
6 changed files with 366 additions and 48 deletions

View File

@ -1,6 +1,6 @@
images {
image: "plus.png" COMP;
image: "minus.png" COMP;
image: "sym_up_light_normal.png" COMP;
image: "sym_down_light_normal.png" COMP;
image: "menu.png" COMP;
image: "find.png" COMP;
image: "highlight.png" COMP;
@ -106,23 +106,23 @@ group { name: "swallow_s";
}
}
group { name: "plus";
group { name: "up";
parts {
part { name: "img";
type: IMAGE;
description { state: "default" 0.0;
image.normal: "plus.png";
image.normal: "sym_up_light_normal.png";
}
}
}
}
group { name: "minus";
group { name: "down";
parts {
part { name: "img";
type: IMAGE;
description { state: "default" 0.0;
image.normal: "minus.png";
image.normal: "sym_down_light_normal.png";
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

View File

@ -1561,36 +1561,181 @@ group { name: "preview_layout";
group { name: "slider_layout";
parts {
part { name: "elm.swallow.plus";
type: SWALLOW;
part { name: "base";
type: RECT;
scale: 1;
description { state: "default" 0.0;
min: 24 24;
fixed: 1 1;
align: 0 0.5;
rel1.relative: 0.0 0.5;
rel2.relative: 0.0 0.5;
min: 278 52;
color: 56 56 56 255;
}
description { state: "odd" 0.0;
inherit: "default" 0.0;
color: 64 64 64 255;
}
}
part { name: "elm.swallow.minus";
type: SWALLOW;
part { name: "text_base";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
min: 24 24;
rel1.to: "base";
rel2.to: "base";
rel2.relative: 0.0 1.0;
align: 0.0 0.5;
min: 50 0;
fixed: 1 0;
}
}
part { name: "elm.text.type";
type: TEXT;
scale: 1;
description { state: "default" 0.0;
rel1.to: "text_base";
rel2.to: "text_base";
align: 0.0 0.5;
fixed: 1 0;
text {
font: FN;
size: 12;
align: 0.0 0.5;
min: 1 0;
ellipsis: -1;
}
color: COL_NM;
}
}
part { name: "padding1";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.to: "text_base";
rel1.relative: 1.0 0.0;
rel2.to: "text_base";
align: 0.0 0.5;
min: 10 0;
fixed: 1 0;
}
}
part { name: "elm.text.slider_min";
type: TEXT;
scale: 1;
description { state: "default" 0.0;
rel1.to: "padding1";
rel1.relative: 1.0 0.0;
rel2.to: "padding1";
rel2.relative: 1.0 0.0;
align: 0.0 0.0;
fixed: 1 1;
align: 0 0.5;
rel1.to: "elm.swallow.plus";
rel2.to: "elm.swallow.plus";
rel1.relative: 1.0 0.5;
rel2.relative: 1.0 0.5;
text {
font: FN;
size: 10;
align: 0.0 0.0;
min: 1 1;
ellipsis: -1;
}
color: COL_NM;
}
}
part { name: "elm.text.slider_max";
type: TEXT;
scale: 1;
description { state: "default" 0.0;
rel1.to: "padding2";
rel1.relative: 0.0 0.0;
rel2.to: "padding2";
rel2.relative: 0.0 0.0;
align: 1.0 0.0;
fixed: 1 1;
text {
font: FN;
size: 10;
align: 0.0 0.5;
min: 1 1;
ellipsis: -1;
}
color: COL_NM;
}
}
part { name: "elm.swallow.slider";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel1.to_x: "elm.swallow.minus";
rel1.relative: 1 0;
rel1.offset: 5 0;
rel1.to_x: "padding1";
rel1.to_y: "elm.text.slider_min";
rel1.relative: 1.0 1.0;
rel2.to: "padding2";
rel2.relative: 0.0 1.0;
}
}
part { name: "padding2";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.to_x: "entry_base";
rel1.to_y: "base";
rel2.to_x: "entry_base";
rel2.to_y: "base";
rel2.relative: 0.0 1.0;
align: 1.0 0.5;
min: 10 0;
fixed: 1 0;
}
}
part { name: "entry_base";
type: SPACER;
scale: 1;
description { state: "default" 0.0;
min: 40 0;
fixed: 1 0;
align: 1.0 0.5;
rel1.to_x: "elm.swallow.up";
rel1.to_y: "base";
rel2.to_x: "elm.swallow.down";
rel2.to_y: "base";
rel2.relative: 0.0 1.0;
}
}
part { name: "elm.swallow.entry";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
rel1.to: "entry_base";
rel2.to: "entry_base";
}
}
part { name: "elm.swallow.up";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
min: 24 24;
fixed: 1 1;
align: 1.0 1.0;
rel1.to: "base";
rel1.relative: 1.0 0.5;
rel2.to: "base";
rel2.relative: 1.0 0.5;
}
}
part { name: "elm.swallow.down";
type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
min: 24 24;
fixed: 1 1;
align: 1.0 0.0;
rel1.to: "base";
rel1.relative: 1.0 0.5;
rel2.to: "base";
rel2.relative: 1.0 0.5;
}
}
}
programs {
program { name: "odd_item_set";
signal: "odd,item,set";
source: "";
action: STATE_SET "odd" 0.0;
target: "base";
}
}
}

View File

@ -19,27 +19,47 @@ typedef struct ctxpopup_data_s {
/*****************************************************************************/
static void
btn_plus_cb(void *data, Evas_Object *obj EINA_UNUSED,
btn_up_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *slider = data;
Evas_Object *layout = data;
Evas_Object *slider = elm_object_part_content_get(layout,
"elm.swallow.slider");
Evas_Object *entry = elm_object_part_content_get(layout,
"elm.swallow.entry");
attr_value *attr = evas_object_data_get(slider, "attr");
Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer");
double value = elm_slider_value_get(slider);
char buf[128];
if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value + 1);
else elm_slider_value_set(slider, value + 0.01);
if (attr->type & ATTR_VALUE_INTEGER) value += 1;
else value += 0.01;
if (integer) snprintf(buf, sizeof(buf), "%1.0f", value);
else snprintf(buf, sizeof(buf), "%1.2f", value);
elm_object_text_set(entry, buf);
}
static void
btn_minus_cb(void *data, Evas_Object *obj EINA_UNUSED,
btn_down_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *slider = data;
Evas_Object *layout = data;
Evas_Object *slider = elm_object_part_content_get(layout,
"elm.swallow.slider");
Evas_Object *entry = elm_object_part_content_get(layout,
"elm.swallow.entry");
attr_value *attr = evas_object_data_get(slider, "attr");
Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer");
double value = elm_slider_value_get(slider);
char buf[128];
if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value - 1);
else elm_slider_value_set(slider, value - 0.01);
if (attr->type & ATTR_VALUE_INTEGER) value -= 1;
else value -= 0.01;
if (integer) snprintf(buf, sizeof(buf), "%1.0f", value);
else snprintf(buf, sizeof(buf), "%1.2f", value);
elm_object_text_set(entry, buf);
}
static void
@ -113,47 +133,136 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
free(data);
}
static void
slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *entry = data;
double val = elm_slider_value_get(obj);
char buf[128];
Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(obj, "integer");
if (integer) snprintf(buf, sizeof(buf), "%1.0f", val);
else snprintf(buf, sizeof(buf), "%1.2f", val);
elm_object_text_set(entry, buf);
}
static void
entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *slider = data;
double text_val, val, min_val, max_val;
char buf[128];
Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer");
text_val = atof(elm_object_text_get(obj));
elm_slider_min_max_get(slider, &min_val, &max_val);
if (text_val < min_val) val = min_val;
else if (text_val > max_val) val = max_val;
else val = text_val;
if (val != text_val)
{
if (integer) snprintf(buf, sizeof(buf), "%1.0f", val);
else snprintf(buf, sizeof(buf), "%1.2f", val);
elm_object_text_set(obj, buf);
}
else
elm_slider_value_set(slider, val);
}
static Evas_Object *
slider_layout_create(Evas_Object *parent, attr_value *attr,
double slider_val, Eina_Bool integer)
const char *type, double slider_val, Eina_Bool integer)
{
//Layout
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout, EDJE_PATH, "slider_layout");
evas_object_show(layout);
//Type
if (type)
elm_object_part_text_set(layout, "elm.text.type", type);
//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);
evas_object_data_set(slider, "integer", (void *)(int) integer);
char slider_min[16];
char slider_max[16];
if (integer)
{
snprintf(slider_min, sizeof(slider_min), "%1.0f", attr->min);
snprintf(slider_max, sizeof(slider_max), "%1.0f", attr->max);
}
else
{
snprintf(slider_min, sizeof(slider_min), "%1.2f", attr->min);
snprintf(slider_max, sizeof(slider_max), "%1.2f", attr->max);
}
elm_object_part_text_set(layout, "elm.text.slider_min", slider_min);
elm_object_part_text_set(layout, "elm.text.slider_max", slider_max);
elm_object_part_content_set(layout, "elm.swallow.slider", slider);
//Entry
char buf[128];
Evas_Object *entry = elm_entry_add(layout);
elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
elm_entry_single_line_set(entry, EINA_TRUE);
evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
if (integer) snprintf(buf, sizeof(buf), "%1.0f", slider_val);
else snprintf(buf, sizeof(buf), "%1.2f", slider_val);
elm_object_text_set(entry, buf);
elm_object_part_content_set(layout, "elm.swallow.entry", entry);
Elm_Entry_Filter_Accept_Set digits_filter_data;
Elm_Entry_Filter_Limit_Size limit_filter_data;
if (integer)
{
digits_filter_data.accepted = "0123456789";
digits_filter_data.rejected = NULL;
limit_filter_data.max_char_count = 4;
}
else
{
digits_filter_data.accepted = ".0123456789";
digits_filter_data.rejected = NULL;
limit_filter_data.max_char_count = 5;
}
elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set,
&digits_filter_data);
elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
&limit_filter_data);
evas_object_smart_callback_add(slider, "changed", slider_changed_cb, entry);
evas_object_smart_callback_add(entry, "changed", entry_changed_cb, slider);
Evas_Object *btn;
Evas_Object *img;
//Minus Button
//Up 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);
evas_object_smart_callback_add(btn, "clicked", btn_up_cb, layout);
elm_object_part_content_set(layout, "elm.swallow.up", btn);
//Minus Image
//Up Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "minus");
elm_image_file_set(img, EDJE_PATH, "up");
elm_object_content_set(btn, img);
//Plus Button
//Down 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);
evas_object_smart_callback_add(btn, "clicked", btn_down_cb, layout);
elm_object_part_content_set(layout, "elm.swallow.down", btn);
//Plus Image
//Down Image
img = elm_image_add(btn);
elm_image_file_set(img, EDJE_PATH, "plus");
elm_image_file_set(img, EDJE_PATH, "down");
elm_object_content_set(btn, img);
return layout;
@ -164,7 +273,7 @@ slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, Eina_Bool integer)
{
Eina_Stringshare *type;
Eina_Array_Iterator itr;
int i;
unsigned int i;
//Box
Evas_Object *box = elm_box_add(ctxpopup);
@ -175,9 +284,10 @@ slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, Eina_Bool integer)
//Layout
Evas_Object *layout;
for (i = 0; i < attr->cnt; i++)
EINA_ARRAY_ITER_NEXT(attr->strs, i, type, itr)
{
layout = slider_layout_create(box, attr, attr->val[i], integer);
layout = slider_layout_create(box, attr, type, attr->val[i], integer);
if (i % 2) elm_object_signal_emit(layout, "odd,item,set", "");
elm_box_pack_end(box, layout);
}

View File

@ -393,8 +393,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
eina_inarray_push(td->attrs, &attr);
//Type: Integer
Eina_Array *rgba = eina_array_new(4);
eina_array_push(rgba, eina_stringshare_add("R:"));
eina_array_push(rgba, eina_stringshare_add("G:"));
eina_array_push(rgba, eina_stringshare_add("B:"));
eina_array_push(rgba, eina_stringshare_add("A:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("color");
attr.value.strs = rgba;
attr.value.cnt = 4;
attr.value.min = 0;
attr.value.max = 255;
@ -403,8 +410,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
rgba = eina_array_new(4);
eina_array_push(rgba, eina_stringshare_add("R:"));
eina_array_push(rgba, eina_stringshare_add("G:"));
eina_array_push(rgba, eina_stringshare_add("B:"));
eina_array_push(rgba, eina_stringshare_add("A:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("color2");
attr.value.strs = rgba;
attr.value.cnt = 4;
attr.value.min = 0;
attr.value.max = 255;
@ -413,8 +427,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
rgba = eina_array_new(4);
eina_array_push(rgba, eina_stringshare_add("R:"));
eina_array_push(rgba, eina_stringshare_add("G:"));
eina_array_push(rgba, eina_stringshare_add("B:"));
eina_array_push(rgba, eina_stringshare_add("A:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("color3");
attr.value.strs = rgba;
attr.value.cnt = 4;
attr.value.min = 0;
attr.value.max = 255;
@ -423,8 +444,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
Eina_Array *scale = eina_array_new(1);
eina_array_push(scale, eina_stringshare_add("Scale:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("scale");
attr.value.strs = scale;
attr.value.cnt = 1;
attr.value.min = 0;
attr.value.max = 1;
@ -433,8 +458,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
Eina_Array *xy = eina_array_new(2);
eina_array_push(xy, eina_stringshare_add("X:"));
eina_array_push(xy, eina_stringshare_add("Y:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("fixed");
attr.value.strs = xy;
attr.value.cnt = 2;
attr.value.min = 0;
attr.value.max = 1;
@ -443,8 +473,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
Eina_Array *size = eina_array_new(1);
eina_array_push(size, eina_stringshare_add("Size:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("size");
attr.value.strs = size;
attr.value.cnt = 1;
attr.value.min = 1;
attr.value.max = 255;
@ -453,8 +487,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
Eina_Array *wh = eina_array_new(2);
eina_array_push(wh, eina_stringshare_add("W:"));
eina_array_push(wh, eina_stringshare_add("H:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("min");
attr.value.strs = wh;
attr.value.cnt = 2;
attr.value.min = 0;
attr.value.max = 1000;
@ -463,8 +502,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
wh = eina_array_new(2);
eina_array_push(wh, eina_stringshare_add("W:"));
eina_array_push(wh, eina_stringshare_add("H:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("max");
attr.value.strs = wh;
attr.value.cnt = 2;
attr.value.min = 0;
attr.value.max = 1000;
@ -473,8 +517,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
Eina_Array *mouse_events = eina_array_new(1);
eina_array_push(mouse_events, eina_stringshare_add("Mouse Events:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("mouse_events");
attr.value.strs = mouse_events;
attr.value.cnt = 1;
attr.value.min = 0;
attr.value.max = 1;
@ -484,8 +532,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
eina_inarray_push(td->attrs, &attr);
//Type: Float
xy = eina_array_new(2);
eina_array_push(xy, eina_stringshare_add("X:"));
eina_array_push(xy, eina_stringshare_add("Y:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("relative");
attr.value.strs = xy;
attr.value.cnt = 2;
attr.value.min = 0.0;
attr.value.max = 1;
@ -494,8 +547,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
wh = eina_array_new(2);
eina_array_push(wh, eina_stringshare_add("W:"));
eina_array_push(wh, eina_stringshare_add("H:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("aspect");
attr.value.strs = wh;
attr.value.cnt = 2;
attr.value.min = 0.0;
attr.value.max = 1.0;
@ -504,8 +562,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
attr.value.append_str = ATTR_APPEND_SEMICOLON;
eina_inarray_push(td->attrs, &attr);
xy = eina_array_new(2);
eina_array_push(xy, eina_stringshare_add("X:"));
eina_array_push(xy, eina_stringshare_add("Y:"));
memset(&attr, 0x00, sizeof(parser_attr));
attr.keyword = eina_stringshare_add("align");
attr.value.strs = xy;
attr.value.cnt = 2;
attr.value.min = 0.0;
attr.value.max = 1.0;