Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_color_dialog.c
1 #include "e.h"
2
3 static void _e_color_dialog_button1_click(void *data, E_Dialog *edia);
4 static void _e_color_dialog_button2_click(void *data, E_Dialog *edia);
5 static void _e_color_dialog_free(E_Color_Dialog *dia);
6 static void _e_color_dialog_dia_del(void *obj);
7 static void _e_color_dialog_cb_csel_change(void *data, Evas_Object *obj);
8
9 /**
10  * Create a color selector dialog.
11  *
12  * @param con container to display on
13  * @param color color to initialize to (or NULL for black).
14  * @param alpha_enabled if set, uses alpha and let user edit it.
15  */
16 E_Color_Dialog  *
17 e_color_dialog_new(E_Container *con, const E_Color *color, Eina_Bool alpha_enabled)
18 {
19    E_Color_Dialog *dia;
20    Evas_Object *o;
21    Evas_Coord mw, mh;
22
23    dia = E_OBJECT_ALLOC(E_Color_Dialog, E_COLOR_DIALOG_TYPE, _e_color_dialog_free);
24    if (!dia) return NULL;
25    dia->dia = e_dialog_new(con, "E", "_color_dialog");
26    e_dialog_title_set(dia->dia, _("Color Selector"));
27
28    dia->color = calloc(1, sizeof(E_Color));
29    dia->initial = calloc(1, sizeof(E_Color));
30
31    if (color)
32      e_color_copy(color, dia->color);
33
34    if ((!color) || (!alpha_enabled))
35      dia->color->a = 255;
36
37    e_color_copy(dia->color, dia->initial);
38
39    o = e_widget_csel_add(dia->dia->win->evas, dia->color, alpha_enabled);
40    evas_object_show(o);
41    e_widget_size_min_get(o, &mw, &mh);
42    e_dialog_content_set(dia->dia, o, 460, 260);
43    e_widget_on_change_hook_set(o, _e_color_dialog_cb_csel_change, dia);
44
45    /* buttons at the bottom */
46    e_dialog_button_add(dia->dia, _("Select"), NULL, _e_color_dialog_button1_click, dia);
47    e_dialog_button_add(dia->dia, _("Cancel"), NULL, _e_color_dialog_button2_click, dia);
48    e_dialog_resizable_set(dia->dia, 1);
49    e_win_centered_set(dia->dia->win, 1);
50
51    dia->dia->data = dia;
52    e_object_del_attach_func_set(E_OBJECT(dia->dia), _e_color_dialog_dia_del);
53
54    return dia;
55 }
56
57 void
58 e_color_dialog_show(E_Color_Dialog *dia)
59 {
60    e_dialog_show(dia->dia);
61    e_dialog_border_icon_set(dia->dia, "enlightenment/colors");
62 }
63
64 void
65 e_color_dialog_title_set(E_Color_Dialog *dia, const char *title)
66 {
67    e_dialog_title_set(dia->dia, title);
68 }
69
70 void
71 e_color_dialog_select_callback_set(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data)
72 {
73    dia->select_func = func;
74    dia->select_data = data;
75 }
76
77 void
78 e_color_dialog_cancel_callback_set(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data)
79 {
80    dia->cancel_func = func;
81    dia->cancel_data = data;
82 }
83
84 EAPI void
85 e_color_dialog_change_callback_set(E_Color_Dialog *dia, void (*func)(E_Color_Dialog *dia, E_Color *color, void *data), void *data)
86 {
87    dia->change_func = func;
88    dia->change_data = data;
89 }
90
91 static void
92 _e_color_dialog_cb_csel_change(void *data, Evas_Object *obj __UNUSED__)
93 {
94    E_Color_Dialog *dia;
95
96    dia = data;
97    if (dia->change_func && dia->color)
98      dia->change_func(dia, dia->color, dia->change_data);
99 }
100
101 static void
102 _e_color_dialog_button1_click(void *data, E_Dialog *edia __UNUSED__)
103 {
104    E_Color_Dialog *dia;
105
106    dia = data;
107    if (dia->select_func && dia->color)
108      dia->select_func(dia, dia->color, dia->select_data);
109    _e_color_dialog_free(dia);
110 }
111
112 static void
113 _e_color_dialog_button2_click(void *data, E_Dialog *edia __UNUSED__)
114 {
115    E_Color_Dialog *dia;
116
117    dia = data;
118    if (dia->cancel_func && dia->initial)
119      dia->cancel_func(dia, dia->initial, dia->cancel_data);
120    _e_color_dialog_free(data);
121 }
122
123 static void
124 _e_color_dialog_free(E_Color_Dialog *dia)
125 {
126    if (dia->dia)
127      {
128         e_object_del_attach_func_set(E_OBJECT(dia->dia), NULL);
129         e_object_del(E_OBJECT(dia->dia));
130         dia->dia = NULL;
131      }
132    E_FREE(dia->color);
133    E_FREE(dia);
134 }
135
136 static void
137 _e_color_dialog_dia_del(void *obj)
138 {
139    E_Dialog *dia = obj;
140    E_Color_Dialog *cdia = dia->data;
141    if (cdia->cancel_func && cdia->initial)
142      cdia->cancel_func(cdia, cdia->initial, cdia->cancel_data);
143
144    cdia->dia = NULL;
145    e_object_del(E_OBJECT(cdia));
146 }