jaehyun pushed a commit to branch master.

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

commit d3a14d08b09a2200b9a85c7ad4d93914a14f6de2
Author: Taehyub Kim <taehyub....@samsung.com>
Date:   Wed Aug 23 15:50:18 2017 +0900

    efl_ui_popup_alert: add Efl.Ui.Popup.Alert class
    
    Summary:
    Add initial code for Efl.Ui.Popup.Alert class.
    It supports setting title and buttons.
    
    Test Plan: 1. run elementary_test -to efluipopupalert
    
    Reviewers: Jaehyun_Cho, jpeg, cedric, thiepha, Blackmole, woohyun
    
    Differential Revision: https://phab.enlightenment.org/D5108
---
 data/elementary/objects/test.edc                |  32 ++++
 data/elementary/themes/edc/elm/popup.edc        | 163 ++++++++++++++++++
 src/Makefile_Elementary.am                      |   3 +
 src/bin/elementary/test.c                       |   2 +
 src/bin/elementary/test_popup.c                 |  44 +++++
 src/lib/elementary/Elementary.h                 |   1 +
 src/lib/elementary/efl_ui_popup_alert.c         | 218 ++++++++++++++++++++++++
 src/lib/elementary/efl_ui_popup_alert.eo        |  40 +++++
 src/lib/elementary/efl_ui_popup_alert_private.h |  22 +++
 9 files changed, 525 insertions(+)

diff --git a/data/elementary/objects/test.edc b/data/elementary/objects/test.edc
index 9e95ffd8be..834bea4e27 100644
--- a/data/elementary/objects/test.edc
+++ b/data/elementary/objects/test.edc
@@ -901,4 +901,36 @@ collections {
 
       }
    }
+   group { "efl_ui_popup_scroll_content";
+      parts {
+         rect { "base";
+            desc { "default";
+               min: 200 200;
+               color: 255 0 0 255;
+            }
+         }
+         rect { "top";
+            desc { "default";
+               fixed: 0 1;
+               min: 100 20;
+               color: 255 255 0 255;
+               rel1.to: "base";
+               rel2.to: "base";
+               rel2.relative: 1.0 0.0;
+               align: 0.5 0;
+            }
+         }
+         rect { "bottom";
+            desc { "default";
+              fixed: 0 1;
+              min: 100 20;
+              color: 255 255 0 255;
+              rel1.to: "base";
+              rel2.to: "base";
+              rel1.relative: 0.0 1.0;
+              align: 0.5 1.0;
+           }
+         }
+      }
+   }
 }
diff --git a/data/elementary/themes/edc/elm/popup.edc 
b/data/elementary/themes/edc/elm/popup.edc
index 7fb127b812..cb534a837a 100644
--- a/data/elementary/themes/edc/elm/popup.edc
+++ b/data/elementary/themes/edc/elm/popup.edc
@@ -141,6 +141,14 @@ group { name: "elm/label/base/popup/default";
          tag: "whitecolor" "+ color=#fff";
          tag: "tab" "\t";
       }
+      style { name: "popup_title_style_ellipsis";
+         base: "font="FNBD" font_size=10 text_class=label align=center 
color=#fff color_class=popup_title_text style=shadow,bottom 
shadow_color=#00000080 ellipsis=1.0 wrap=mixed";
+         tag: "br" "\n";
+         tag: "hilight" "+ font="FNBD" text_class=label_light";
+         tag: "b" "+ font="FNBD" text_class=label_light";
+         tag: "whitecolor" "+ color=#fff";
+         tag: "tab" "\t";
+      }
    }
    parts {
       part { name: "elm.text"; type: TEXTBLOCK; mouse_events: 0;
@@ -533,6 +541,91 @@ group { "elm/popup/base/view";
    }
 }
 
+group { "elm/popup/base/alert";
+   images.image: "rounded_square.png" COMP;
+   parts {
+      image { "bg";
+         desc { "default";
+            min: 100 100;
+            image.border: 15 15 15 15;
+            image.normal: "rounded_square.png";
+                  }
+      }
+      spacer { "base";
+         desc { "default";
+            rel.to: "bg";
+            rel1.offset: 10 10;
+            rel2.offset: -11 -11;
+         }
+      }
+      rect { "title_bg";
+         desc { "default";
+            fixed: 0 1;
+            min: 0 0;
+            rel.to: "base";
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0.0;
+            color: 0 0 0 0;
+         }
+         desc { "title_visible";
+            inherit: "default";
+            min: 0 20;
+         }
+      }
+      textblock { "elm.text.title";
+         scale;
+         desc { "default";
+            fixed: 1 1;
+            text {
+              style: "popup_title_style_ellipsis";
+            }
+            rel.to: "title_bg";
+            hid;
+         }
+         desc { "title_visible";
+            inherit: "default";
+            vis;
+         }
+      }
+      swallow { "buttons";
+         desc { "default";
+            fixed: 0 1;
+            rel.to: "base";
+            rel1.relative: 0.0 1.0;
+            align: 0.5 1.0;
+            min: 0 0;
+         }
+         desc { "button_visible";
+            inherit: "default";
+            min: 0 30;
+         }
+      }
+      swallow { "elm.swallow.content";
+         desc { "default";
+            rel1.to_x: "base";
+            rel1.to_y: "title_bg";
+            rel2.to_x: "base";
+            rel2.to_y: "buttons";
+            rel1.relative: 0.0 1.0;
+            rel2.relative: 1.0 0.0;
+         }
+      }
+   }
+   programs {
+      program {
+         signal: "elm,title,show"; source: "elm";
+         action: STATE_SET "title_visible" 0.0;
+         target: "title_bg";
+         target: "elm.text.title";
+      }
+      program {
+         signal: "elm,buttons,show"; source: "elm";
+         action: STATE_SET "button_visible" 0.0;
+         target: "buttons";
+      }
+   }
+}
+
 group { "elm/popup/base/event_bg";
    parts {
       rect { "base";
@@ -581,3 +674,73 @@ group { "elm/popup/base/event_bg";
       }
    }
 }
+
+group { "elm/popup/base/button1";
+   parts {
+      swallow { "elm.swallow.button1";
+      }
+   }
+}
+
+group { "elm/popup/base/button2";
+   parts {
+      spacer { "div1";
+         desc { "default";
+            rel1.relative: 0.5 0.5;
+            rel2.relative: 0.5 0.5;
+            min: 5 5;
+         }
+      }
+      swallow { "elm.swallow.button1";
+         desc { "default";
+            rel2.to_x: "div1";
+            rel2.relative: 0.0 1.0;
+         }
+      }
+      swallow { "elm.swallow.button2";
+         desc { "default";
+            rel1.to_x: "div1";
+            rel1.relative: 1.0 0.0;
+         }
+      }
+   }
+}
+
+group { "elm/popup/base/button3";
+   parts {
+      spacer { "div1";
+         desc { "default";
+            rel1.relative: 0.333 0.5;
+            rel2.relative: 0.333 0.5;
+            min: 5 5;
+         }
+      }
+      spacer { "div2";
+         desc { "default";
+            rel1.relative: 0.666 0.5;
+            rel2.relative: 0.666 0.5;
+            min: 5 5;
+         }
+      }
+      swallow { "elm.swallow.button1";
+         desc { "default";
+            rel2.to_x: "div1";
+            rel2.relative: 0.0 1.0;
+         }
+      }
+      swallow { "elm.swallow.button2";
+         desc { "default";
+            rel1.to_x: "div1";
+            rel2.to_x: "div2";
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 0.0 1.0;
+         }
+      }
+      swallow { "elm.swallow.button3";
+         desc { "default";
+            rel1.to_x: "div2";
+            rel1.relative: 1.0 0.0;
+         }
+      }
+   }
+}
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index d825df3d6c..40c1611f3e 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -34,6 +34,7 @@ elm_public_eolian_files = \
        lib/elementary/efl_ui_text_interactive.eo \
        lib/elementary/efl_ui_text.eo \
        lib/elementary/efl_ui_popup.eo \
+       lib/elementary/efl_ui_popup_alert.eo \
        lib/elementary/efl_ui_text_editable.eo \
        lib/elementary/efl_ui_text_async.eo \
        lib/elementary/efl_ui_textpath.eo \
@@ -287,6 +288,7 @@ includesunstable_HEADERS = \
        lib/elementary/elm_widget_icon.h \
        lib/elementary/efl_ui_widget_image.h \
        lib/elementary/efl_ui_popup_private.h \
+       lib/elementary/efl_ui_popup_alert_private.h \
        lib/elementary/elm_widget_index.h \
        lib/elementary/elm_widget_inwin.h \
        lib/elementary/elm_widget_label.h \
@@ -697,6 +699,7 @@ lib_elementary_libelementary_la_SOURCES = \
        lib/elementary/efl_ui_box_layout.c \
        lib/elementary/efl_ui_box_private.h \
        lib/elementary/efl_ui_popup.c \
+       lib/elementary/efl_ui_popup_alert.c \
        lib/elementary/efl_ui_grid.c \
        lib/elementary/efl_ui_grid_static.c \
        lib/elementary/efl_ui_grid_private.h \
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 63e902e902..aebb39a24f 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -275,6 +275,7 @@ void test_datetime(void *data, Evas_Object *obj, void 
*event_info);
 void test_ui_clock(void *data, Evas_Object *obj, void *event_info);
 void test_popup(void *data, Evas_Object *obj, void *event_info);
 void test_efl_ui_popup(void *data, Evas_Object *obj, void *event_info);
+void test_efl_ui_popup_alert(void *data, Evas_Object *obj, void *event_info);
 void test_dayselector(void *data, Evas_Object *obj, void *event_info);
 void test_image(void *data, Evas_Object *obj, void *event_info);
 void test_image_scale_type(void *data, Evas_Object *obj, void *event_info);
@@ -1044,6 +1045,7 @@ add_tests:
    ADD_TEST(NULL, "Popups", "Tooltip 4", test_tooltip4);
    ADD_TEST(NULL, "Popups", "Popup", test_popup);
    ADD_TEST(NULL, "Popups", "Efl UI Popup", test_efl_ui_popup);
+   ADD_TEST(NULL, "Popups", "Efl UI Popup Alert", test_efl_ui_popup_alert);
 
    //------------------------------//
    ADD_TEST(NULL, "Times & Dates", "Calendar", test_calendar);
diff --git a/src/bin/elementary/test_popup.c b/src/bin/elementary/test_popup.c
index e42b7dc4a9..4074862175 100644
--- a/src/bin/elementary/test_popup.c
+++ b/src/bin/elementary/test_popup.c
@@ -1092,3 +1092,47 @@ test_efl_ui_popup(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *ev
 
    efl_content_set(efl_ui_popup, btn);
 }
+
+static void
+efl_ui_popup_alert_clicked_cb(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+    Efl_Ui_Popup_Alert_Button type = (Efl_Ui_Popup_Alert_Button)ev->info;
+    if (type == EFL_UI_POPUP_ALERT_BUTTON_POSITIVE)
+      printf("Positive Button is clicked\n");
+    else if(type == EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE)
+      printf("Negative Button is clicked\n");
+    else if(type == EFL_UI_POPUP_ALERT_BUTTON_USER)
+      printf("User Button is clicked\n");
+}
+
+void
+test_efl_ui_popup_alert(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UNUSED)
+{
+   Evas_Object *win;
+   char buf[PATH_MAX];
+
+   win = elm_win_util_standard_add("Efl UI Popup Alert", "Efl UI Popup Alert");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   Evas_Object *efl_ui_popup= efl_add(EFL_UI_POPUP_ALERT_CLASS, win);
+
+   efl_ui_popup_alert_title_set(efl_ui_popup, "title");
+
+   evas_object_resize(efl_ui_popup, 160, 160);
+   evas_object_show(efl_ui_popup);
+
+   Evas_Object *layout = elm_layout_add(efl_ui_popup);
+   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
+   elm_layout_file_set(layout, buf, "efl_ui_popup_scroll_content");
+   evas_object_show(layout);
+
+   efl_content_set(efl_ui_popup, layout);
+   efl_ui_popup_alert_button_set(efl_ui_popup, 
EFL_UI_POPUP_ALERT_BUTTON_POSITIVE, "Yes");
+   efl_ui_popup_alert_button_set(efl_ui_popup, 
EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE, "No");
+   efl_ui_popup_alert_button_set(efl_ui_popup, EFL_UI_POPUP_ALERT_BUTTON_USER, 
"Cancel");
+
+   efl_event_callback_add(efl_ui_popup, EFL_UI_POPUP_ALERT_EVENT_CLICKED, 
efl_ui_popup_alert_clicked_cb, NULL);
+}
diff --git a/src/lib/elementary/Elementary.h b/src/lib/elementary/Elementary.h
index e2e221c29f..95121188ce 100644
--- a/src/lib/elementary/Elementary.h
+++ b/src/lib/elementary/Elementary.h
@@ -302,6 +302,7 @@ EAPI extern Elm_Version *elm_version;
 # include <efl_ui_text_interactive.eo.h>
 # include <efl_ui_text.eo.h>
 # include <efl_ui_popup.eo.h>
+# include <efl_ui_popup_alert.eo.h>
 # include <efl_ui_text_editable.eo.h>
 # include <efl_ui_text_async.eo.h>
 # include <efl_ui_clock.eo.h>
diff --git a/src/lib/elementary/efl_ui_popup_alert.c 
b/src/lib/elementary/efl_ui_popup_alert.c
new file mode 100644
index 0000000000..6c7a9a57a1
--- /dev/null
+++ b/src/lib/elementary/efl_ui_popup_alert.c
@@ -0,0 +1,218 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Elementary.h>
+
+#include "elm_priv.h"
+#include "efl_ui_popup_alert_private.h"
+
+#define MY_CLASS EFL_UI_POPUP_ALERT_CLASS
+#define MY_CLASS_NAME "Efl.Ui.Popup.Alert"
+
+EOLIAN static void
+_efl_ui_popup_alert_elm_layout_sizing_eval(Eo *obj, Efl_Ui_Popup_Alert_Data 
*pd EINA_UNUSED)
+{
+   elm_layout_sizing_eval(efl_super(obj, MY_CLASS));
+
+   ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+   Evas_Coord minw = -1, minh = -1;
+
+   elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+   edje_object_size_min_restricted_calc
+     (wd->resize_obj, &minw, &minh, minw, minh);
+   evas_object_size_hint_min_set(obj, minw, minh);
+
+   Evas_Coord w, h;
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+}
+
+EOLIAN static void
+_efl_ui_popup_alert_title_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd, const char 
*text)
+{
+   if (pd->title_text)
+     {
+        eina_stringshare_del(pd->title_text);
+        pd->title_text = NULL;
+     }
+
+   pd->title_text = eina_stringshare_add(text);
+   elm_object_part_text_set(obj, "elm.text.title", text);
+   elm_layout_signal_emit(obj, "elm,title,show", "elm");
+
+   ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+   edje_object_message_signal_process(wd->resize_obj);
+   elm_layout_sizing_eval(obj);
+}
+
+EOLIAN static const char *
+_efl_ui_popup_alert_title_get(Eo *obj EINA_UNUSED, Efl_Ui_Popup_Alert_Data *pd)
+{
+   if (pd->title_text)
+    return pd->title_text;
+   return NULL;
+}
+
+static void
+_positive_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                            void *event_info EINA_UNUSED)
+{
+    Eo *popup_obj = data;
+    efl_event_callback_call(popup_obj, EFL_UI_POPUP_ALERT_EVENT_CLICKED, (void 
*)(uintptr_t)EFL_UI_POPUP_ALERT_BUTTON_POSITIVE);
+}
+
+static void
+_negative_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                            void *event_info EINA_UNUSED)
+{
+   Eo *popup_obj = data;
+   efl_event_callback_call(popup_obj, EFL_UI_POPUP_ALERT_EVENT_CLICKED, (void 
*)(uintptr_t)EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE);
+}
+
+static void
+_user_button_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
+                        void *event_info EINA_UNUSED)
+{
+   Eo *popup_obj = data;
+   efl_event_callback_call(popup_obj, EFL_UI_POPUP_ALERT_EVENT_CLICKED, (void 
*)(uintptr_t)EFL_UI_POPUP_ALERT_BUTTON_USER);
+}
+
+EOLIAN static void
+_efl_ui_popup_alert_button_set(Eo *obj, Efl_Ui_Popup_Alert_Data *pd, 
Efl_Ui_Popup_Alert_Button type, const char *text)
+{
+   if (pd->button[type])
+     {
+        evas_object_del(pd->button[type]);
+        pd->button[type] = NULL;
+     }
+   pd->button[type] = elm_button_add(obj);
+   elm_object_text_set(pd->button[type], text);
+
+   switch (type)
+     {
+        case EFL_UI_POPUP_ALERT_BUTTON_POSITIVE:
+           evas_object_smart_callback_add(pd->button[type], "clicked",
+                                          _positive_button_clicked_cb,
+                                          obj);
+        break;
+        case EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE:
+           evas_object_smart_callback_add(pd->button[type], "clicked",
+                                          _negative_button_clicked_cb,
+                                          obj);
+        break;
+        case EFL_UI_POPUP_ALERT_BUTTON_USER:
+           evas_object_smart_callback_add(pd->button[type], "clicked",
+                                          _user_button_clicked_cb,
+                                          obj);
+        break;
+        default:
+        break;
+     }
+
+   Evas_Object * cur_content = efl_content_unset(efl_part(obj, "buttons"));
+   if (cur_content)
+     {
+        efl_content_unset(efl_part(cur_content, "elm.swallow.button1"));
+        efl_content_unset(efl_part(cur_content, "elm.swallow.button2"));
+        efl_content_unset(efl_part(cur_content, "elm.swallow.button3"));
+        evas_object_del(cur_content);
+     }
+
+   if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]
+       && pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]
+       && pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3], 
"popup", "base", "button3");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER]);
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3], 
"elm.swallow.button2"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]);
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3], 
"elm.swallow.button3"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_3]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]
+            && pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"popup", "base", "button2");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]);
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button2"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]
+            && pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"popup", "base", "button2");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER]);
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button2"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]
+            && pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"popup", "base", "button2");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER]);
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2], 
"elm.swallow.button2"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_2]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"popup", "base", "button1");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_POSITIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"popup", "base", "button1");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_NEGATIVE]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1]);
+     }
+   else if (pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER])
+     {
+        pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1] = elm_layout_add(obj);
+        elm_layout_theme_set(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"popup", "base", "button1");
+        
efl_content_set(efl_part(pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1], 
"elm.swallow.button1"), pd->button[EFL_UI_POPUP_ALERT_BUTTON_USER]);
+        efl_content_set(efl_part(obj, "buttons"), 
pd->button_layout[EFL_UI_POPUP_ALERT_BUTTON_1]);
+     }
+
+     elm_layout_signal_emit(obj, "elm,buttons,show", "elm");
+     elm_layout_sizing_eval(obj);
+}
+
+EOLIAN static void
+_efl_ui_popup_alert_efl_canvas_group_group_add(Eo *obj, 
Efl_Ui_Popup_Alert_Data *pd EINA_UNUSED)
+{
+   ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+
+   efl_canvas_group_add(efl_super(obj, MY_CLASS));
+   elm_widget_sub_object_parent_add(obj);
+
+   elm_layout_theme_set(efl_super(obj, MY_CLASS), "popup", "base", "alert");
+}
+
+EOLIAN static void
+_efl_ui_popup_alert_efl_canvas_group_group_del(Eo *obj, 
Efl_Ui_Popup_Alert_Data *pd)
+{
+   if (pd->title_text)
+     {
+        eina_stringshare_del(pd->title_text);
+        pd->title_text = NULL;
+     }
+
+   efl_canvas_group_del(efl_super(obj, MY_CLASS));
+}
+
+EOLIAN static void
+_efl_ui_popup_alert_class_constructor(Efl_Class *klass)
+{
+   evas_smart_legacy_type_register(MY_CLASS_NAME, klass);
+}
+
+#define EFL_UI_POPUP_ALERT_EXTRA_OPS \
+   EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_popup_alert), \
+   ELM_LAYOUT_SIZING_EVAL_OPS(efl_ui_popup_alert)
+
+#include "efl_ui_popup_alert.eo.c"
diff --git a/src/lib/elementary/efl_ui_popup_alert.eo 
b/src/lib/elementary/efl_ui_popup_alert.eo
new file mode 100644
index 0000000000..8ac37993a7
--- /dev/null
+++ b/src/lib/elementary/efl_ui_popup_alert.eo
@@ -0,0 +1,40 @@
+enum Efl.Ui.Popup.Alert.Button {
+   [[Defines the type of the alert button.]]
+   positive = 0, [[Button having positive meaning. e.g. "Yes"]]
+   negative, [[Button having negative meaning. e.g. "No"]]
+   user [[Button having user-defined meaning. e.g. "Cancel"]]
+}
+
+class Efl.Ui.Popup.Alert(Efl.Ui.Popup)
+{
+   methods {
+      @property title {
+         set {
+            [[Set the title of popup.]]
+         }
+         get {
+            [[Get the title of popup.]]
+         }
+         values {
+            text: string;
+         }
+      }
+      @property button {
+         set {
+            [[Set popup buttons.]]
+         }
+         keys {
+            type: Efl.Ui.Popup.Alert.Button;
+         }
+         values {
+            text: string;
+         }
+      }
+   }
+   implements {
+      class.constructor;
+   }
+   events {
+      clicked;
+   }
+}
diff --git a/src/lib/elementary/efl_ui_popup_alert_private.h 
b/src/lib/elementary/efl_ui_popup_alert_private.h
new file mode 100644
index 0000000000..15e7691d56
--- /dev/null
+++ b/src/lib/elementary/efl_ui_popup_alert_private.h
@@ -0,0 +1,22 @@
+#ifndef EFL_UI_POPUP_ALERT_H
+#define EFL_UI_POPUP_ALERT_H
+
+#include "Elementary.h"
+
+typedef enum
+{
+   EFL_UI_POPUP_ALERT_BUTTON_1 = 0,
+   EFL_UI_POPUP_ALERT_BUTTON_2,
+   EFL_UI_POPUP_ALERT_BUTTON_3,
+   EFL_UI_POPUP_ALERT_BUTTON_COUNT
+} Efl_Ui_Popup_Alert_Button_Type;
+
+typedef struct _Efl_Ui_Popup_Alert_Data Efl_Ui_Popup_Alert_Data;
+struct _Efl_Ui_Popup_Alert_Data
+{
+   const char *title_text;
+   Evas_Object *button[EFL_UI_POPUP_ALERT_BUTTON_COUNT];
+   Evas_Object *button_layout[EFL_UI_POPUP_ALERT_BUTTON_COUNT];
+};
+
+#endif

-- 


Reply via email to