4 * Created on: Aug 7, 2014
8 #include <efl_assist.h>
11 #include "setting-theme.h"
12 #include "setting_view_toast.h"
15 static Thumbnail_Data thumbnail_arr[COLOR_THEME_COUNT] = {
16 { EA_THEME_COLOR_TABLE_1, EA_THEME_STYLE_DARK, "settings_preview_dark.png" },
17 { EA_THEME_COLOR_TABLE_1, EA_THEME_STYLE_LIGHT, "settings_preview_light.png" },
18 { EA_THEME_COLOR_TABLE_1 + 1, EA_THEME_STYLE_DARK, "settings_preview_dark_blue.png" },
19 { EA_THEME_COLOR_TABLE_1 + 1, EA_THEME_STYLE_LIGHT, "settings_preview_light_blue.png" }
25 static Evas_Object *setting_theme_create_thumbnail_layout(void *data);
26 static void setting_theme_thumbnail_scroll(void *data, Evas_Object *obj, void *ei);
27 static void setting_theme_index_refresh(void *data);
28 static void setting_theme_index_sync(void *data);
29 static void setting_theme_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
30 static void setting_theme_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info);
31 static void setting_theme_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info);
32 static void setting_theme_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info);
33 static void setting_theme_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
34 static void setting_theme_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
35 static void setting_theme_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
36 static void setting_theme_layout_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info);
41 void setting_theme_show_thumbnail(void *data, Evas_Object *obj, void *event_info)
43 DBG("setting_theme_show_thumbnail");
45 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
51 Theme_Data *td = (Theme_Data *)calloc(1, sizeof(Theme_Data));
53 td->curr_theme_id = 1; /*EA_THEME_COLOR_TABLE_1; */
54 td->theme_layout = setting_theme_create_thumbnail_layout(td);
55 if (td->theme_layout) {
56 Elm_Object_Item *it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, td->theme_layout, NULL);
57 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
61 ret = feedback_initialize();
62 if (ret != FEEDBACK_ERROR_NONE) {
63 DBG("feedback_initialize failed");
69 static Evas_Object *setting_theme_create_thumbnail_layout(void *data)
71 DBG("setting_display_create_brightness_layout");
73 Evas_Object *layout, *scroller, *box, *page_layout, *page, *mapbuf;
75 Ea_Theme_Color_hsv *hsv_color;
82 Theme_Data *td = data;
86 vconf_get_int("db/setting/color_theme_type", &td->curr_theme_type);
88 DBG("Color theme type: %d", td->curr_theme_type);
91 layout = elm_layout_add(td->ad->nf);
92 elm_layout_file_set(layout, EDJE_PATH, "setting/index_thumbnail");
93 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
94 evas_object_show(layout);
95 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, setting_theme_layout_del_cb, td);
98 scroller = elm_scroller_add(layout);
99 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
100 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
101 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
102 /* elm_scroller_page_relative_set(scroller, 1.0, 0.0); */
103 elm_scroller_page_size_set(scroller, 248, 0);
104 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
105 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
106 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
107 elm_object_part_content_set(layout, "scroller", scroller);
108 elm_object_style_set(scroller, "effect");
109 evas_object_show(scroller);
110 td->scroller = scroller;
113 box = elm_box_add(scroller);
114 elm_box_horizontal_set(box, EINA_TRUE);
115 elm_object_content_set(scroller, box);
116 evas_object_show(box);
118 Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(box));
119 evas_object_size_hint_min_set(rect, 56, 480);
120 /* ea_theme_object_color_set(rect, "B011"); */
121 elm_box_pack_end(box, rect);
124 for (i = 0; i < COLOR_THEME_COUNT; ++i) {
125 page_layout = elm_layout_add(box);
126 evas_object_size_hint_weight_set(page_layout, 0, 0);
127 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
128 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
129 evas_object_show(page_layout);
131 image = elm_image_add(page_layout);
132 elm_image_file_set(image, EDJE_PATH, thumbnail_arr[i].prev_img_path);
133 evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
134 evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
137 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, setting_theme_mouse_down_cb, NULL);
138 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, setting_theme_mouse_up_cb, (void *)i);
139 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_MOVE, setting_theme_mouse_move_cb, NULL);
141 elm_object_part_content_set(page_layout, "elm.icon", image);
143 Evas_Object *ao = elm_access_object_register(image, page_layout);
145 elm_access_activate_cb_set(ao, setting_theme_mouse_up_cb, (void *)i);
148 if (i == td->curr_theme_type) {
149 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
151 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
154 mapbuf = elm_mapbuf_add(box);
155 evas_object_size_hint_weight_set(mapbuf, 0, 0);
156 evas_object_size_hint_align_set(mapbuf, 0, EVAS_HINT_FILL);
157 evas_object_show(mapbuf);
158 elm_object_content_set(mapbuf, page_layout);
159 td->mapbuf[i] = mapbuf;
161 elm_box_pack_end(box, mapbuf);
164 rect = evas_object_rectangle_add(evas_object_evas_get(box));
165 evas_object_size_hint_min_set(rect, 56, 480);
166 /* ea_theme_object_color_set(rect, "B011"); */
167 elm_box_pack_end(box, rect);
170 evas_object_smart_callback_add(scroller, "scroll", setting_theme_thumbnail_scroll, td);
172 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, setting_theme_layout_resize_cb, td);
174 Evas_Object *index = elm_index_add(layout);
175 elm_object_style_set(index, "thumbnail");
176 evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
177 evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
178 elm_index_horizontal_set(index, EINA_TRUE);
179 elm_index_autohide_disabled_set(index, EINA_TRUE);
180 elm_object_part_content_set(layout, "controller", index);
183 for (i = 0; i < COLOR_THEME_COUNT; ++i) {
184 td->it[i] = elm_index_item_append(index, NULL, NULL, (void *) i);
187 elm_object_item_style_set(td->it[center_item - 1] , "item/vertical/center");
190 td->max_page = COLOR_THEME_COUNT;
192 elm_index_level_go(index, 0);
193 elm_index_item_selected_set(td->it[0], EINA_TRUE);
195 td->last_it = td->it[0];
198 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, setting_theme_on_index_mouse_down_cb, td);
199 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, setting_theme_on_index_mouse_move_cb, td);
200 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, setting_theme_on_index_mouse_up_cb, td);
205 static void setting_theme_thumbnail_scroll(void *data, Evas_Object *obj, void *ei)
208 Theme_Data *td = (Theme_Data *)data;
209 elm_scroller_current_page_get(td->scroller, &cur_page, NULL);
210 if (cur_page != td->curr_page) {
211 DBG("scroll: %d\n", td->curr_page);
213 td->curr_page = cur_page;
215 setting_theme_index_sync(td);
219 static void setting_theme_index_sync(void *data)
221 Theme_Data *td = (Theme_Data *)data;
223 Elm_Object_Item *it = elm_index_item_find(td->index, (void *)td->curr_page);
225 elm_index_item_selected_set(it, EINA_TRUE);
229 setting_theme_index_refresh(td);
233 static void setting_theme_index_refresh(void *data)
237 Theme_Data *td = (Theme_Data *)data;
239 elm_index_item_clear(td->index);
240 if (td->curr_page < td->min_page) {
241 for (i = td->curr_page ; i < td->curr_page + COLOR_THEME_COUNT ; i++) {
242 it = elm_index_item_append(td->index, NULL, NULL, (void *) i);
244 if (i == center_item)
245 elm_object_item_style_set(it, "item/vertical/center");
247 td->min_page = td->curr_page;
248 td->min_page = td->curr_page + COLOR_THEME_COUNT - 1;
250 for (i = td->curr_page - 2 + 1; i < td->curr_page + 1 ; i++) {
251 it = elm_index_item_append(td->index, NULL, NULL, (void *) i);
252 if (i == center_item)
253 elm_object_item_style_set(it, "item/vertical/center");
255 td->min_page = td->curr_page - 2;
256 td->min_page = td->curr_page - 1;
258 elm_index_level_go(td->index, 0);
260 setting_theme_index_sync(td);
263 static void setting_theme_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
265 DBG("setting_theme_layout_resize_cb");
267 Theme_Data *td = (Theme_Data *)data;
269 elm_scroller_page_show(obj, td->curr_theme_type, 0);
271 td->curr_page = td->curr_theme_type;
273 setting_theme_index_sync(td);
277 static void setting_theme_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
279 Theme_Data *pd = (Theme_Data *)data;
281 /* Keep the last index item active and save the selected index item */
282 if (!pd->last_it) return;
284 int level = elm_index_item_level_get(o);
285 pd->new_it = elm_index_selected_item_get(o, level);
286 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
289 static void setting_theme_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
291 Theme_Data *pd = (Theme_Data *)data;
293 /* Keep the last index item active and move to the page of the currently selected index item */
294 if (!pd->last_it) return;
295 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
297 if (!pd->new_it) return;
299 int idx = (int) elm_object_item_data_get(pd->new_it);
300 if (idx == pd->curr_page) return;
302 elm_scroller_page_bring_in(pd->scroller, idx, 0);
305 static void setting_theme_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
307 Theme_Data *pd = (Theme_Data *)data;
309 /* Keep the last index item active and save the currently selected index item */
310 if (!pd->last_it) return;
312 int level = elm_index_item_level_get(o);
313 pd->new_it = elm_index_selected_item_get(o, level);
314 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
317 static int prev_x = 0;
318 static int touch_mode = NONE;
320 static void setting_theme_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
322 touch_mode = TOUCH_DOWN;
324 Evas_Event_Mouse_Down *ev = event_info;
325 prev_x = ev->canvas.x;
328 static void setting_theme_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
330 if (touch_mode == TOUCH_MOVE)
333 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
335 int id = (int *)data;
339 int curr_theme_type = 0;
340 vconf_get_int("db/setting/color_theme_type", &curr_theme_type);
342 int ret = ea_theme_input_colors_set(thumbnail_arr[id].id, thumbnail_arr[id].theme_type);
344 DBG("ea_theme_input_colors_set ret : %d", ret);
346 ERR("ea_theme_input_colors_set() failed!");
350 if (id != curr_theme_type) {
351 DBG("Color Id: %d, type: %d", thumbnail_arr[id].id, thumbnail_arr[id].theme_type);
353 vconf_set_int("db/setting/color_theme_type", id);
355 /* automatic freed!! */
356 struct _toast_data *toast = _create_toast(g_ad, _("IDS_ST_TPOP_COLOUR_THEME_CHANGED"));
358 _show_toast(g_ad, toast);
361 /* automatic freed!! */
362 struct _toast_data *toast = _create_toast(g_ad, _("IDS_ST_TPOP_COLOUR_THEME_ALREADY_SET"));
364 _show_toast(g_ad, toast);
369 elm_naviframe_item_pop(g_ad->nf);
373 static void setting_theme_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
375 Evas_Event_Mouse_Move *ev = event_info;
377 int cur_x = ev->cur.canvas.x;
378 if (abs(cur_x - prev_x) > 15) {
379 /* todo : confirm and remove */
380 touch_mode = TOUCH_MOVE;
384 static void setting_theme_layout_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
386 DBG("setting_theme_layout_del_cb");
388 Theme_Data *td = data;
393 ret = feedback_deinitialize();
394 if (ret != FEEDBACK_ERROR_NONE) {
395 DBG("feedback_deinitialize failed");