From d3a14d08b09a2200b9a85c7ad4d93914a14f6de2 Mon Sep 17 00:00:00 2001 From: Taehyub Kim Date: Wed, 23 Aug 2017 15:50:18 +0900 Subject: [PATCH] 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 ++++ .../elementary/efl_ui_popup_alert_private.h | 22 ++ 9 files changed, 525 insertions(+) create mode 100644 src/lib/elementary/efl_ui_popup_alert.c create mode 100644 src/lib/elementary/efl_ui_popup_alert.eo create mode 100644 src/lib/elementary/efl_ui_popup_alert_private.h 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 # include # include +# include # include # include # include 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 + +#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