efl.ui.radio: change signal name for icon/text

Summary: see also 73f8b3b78f

Test Plan:
1. elementary_test -to radio
2. check that icon is visible

Reviewers: cedric, woohyun, Jaehyun_Cho

Reviewed By: Jaehyun_Cho

Differential Revision: https://phab.enlightenment.org/D5815
This commit is contained in:
YeongJong Lee 2018-02-26 19:59:31 +09:00 committed by Jaehyun Cho
parent c422359d2e
commit e25bd086c5
5 changed files with 383 additions and 24 deletions

View File

@ -1,3 +1,292 @@
group { "efl/radio";
inherit: "elm/radio/base/default";
images.image: "inset_shadow_circle_tiny.png" COMP;
images.image: "inset_circle_tiny.png" COMP;
images.image: "sym_radio_alum.png" COMP;
#define ICON 1
#define LABEL 2
#define MASK 3
#define DISABLE 4
script {
public btmode;
public eval_mode(m) {
new m1 = m & MASK;
new d = m & DISABLE;
if (m1 == (ICON | LABEL)) {
if (!d) {
set_state(PART:"elm.swallow.content", "visible", 0.0);
set_state(PART:"sizer.content", "visible", 0.0);
set_state(PART:"elm.text", "visible", 0.0);
set_state(PART:"inset", "default", 0.0);
set_state(PART:"clip", "default", 0.0);
set_state(PART:"event", "default", 0.0);
} else {
set_state(PART:"elm.swallow.content", "visible", 0.0);
set_state(PART:"sizer.content", "visible", 0.0);
set_state(PART:"elm.text", "disabled_visible", 0.0);
set_state(PART:"inset", "disabled", 0.0);
set_state(PART:"clip", "disabled", 0.0);
set_state(PART:"event", "disabled", 0.0);
}
} else if (m1 == (ICON)) {
if (!d) {
set_state(PART:"elm.swallow.content", "visible", 0.0);
set_state(PART:"sizer.content", "icononly", 0.0);
set_state(PART:"elm.text", "default", 0.0);
set_state(PART:"inset", "default", 0.0);
set_state(PART:"clip", "default", 0.0);
set_state(PART:"event", "default", 0.0);
} else {
set_state(PART:"elm.swallow.content", "visible", 0.0);
set_state(PART:"sizer.content", "icononly", 0.0);
set_state(PART:"elm.text", "disabled", 0.0);
set_state(PART:"inset", "disabled", 0.0);
set_state(PART:"clip", "disabled", 0.0);
set_state(PART:"event", "disabled", 0.0);
}
} else if (m1 == (LABEL)) {
if (!d) {
set_state(PART:"elm.swallow.content", "default", 0.0);
set_state(PART:"sizer.content", "default", 0.0);
set_state(PART:"elm.text", "visible", 0.0);
set_state(PART:"inset", "default", 0.0);
set_state(PART:"clip", "default", 0.0);
set_state(PART:"event", "default", 0.0);
} else {
set_state(PART:"elm.swallow.content", "default", 0.0);
set_state(PART:"sizer.content", "default", 0.0);
set_state(PART:"elm.text", "disabled_visible", 0.0);
set_state(PART:"inset", "disabled", 0.0);
set_state(PART:"clip", "disabled", 0.0);
set_state(PART:"event", "disabled", 0.0);
}
} else {
if (!d) {
set_state(PART:"elm.swallow.content", "default", 0.0);
set_state(PART:"sizer.content", "default", 0.0);
set_state(PART:"elm.text", "default", 0.0);
set_state(PART:"inset", "default", 0.0);
set_state(PART:"clip", "default", 0.0);
set_state(PART:"event", "default", 0.0);
} else {
set_state(PART:"elm.swallow.content", "default", 0.0);
set_state(PART:"sizer.content", "default", 0.0);
set_state(PART:"elm.text", "default", 0.0);
set_state(PART:"inset", "disabled", 0.0);
set_state(PART:"clip", "disabled", 0.0);
set_state(PART:"event", "disabled", 0.0);
}
}
}
}
parts {
part { name: "inset"; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
rel1.offset: 2 2;
rel2.relative: 0.0 1.0;
rel2.offset: 2 -3;
image.normal: "inset_shadow_circle_tiny.png";
align: 0.0 0.5;
min: 13 13;
max: 13 13;
fixed: 1 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
image.normal: "inset_circle_tiny.png";
}
}
part { name: "indicator"; mouse_events: 0;
scale: 1;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "inset";
rel2.to: "inset";
image.normal: "sym_radio_alum.png";
min: 11 11;
max: 11 11;
visible: 0;
}
description { state: "selected" 0.0;
inherit: "default" 0.0;
visible: 1;
}
}
part { name: "clip"; type: RECT;
description { state: "default" 0.0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color: 255 255 255 64;
}
}
part { name: "elm.swallow.content"; type: SWALLOW;
required;
scale: 1;
clip_to: "clip";
description { state: "default" 0.0;
fixed: 1 0;
visible: 0;
align: 0.0 0.5;
max: 0 0;
rel1.to_x: "inset";
rel1.relative: 1.0 0.0;
rel1.offset: 1 1;
rel2.to_x: "inset";
rel2.offset: 1 -2;
rel2.relative: 1.0 1.0;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
visible: 1;
aspect: 1.0 1.0;
min: 16 16;
}
}
part { name: "sizer.content"; type: TEXT; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
fixed: 1 1;
visible: 0;
text { font: FN; size: 10;
min: 0 0;
text_class: "radio_text";
}
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
rel1.to: "elm.swallow.content";
rel2.to: "elm.swallow.content";
text {
min: 1 1;
ellipsis: -1;
text: "M";
}
}
description { state: "icononly" 0.0;
inherit: "default" 0.0;
rel1.to: "elm.swallow.content";
rel2.to: "elm.swallow.content";
text {
min: 1 1;
ellipsis: -1;
text: "M";
}
}
}
part { name: "elm.text"; type: TEXT; mouse_events: 0;
effect: SHADOW BOTTOM;
scale: 1;
required;
description { state: "default" 0.0;
rel1.offset: 2 2;
rel1.to_x: "elm.swallow.content";
rel1.relative: 1.0 0.0;
rel2.offset: -3 -3;
color: FN_COL_DEFAULT;
color_class: "radio_text";
text { font: FN; size: 10;
min: 0 0;
align: 0.0 0.5;
text_class: "radio";
}
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
color_class: "radio_text_disabled";
color3: 255 255 255 255;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
visible: 1;
text.min: 1 1;
text.ellipsis: -1;
}
description { state: "disabled_visible" 0.0;
inherit: "default" 0.0;
color_class: "radio_text_disabled";
color3: 255 255 255 255;
visible: 1;
text.min: 1 1;
text.ellipsis: -1;
}
}
part { name: "event"; type: RECT;
description { state: "default" 0.0;
color: 0 0 0 0;
}
description { state: "disabled" 0.0;
inherit: "default" 0.0;
visible: 0;
}
}
}
programs {
program {
signal: "mouse,clicked,1"; source: "event";
action: SIGNAL_EMIT "elm,action,radio,toggle" "elm";
}
program {
signal: "elm,state,radio,on"; source: "elm";
action: STATE_SET "selected" 0.0;
target: "indicator";
}
program {
signal: "elm,state,radio,off"; source: "elm";
action: STATE_SET "default" 0.0;
target: "indicator";
}
program {
signal: "elm,state,elm.text,set"; source: "elm";
script {
new m = get_int(btmode);
m |= LABEL; set_int(btmode, m);
eval_mode(m);
}
}
program {
signal: "elm,state,elm.text,unset"; source: "elm";
script {
new m = get_int(btmode);
m &= ~LABEL; set_int(btmode, m);
eval_mode(m);
}
}
program {
signal: "elm,state,content,set"; source: "elm";
script {
new m = get_int(btmode);
m |= ICON; set_int(btmode, m);
eval_mode(m);
}
}
program {
signal: "elm,state,content,unset"; source: "elm";
script {
new m = get_int(btmode);
m &= ~ICON; set_int(btmode, m);
eval_mode(m);
}
}
program {
signal: "elm,state,disabled"; source: "elm";
script {
new m = get_int(btmode);
m |= DISABLE; set_int(btmode, m);
eval_mode(m);
}
}
program {
signal: "elm,state,enabled"; source: "elm";
script {
new m = get_int(btmode);
m &= ~DISABLE; set_int(btmode, m);
eval_mode(m);
}
}
}
#undef ICON
#undef LABEL
#undef MASK
#undef DISABLE
}

View File

@ -107,6 +107,7 @@ elm_public_eolian_files = \
elm_public_eolian_files += \
lib/elementary/efl_ui_legacy.eo \
lib/elementary/efl_ui_button_legacy_part.eo \
lib/elementary/efl_ui_radio_legacy_part.eo \
lib/elementary/elm_spinner.eo \
lib/elementary/elm_multibuttonentry_item.eo \
lib/elementary/elm_interface_scrollable.eo \

View File

@ -130,24 +130,6 @@ _key_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
return EINA_TRUE;
}
/* FIXME: replicated from elm_layout just because radio's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
static void
_icon_signal_emit(Evas_Object *obj)
{
char buf[64];
Eo *edje;
edje = elm_widget_resize_object_get(obj);
if (!edje) return;
snprintf(buf, sizeof(buf), "elm,state,icon,%s",
elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
elm_layout_signal_emit(obj, buf, "elm");
edje_object_message_signal_process(edje);
}
EOLIAN static Efl_Ui_Theme_Apply
_efl_ui_radio_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Radio_Data *sd)
{
@ -161,11 +143,6 @@ _efl_ui_radio_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Radio_Data *sd)
edje_object_message_signal_process(wd->resize_obj);
/* FIXME: replicated from elm_layout just because radio's icon
* spot is elm.swallow.content, not elm.swallow.icon. Fix that
* whenever we can changed the theme API */
_icon_signal_emit(obj);
elm_layout_sizing_eval(obj);
return int_ret;
@ -368,6 +345,7 @@ ELM_LAYOUT_TEXT_ALIASES_IMPLEMENT(MY_CLASS_PFX)
#include "efl_ui_radio.eo.c"
#include "efl_ui_radio_legacy.eo.h"
#include "efl_ui_radio_legacy_part.eo.h"
#define MY_CLASS_NAME_LEGACY "elm_radio"
/* Legacy APIs */
@ -386,6 +364,86 @@ _efl_ui_radio_legacy_efl_object_constructor(Eo *obj, void *_pd EINA_UNUSED)
return obj;
}
/* FIXME: replicated from elm_layout just because radio's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
static void
_icon_signal_emit(Evas_Object *obj)
{
char buf[63];
Eo *edje;
edje = elm_widget_resize_object_get(obj);
if (!edje) return;
snprintf(buf, sizeof(buf), "elm,state,icon,%s",
elm_layout_content_get(obj, "icon") ? "visible" : "hidden");
elm_layout_signal_emit(obj, buf, "elm");
edje_object_message_signal_process(edje);
elm_layout_sizing_eval(obj);
}
EOLIAN static Efl_Ui_Theme_Apply
_efl_ui_radio_legacy_efl_ui_widget_theme_apply(Eo *obj, void *_pd EINA_UNUSED)
{
Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED;
int_ret = efl_ui_widget_theme_apply(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS));
if (!int_ret) return EFL_UI_THEME_APPLY_FAILED;
/* FIXME: replicated from elm_layout just because radio's icon
* spot is elm.swallow.content, not elm.swallow.icon. Fix that
* whenever we can changed the theme API */
_icon_signal_emit(obj);
return int_ret;
}
/* FIXME: replicated from elm_layout just because radio's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
EOLIAN static Eina_Bool
_efl_ui_radio_legacy_efl_ui_widget_widget_sub_object_del(Eo *obj, void *_pd EINA_UNUSED, Evas_Object *sobj)
{
Eina_Bool int_ret = EINA_FALSE;
int_ret = elm_widget_sub_object_del(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), sobj);
if (!int_ret) return EINA_FALSE;
_icon_signal_emit(obj);
return EINA_TRUE;
}
/* FIXME: replicated from elm_layout just because radio's icon spot
* is elm.swallow.content, not elm.swallow.icon. Fix that whenever we
* can changed the theme API */
static Eina_Bool
_efl_ui_radio_legacy_content_set(Eo *obj, void *_pd EINA_UNUSED, const char *part, Evas_Object *content)
{
Eina_Bool int_ret = EINA_FALSE;
int_ret = efl_content_set(efl_part(efl_super(obj, EFL_UI_RADIO_LEGACY_CLASS), part), content);
if (!int_ret) return EINA_FALSE;
_icon_signal_emit(obj);
return EINA_TRUE;
}
/* Efl.Part begin */
static Eina_Bool
_part_is_efl_ui_radio_legacy_part(const Eo *obj EINA_UNUSED, const char *part)
{
return eina_streq(part, "elm.swallow.content");
}
ELM_PART_OVERRIDE_PARTIAL(efl_ui_radio_legacy, EFL_UI_RADIO_LEGACY, void, _part_is_efl_ui_radio_legacy_part)
ELM_PART_OVERRIDE_CONTENT_SET(efl_ui_radio_legacy, EFL_UI_RADIO_LEGACY, void)
#include "efl_ui_radio_legacy_part.eo.c"
/* Efl.Part end */
EAPI Evas_Object *
elm_radio_add(Evas_Object *parent)
{

View File

@ -5,5 +5,8 @@ class Efl.Ui.Radio_Legacy (Efl.Ui.Radio, Efl.Ui.Legacy)
implements {
class.constructor;
Efl.Object.constructor;
Efl.Ui.Widget.theme_apply;
Efl.Ui.Widget.widget_sub_object_del;
Efl.Part.part;
}
}

View File

@ -0,0 +1,8 @@
class Efl.Ui.Radio_Legacy.Part (Efl.Ui.Layout.Part_Content)
{
[[Elementary radio internal part class]]
data: null;
implements {
Efl.Content.content { set; }
}
}