jaehyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e25bd086c5078f52faf274b56452d05cfaec05ba

commit e25bd086c5078f52faf274b56452d05cfaec05ba
Author: YeongJong Lee <[email protected]>
Date:   Mon Feb 26 19:59:31 2018 +0900

    efl.ui.radio: change signal name for icon/text
    
    Summary: see also 73f8b3b78f0ff92ddfc1c16426bf7c176f10293a
    
    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
---
 data/elementary/themes/edc/efl/radio.edc       | 291 ++++++++++++++++++++++++-
 src/Makefile_Elementary.am                     |   1 +
 src/lib/elementary/efl_ui_radio.c              | 104 +++++++--
 src/lib/elementary/efl_ui_radio_legacy.eo      |   3 +
 src/lib/elementary/efl_ui_radio_legacy_part.eo |   8 +
 5 files changed, 383 insertions(+), 24 deletions(-)

diff --git a/data/elementary/themes/edc/efl/radio.edc 
b/data/elementary/themes/edc/efl/radio.edc
index 5c6dc64aa3..8e2ccf3b63 100644
--- a/data/elementary/themes/edc/efl/radio.edc
+++ b/data/elementary/themes/edc/efl/radio.edc
@@ -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
 }
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index 2728e7830d..8cdc38478b 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -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 \
diff --git a/src/lib/elementary/efl_ui_radio.c 
b/src/lib/elementary/efl_ui_radio.c
index 0a49b3c5fc..5cae7ec113 100644
--- a/src/lib/elementary/efl_ui_radio.c
+++ b/src/lib/elementary/efl_ui_radio.c
@@ -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)
 {
diff --git a/src/lib/elementary/efl_ui_radio_legacy.eo 
b/src/lib/elementary/efl_ui_radio_legacy.eo
index da18c8a654..664929533b 100644
--- a/src/lib/elementary/efl_ui_radio_legacy.eo
+++ b/src/lib/elementary/efl_ui_radio_legacy.eo
@@ -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;
    }
 }
diff --git a/src/lib/elementary/efl_ui_radio_legacy_part.eo 
b/src/lib/elementary/efl_ui_radio_legacy_part.eo
new file mode 100644
index 0000000000..a9882a824d
--- /dev/null
+++ b/src/lib/elementary/efl_ui_radio_legacy_part.eo
@@ -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; }
+   }
+}

-- 


Reply via email to