Tizen 2.1 release
[platform/core/uifw/e17.git] / src / modules / conf_interaction / e_int_config_mouse.c
1 #include "e.h"
2
3 static void *_create_data(E_Config_Dialog *cfd);
4 static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
5 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
6 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
7 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
8
9 struct _E_Config_Dialog_Data
10 {
11    E_Config_Dialog *cfd;
12
13    int        show_cursor;
14    int        idle_cursor;
15    int        use_e_cursor;
16    int        cursor_size;
17
18    Eina_List *disable_list;
19    struct
20    {
21       Evas_Object *idle_cursor;
22    } gui;
23
24    int mouse_hand;
25    double numerator;
26    double denominator;
27    double threshold;
28 };
29
30 E_Config_Dialog *
31 e_int_config_mouse(E_Container *con, const char *params __UNUSED__)
32 {
33    E_Config_Dialog *cfd;
34    E_Config_Dialog_View *v;
35
36    if (e_config_dialog_find("E", "keyboard_and_mouse/mouse_settings"))
37      return NULL;
38
39    v = E_NEW(E_Config_Dialog_View, 1);
40    if (!v) return NULL;
41    v->create_cfdata = _create_data;
42    v->free_cfdata = _free_data;
43    v->basic.apply_cfdata = _basic_apply_data;
44    v->basic.create_widgets = _basic_create_widgets;
45    v->basic.check_changed = _basic_check_changed;
46
47    cfd = e_config_dialog_new(con, _("Mouse Settings"), "E",
48                              "keyboard_and_mouse/mouse_settings",
49                              "preferences-desktop-mouse", 0, v, NULL);
50    return cfd;
51 }
52
53 static void
54 _fill_data(E_Config_Dialog_Data *cfdata)
55 {
56    cfdata->show_cursor = e_config->show_cursor;
57    cfdata->idle_cursor = e_config->idle_cursor;
58    cfdata->use_e_cursor = e_config->use_e_cursor;
59    cfdata->cursor_size = e_config->cursor_size;
60
61    cfdata->mouse_hand = e_config->mouse_hand;
62    cfdata->numerator = e_config->mouse_accel_numerator;
63    cfdata->denominator = e_config->mouse_accel_denominator;
64    cfdata->threshold = e_config->mouse_accel_threshold;
65 }
66
67 static void *
68 _create_data(E_Config_Dialog *cfd)
69 {
70    E_Config_Dialog_Data *cfdata;
71
72    cfdata = E_NEW(E_Config_Dialog_Data, 1);
73    cfdata->cfd = cfd;
74
75    _fill_data(cfdata);
76    return cfdata;
77 }
78
79 static int
80 _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
81 {
82    return !((cfdata->show_cursor == e_config->show_cursor) &&
83             (cfdata->idle_cursor == e_config->idle_cursor) &&
84             (cfdata->use_e_cursor == e_config->use_e_cursor) &&
85             (cfdata->cursor_size == e_config->cursor_size) &&
86             (cfdata->mouse_hand == e_config->mouse_hand) &&
87             (cfdata->numerator == e_config->mouse_accel_numerator) &&
88             (cfdata->denominator == e_config->mouse_accel_denominator) &&
89             (cfdata->threshold == e_config->mouse_accel_threshold));
90 }
91
92 static void
93 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
94 {
95    E_FREE(cfdata);
96 }
97
98 /* advanced window */
99 static int
100 _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
101 {
102    Eina_List *l;
103    E_Manager *man;
104
105    e_config->use_e_cursor = cfdata->use_e_cursor;
106    e_config->show_cursor = cfdata->show_cursor;
107    e_config->idle_cursor = cfdata->idle_cursor;
108    e_config->cursor_size = cfdata->cursor_size;
109
110    e_config->mouse_hand = cfdata->mouse_hand;
111    e_config->mouse_accel_numerator = cfdata->numerator;
112    e_config->mouse_accel_denominator = cfdata->denominator;
113    e_config->mouse_accel_threshold = cfdata->threshold;
114    e_config_save_queue();
115
116    /* Apply the above settings */
117    EINA_LIST_FOREACH(e_manager_list(), l, man)
118      {
119         if (man->pointer && !e_config->show_cursor)
120           {
121              e_pointer_hide(man->pointer);
122              continue;
123           }
124         if (man->pointer) e_object_del(E_OBJECT(man->pointer));
125         man->pointer = e_pointer_window_new(man->root, 1);
126      }
127
128    e_mouse_update();
129
130    return 1;
131 }
132
133
134 static void
135 _use_e_cursor_cb_change(void *data, Evas_Object *obj __UNUSED__)
136 {
137    E_Config_Dialog_Data *cfdata = data;
138    Eina_Bool disabled = ((!cfdata->use_e_cursor) || (!cfdata->show_cursor));
139    e_widget_disabled_set(cfdata->gui.idle_cursor, disabled);
140 }
141
142 static void
143 _show_cursor_cb_change(void *data, Evas_Object *obj __UNUSED__)
144 {
145    E_Config_Dialog_Data *cfdata = data;
146    const Eina_List *l;
147    Evas_Object *o;
148
149    EINA_LIST_FOREACH(cfdata->disable_list, l, o)
150      e_widget_disabled_set(o, !cfdata->show_cursor);
151
152    _use_e_cursor_cb_change(cfdata, NULL);
153 }
154
155 static Evas_Object *
156 _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata)
157 {
158    Evas_Object *otb, *ol, *of, *ob;
159    E_Radio_Group *rg;
160
161    otb = e_widget_toolbook_add(evas, (24 * e_scale), (24 * e_scale));
162
163    /* Cursor */
164    ol = e_widget_list_add(evas, 0, 0);
165
166    ob = e_widget_check_add(evas, _("Show Cursor"), &(cfdata->show_cursor));
167    e_widget_on_change_hook_set(ob, _show_cursor_cb_change, cfdata);
168    e_widget_list_object_append(ol, ob, 1, 0, 0.5);
169
170    of = e_widget_framelist_add(evas, _("Settings"), 0);
171    rg = e_widget_radio_group_new(&cfdata->use_e_cursor);
172    cfdata->disable_list = eina_list_append(cfdata->disable_list, of);
173
174    ob = e_widget_label_add(evas, _("Size"));
175    e_widget_framelist_object_append(of, ob);
176    cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
177
178    ob = e_widget_slider_add(evas, 1, 0, _("%1.0f pixels"),
179                             8, 128, 4, 0, NULL, &(cfdata->cursor_size), 100);
180    e_widget_framelist_object_append(of, ob);
181    cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
182
183    ob = e_widget_label_add(evas, _("Theme"));
184    e_widget_framelist_object_append(of, ob);
185    cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
186
187    ob = e_widget_radio_add(evas, _("X"), 0, rg);
188    e_widget_on_change_hook_set(ob, _use_e_cursor_cb_change, cfdata);
189    e_widget_framelist_object_append(of, ob);
190    cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
191
192    ob = e_widget_radio_add(evas, _("Enlightenment"), 1, rg);
193    e_widget_on_change_hook_set(ob, _use_e_cursor_cb_change, cfdata);
194    e_widget_framelist_object_append(of, ob);
195    cfdata->disable_list = eina_list_append(cfdata->disable_list, ob);
196
197    ob = e_widget_check_add(evas, _("Idle effects"),
198                            &(cfdata->idle_cursor));
199    e_widget_framelist_object_append(of, ob);
200    cfdata->gui.idle_cursor = ob;
201
202    e_widget_list_object_append(ol, of, 1, 0, 0.5);
203    e_widget_toolbook_page_append(otb, NULL, _("Cursor"), ol, 
204                                  1, 0, 1, 0, 0.5, 0.0);
205
206    /* Mouse */
207    /* TODO: Get all inputs and hide this tab if none is relative. */
208    ol = e_widget_list_add(evas, 0, 0);
209
210    of = e_widget_frametable_add(evas, _("Mouse Hand"), 0);
211    rg = e_widget_radio_group_new(&(cfdata->mouse_hand));
212    ob = e_widget_radio_icon_add(evas, NULL, "preferences-desktop-mouse-right", 48, 48, E_MOUSE_HAND_LEFT, rg);
213    e_widget_frametable_object_append(of, ob, 0, 0, 1, 1, 1, 1, 1, 1);
214    ob = e_widget_radio_icon_add(evas, NULL, "preferences-desktop-mouse-left", 48, 48, E_MOUSE_HAND_RIGHT, rg);
215    e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1);
216    e_widget_list_object_append(ol, of, 1, 0, 0.5);
217
218    of = e_widget_framelist_add(evas, _("Mouse Acceleration"), 0);
219
220    ob = e_widget_label_add(evas, _("Acceleration"));
221    e_widget_framelist_object_append(of, ob);
222    ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), 1.0, 30.0, 1.0, 0,
223                             &(cfdata->numerator), NULL, 100);
224    e_widget_framelist_object_append(of, ob);
225
226    ob = e_widget_label_add(evas, _("Threshold"));
227    e_widget_framelist_object_append(of, ob);
228    ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), 1.0, 10.0, 1.0, 0,
229                             &(cfdata->threshold), NULL, 100);
230    e_widget_framelist_object_append(of, ob);
231
232    e_widget_list_object_append(ol, of, 1, 0, 0.5);
233    e_widget_toolbook_page_append(otb, NULL, _("Mouse"), ol, 
234                                  1, 0, 1, 0, 0.5, 0.0);
235
236    e_widget_toolbook_page_show(otb, 0);
237    return otb;
238 }