Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_confirm_dialog.c
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_Win *win);
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
10 _dia_del(void *data)
11 {
12    E_Dialog *dia = data;
13
14    e_object_del(dia->data);
15 }
16
17 /********** externally accesible functions ****************/
18 EAPI E_Confirm_Dialog *
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(e_container_current_get(e_manager_current_get()), "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    e_win_delete_callback_set(dia->win, _e_confirm_dialog_delete);
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, 1);
56    e_win_centered_set(dia->win, 1);
57    e_dialog_show(dia);
58
59    return cd;
60 }
61
62 /********* private function bodies ************/
63 static void
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
80 _e_confirm_dialog_yes(void *data, E_Dialog *dia __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
93 _e_confirm_dialog_no(void *data, E_Dialog *dia __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
106 _e_confirm_dialog_delete(E_Win *win)
107 {
108    E_Dialog *dia;
109
110    dia = win->data;
111    e_object_del(dia->data);
112 }
113