2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <Elementary.h>
22 #include <system_settings.h>
26 #include "livebox_all_pages.h"
27 #include "homescreen-efl.h"
28 #include "page_scroller.h"
29 #include "livebox/livebox_panel.h"
30 #include "livebox/livebox_utils.h"
32 #include "dynamic_index.h"
36 #include "data_model.h"
38 static Evas_Object *__livebox_all_pages_create_grid(Evas_Object *parent_layout);
39 static Evas_Object *__livebox_all_pages_create_thumb(Evas_Object *page, bool is_fake, bool show_remove_button);
40 static Evas_Object *__livebox_all_pages_create_bg(Evas_Object *parent);
41 static Evas_Object *__livebox_all_pages_create_add_icon_layout(void);
42 static Evas_Object *__livebox_all_pages_insert_thumb(void *data, Evas_Object *obj, const char *part);
43 static Evas_Object *__livebox_all_pages_get_thumb_page(Elm_Object_Item *it);
45 static Eina_Bool __livebox_all_pages_item_up_cb(void *data);
46 static Eina_Bool __livebox_all_pages_get_grid_state(void *data, Evas_Object *obj, const char *part);
47 static Eina_Bool __livebox_all_pages_new_item_created_cb(void *data);
49 static void __livebox_all_pages_del_grid(void *data, Evas_Object *obj);
50 static void __livebox_all_pages_grid_item_longpressed_cb(void *data, Evas_Object *obj, void *ei);
51 static void __livebox_all_pages_grid_item_moved_cb(void *data, Evas_Object *obj, void *ei);
52 static void __livebox_all_pages_grid_changed_cb(void *data, Evas_Object *obj, void *ei);
53 static void __livebox_all_pages_hide_remove_button(Elm_Object_Item *it);
54 static void __livebox_all_pages_realized_cb(void *data, Evas_Object *obj, void *ei);
55 static void __livebox_all_pages_remove_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
56 static void __livebox_all_pages_remove_button_clicked_liveboxes_cb(void *data);
57 static void __livebox_all_pages_add_page_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
58 static void __livebox_all_pages_page_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
59 static void __libebox_all_pages_grid_item_pressed_cb(void *data, Evas_Object *obj, void *ei);
61 static char *__livebox_all_pages_get_grid_text(void *data, Evas_Object *obj, const char *part);
62 static bool __livebox_all_pages_fill_grid(Evas_Object *grid);
63 static bool __livebox_all_pages_check_add_page(Elm_Object_Item *it);
64 static bool __livebox_all_pages_is_page_empty(Evas_Object *page);
65 static Eina_List *__livebox_all_pages_unpack_grid(void);
66 static Elm_Gengrid_Item_Class *__livebox_all_pages_create_grid_item_class(void);
71 Elm_Object_Item *g_item;
77 } s_info_reposition = {
90 Elm_Gengrid_Item_Class *gic;
91 Elm_Object_Item *add_page_item;
92 bool is_add_page_visible;
95 bool is_item_longpressed;
100 .add_page_item = NULL,
101 .is_add_page_visible = true,
104 .is_item_longpressed = false,
107 /*======================================== PUBLIC FUNCTIONS IMPLEMENTATION ======================================*/
108 HAPI Evas_Object *livebox_all_pages_show(void)
110 Evas_Object *all_pages_layout = NULL;
111 Evas_Object *win = home_screen_get_win();
112 Evas_Object *bg = NULL;
113 Evas_Object *grid = NULL;
117 int w = home_screen_get_root_width();
118 int h = home_screen_get_root_height();
121 LOGE("[INVALID_STATE][win='%p']", win);
125 all_pages_layout = util_create_edje_layout(win, EDJE_DIR"/page_edit.edj", GROUP_ALL_PAGES);
126 if (!all_pages_layout) {
127 LOGE("[FAILED][util_edje_layout_create]");
131 evas_object_size_hint_min_set(all_pages_layout, w, h);
132 evas_object_size_hint_max_set(all_pages_layout, w, h);
133 evas_object_resize(all_pages_layout, w, h);
134 evas_object_layer_set(all_pages_layout, EVAS_LAYER_MAX-1);
135 evas_object_move(all_pages_layout, ALL_PAGES_X, ALL_PAGES_Y);
137 bg = __livebox_all_pages_create_bg(all_pages_layout);
139 LOGE("[FAILED][__livebox_all_pages_create_bg]");
140 evas_object_del(all_pages_layout);
144 grid = __livebox_all_pages_create_grid(all_pages_layout);
146 LOGE("[FAILED][__livebox_all_pages_create_grid]");
147 evas_object_del(all_pages_layout);
151 __livebox_all_pages_fill_grid(grid);
154 s_info.layout = all_pages_layout;
155 g_count = elm_gengrid_items_count(grid);
157 if (g_count == MAX_ITEMS)
158 s_info.is_add_page_visible = false;
160 evas_object_smart_callback_add(grid, "realized", __livebox_all_pages_realized_cb, NULL);
162 return all_pages_layout;
165 HAPI void livebox_all_pages_hide(void)
167 Evas_Object *all_pages_layout = s_info.layout;
168 Evas_Object *lvb_scroller = NULL;
170 Eina_List *page_list = NULL;
173 if (!all_pages_layout) {
174 LOGE("[FAILED][all_pages_layout]");
178 lvb_scroller = livebox_panel_get();
180 LOGE("[FAILED][livebox_panel_get]");
184 page_list = __livebox_all_pages_unpack_grid();
186 LOGE("[FAILED][__livebox_all_pages_unpack_grid]");
190 page_scroller_pack_pages(lvb_scroller, page_list);
191 eina_list_free(page_list);
192 evas_object_del(all_pages_layout);
193 elm_gengrid_item_class_free(s_info.gic);
195 page_count = page_scroller_get_page_count(lvb_scroller);
197 if (s_info.current_page >= page_count)
198 s_info.current_page = page_count - 1;
200 if (s_info.pressed_item >= 0)
201 s_info.current_page = s_info.pressed_item - 1;
203 LOGI("CURRENT : [%d] PRESSED_PAGE: [%d]", s_info.current_page, s_info.pressed_item);
205 page_scroller_show_page(lvb_scroller, s_info.current_page);
207 dynamic_index_reload(evas_object_data_get(lvb_scroller, KEY_INDEX), s_info.current_page,
211 s_info.layout = NULL;
216 HAPI void livebox_all_pages_move_item(int x, int y)
219 int m_idx = -1; /*moved item index*/
220 int d_idx = -1; /*destination index*/
222 Elm_Object_Item *it = NULL;
223 Elm_Object_Item *n_it = NULL;
225 Evas_Object *empty_ly = NULL;
227 if (!s_info_reposition.item)
232 evas_object_move(s_info_reposition.item, xp, yp);
234 it = elm_gengrid_at_xy_item_get(s_info.grid, x, y, NULL, NULL);
235 if (!it || (it == s_info_reposition.g_item) || !s_info_reposition.g_item || s_info_reposition.is_created)
238 /*check if item is add page*/
239 if (__livebox_all_pages_check_add_page(it))
242 m_idx = elm_gengrid_item_index_get(s_info_reposition.g_item);
243 d_idx = elm_gengrid_item_index_get(it);
245 empty_ly = __livebox_all_pages_create_thumb(NULL, false, true);
247 LOGE("[FAILED][__livebox_all_pages_create_thumb]");
253 s_info_reposition.is_created = true;
254 n_it = elm_gengrid_item_insert_after(s_info.grid, s_info.gic, empty_ly, it, NULL, NULL);
257 s_info_reposition.is_created = true;
258 n_it = elm_gengrid_item_insert_before(s_info.grid, s_info.gic, empty_ly, it, NULL, NULL);
261 evas_object_smart_callback_add(s_info.grid, "index,update", __livebox_all_pages_grid_changed_cb, n_it);
262 elm_object_item_del(s_info_reposition.g_item);
263 s_info_reposition.g_item = n_it;
266 HAPI void livebox_all_pages_up_item(void)
268 if (!s_info_reposition.item)
271 ecore_timer_add(0.05, __livebox_all_pages_item_up_cb, NULL);
274 /*====================================== PRIVATE FUNCTIONS IMPLEMENTATION =======================================*/
275 static void __livebox_all_pages_remove_button_clicked_liveboxes_cb(void *data)
277 Elm_Object_Item *clicked_item = (Elm_Object_Item *) data;
278 Evas_Object *add_page = NULL;
279 Eina_List *g_items = NULL;
280 Elm_Object_Item *g_item = NULL;
281 Eina_List *last_node = NULL;
282 Evas_Object *clicked_page = NULL;
286 LOGE("[FAILED][__livebox_all_pages_remove_button_clicked_liveboxes_cb]");
290 clicked_page = __livebox_all_pages_get_thumb_page(clicked_item);
292 LOGE("[FAILED][__livebox_all_pages_get_thumb_page]");
296 g_items = elm_gengrid_realized_items_get(s_info.grid);
297 last_node = eina_list_last(g_items);
299 g_item = eina_list_data_get(last_node);
300 eina_list_free(g_items);
302 /*is this the correct order ? :*/
303 livebox_panel_destroy_page(clicked_page);
304 elm_object_item_del(clicked_item);
305 g_count = elm_gengrid_items_count(s_info.grid);
308 if (g_count < MAX_ITEMS && !(__livebox_all_pages_check_add_page(g_item))) {
309 add_page = __livebox_all_pages_create_add_icon_layout();
311 LOGE("[FAILED][__livebox_all_pages_create_add_icon_layout]");
315 s_info.add_page_item = elm_gengrid_item_append(s_info.grid, s_info.gic, add_page, NULL, NULL);
316 if (!s_info.add_page_item) {
317 LOGE("[FAILED][elm_gengrid_item_append]");
318 evas_object_del(add_page);
322 s_info.is_add_page_visible = true;
326 __livebox_all_pages_hide_remove_button(elm_gengrid_first_item_get(s_info.grid));
328 s_info.pressed_item = -1;
332 static bool __livebox_all_pages_is_page_empty(Evas_Object *page)
334 Eina_List *lb_list = NULL;
337 LOGE("[INVALID_PARAM][page='%p']", page);
341 lb_list = livebox_utils_get_liveboxes_on_page_list(page);
343 LOGE("[FAILED][livebox_utils_liveboxes_on_page_list_get]");
347 if (eina_list_count(lb_list) > 0) {
348 LOGE("[FAILED][eina_list_count]");
349 eina_list_free(lb_list);
353 eina_list_free(lb_list);
357 static void __livebox_all_pages_add_page_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
359 Tree_node_t *page_node = NULL;
361 Elm_Object_Item *first_item = NULL;
363 Evas_Object *layout = s_info.layout;
364 Evas_Object *grid = s_info.grid;
365 Evas_Object *new_page = NULL;
366 Evas_Object *thumb = NULL;
367 Evas_Object *first_item_layout = NULL;
370 int g_count = 0; /*gengrid items count*/
372 Elm_Gengrid_Item_Class *gic = s_info.gic;
373 Elm_Object_Item *add_item = s_info.add_page_item;
375 int w = home_screen_get_root_width();
376 int h = home_screen_get_root_height();
381 if (!gic || !layout || !grid || !add_item) {
382 LOGE("[INVALID_PARAM][gic='%p'][layout='%p'][grid='%p'][add_item='%p']", gic, layout, grid, add_item);
386 g_count = elm_gengrid_items_count(grid);
388 page_node = data_model_add_widget_page();
390 LOGE("page_node == NULL");
394 new_page = livebox_panel_create_empty_page(page_node, livebox_panel_get());
396 LOGE("[FAILED][livebox_panel_empty_page_create]");
397 data_model_del_item(page_node);
401 home_screen_print_tree();
403 thumb = __livebox_all_pages_create_thumb(new_page, true, true);
405 LOGE("[FAILED][__livebox_all_pages_create_thumb]");
406 evas_object_del(new_page);
411 if (g_count < MAX_ITEMS) {
412 elm_gengrid_item_insert_before(grid, gic, thumb, add_item, NULL, NULL);
413 s_info.is_add_page_visible = true;
414 } else if (g_count == MAX_ITEMS) {
415 elm_object_item_del(s_info.add_page_item);
416 s_info.add_page_item = NULL;
418 elm_gengrid_item_append(grid, gic, thumb, NULL, NULL);
419 s_info.is_add_page_visible = false;
422 /*Show remove button on first page*/
423 first_item = elm_gengrid_first_item_get(s_info.grid);
428 first_item_layout = elm_object_item_part_content_get(first_item, GENGRID_ITEM_CONTENT);
429 if (!first_item_layout)
431 /*WHAT HAPPENS to previously allocated thumb (g_count > MAX_ITEMS)??*/
432 thumb = elm_object_part_content_get(first_item_layout, PART_GRID_ITEM_CONTENT);
436 elm_object_signal_emit(thumb, SIGNAL_REMOVE_BUTTON_SHOW, SIGNAL_SOURCE);
439 static Evas_Object *__livebox_all_pages_create_bg(Evas_Object *parent)
442 Evas_Object *bg = NULL;
447 LOGE("[FAILED][__livebox_all_pages_create_bg]");
451 bg = elm_bg_add(parent);
453 LOGE("[FAILED][elm_bg_add]");
457 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN, &buf);
459 if (ret != SYSTEM_SETTINGS_ERROR_NONE || !buf) {
460 LOGE("[FAILED][failed to get bg path]");
465 if (!elm_bg_file_set(bg, buf, NULL)) {
466 LOGE("[FAILED][failed to set bg]");
472 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
473 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
474 evas_object_show(bg);
475 elm_object_part_content_set(parent, "bg", bg);
480 static Evas_Object *__livebox_all_pages_create_grid(Evas_Object *parent_layout)
482 Evas_Object *grid = NULL;
484 if (!parent_layout) {
485 LOGE("[INVALID_PARAM][parent_layout='%p']", parent_layout);
489 grid = elm_gengrid_add(parent_layout);
491 LOGE("Failed to create gengrid");
495 elm_gengrid_item_size_set(grid, (ITEM_W_REL * home_screen_get_root_width()), (ITEM_H_REL * home_screen_get_root_height()));
496 elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_NONE);
497 elm_gengrid_filled_set(grid, EINA_TRUE);
498 elm_gengrid_horizontal_set(grid, EINA_FALSE);
500 /* elm_gengrid_reorder_mode_set(grid, EINA_TRUE);*/
501 elm_gengrid_align_set(grid, 0.5, 0.5);
503 evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
504 elm_object_part_content_set(parent_layout, PART_LAYOUT_CONTENT, grid);
505 evas_object_show(grid);
507 evas_object_smart_callback_add(grid, "longpressed", __livebox_all_pages_grid_item_longpressed_cb, NULL);
508 evas_object_smart_callback_add(grid, "moved", __livebox_all_pages_grid_item_moved_cb, NULL);
509 evas_object_smart_callback_add(grid, "pressed", __libebox_all_pages_grid_item_pressed_cb, NULL);
511 __livebox_all_pages_create_grid_item_class();
516 static Elm_Gengrid_Item_Class *__livebox_all_pages_create_grid_item_class(void)
518 Elm_Gengrid_Item_Class *gic = s_info.gic;
520 gic = elm_gengrid_item_class_new();
522 LOGE("Failed to create gengrid item class");
526 gic->item_style = "default";
527 gic->func.text_get = __livebox_all_pages_get_grid_text;
528 gic->func.content_get = __livebox_all_pages_insert_thumb;
529 gic->func.state_get = __livebox_all_pages_get_grid_state;
530 gic->func.del = __livebox_all_pages_del_grid;
538 static Evas_Object *__livebox_all_pages_create_thumb(Evas_Object *page, bool is_fake, bool show_remove_button)
540 Evas_Object *win = NULL;
541 Evas_Object *thumb = NULL;
542 Evas_Object *ly_grid_item = NULL;
543 Evas_Object *ly_thumb = NULL;
546 win = home_screen_get_win();
548 LOGE("[FAILED][home_screen_win_get]");
552 int w = home_screen_get_root_width();
553 int h = home_screen_get_root_height();
558 ly_grid_item = util_create_edje_layout(win, EDJE_DIR"/page_edit.edj", GROUP_GRID_ITEM);
560 LOGE("[FAILED][util_edje_layout_create]");
564 ly_thumb = util_create_edje_layout(win, EDJE_DIR"/page_edit.edj", GROUP_THUMB);
566 LOGE("[FAILED][util_edje_layout_create]");
567 evas_object_del(ly_grid_item);
571 elm_object_signal_callback_add(ly_thumb, SIGNAL_THUMBNAIL_CLICKED, SIGNAL_SOURCE, __livebox_all_pages_page_clicked_cb, NULL);
573 if (page && !is_fake) {
574 thumb = page_scroller_get_page_thumbnail(page, w, h);
576 LOGE("[FAILED][page_scroller_page_thumbnail_get]");
577 evas_object_del(ly_grid_item);
578 evas_object_del(ly_thumb);
582 evas_object_resize(thumb, w, h);
583 evas_object_size_hint_max_set(thumb, w, h);
584 evas_object_data_set(thumb, KEY_THUMB_DATA, page);
586 e = evas_object_evas_get(win);
588 LOGE("[FAILED][evas_object_evas_get]");
592 thumb = evas_object_rectangle_add(e);
594 LOGE("[FAILED][Failed to create thumb]");
595 evas_object_del(ly_grid_item);
596 evas_object_del(ly_thumb);
600 evas_object_color_set(thumb, 0, 0, 0, 0);
601 evas_object_resize(thumb, w, h);
602 evas_object_size_hint_max_set(thumb, w, h);
603 evas_object_data_set(thumb, KEY_THUMB_DATA, page);
606 if (!page && !is_fake) {
607 elm_object_signal_emit(ly_thumb, SIGNAL_BG_HIDE, SIGNAL_SOURCE);
608 elm_object_signal_emit(ly_thumb, SIGNAL_REMOVE_BUTTON_HIDE, SIGNAL_SOURCE);
610 elm_object_signal_callback_add(ly_thumb, SIGNAL_REMOVE_BUTTON_CLICKED, SIGNAL_SOURCE, __livebox_all_pages_remove_button_clicked_cb, ly_thumb);
612 elm_object_part_content_set(ly_thumb, PART_THUMB_CONTENT, thumb);
613 elm_object_part_content_set(ly_grid_item, PART_GRID_ITEM_CONTENT, ly_thumb);
615 if (!show_remove_button)
616 elm_object_signal_emit(ly_thumb, SIGNAL_REMOVE_BUTTON_HIDE_INSTANT, SIGNAL_SOURCE);
621 static Evas_Object *__livebox_all_pages_create_add_icon_layout(void)
623 Evas_Object *win = NULL;
625 Evas_Object *add_icon = NULL;
626 Evas_Object *ly_grid_item = NULL;
627 Evas_Object *ly_thumb = NULL;
628 int w = home_screen_get_root_width();
629 int h = home_screen_get_root_height();
631 win = home_screen_get_win();
633 LOGE("[FAILED][home_screen_win_get]");
637 e = evas_object_evas_get(win);
639 LOGE("[FAILED][evas_object_evas_get]");
643 add_icon = evas_object_rectangle_add(e);
645 LOGE("[FAILED][evas_object_rectangle_add]");
648 evas_object_color_set(add_icon, 0, 0, 0, 0);
650 ly_grid_item = util_create_edje_layout(win, EDJE_DIR"/page_edit.edj", GROUP_GRID_ITEM);
652 LOGE("[FAILED][util_edje_layout_create]");
653 evas_object_del(add_icon);
657 ly_thumb = util_create_edje_layout(win, EDJE_DIR"/page_edit.edj", GROUP_THUMB);
659 LOGE("[FAILED][util_edje_layout_create]");
660 evas_object_del(add_icon);
661 evas_object_del(ly_grid_item);
667 evas_object_size_hint_max_set(add_icon, w, h);
669 elm_object_signal_emit(ly_thumb, SIGNAL_REMOVE_BUTTON_HIDE_INSTANT, SIGNAL_SOURCE);
670 elm_object_part_content_set(ly_grid_item, PART_GRID_ITEM_CONTENT, ly_thumb);
671 elm_object_part_content_set(ly_thumb, PART_THUMB_CONTENT, add_icon);
673 evas_object_data_set(add_icon, KEY_THUMB_DATA, ly_thumb); /*if pointer returned from the data_key will be the same it would mean that we have add page.*/
674 elm_object_signal_callback_add(ly_thumb, SIGNAL_THUMBNAIL_CLICKED, SIGNAL_SOURCE, __livebox_all_pages_add_page_clicked_cb, (void *) index);
675 elm_object_signal_emit(ly_thumb, SIGNAL_ADD_ICON_SHOW, SIGNAL_SOURCE);
680 static bool __livebox_all_pages_fill_grid(Evas_Object *grid)
682 Eina_List *pages = NULL;
683 Eina_List *it = NULL;
685 Evas_Object *lvb_scroller = NULL;
686 Evas_Object *page = NULL;
687 Evas_Object *t_page = NULL;
688 Evas_Object *add_page = NULL;
690 bool show_remove_page = false;
692 Elm_Gengrid_Item_Class *gic = s_info.gic;
697 LOGE("[INVALID_PARAM][grid='%p']", grid);
701 lvb_scroller = livebox_panel_get();
703 LOGE("[FAILED][lvb_scroller='%p']", lvb_scroller);
707 s_info.current_page = page_scroller_get_current_page(lvb_scroller);
709 LOGI("[%s]", evas_object_type_get(lvb_scroller));
711 pages = page_scroller_unpack_pages(lvb_scroller);
713 LOGE("[FAILED][page_scroller_unpack_pages]");
717 show_remove_page = (eina_list_count(pages) > 1);
719 EINA_LIST_FOREACH(pages, it, page) {
723 t_page = __livebox_all_pages_create_thumb(page, false, show_remove_page);
725 LOGE("[FAILED][__livebox_all_pages_create_thumb]");
726 /*TODO: livebox implementer, free pages + think of the way to do something with ui data inside the nodes !*/
727 elm_gengrid_clear(grid);
731 elm_gengrid_item_append(grid, gic, t_page, NULL, NULL);
734 eina_list_free(pages);
736 g_count = elm_gengrid_items_count(grid);
737 if (g_count < MAX_ITEMS) {
738 add_page = __livebox_all_pages_create_add_icon_layout();
740 LOGE("[FAILED][__livebox_all_pages_create_add_icon_layout]");
741 elm_gengrid_clear(grid);
745 s_info.add_page_item = elm_gengrid_item_append(grid, gic, add_page, NULL, NULL);
746 if (!s_info.add_page_item) {
747 LOGE("[FAILED][elm_gengrid_item_append]");
748 evas_object_del(add_page);
749 elm_gengrid_clear(grid);
753 s_info.is_add_page_visible = true;
759 static Evas_Object *__livebox_all_pages_insert_thumb(void *data, Evas_Object *obj, const char *part)
761 Evas_Object *thumb = (Evas_Object *) data;
764 LOGE("[INVALID_DATA][__livebox_all_pages_insert_thumb]");
768 if (!strncmp(part, GENGRID_ITEM_CONTENT, strlen(GENGRID_ITEM_CONTENT))) {
775 static Eina_List *__livebox_all_pages_unpack_grid(void)
777 Evas_Object *page = NULL;
779 Elm_Object_Item *g_item = NULL;
781 Eina_List *p_list = NULL;
782 Eina_List *g_items = NULL; /*list of elm_gengrid items.*/
783 Eina_List *it = NULL;
786 LOGE("[FAILED][s_info.grid='%p']", s_info.grid);
790 g_items = elm_gengrid_realized_items_get(s_info.grid);
792 LOGE("[FAILED][elm_gengrid_realized_items_get]");
796 EINA_LIST_FOREACH(g_items, it, g_item) {
800 page = __livebox_all_pages_get_thumb_page(g_item);
802 LOGE("[FAILED][__livebox_all_pages_get_thumb_page]");
803 eina_list_free(p_list);
804 eina_list_free(g_items);
808 if (!__livebox_all_pages_check_add_page(g_item)) {
809 p_list = eina_list_append(p_list, page);
811 LOGE("[FAILED][eina_list_append]");
812 eina_list_free(g_items);
817 eina_list_free(g_items);
822 static void __livebox_all_pages_grid_item_longpressed_cb(void *data, Evas_Object *obj, void *ei)
824 s_info.is_item_longpressed = true;
825 s_info.pressed_item = -1;
827 Elm_Object_Item *it = (Elm_Object_Item *) ei;
829 if (__livebox_all_pages_check_add_page(it))
832 Evas_Object *thumb_layout = elm_object_item_part_content_get(it, GENGRID_ITEM_CONTENT);
833 Evas_Object *thumb = elm_object_part_content_unset(thumb_layout, PART_GRID_ITEM_CONTENT);
835 evas_object_layer_set(thumb, EVAS_LAYER_MAX);
837 elm_object_signal_emit(thumb, SIGNAL_REMOVE_BUTTON_HIDE, SIGNAL_SOURCE);
838 elm_object_signal_emit(thumb, SIGNAL_BG_REPOSITON, SIGNAL_SOURCE);
840 s_info_reposition.item = thumb;
841 s_info_reposition.g_item = it;
844 static void __livebox_all_pages_grid_item_moved_cb(void *data, Evas_Object *obj, void *ei)
849 static void __livebox_all_pages_grid_changed_cb(void *data, Evas_Object *obj, void *ei)
851 ecore_timer_add(ITEM_CREATE_TIME, __livebox_all_pages_new_item_created_cb, NULL);
852 evas_object_smart_callback_del(obj, "index,update", __livebox_all_pages_grid_changed_cb);
857 * @brief Block new item creation during reposition process
859 static Eina_Bool __livebox_all_pages_new_item_created_cb(void *data)
861 s_info_reposition.is_created = false;
866 * @details Function check if elm_object item contain add page layout
868 static bool __livebox_all_pages_check_add_page(Elm_Object_Item *it)
870 Evas_Object *page = NULL;
871 Evas_Object *ly = NULL;
872 Evas_Object *ly_content = NULL;
875 LOGE("[INVALID_PARAM][it='%p']", it);
879 ly = elm_object_item_part_content_get(it, GENGRID_ITEM_CONTENT);
881 LOGE("[FAILED][elm_object_item_part_content_get]");
885 ly_content = elm_object_part_content_get(ly, PART_GRID_ITEM_CONTENT);
887 LOGE("[FAILED][elm_object_part_content_get]");
891 page = __livebox_all_pages_get_thumb_page(it);
893 LOGE("[FAILED][__livebox_all_pages_get_thumb_page]");
897 if (page == ly_content)
903 static Evas_Object *__livebox_all_pages_get_thumb_page(Elm_Object_Item *it)
905 Evas_Object *ly = NULL;
906 Evas_Object *ly_content = NULL;
907 Evas_Object *thumb = NULL;
908 Evas_Object *page = NULL;
911 LOGE("[INVALID_PARAM][it='%p']", it);
915 ly = elm_object_item_part_content_get(it, GENGRID_ITEM_CONTENT);
917 LOGE("[FAILED][elm_object_item_part_content_get]");
921 ly_content = elm_object_part_content_get(ly, PART_GRID_ITEM_CONTENT);
923 LOGE("[FAILED][elm_object_part_content_get]");
927 thumb = elm_object_part_content_get(ly_content, PART_THUMB_CONTENT);
929 LOGE("[FAILED][elm_object_part_content_get]");
933 page = (Evas_Object *) evas_object_data_get(thumb, KEY_THUMB_DATA);
938 static Eina_Bool __livebox_all_pages_item_up_cb(void *data)
940 int gengrid_items = 0;
941 Evas_Object *page = NULL;
942 Evas_Object *prev_page = NULL;
943 Elm_Object_Item *prev_it = NULL;
944 Tree_node_t *page_node = NULL;
945 Tree_node_t *prev_node = NULL;
947 Elm_Object_Item *d_it = s_info_reposition.g_item; /*destination item;*/
949 LOGE("[FAILED][__livebox_all_pages_item_up_cb]");
950 return ECORE_CALLBACK_CANCEL;
953 Evas_Object *ly_container = elm_object_item_part_content_get(d_it, GENGRID_ITEM_CONTENT);
955 LOGE("[FAILED][elm_object_item_part_content_get]");
956 return ECORE_CALLBACK_CANCEL;
959 elm_object_part_content_set(ly_container, PART_GRID_ITEM_CONTENT, s_info_reposition.item);
960 elm_object_signal_emit(s_info_reposition.item, SIGNAL_BG_NORMAL, SIGNAL_SOURCE);
962 gengrid_items = elm_gengrid_items_count(s_info.grid);
963 if (gengrid_items > 2)
964 elm_object_signal_emit(s_info_reposition.item, SIGNAL_REMOVE_BUTTON_SHOW, SIGNAL_SOURCE);
966 page = __livebox_all_pages_get_thumb_page(d_it);
968 LOGE("page == NULL");
969 return ECORE_CALLBACK_CANCEL;
972 page_node = evas_object_data_get(page, KEY_ICON_DATA);
974 LOGE("page_node == NULL");
975 return ECORE_CALLBACK_CANCEL;
978 prev_it = elm_gengrid_item_prev_get(d_it);
980 LOGD("prev_it != NULL");
982 prev_page = __livebox_all_pages_get_thumb_page(prev_it);
985 LOGE("prev_page == NULL");
986 return ECORE_CALLBACK_CANCEL;
989 prev_node = evas_object_data_get(prev_page, KEY_ICON_DATA);
991 LOGE("prev_node == NULL");
992 return ECORE_CALLBACK_CANCEL;
995 data_model_insert_after(prev_node, page_node);
997 LOGD("prev_it == NULL");
999 data_model_insert_after(NULL, page_node);
1002 s_info_reposition.cur_x = -1;
1003 s_info_reposition.cur_y = -1;
1004 s_info_reposition.g_item = NULL;
1005 s_info_reposition.item = NULL;
1006 s_info_reposition.is_created = false;
1007 s_info.is_item_longpressed = false;
1009 home_screen_print_tree();
1011 return ECORE_CALLBACK_CANCEL;
1014 /*Gengrid Class item functions*/
1015 static char *__livebox_all_pages_get_grid_text(void *data, Evas_Object *obj, const char *part)
1020 static Eina_Bool __livebox_all_pages_get_grid_state(void *data, Evas_Object *obj, const char *part)
1025 static void __livebox_all_pages_del_grid(void *data, Evas_Object *obj)
1029 static void __livebox_all_pages_hide_remove_button(Elm_Object_Item *it)
1031 Evas_Object *thumb_layout = NULL;
1032 Evas_Object *thumb = NULL;
1035 LOGE("[INVALID_PARAM][it='%p']", it);
1037 thumb_layout = elm_object_item_part_content_get(it, GENGRID_ITEM_CONTENT);
1038 thumb = elm_object_part_content_get(thumb_layout, PART_GRID_ITEM_CONTENT);
1039 elm_object_signal_emit(thumb, SIGNAL_REMOVE_BUTTON_HIDE, SIGNAL_SOURCE);
1042 static void __livebox_all_pages_realized_cb(void *data, Evas_Object *obj, void *ei)
1045 g_count = elm_gengrid_items_count(obj);
1048 __livebox_all_pages_hide_remove_button(elm_gengrid_first_item_get(obj));
1051 static void __livebox_all_pages_remove_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
1053 Elm_Object_Item *clicked_item = NULL;
1054 Evas_Object *clicked_page = NULL;
1055 Evas_Object *lvb = (Evas_Object *) data;
1058 LOGE("[FAILED][lvb='%p']", lvb);
1063 evas_object_geometry_get(lvb, &x, &y, NULL, NULL);
1065 clicked_item = elm_gengrid_at_xy_item_get(s_info.grid, x, y, NULL, NULL);
1066 if (!clicked_item) {
1067 LOGE("[FAILED][elm_gengrid_at_xy_item_get]");
1071 clicked_page = __livebox_all_pages_get_thumb_page(clicked_item);
1072 if (!clicked_page) {
1073 LOGE("[FAILED][__livebox_all_pages_get_thumb_page]");
1076 if (__livebox_all_pages_is_page_empty(clicked_page)) {
1077 __livebox_all_pages_remove_button_clicked_liveboxes_cb(clicked_item);
1079 popup_data_t *p_data = popup_create_data();
1081 LOGE("[FAILED][failed to create popup data]");
1085 p_data->type = POPUP_TWO_BUTTONS;
1086 p_data->popup_title_text = strdup(_("IDS_HS_HEADER_DELETE_PAGE_ABB2"));
1087 p_data->popup_content_text = strdup(_("IDS_HS_POP_THIS_PAGE_AND_ALL_THE_ITEMS_IT_CONTAINS_WILL_BE_DELETED"));
1088 p_data->popup_confirm_text = strdup(_("IDS_HS_OPT_DELETE"));
1089 p_data->popup_cancel_text = strdup(_("IDS_CAM_SK_CANCEL"));
1090 p_data->orientation = ELM_POPUP_ORIENT_CENTER;
1092 popup_show(p_data, __livebox_all_pages_remove_button_clicked_liveboxes_cb, NULL,
1093 (void *) clicked_item);
1097 static void __livebox_all_pages_page_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
1099 Evas_Object *lvb_scroller = NULL;
1101 if (s_info.is_item_longpressed)
1104 lvb_scroller = livebox_panel_get();
1105 if (!lvb_scroller) {
1106 LOGE("Failed to get scroller");
1110 livebox_all_pages_hide();
1111 home_screen_set_view_type(HOMESCREEN_VIEW_HOME);
1112 s_info.pressed_item = -1;
1115 static void __libebox_all_pages_grid_item_pressed_cb(void *data, Evas_Object *obj, void *ei)
1117 s_info.pressed_item = elm_gengrid_item_index_get(ei);