2017-08-22 23:50:18 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2018-05-03 16:34:17 -07:00
|
|
|
#define EFL_PART_PROTECTED
|
|
|
|
|
2017-08-22 23:50:18 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
|
|
|
|
#include "elm_priv.h"
|
2018-11-16 02:11:50 -08:00
|
|
|
#include "efl_ui_alert_popup_private.h"
|
2019-11-06 20:38:47 -08:00
|
|
|
#include "efl_ui_alert_popup_part_title.eo.h"
|
2017-10-24 04:13:04 -07:00
|
|
|
#include "elm_part_helper.h"
|
2017-08-22 23:50:18 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
#define MY_CLASS EFL_UI_ALERT_POPUP_CLASS
|
|
|
|
#define MY_CLASS_NAME "Efl.Ui.Alert_Popup"
|
2017-08-22 23:50:18 -07:00
|
|
|
|
2017-11-29 03:21:14 -08:00
|
|
|
static const char PART_NAME_BUTTON[] = "button";
|
2018-11-16 02:11:50 -08:00
|
|
|
static const char PART_NAME_BUTTON_LAYOUT[EFL_UI_ALERT_POPUP_BUTTON_COUNT][15] =
|
2017-11-29 03:21:14 -08:00
|
|
|
{"button_layout1",
|
|
|
|
"button_layout2",
|
|
|
|
"button_layout3"};
|
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
static const char BUTTON_SWALLOW_NAME[EFL_UI_ALERT_POPUP_BUTTON_COUNT][20] =
|
2018-04-26 03:27:43 -07:00
|
|
|
{"efl.button1",
|
|
|
|
"efl.button2",
|
|
|
|
"efl.button3"};
|
2017-12-04 17:41:20 -08:00
|
|
|
|
2019-09-24 13:59:44 -07:00
|
|
|
static const Elm_Layout_Part_Alias_Description _text_aliases[] =
|
|
|
|
{
|
|
|
|
{"title", "efl.text.title"},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
|
|
|
|
2017-10-24 04:13:04 -07:00
|
|
|
static Eina_Bool
|
2018-11-16 02:11:50 -08:00
|
|
|
_efl_ui_alert_popup_text_set(Eo *obj, Efl_Ui_Alert_Popup_Data *pd, const char *part, const char *label)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2019-09-24 13:59:44 -07:00
|
|
|
if (!_elm_layout_part_aliasing_eval(obj, &part, EINA_TRUE))
|
|
|
|
return EINA_FALSE;
|
|
|
|
efl_text_set(efl_part(efl_super(obj, MY_CLASS), part), label);
|
|
|
|
if (eina_streq(part, "efl.text.title"))
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-12-04 17:41:20 -08:00
|
|
|
Eina_Bool changed = eina_stringshare_replace(&pd->title_text, label);
|
|
|
|
if (changed)
|
2017-10-24 04:13:04 -07:00
|
|
|
{
|
2019-09-24 13:59:44 -07:00
|
|
|
efl_text_set(efl_part(efl_super(obj, MY_CLASS), part), label);
|
2017-12-04 17:41:20 -08:00
|
|
|
if (label)
|
2019-09-24 13:59:56 -07:00
|
|
|
elm_layout_signal_emit(obj, "efl,title,visible,on", "efl");
|
2017-12-04 17:41:20 -08:00
|
|
|
else
|
2019-09-24 13:59:56 -07:00
|
|
|
elm_layout_signal_emit(obj, "efl,title,visible,off", "efl");
|
2017-12-04 17:41:20 -08:00
|
|
|
|
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
|
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
2019-07-30 10:11:19 -07:00
|
|
|
efl_canvas_group_change(obj);
|
2017-10-24 04:13:04 -07:00
|
|
|
}
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
2017-10-24 04:13:04 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
2017-08-22 23:50:18 -07:00
|
|
|
|
2017-10-24 04:13:04 -07:00
|
|
|
const char *
|
2018-11-16 02:11:50 -08:00
|
|
|
_efl_ui_alert_popup_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Alert_Popup_Data *pd, const char *part)
|
2017-10-24 04:13:04 -07:00
|
|
|
{
|
2019-09-24 13:59:44 -07:00
|
|
|
if (!_elm_layout_part_aliasing_eval(obj, &part, EINA_TRUE))
|
|
|
|
return EINA_FALSE;
|
|
|
|
if (eina_streq(part, "efl.text.title"))
|
2017-10-24 04:13:04 -07:00
|
|
|
{
|
|
|
|
if (pd->title_text)
|
|
|
|
return pd->title_text;
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return efl_text_get(efl_part(efl_super(obj, MY_CLASS), part));
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-12-04 17:41:20 -08:00
|
|
|
_positive_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-10-24 02:34:36 -07:00
|
|
|
Eo *popup_obj = data;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
Efl_Ui_Alert_Popup_Button_Clicked_Event event;
|
|
|
|
event.button_type = EFL_UI_ALERT_POPUP_BUTTON_POSITIVE;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event);
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-12-04 17:41:20 -08:00
|
|
|
_negative_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
|
|
|
Eo *popup_obj = data;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
Efl_Ui_Alert_Popup_Button_Clicked_Event event;
|
|
|
|
event.button_type = EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event);
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-12-04 17:41:20 -08:00
|
|
|
_user_button_clicked_cb(void *data, const Efl_Event *ev EINA_UNUSED)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
|
|
|
Eo *popup_obj = data;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
Efl_Ui_Alert_Popup_Button_Clicked_Event event;
|
|
|
|
event.button_type = EFL_UI_ALERT_POPUP_BUTTON_USER;
|
2017-10-24 06:30:49 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
efl_event_callback_call(popup_obj, EFL_UI_ALERT_POPUP_EVENT_BUTTON_CLICKED, &event);
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
2019-03-28 02:48:03 -07:00
|
|
|
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");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-22 23:50:18 -07:00
|
|
|
EOLIAN static void
|
2018-11-16 02:11:50 -08:00
|
|
|
_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)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-12-04 17:41:20 -08:00
|
|
|
int i;
|
2019-03-28 02:48:03 -07:00
|
|
|
Eina_Bool is_btn_created = EINA_FALSE;
|
2017-12-04 17:41:20 -08:00
|
|
|
Eo *cur_content;
|
2017-12-10 23:07:18 -08:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2017-08-22 23:50:18 -07:00
|
|
|
|
2018-11-16 02:11:50 -08:00
|
|
|
if ((type < EFL_UI_ALERT_POPUP_BUTTON_POSITIVE) || (type > EFL_UI_ALERT_POPUP_BUTTON_USER))
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-12-04 17:41:20 -08:00
|
|
|
ERR("Wrong type (%d) is passed!", type);
|
|
|
|
return;
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
2017-12-04 17:41:20 -08:00
|
|
|
if (!pd->button[type])
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2019-03-28 02:48:03 -07:00
|
|
|
is_btn_created = EINA_TRUE;
|
2017-12-04 17:41:20 -08:00
|
|
|
pd->button[type] = efl_add(EFL_UI_BUTTON_CLASS, obj,
|
|
|
|
elm_widget_element_update(obj, efl_added,
|
|
|
|
PART_NAME_BUTTON));
|
|
|
|
switch (type)
|
|
|
|
{
|
2018-11-16 02:11:50 -08:00
|
|
|
case EFL_UI_ALERT_POPUP_BUTTON_POSITIVE:
|
2019-07-29 02:42:34 -07:00
|
|
|
efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED,
|
2017-12-04 17:41:20 -08:00
|
|
|
_positive_button_clicked_cb, obj);
|
|
|
|
break;
|
2018-11-16 02:11:50 -08:00
|
|
|
case EFL_UI_ALERT_POPUP_BUTTON_NEGATIVE:
|
2019-07-29 02:42:34 -07:00
|
|
|
efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED,
|
2017-12-04 17:41:20 -08:00
|
|
|
_negative_button_clicked_cb, obj);
|
|
|
|
break;
|
2018-11-16 02:11:50 -08:00
|
|
|
case EFL_UI_ALERT_POPUP_BUTTON_USER:
|
2019-07-29 02:42:34 -07:00
|
|
|
efl_event_callback_add(pd->button[type], EFL_INPUT_EVENT_CLICKED,
|
2017-12-04 17:41:20 -08:00
|
|
|
_user_button_clicked_cb, obj);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
2017-12-04 17:41:20 -08:00
|
|
|
else
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2019-03-28 02:48:03 -07:00
|
|
|
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;
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
2017-12-04 17:41:20 -08:00
|
|
|
|
2019-03-28 02:48:03 -07:00
|
|
|
efl_text_set(pd->button[type], text);
|
|
|
|
efl_content_set(pd->button[type], icon);
|
2017-12-04 17:41:20 -08:00
|
|
|
|
2019-03-28 02:48:03 -07:00
|
|
|
if (is_btn_created)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2019-03-28 02:48:03 -07:00
|
|
|
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"));
|
2019-08-28 06:47:25 -07:00
|
|
|
for (i = 0; i < EFL_UI_ALERT_POPUP_BUTTON_COUNT; i++)
|
|
|
|
efl_content_unset(efl_part(cur_content, BUTTON_SWALLOW_NAME[i]));
|
2019-03-28 02:48:03 -07:00
|
|
|
|
|
|
|
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]);
|
|
|
|
}
|
|
|
|
|
2019-09-24 13:59:56 -07:00
|
|
|
elm_layout_signal_emit(obj, "efl,buttons,visible,on", "efl");
|
2019-03-28 02:48:03 -07:00
|
|
|
edje_object_message_signal_process(wd->resize_obj);
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
2019-07-30 10:11:19 -07:00
|
|
|
efl_canvas_group_change(obj);
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
2017-10-24 05:29:15 -07:00
|
|
|
EOLIAN static Eo *
|
2018-11-16 02:11:50 -08:00
|
|
|
_efl_ui_alert_popup_efl_object_constructor(Eo *obj,
|
|
|
|
Efl_Ui_Alert_Popup_Data *pd EINA_UNUSED)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-10-24 05:29:15 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
|
|
|
|
|
2017-11-29 03:21:14 -08:00
|
|
|
if (!elm_widget_theme_klass_get(obj))
|
2018-11-16 02:11:50 -08:00
|
|
|
elm_widget_theme_klass_set(obj, "alert_popup");
|
2017-10-24 05:29:15 -07:00
|
|
|
obj = efl_constructor(efl_super(obj, MY_CLASS));
|
|
|
|
efl_canvas_object_type_set(obj, MY_CLASS_NAME);
|
2017-08-22 23:50:18 -07:00
|
|
|
|
2019-08-28 06:47:25 -07:00
|
|
|
efl_add(EFL_UI_LAYOUT_CLASS, obj,
|
|
|
|
efl_content_set(efl_part(obj, "efl.buttons"), efl_added));
|
|
|
|
|
2017-10-24 05:29:15 -07:00
|
|
|
return obj;
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
2018-11-16 02:11:50 -08:00
|
|
|
_efl_ui_alert_popup_efl_object_destructor(Eo *obj, Efl_Ui_Alert_Popup_Data *pd)
|
2017-08-22 23:50:18 -07:00
|
|
|
{
|
2017-12-04 17:41:20 -08:00
|
|
|
ELM_SAFE_FREE(pd->title_text, eina_stringshare_del);
|
2017-10-24 05:29:15 -07:00
|
|
|
efl_destructor(efl_super(obj, MY_CLASS));
|
2017-08-22 23:50:18 -07:00
|
|
|
}
|
|
|
|
|
2017-12-03 23:01:51 -08:00
|
|
|
static Eina_Bool
|
2019-11-06 20:38:47 -08:00
|
|
|
_part_is_efl_ui_alert_popup_part_title(const Eo *obj, const char *part)
|
2017-12-03 23:01:51 -08:00
|
|
|
{
|
2019-09-24 13:59:44 -07:00
|
|
|
if (!_elm_layout_part_aliasing_eval(obj, &part, EINA_TRUE)) return EINA_FALSE;
|
|
|
|
return eina_streq(part, "efl.text.title");
|
2017-12-03 23:01:51 -08:00
|
|
|
}
|
|
|
|
|
2017-10-24 04:13:04 -07:00
|
|
|
/* Efl.Part begin */
|
2019-11-06 20:38:47 -08:00
|
|
|
EOLIAN static Efl_Object *
|
|
|
|
_efl_ui_alert_popup_efl_part_part_get(const Eo *obj, Efl_Ui_Alert_Popup_Data *priv EINA_UNUSED, const char *part)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
|
|
|
|
if (_part_is_efl_ui_alert_popup_part_title(obj, part))
|
|
|
|
return ELM_PART_IMPLEMENT(EFL_UI_ALERT_POPUP_PART_TITLE_CLASS, obj, part);
|
|
|
|
return efl_part_get(efl_super(obj, EFL_UI_ALERT_POPUP_CLASS), part);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static void
|
|
|
|
_efl_ui_alert_popup_part_title_efl_text_text_set(Eo *obj, void *_pd EINA_UNUSED, const char *text)
|
|
|
|
{
|
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Alert_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_ALERT_POPUP_CLASS);
|
|
|
|
|
|
|
|
_efl_ui_alert_popup_text_set(pd->obj, sd, pd->part, text);
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static const char*
|
|
|
|
_efl_ui_alert_popup_part_title_efl_text_text_get(const Eo *obj, void *_pd EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
|
|
|
Efl_Ui_Alert_Popup_Data *sd = efl_data_scope_get(pd->obj, EFL_UI_ALERT_POPUP_CLASS);
|
|
|
|
|
|
|
|
return _efl_ui_alert_popup_text_get(pd->obj, sd, pd->part);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "efl_ui_alert_popup_part_title.eo.c"
|
2017-10-24 04:13:04 -07:00
|
|
|
|
|
|
|
/* Efl.Part end */
|
2019-09-24 13:59:44 -07:00
|
|
|
EFL_UI_LAYOUT_TEXT_ALIASES_IMPLEMENT(efl_ui_alert_popup)
|
2017-10-24 04:13:04 -07:00
|
|
|
|
2019-09-24 13:59:44 -07:00
|
|
|
#define EFL_UI_ALERT_POPUP_EXTRA_OPS \
|
|
|
|
EFL_UI_LAYOUT_TEXT_ALIASES_OPS(efl_ui_alert_popup)
|
2018-11-16 02:11:50 -08:00
|
|
|
#include "efl_ui_alert_popup.eo.c"
|