From: Jihoon Kim <jihoon48.kim@samsung.com>

Subject: [E-devel] [PATCH] elm_slider patch for disable state

elm_slider does not support disable state, so I make this patch.

Please review it and upload in svn if it is ok.

(nb - also fixed vertical slider sizing in defaul theme and changed
jihoons changes to slider test to make the vertical sliders in a
horizontal box so they dont get silly long windows)



SVN revision: 55340
This commit is contained in:
Jihoon Kim 2010-12-07 05:15:05 +00:00 committed by Carsten Haitzler
parent 34a3ad17b9
commit 44cf2f3382
3 changed files with 321 additions and 10 deletions

View File

@ -13741,6 +13741,15 @@ collections {
inherit: "default" 0.0;
visible: 1;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 0 0 100;
}
description { state: "disabled_inverted" 0.0;
inherit: "default" 0.0;
color: 255 0 0 100;
visible: 1;
}
}
part {
name: "base_over";
@ -13839,6 +13848,18 @@ collections {
rel1.offset: 0 4;
rel2.offset: 0 -5;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 128 128 128;
visible: 0;
}
description { state: "disabled_visible" 0.0;
inherit: "default" 0.0;
color: 0 0 0 128;
color3: 0 0 0 0;
visible: 1;
text.min: 1 1;
}
}
part {
name: "elm.swallow.end";
@ -13918,6 +13939,18 @@ collections {
rel1.offset: -5 0;
rel2.offset: -5 -1;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 128 128 128;
visible: 0;
}
description { state: "disabled_visible" 0.0;
inherit: "default" 0.0;
color: 0 0 0 128;
color3: 0 0 0 0;
visible: 1;
text.min: 1 1;
}
}
part { name: "elm.dragable.slider";
type: RECT;
@ -13973,6 +14006,10 @@ collections {
}
fill.smooth: 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 128 128 128 128;
}
}
part { name: "button1";
mouse_events: 0;
@ -14157,6 +14194,17 @@ collections {
visible: 1;
}
}
part { name: "disabler";
type: RECT;
description { state: "default" 0.0;
color: 0 0 0 0;
visible: 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
}
programs {
program { name: "text_show";
@ -14252,6 +14300,69 @@ collections {
thumb_up();
}
}
program {
name: "go_disabled";
signal: "elm,state,disabled";
source: "elm";
action: STATE_SET "disabled" 0.0;
target: "button0";
target: "disabler";
after: "disable_text";
}
program { name: "disable_text";
script {
new st[31];
new Float:vl;
get_state(PART:"elm.text", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"elm.text", "disabled_visible", 0.0);
else
set_state(PART:"elm.text", "disabled", 0.0);
get_state(PART:"elm.units", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"elm.units", "disabled_visible", 0.0);
else
set_state(PART:"elm.units", "disabled", 0.0);
get_state(PART:"level2", st, 30, vl);
if (!strcmp(st, "inverted"))
set_state(PART:"level2", "disabled_inverted", 0.0);
else
set_state(PART:"level2", "disabled", 0.0);
}
}
program { name: "enable";
signal: "elm,state,enabled";
source: "elm";
action: STATE_SET "default" 0.0;
target: "button0";
target: "disabler";
after: "enable_text";
}
program { name: "enable_text";
script {
new st[31];
new Float:vl;
get_state(PART:"elm.text", st, 30, vl);
if (!strcmp(st, "disabled_visible"))
set_state(PART:"elm.text", "visible", 0.0);
else
set_state(PART:"elm.text", "default", 0.0);
get_state(PART:"elm.units", st, 30, vl);
if (!strcmp(st, "disabled_visible"))
set_state(PART:"elm.units", "visible", 0.0);
else
set_state(PART:"elm.units", "default", 0.0);
get_state(PART:"level2", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"level2", "visible", 0.0);
else
set_state(PART:"level2", "default", 0.0);
}
}
}
}
@ -14357,6 +14468,15 @@ collections {
inherit: "default" 0.0;
visible: 1;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 0 0 100;
}
description { state: "disabled_inverted" 0.0;
inherit: "default" 0.0;
color: 255 0 0 100;
visible: 1;
}
}
part {
name: "base_over";
@ -14432,13 +14552,13 @@ collections {
scale: 1;
description { state: "default" 0.0;
visible: 0;
fixed: 1 1;
fixed: 0 1;
align: 0.5 0.0;
rel1.to_y: "elm.swallow.icon";
rel1.relative: 0.5 1.0;
rel1.relative: 0.0 1.0;
rel1.offset: 0 -1;
rel2.to_y: "elm.swallow.icon";
rel2.relative: 0.5 1.0;
rel2.relative: 1.0 1.0;
rel2.offset: -1 -1;
color: 0 0 0 255;
text {
@ -14455,6 +14575,18 @@ collections {
rel1.offset: 4 0;
rel2.offset: -5 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 128 128 128;
visible: 0;
}
description { state: "disabled_visible" 0.0;
inherit: "default" 0.0;
color: 0 0 0 128;
color3: 0 0 0 0;
visible: 1;
text.min: 1 1;
}
}
part {
name: "elm.swallow.end";
@ -14534,6 +14666,22 @@ collections {
rel1.offset: 8 -9;
rel2.offset: -9 -9;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 0 0 0 128;
color3: 0 0 0 0;
visible: 0;
}
description { state: "disabled_visible" 0.0;
inherit: "default" 0.0;
fixed: 1 1;
visible: 1;
text.min: 1 1;
rel1.offset: 8 -9;
rel2.offset: -9 -9;
color: 0 0 0 128;
color3: 0 0 0 0;
}
}
part { name: "elm.dragable.slider";
type: RECT;
@ -14589,6 +14737,10 @@ collections {
}
fill.smooth: 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 128 128 128 128;
}
}
part { name: "button1";
mouse_events: 0;
@ -14772,7 +14924,19 @@ collections {
visible: 1;
}
}
}
part { name: "disabler";
type: RECT;
description { state: "default" 0.0;
color: 0 0 0 0;
visible: 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
}
programs {
program { name: "text_show";
signal: "elm,state,text,visible";
@ -14866,6 +15030,70 @@ collections {
thumb_up();
}
}
program {
name: "go_disabled";
signal: "elm,state,disabled";
source: "elm";
action: STATE_SET "disabled" 0.0;
target: "button0";
target: "disabler";
after: "disable_text";
}
program { name: "disable_text";
script {
new st[31];
new Float:vl;
get_state(PART:"elm.text", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"elm.text", "disabled_visible", 0.0);
else
set_state(PART:"elm.text", "disabled", 0.0);
get_state(PART:"elm.units", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"elm.units", "disabled_visible", 0.0);
else
set_state(PART:"elm.units", "disabled", 0.0);
get_state(PART:"level2", st, 30, vl);
if (!strcmp(st, "inverted"))
set_state(PART:"level2", "disabled_inverted", 0.0);
else
set_state(PART:"level2", "disabled", 0.0);
}
}
program { name: "enable";
signal: "elm,state,enabled";
source: "elm";
action: STATE_SET "default" 0.0;
target: "button0";
target: "disabler";
after: "enable_text";
}
program { name: "enable_text";
script {
new st[31];
new Float:vl;
get_state(PART:"elm.text", st, 30, vl);
if (!strcmp(st, "disabled_visible"))
set_state(PART:"elm.text", "visible", 0.0);
else
set_state(PART:"elm.text", "default", 0.0);
get_state(PART:"elm.units", st, 30, vl);
if (!strcmp(st, "disabled_visible"))
set_state(PART:"elm.units", "visible", 0.0);
else
set_state(PART:"elm.units", "default", 0.0);
get_state(PART:"level2", st, 30, vl);
if (!strcmp(st, "visible"))
set_state(PART:"level2", "visible", 0.0);
else
set_state(PART:"level2", "default", 0.0);
}
}
}
}

View File

@ -14,7 +14,7 @@ _change_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
void
test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *win, *bg, *bx, *sl, *ic, *sl1;
Evas_Object *win, *bg, *bx, *sl, *ic, *sl1, *bx2;
char buf[PATH_MAX];
win = elm_win_add(NULL, "slider", ELM_WIN_BASIC);
@ -48,6 +48,24 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
evas_object_show(ic);
evas_object_show(sl);
/* horizontal disable state */
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
sl = elm_slider_add(win);
elm_slider_label_set(sl, "Disabled");
elm_slider_icon_set(sl, ic);
elm_slider_unit_format_set(sl, "%1.1f units");
elm_slider_span_size_set(sl, 120);
elm_object_disabled_set(sl, EINA_TRUE);
evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(bx, sl);
evas_object_show(ic);
evas_object_show(sl);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
@ -62,7 +80,30 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
elm_slider_indicator_format_set(sl, "%3.0f");
elm_slider_min_max_set(sl, 50, 150);
elm_slider_value_set(sl, 80);
elm_slider_inverted_set(sl, 1);
elm_slider_inverted_set(sl, EINA_TRUE);
evas_object_size_hint_align_set(sl, 0.5, 0.5);
evas_object_size_hint_weight_set(sl, 0.0, 0.0);
elm_box_pack_end(bx, sl);
evas_object_show(ic);
evas_object_show(sl);
/* label2 disable */
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
sl = elm_slider_add(win);
elm_slider_label_set(sl, "Disabled inverted");
elm_slider_end_set(sl, ic);
elm_slider_span_size_set(sl, 80);
evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_slider_indicator_format_set(sl, "%3.0f");
elm_slider_min_max_set(sl, 50, 150);
elm_slider_value_set(sl, 80);
elm_slider_inverted_set(sl, EINA_TRUE);
elm_object_disabled_set(sl, EINA_TRUE);
evas_object_size_hint_align_set(sl, 0.5, 0.5);
evas_object_size_hint_weight_set(sl, 0.0, 0.0);
elm_box_pack_end(bx, sl);
@ -79,12 +120,18 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
elm_slider_indicator_format_set(sl, "%3.0f");
elm_slider_min_max_set(sl, 50, 150);
elm_slider_value_set(sl, 80);
elm_slider_inverted_set(sl, 1);
elm_slider_inverted_set(sl, EINA_TRUE);
elm_object_scale_set(sl, 2.0);
elm_box_pack_end(bx, sl);
evas_object_show(ic);
evas_object_show(sl);
bx2 = elm_box_add(win);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_horizontal_set(bx2, EINA_TRUE);
elm_box_pack_end(bx, bx2);
evas_object_show(bx2);
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
@ -93,7 +140,7 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
sl = elm_slider_add(win);
elm_slider_icon_set(sl, ic);
elm_slider_label_set(sl, "Vertical inverted");
elm_slider_inverted_set(sl, 1);
elm_slider_inverted_set(sl, EINA_TRUE);
elm_slider_unit_format_set(sl, "units");
elm_slider_span_size_set(sl, 60);
evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
@ -102,7 +149,7 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
elm_slider_value_set(sl, 0.2);
elm_object_scale_set(sl, 1.0);
elm_slider_horizontal_set(sl, 0);
elm_box_pack_end(bx, sl);
elm_box_pack_end(bx2, sl);
evas_object_show(ic);
evas_object_show(sl);
@ -118,10 +165,33 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
elm_slider_value_set(sl, 0.2);
elm_object_scale_set(sl, 1.0);
elm_slider_horizontal_set(sl, EINA_FALSE);
elm_box_pack_end(bx, sl);
elm_box_pack_end(bx2, sl);
evas_object_show(ic);
evas_object_show(sl);
/* vertical disable state */
ic = elm_icon_add(win);
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
elm_icon_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1);
sl = elm_slider_add(win);
elm_slider_icon_set(sl, ic);
elm_slider_label_set(sl, "Disabled vertical");
elm_slider_inverted_set(sl, EINA_TRUE);
elm_slider_unit_format_set(sl, "units");
elm_slider_span_size_set(sl, 100);
evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND);
elm_slider_indicator_format_set(sl, "%1.1f");
elm_slider_value_set(sl, 0.2);
elm_object_scale_set(sl, 1.0);
elm_slider_horizontal_set(sl, 0);
elm_object_disabled_set(sl, EINA_TRUE);
elm_box_pack_end(bx2, sl);
evas_object_show(ic);
evas_object_show(sl);
evas_object_show(win);
}
#endif

View File

@ -64,6 +64,7 @@ struct _Widget_Data
static const char *widtype = NULL;
static void _del_hook(Evas_Object *obj);
static void _theme_hook(Evas_Object *obj);
static void _disable_hook(Evas_Object *obj);
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@ -225,6 +226,17 @@ _theme_hook(Evas_Object *obj)
_sizing_eval(obj);
}
static void
_disable_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (elm_widget_disabled_get(obj))
edje_object_signal_emit(wd->slider, "elm,state,disabled", "elm");
else
edje_object_signal_emit(wd->slider, "elm,state,enabled", "elm");
}
static void
_sizing_eval(Evas_Object *obj)
{
@ -449,6 +461,7 @@ elm_slider_add(Evas_Object *parent)
elm_widget_data_set(obj, wd);
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, EINA_TRUE);
elm_widget_event_hook_set(obj, _event_hook);