1 #include "e.h"
2
3 /******** private function definitions **********/
4 static void _e_confirm_dialog_free(E_Confirm_Dialog *cd);
5 static void _e_confirm_dialog_delete(E_Dialog *dia, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
6 static void _e_confirm_dialog_yes(void *data, E_Dialog *dia);
7 static void _e_confirm_dialog_no(void *data, E_Dialog *dia);
8
9 static void
_dia_del(void * data)10 _dia_del(void *data)
11 {
12 E_Dialog *dia = data;
13
14 e_object_del(dia->data);
15 }
16
17 /********** externally accessible functions ****************/
18 E_API E_Confirm_Dialog *
e_confirm_dialog_show(const char * title,const char * icon,const char * text,const char * button_text,const char * button2_text,void (* func)(void * data),void (* func2)(void * data),void * data,void * data2,void (* del_func)(void * data),void * del_data)19 e_confirm_dialog_show(const char *title, const char *icon, const char *text,
20 const char *button_text, const char *button2_text,
21 void (*func)(void *data), void (*func2)(void *data),
22 void *data, void *data2,
23 void (*del_func)(void *data), void *del_data)
24 {
25 E_Confirm_Dialog *cd;
26 E_Dialog *dia;
27
28 cd = E_OBJECT_ALLOC(E_Confirm_Dialog, E_CONFIRM_DIALOG_TYPE, _e_confirm_dialog_free);
29 cd->yes.func = func;
30 cd->yes.data = data;
31 cd->no.func = func2;
32 cd->no.data = data2;
33 cd->del.func = del_func;
34 cd->del.data = del_data;
35
36 dia = e_dialog_new(NULL, "E", "_confirm_dialog");
37 if (!dia)
38 {
39 e_object_del(E_OBJECT(cd));
40 return NULL;
41 }
42 dia->data = cd;
43 cd->dia = dia;
44
45 evas_object_event_callback_add(dia->win, EVAS_CALLBACK_DEL, (Evas_Object_Event_Cb)_e_confirm_dialog_delete, dia);
46 e_object_del_attach_func_set(E_OBJECT(dia), _dia_del);
47
48 if (title) e_dialog_title_set(dia, title);
49 if (icon) e_dialog_icon_set(dia, icon, 64);
50 if (text) e_dialog_text_set(dia, text);
51
52 e_dialog_button_add(dia, !button_text ? _("Yes") : button_text, NULL, _e_confirm_dialog_yes, cd);
53 e_dialog_button_add(dia, !button2_text ? _("No") : button2_text, NULL, _e_confirm_dialog_no, cd);
54
55 e_dialog_button_focus_num(dia, 0);
56 elm_win_center(dia->win, 1, 1);
57 e_dialog_show(dia);
58
59 return cd;
60 }
61
62 /********* private function bodies ************/
63 static void
_e_confirm_dialog_free(E_Confirm_Dialog * cd)64 _e_confirm_dialog_free(E_Confirm_Dialog *cd)
65 {
66 if (!cd->no_run)
67 {
68 e_object_ref(E_OBJECT(cd));
69 cd->no_run = EINA_TRUE;
70 if (cd->no.func) cd->no.func(cd->no.data);
71 e_object_unref(E_OBJECT(cd));
72 return;
73 }
74 if (cd->del.func) cd->del.func(cd->del.data);
75 e_object_del(E_OBJECT(cd->dia));
76 free(cd);
77 }
78
79 static void
_e_confirm_dialog_yes(void * data,E_Dialog * dia EINA_UNUSED)80 _e_confirm_dialog_yes(void *data, E_Dialog *dia EINA_UNUSED)
81 {
82 E_Confirm_Dialog *cd;
83
84 cd = data;
85 e_object_ref(data);
86 cd->no_run = EINA_TRUE;
87 if (cd->yes.func) cd->yes.func(cd->yes.data);
88 e_object_del(data);
89 e_object_unref(data);
90 }
91
92 static void
_e_confirm_dialog_no(void * data,E_Dialog * dia EINA_UNUSED)93 _e_confirm_dialog_no(void *data, E_Dialog *dia EINA_UNUSED)
94 {
95 E_Confirm_Dialog *cd;
96
97 cd = data;
98 e_object_ref(data);
99 cd->no_run = EINA_TRUE;
100 if (cd->no.func) cd->no.func(cd->no.data);
101 e_object_del(data);
102 e_object_unref(data);
103 }
104
105 static void
_e_confirm_dialog_delete(E_Dialog * dia,Evas * e EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)106 _e_confirm_dialog_delete(E_Dialog *dia, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
107 {
108 e_object_del(dia->data);
109 }
110
111