#ifdef HAVE_CONFIG_H # include "elementary_config.h" #endif #define EFL_PART_PROTECTED #include #include "elm_priv.h" #include "efl_ui_alert_popup_private.h" #include "efl_ui_alert_popup_part.eo.h" #include "elm_part_helper.h" #define MY_CLASS EFL_UI_ALERT_POPUP_CLASS #define MY_CLASS_NAME "Efl.Ui.Alert_Popup" static const char PART_NAME_BUTTON[] = "button"; static const char PART_NAME_BUTTON_LAYOUT[EFL_UI_ALERT_POPUP_BUTTON_COUNT][15] = {"button_layout1", "button_layout2", "button_layout3"}; static const char BUTTON_SWALLOW_NAME[EFL_UI_ALERT_POPUP_BUTTON_COUNT][20] = {"efl.button1", "efl.button2", "efl.button3"}; static Eina_Bool _efl_ui_alert_popup_text_set(Eo *obj, Efl_Ui_Alert_Popup_Data *pd, const char *part, const char *label) { if (eina_streq(part, "title") || eina_streq(part, "efl.text.title")) { Eina_Bool changed = eina_stringshare_replace(&pd->title_text, label); if (changed) { efl_text_set(efl_part(efl_super(obj, MY_CLASS), "title"), label); if (label) elm_layout_signal_emit(obj, "efl,title,show", "efl"); else elm_layout_signal_emit(obj, "efl,title,hide", "efl"); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE); edje_object_message_signal_process(wd->resize_obj); efl_canvas_group_change(obj); } } else efl_text_set(efl_part(efl_super(obj, MY_CLASS), part), label); return EINA_TRUE; } const char * _efl_ui_alert_popup_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Alert_Popup_Data *pd, const char *part) { if (eina_streq(part, "title") || eina_streq(part, "efl.text.title")) { if (pd->title_text) return pd->title_text; return NULL; } return efl_text_get(efl_part(efl_super(obj, MY_CLASS), part)); } static void _positive_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *popup_obj = data; Efl_Ui_Alert_Popup_Button_Clicked_Event event; event.button_type = EFL_UI_ALERT_POPUP_BUTTON_POSITIVE; efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event); } static void _negative_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *popup_obj = data; Efl_Ui_Alert_Popup_Button_Clicked_Event event; event.button_type = EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE; efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event); } static void _user_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *popup_obj = data; Efl_Ui_Alert_Popup_Button_Clicked_Event event; event.button_type = EFL_UI_ALERT_POPUP_BUTTON_USER; efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event); } static void _apply_button_style(Eo *obj, Efl_Ui_Alert_Popup_Data *pd, int button_cnt) { if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER]) { if (button_cnt > 1) elm_widget_element_update(obj, pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER], "left_button"); } if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE]) { if (button_cnt == 2) { if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER]) elm_widget_element_update(obj, pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE], "right_button"); else elm_widget_element_update(obj, pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE], "left_button"); } } if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE]) { if (button_cnt > 1) elm_widget_element_update(obj, pd->button[EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE], "right_button"); } } EOLIAN static void _efl_ui_alert_popup_button_set(Eo *obj, Efl_Ui_Alert_Popup_Data *pd, Efl_Ui_Alert_Popup_Button type, const char *text, Eo *icon) { int i; Eina_Bool is_btn_created = EINA_FALSE; Eo *cur_content; ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); if ((type < EFL_UI_ALERT_POPUP_BUTTON_POSITIVE) || (type > EFL_UI_ALERT_POPUP_BUTTON_USER)) { ERR("Wrong type (%d) is passed!", type); return; } if (!pd->button[type]) { is_btn_created = EINA_TRUE; pd->button[type] = efl_add(EFL_UI_BUTTON_CLASS, obj, elm_widget_element_update(obj, efl_added, PART_NAME_BUTTON)); switch (type) { case EFL_UI_ALERT_POPUP_BUTTON_POSITIVE: efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED, _positive_button_clicked_cb, obj); break; case EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE: efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED, _negative_button_clicked_cb, obj); break; case EFL_UI_ALERT_POPUP_BUTTON_USER: efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED, _user_button_clicked_cb, obj); break; default: break; } } else { const char *pre_text = efl_text_get(pd->button[type]); if ((pre_text != NULL) && (text != NULL) && (!strcmp(pre_text, text)) && (efl_content_get(pd->button[type]) == icon)) return; } efl_text_set(pd->button[type], text); efl_content_set(pd->button[type], icon); if (is_btn_created) { int btn_count = !!pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE] + !!pd->button[EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE] + !!pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER]; cur_content = efl_content_get(efl_part(obj, "efl.buttons")); for (i = 0; i < EFL_UI_ALERT_POPUP_BUTTON_COUNT; i++) efl_content_unset(efl_part(cur_content, BUTTON_SWALLOW_NAME[i])); elm_widget_element_update(obj, cur_content, PART_NAME_BUTTON_LAYOUT[btn_count - 1]); _apply_button_style(obj, pd, btn_count); i = 0; if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER]) { efl_content_set(efl_part(cur_content, BUTTON_SWALLOW_NAME[i]), pd->button[EFL_UI_ALERT_POPUP_BUTTON_USER]); i++; } if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE]) { efl_content_set(efl_part(cur_content, BUTTON_SWALLOW_NAME[i]), pd->button[EFL_UI_ALERT_POPUP_BUTTON_POSITIVE]); i++; } if (pd->button[EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE]) { efl_content_set(efl_part(cur_content, BUTTON_SWALLOW_NAME[i]), pd->button[EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE]); } elm_layout_signal_emit(obj, "efl,buttons,show", "efl"); edje_object_message_signal_process(wd->resize_obj); } efl_canvas_group_change(obj); } EOLIAN static Eo * _efl_ui_alert_popup_efl_object_constructor(Eo *obj, Efl_Ui_Alert_Popup_Data *pd EINA_UNUSED) { ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL); if (!elm_widget_theme_klass_get(obj)) elm_widget_theme_klass_set(obj, "alert_popup"); obj = efl_constructor(efl_super(obj, MY_CLASS)); efl_canvas_object_type_set(obj, MY_CLASS_NAME); efl_add(EFL_UI_LAYOUT_CLASS, obj, efl_content_set(efl_part(obj, "efl.buttons"), efl_added)); return obj; } EOLIAN static void _efl_ui_alert_popup_efl_object_destructor(Eo *obj, Efl_Ui_Alert_Popup_Data *pd) { ELM_SAFE_FREE(pd->title_text, eina_stringshare_del); efl_destructor(efl_super(obj, MY_CLASS)); } static Eina_Bool _part_is_efl_ui_alert_popup_part(const Eo *obj EINA_UNUSED, const char *part) { return (eina_streq(part, "title") || eina_streq(part, "efl.text.title")); } /* Efl.Part begin */ ELM_PART_OVERRIDE_PARTIAL(efl_ui_alert_popup, EFL_UI_ALERT_POPUP, Efl_Ui_Alert_Popup_Data, _part_is_efl_ui_alert_popup_part) ELM_PART_OVERRIDE_TEXT_SET(efl_ui_alert_popup, EFL_UI_ALERT_POPUP, Efl_Ui_Alert_Popup_Data) ELM_PART_OVERRIDE_TEXT_GET(efl_ui_alert_popup, EFL_UI_ALERT_POPUP, Efl_Ui_Alert_Popup_Data) #include "efl_ui_alert_popup_part.eo.c" /* Efl.Part end */ #include "efl_ui_alert_popup.eo.c"