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" }
23 static appdata * g_ad;
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);
57 Elm_Object_Item *it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, td->theme_layout, NULL);
58 elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
62 ret = feedback_initialize();
63 if(ret != FEEDBACK_ERROR_NONE){
64 DBG("feedback_initialize failed");
70 static Evas_Object * setting_theme_create_thumbnail_layout(void * data)
72 DBG("setting_display_create_brightness_layout");
74 Evas_Object *layout, *scroller, *box, *page_layout, *page, *mapbuf;
76 Ea_Theme_Color_hsv *hsv_color;
83 Theme_Data * td = data;
87 vconf_get_int("db/setting/color_theme_type", &td->curr_theme_type);
89 DBG("Color theme type: %d", td->curr_theme_type);
92 layout = elm_layout_add(td->ad->nf);
93 elm_layout_file_set(layout, EDJE_PATH, "setting/index_thumbnail");
94 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
95 evas_object_show(layout);
96 evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, setting_theme_layout_del_cb, td);
99 scroller = elm_scroller_add(layout);
100 elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
101 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
102 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
103 // elm_scroller_page_relative_set(scroller, 1.0, 0.0);
104 elm_scroller_page_size_set(scroller, 248, 0);
105 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
106 elm_scroller_page_scroll_limit_set(scroller, 1, 0);
107 elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
108 elm_object_part_content_set(layout, "scroller", scroller);
109 elm_object_style_set(scroller, "effect");
110 evas_object_show(scroller);
111 td->scroller = scroller;
114 box = elm_box_add(scroller);
115 elm_box_horizontal_set(box, EINA_TRUE);
116 elm_object_content_set(scroller, box);
117 evas_object_show(box);
119 Evas_Object * rect = evas_object_rectangle_add(evas_object_evas_get(box));
120 evas_object_size_hint_min_set(rect, 56, 480);
121 // ea_theme_object_color_set(rect, "B011");
122 elm_box_pack_end(box, rect);
125 for (i = 0; i < COLOR_THEME_COUNT; ++i)
127 page_layout = elm_layout_add(box);
128 evas_object_size_hint_weight_set(page_layout, 0, 0);
129 evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
130 elm_layout_theme_set(page_layout, "layout", "body_thumbnail", "default");
131 evas_object_show(page_layout);
133 image = elm_image_add(page_layout);
134 elm_image_file_set(image, EDJE_PATH, thumbnail_arr[i].prev_img_path);
135 evas_object_size_hint_align_set(image, EVAS_HINT_FILL, EVAS_HINT_FILL);
136 evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
139 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_DOWN, setting_theme_mouse_down_cb, NULL);
140 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_UP, setting_theme_mouse_up_cb, (void*)i);
141 evas_object_event_callback_add(image, EVAS_CALLBACK_MOUSE_MOVE, setting_theme_mouse_move_cb, NULL);
143 elm_object_part_content_set(page_layout, "elm.icon", image);
145 Evas_Object * ao = elm_access_object_register(image, page_layout);
148 elm_access_activate_cb_set(ao, setting_theme_mouse_up_cb, (void*)i);
151 if ( i == td->curr_theme_type )
153 elm_object_signal_emit(page_layout, "elm,state,thumbnail,focus", "*");
157 elm_object_signal_emit(page_layout, "elm,state,thumbnail,unfocus", "*");
160 mapbuf = elm_mapbuf_add(box);
161 evas_object_size_hint_weight_set(mapbuf, 0, 0);
162 evas_object_size_hint_align_set(mapbuf, 0, EVAS_HINT_FILL);
163 evas_object_show(mapbuf);
164 elm_object_content_set(mapbuf, page_layout);
165 td->mapbuf[i] = mapbuf;
167 elm_box_pack_end(box, mapbuf);
170 rect = evas_object_rectangle_add(evas_object_evas_get(box));
171 evas_object_size_hint_min_set(rect, 56, 480);
172 // ea_theme_object_color_set(rect, "B011");
173 elm_box_pack_end(box, rect);
176 evas_object_smart_callback_add(scroller, "scroll", setting_theme_thumbnail_scroll, td);
178 evas_object_event_callback_add(scroller, EVAS_CALLBACK_RESIZE, setting_theme_layout_resize_cb, td);
180 Evas_Object *index = elm_index_add(layout);
181 elm_object_style_set(index, "thumbnail");
182 evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
183 evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
184 elm_index_horizontal_set(index, EINA_TRUE);
185 elm_index_autohide_disabled_set(index, EINA_TRUE);
186 elm_object_part_content_set(layout, "controller", index);
189 for (i = 0; i < COLOR_THEME_COUNT; ++i)
191 td->it[i] = elm_index_item_append(index, NULL, NULL, (void *) i);
194 elm_object_item_style_set(td->it[center_item - 1] , "item/vertical/center");
197 td->max_page = COLOR_THEME_COUNT;
199 elm_index_level_go(index, 0);
200 elm_index_item_selected_set(td->it[0], EINA_TRUE);
202 td->last_it = td->it[0];
205 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, setting_theme_on_index_mouse_down_cb, td);
206 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, setting_theme_on_index_mouse_move_cb, td);
207 evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, setting_theme_on_index_mouse_up_cb, td);
212 static void setting_theme_thumbnail_scroll(void *data, Evas_Object *obj, void *ei)
215 Theme_Data *td = (Theme_Data *)data;
216 elm_scroller_current_page_get(td->scroller, &cur_page, NULL);
217 if (cur_page != td->curr_page)
219 DBG("scroll: %d\n", td->curr_page);
221 td->curr_page = cur_page;
223 setting_theme_index_sync(td);
227 static void setting_theme_index_sync(void *data)
229 Theme_Data *td = (Theme_Data *)data;
231 Elm_Object_Item *it = elm_index_item_find(td->index, (void *)td->curr_page);
234 elm_index_item_selected_set(it, EINA_TRUE);
240 setting_theme_index_refresh(td);
244 static void setting_theme_index_refresh(void *data)
248 Theme_Data *td = (Theme_Data *)data;
250 elm_index_item_clear(td->index);
251 if (td->curr_page < td->min_page)
253 for(i = td->curr_page ; i < td->curr_page + COLOR_THEME_COUNT ; i++)
255 it = elm_index_item_append(td->index, NULL, NULL, (void *) i);
258 elm_object_item_style_set(it, "item/vertical/center");
260 td->min_page = td->curr_page;
261 td->min_page = td->curr_page + COLOR_THEME_COUNT - 1;
265 for(i = td->curr_page - 2 + 1; i < td->curr_page + 1 ; i++)
267 it = elm_index_item_append(td->index, NULL, NULL, (void *) i);
269 elm_object_item_style_set(it, "item/vertical/center");
271 td->min_page = td->curr_page - 2;
272 td->min_page = td->curr_page - 1;
274 elm_index_level_go(td->index, 0);
276 setting_theme_index_sync(td);
279 static void setting_theme_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
281 DBG("setting_theme_layout_resize_cb");
283 Theme_Data *td = (Theme_Data *)data;
286 elm_scroller_page_show(obj, td->curr_theme_type, 0);
288 td->curr_page = td->curr_theme_type;
290 setting_theme_index_sync(td);
294 static void setting_theme_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
296 Theme_Data *pd = (Theme_Data *)data;
298 /* Keep the last index item active and save the selected index item */
299 if (!pd->last_it) return;
301 int level = elm_index_item_level_get(o);
302 pd->new_it = elm_index_selected_item_get(o, level);
303 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
306 static void setting_theme_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
308 Theme_Data *pd = (Theme_Data *)data;
310 /* Keep the last index item active and move to the page of the currently selected index item */
311 if (!pd->last_it) return;
312 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
314 if (!pd->new_it) return;
316 int idx = (int) elm_object_item_data_get(pd->new_it);
317 if (idx == pd->curr_page) return;
319 elm_scroller_page_bring_in(pd->scroller, idx, 0);
322 static void setting_theme_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
324 Theme_Data *pd = (Theme_Data *)data;
326 /* Keep the last index item active and save the currently selected index item */
327 if (!pd->last_it) return;
329 int level = elm_index_item_level_get(o);
330 pd->new_it = elm_index_selected_item_get(o, level);
331 elm_index_item_selected_set(pd->last_it, EINA_TRUE);
334 static int prev_x = 0;
335 static int touch_mode = NONE;
337 static void setting_theme_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
339 touch_mode = TOUCH_DOWN;
341 Evas_Event_Mouse_Down *ev = event_info;
342 prev_x = ev->canvas.x;
345 static void setting_theme_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
347 if( touch_mode == TOUCH_MOVE )
350 feedback_play(FEEDBACK_PATTERN_TOUCH_TAP);
356 int curr_theme_type = 0;
357 vconf_get_int("db/setting/color_theme_type", &curr_theme_type);
359 int ret = ea_theme_input_colors_set(thumbnail_arr[id].id, thumbnail_arr[id].theme_type);
361 DBG("ea_theme_input_colors_set ret : %d", ret);
364 ERR("ea_theme_input_colors_set() failed!");
368 if( id != curr_theme_type )
370 DBG("Color Id: %d, type: %d", thumbnail_arr[id].id, thumbnail_arr[id].theme_type);
372 vconf_set_int("db/setting/color_theme_type", id);
375 struct _toast_data * toast = _create_toast(g_ad, _("IDS_ST_TPOP_COLOUR_THEME_CHANGED"));
378 _show_toast(g_ad, toast);
384 struct _toast_data * toast = _create_toast(g_ad, _("IDS_ST_TPOP_COLOUR_THEME_ALREADY_SET"));
387 _show_toast(g_ad, toast);
393 elm_naviframe_item_pop(g_ad->nf);
397 static void setting_theme_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
399 Evas_Event_Mouse_Move *ev = event_info;
401 int cur_x = ev->cur.canvas.x;
402 if( abs(cur_x - prev_x) > 15)
404 // todo : confirm and remove
405 touch_mode = TOUCH_MOVE;
409 static void setting_theme_layout_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
411 DBG("setting_theme_layout_del_cb");
413 Theme_Data * td = data;
418 ret = feedback_deinitialize();
419 if(ret != FEEDBACK_ERROR_NONE){
420 DBG("feedback_deinitialize failed");