2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (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://www.tizenopensource.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.
18 #include "browser-add-to-bookmark-view.h"
19 #include "add-to-most-visited-sites-view.h"
20 #include "browser-data-manager.h"
21 #include "most-visited-sites.h"
22 #include "most-visited-sites-db.h"
23 #include "browser-view.h"
24 #include "browser-common-view.h"
26 #define MOST_VISITED_SITES_ITEM_WIDTH (226 * elm_scale_get())
27 #define MOST_VISITED_SITES_ITEM_HEIGHT (273 * elm_scale_get())
29 Most_Visited_Sites::Most_Visited_Sites(Evas_Object *navi_bar, Browser_View *browser_view,
30 Most_Visited_Sites_DB *most_visited_sites_db)
33 ,m_browser_view(browser_view)
35 ,m_most_visited_sites_db(most_visited_sites_db)
36 ,m_selected_item(NULL)
37 ,m_context_popup(NULL)
38 ,m_is_drag(EINA_FALSE)
39 ,m_guide_text_main_layout(NULL)
40 ,m_guide_text_label(NULL)
41 ,m_never_show_check_box(NULL)
42 ,m_never_show_text_label(NULL)
45 ,m_setting_button(NULL)
46 ,m_edit_mode(EINA_FALSE)
48 ,m_is_item_clicked(EINA_FALSE)
49 // ,m_gengrid_item_class(NULL)
51 BROWSER_LOGD("[%s]", __func__);
55 Most_Visited_Sites::~Most_Visited_Sites(void)
57 BROWSER_LOGD("[%s]", __func__);
59 evas_object_del(m_main_layout);
61 // if (m_gengrid_item_class)
62 // elm_gengrid_item_class_free(m_gengrid_item_class);
65 m_most_visited_list.clear();
67 for(int i = 0 ; i < m_item_list.size() ; i++) {
69 if (m_item_list[i]->screen_shot)
70 evas_object_del(m_item_list[i]->screen_shot);
71 if (m_item_list[i]->layout)
72 evas_object_del(m_item_list[i]->layout);
73 if (m_item_list[i]->history_id)
74 free(m_item_list[i]->history_id);
75 if (m_item_list[i]->url)
76 free(m_item_list[i]->url);
77 if (m_item_list[i]->title)
78 free(m_item_list[i]->title);
79 delete m_item_list[i];
85 Evas_Object *Most_Visited_Sites::__get_most_visited_sites_item_layout(most_visited_sites_item *item)
87 if (!elm_layout_file_set(item->layout, BROWSER_EDJE_DIR"/most-visited-sites.edj",
88 "most_visited_sites_item")) {
89 BROWSER_LOGE("elm_layout_file_set failed");
92 evas_object_size_hint_weight_set(item->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
93 evas_object_size_hint_align_set(item->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
95 item->screen_shot = elm_icon_add(item->layout);
96 if (!item->screen_shot) {
97 BROWSER_LOGE("elm_icon_add failed");
101 if (item->history_id) {
102 std::string screen_shot_file_path;
103 screen_shot_file_path = std::string(BROWSER_SCREEN_SHOT_DIR)
104 + std::string(item->history_id);
105 if (!elm_icon_file_set(item->screen_shot, screen_shot_file_path.c_str(), NULL)) {
106 /* If no screen shot, set the no image default icon. */
108 /* If the item is from history. */
109 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
111 most_visited_sites_item* p_item = (most_visited_sites_item*)elm_object_item_data_get(it);
112 if (p_item && p_item->tack) {
113 if (p_item->url && item->url && (strlen(p_item->url) == strlen(item->url))
114 && !strncmp(p_item->url, item->url, strlen(p_item->url))) {
115 if (p_item->history_id) {
116 screen_shot_file_path.clear();
117 screen_shot_file_path = std::string(BROWSER_SCREEN_SHOT_DIR)
118 + std::string(p_item->history_id);
119 elm_icon_file_set(item->screen_shot,
120 screen_shot_file_path.c_str(), NULL);
125 } while (it = elm_gengrid_item_next_get(it));
129 elm_object_part_content_set(item->layout, "elm.swallow.snapshot", item->screen_shot);
130 //evas_object_smart_callback_add(item->screen_shot, "clicked", __item_clicked_cb, item);
135 if (!elm_layout_file_set(item->layout, BROWSER_EDJE_DIR"/most-visited-sites.edj",
136 "most_visited_sites_empty_item")) {
137 BROWSER_LOGE("elm_layout_file_set failed");
140 evas_object_size_hint_weight_set(item->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
141 evas_object_size_hint_align_set(item->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
142 //evas_object_smart_callback_add(item->screen_shot, "clicked", __empty_item_clicked_cb, item);
147 edje_object_part_text_set(elm_layout_edje_get(item->layout),
148 "title_label", item->title);
149 edje_object_signal_emit(elm_layout_edje_get(item->layout),
152 if (m_most_visited_sites_db->is_in_bookmark(item->url, NULL))
153 edje_object_signal_emit(elm_layout_edje_get(item->layout), "bookmark_icon,on,signal", "");
155 edje_object_signal_emit(elm_layout_edje_get(item->layout), "tack_icon", "");
157 edje_object_signal_emit(elm_layout_edje_get(item->layout), "hide,pin_icon", "");
159 evas_object_show(item->screen_shot);
160 evas_object_show(item->layout);
162 edje_object_signal_callback_add(elm_layout_edje_get(item->layout), "mouse,clicked,1",
163 "elm.image.delete_button", __delete_button_clicked_cb, item);
165 edje_object_signal_callback_add(elm_layout_edje_get(item->layout), "mouse,clicked,1",
166 "bookmark_icon_bg", __bookmark_button_clicked_cb, item);
169 edje_object_signal_emit(elm_layout_edje_get(item->layout), "show,delete_button,signal", "");
174 void Most_Visited_Sites::__bookmark_button_clicked_cb(void *data, Evas_Object *obj,
175 const char *emission, const char *source)
177 BROWSER_LOGD("[%s]", __func__);
179 most_visited_sites_item *item = (most_visited_sites_item *)data;
180 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
182 if (!most_visited_sites->m_edit_mode)
185 Browser_Bookmark_DB *bookmark_db = m_data_manager->create_bookmark_db();
187 BROWSER_LOGE("create_bookmark_db failed");
191 int bookmark_id = -1;
192 if (most_visited_sites->m_most_visited_sites_db->is_in_bookmark(item->url, &bookmark_id)) {
193 edje_object_signal_emit(elm_layout_edje_get(item->layout), "bookmark_icon,off,signal", "");
194 if (bookmark_id != -1)
195 bookmark_db->delete_bookmark(bookmark_id);
196 most_visited_sites->m_browser_view->show_notify_popup(BR_STRING_REMOVED_TO_BOOKMARKS, 3, EINA_TRUE);
198 edje_object_signal_emit(elm_layout_edje_get(item->layout), "bookmark_icon,on,signal", "");
199 if (item->title && item->url)
200 bookmark_db->save_bookmark(BROWSER_BOOKMARK_MAIN_FOLDER_ID, item->title, item->url);
201 most_visited_sites->m_browser_view->show_notify_popup(BR_STRING_ADDED_TO_BOOKMARKS, 3, EINA_TRUE);
204 m_data_manager->destroy_bookmark_db();
207 void Most_Visited_Sites::__delete_button_clicked_cb(void *data, Evas_Object *obj,
208 const char *emission, const char *source)
210 BROWSER_LOGD("[%s]", __func__);
212 most_visited_sites_item *item = (most_visited_sites_item *)data;
213 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
215 if (!most_visited_sites->_delete_selected_item())
216 BROWSER_LOGE("_delete_selected_item failed");
219 Eina_Bool Most_Visited_Sites::_empty_item_clicked(most_visited_sites_item *item)
221 BROWSER_LOGD("[%s]", __func__);
222 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
223 Browser_Data_Manager *data_manager = most_visited_sites->m_browser_view->get_data_manager();
224 Add_To_Most_Visited_Sites_View* add_to_most_visited_sites = NULL;
229 add_to_most_visited_sites = data_manager->create_add_to_most_visited_sites_view(most_visited_sites);
230 if (!add_to_most_visited_sites) {
231 BROWSER_LOGE("create_add_to_most_visited_sites_view failed");
234 if (!add_to_most_visited_sites->init()) {
235 BROWSER_LOGE("add_to_most_visited_sites->init failed");
236 data_manager->destroy_add_to_most_visited_sites_view();
243 /*void Most_Visited_Sites::__empty_item_clicked_cb(void *data, Evas_Object *obj,
246 BROWSER_LOGD("[%s]", __func__);
249 most_visited_sites_item *item = (most_visited_sites_item *)data;
250 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
251 if (!most_visited_sites->_empty_item_clicked(item))
252 BROWSER_LOGE("_empty_item_clicked failed");
255 void Most_Visited_Sites::__item_press_cb(void *data, Evas *evas, Evas_Object *obj,
258 BROWSER_LOGD("[%s]", __func__);
262 most_visited_sites_item *item = (most_visited_sites_item *)data;
263 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
264 edje_object_signal_emit(elm_layout_edje_get(item->layout), "tile_pressed", "");
265 most_visited_sites->m_selected_item = item;
268 void Most_Visited_Sites::__item_release_cb(void *data, Evas *evas, Evas_Object *obj,
271 BROWSER_LOGD("[%s]", __func__);
275 most_visited_sites_item *item = (most_visited_sites_item *)data;
276 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
277 edje_object_signal_emit(elm_layout_edje_get(item->layout), "tile_released", "");
279 most_visited_sites->m_is_drag = EINA_FALSE;
282 Eina_Bool Most_Visited_Sites::__load_url_idler_cb(void *data)
284 BROWSER_LOGD("[%s]", __func__);
287 BROWSER_LOGE("data is NULL");
291 most_visited_sites_item *item = (most_visited_sites_item *)data;
292 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
295 BROWSER_LOGE("url in Most_Visited_Sites class is NULL");
299 std::string selected_url = std::string(item->url);
300 BROWSER_LOGD("selected_url=[%s]", selected_url.c_str());
301 most_visited_sites->m_browser_view->load_url(selected_url.c_str());
303 return ECORE_CALLBACK_CANCEL;
306 void Most_Visited_Sites::__item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
308 BROWSER_LOGD("[%s]", __func__);
312 most_visited_sites_item *item = (most_visited_sites_item *)data;
313 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
315 if (most_visited_sites->m_is_item_clicked) {
316 BROWSER_LOGE("item is already clicked");
320 if (!item->history_id || !item->url) {
321 BROWSER_LOGE("empty item");
325 most_visited_sites->m_selected_item = item;
327 if (most_visited_sites->m_edit_mode) {
328 BROWSER_LOGE("edit mode");
329 elm_gengrid_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
334 if (!most_visited_sites->m_selected_item) {
335 BROWSER_LOGE("most_visited_sites->m_selected_item is null");
339 edje_object_signal_emit(elm_layout_edje_get(item->layout), "tile_released", "");
341 elm_gengrid_item_selected_set(most_visited_sites->m_selected_item->item, EINA_FALSE);
343 if (!most_visited_sites->m_is_drag) {
344 if (item->history_id && item->url) {
345 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.id.clear();
346 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.title.clear();
347 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.url.clear();
349 if (item->history_id && strlen(item->history_id))
350 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.id = std::string(item->history_id);
353 Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
355 if (it == most_visited_sites->m_selected_item->item)
358 } while (it = elm_gengrid_item_next_get(it));
360 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.index = index;
361 if (item->title && strlen(item->title))
362 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.title = std::string(item->title);
363 if (item->url && strlen(item->url))
364 most_visited_sites->m_browser_view->m_selected_most_visited_sites_item_info.url = std::string(item->url);
366 std::string selected_url = std::string(item->url);
367 /* m_browser_view->load_url should be called after accessing most_visited_sites instance.
368 It deletes the most_visited_sites instance. The most_visited_sites pointer is invalid after calling load_url(). */
369 most_visited_sites->m_is_item_clicked = EINA_TRUE;
370 ecore_idler_add(__load_url_idler_cb, item);
375 void Most_Visited_Sites::__context_popup_dismissed_cb(void *data, Evas_Object *obj,
378 BROWSER_LOGD("[%s]", __func__);
382 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
383 if (most_visited_sites->m_context_popup) {
384 evas_object_del(most_visited_sites->m_context_popup);
385 most_visited_sites->m_context_popup = NULL;
389 void Most_Visited_Sites::__context_popup_unpin_clicked_cb(void *data, Evas_Object *obj,
392 BROWSER_LOGD("[%s]", __func__);
395 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
396 if (most_visited_sites->m_context_popup) {
397 evas_object_del(most_visited_sites->m_context_popup);
398 most_visited_sites->m_context_popup = NULL;
402 Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
404 if (it == most_visited_sites->m_selected_item->item)
407 } while (it = elm_gengrid_item_next_get(it));
409 if (!most_visited_sites->m_most_visited_sites_db->delete_most_visited_sites_item(most_visited_sites->m_selected_item->url)) {
410 BROWSER_LOGE("delete_most_visited_sites_item failed");
414 edje_object_signal_emit(elm_layout_edje_get(most_visited_sites->m_selected_item->layout),
415 "hide,pin_icon", "");
416 most_visited_sites->m_selected_item->tack = EINA_FALSE;
418 std::string history_id;
419 history_id = most_visited_sites->m_most_visited_sites_db->get_history_id_by_url(most_visited_sites->m_selected_item->url);
420 BROWSER_LOGD("history id=[%s]", history_id.c_str());
421 if (history_id.empty()) {
422 std::string screen_shot_path;
423 screen_shot_path.clear();
424 screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
425 + std::string(most_visited_sites->m_selected_item->history_id);
426 remove(screen_shot_path.c_str());
427 most_visited_sites->_reload_items();
431 void Most_Visited_Sites::__context_popup_pin_clicked_cb(void *data, Evas_Object *obj,
434 BROWSER_LOGD("[%s]", __func__);
437 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
438 if (most_visited_sites->m_context_popup) {
439 evas_object_del(most_visited_sites->m_context_popup);
440 most_visited_sites->m_context_popup = NULL;
444 Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
446 if (it == most_visited_sites->m_selected_item->item)
449 } while (it = elm_gengrid_item_next_get(it));
451 if (!most_visited_sites->m_most_visited_sites_db->save_most_visited_sites_item(index, most_visited_sites->m_selected_item->url,
452 most_visited_sites->m_selected_item->title,
453 most_visited_sites->m_selected_item->history_id)) {
454 BROWSER_LOGE("save_most_visited_sites_item failed");
458 most_visited_sites->m_selected_item->tack = EINA_TRUE;
459 edje_object_signal_emit(elm_layout_edje_get(most_visited_sites->m_selected_item->layout),
463 void Most_Visited_Sites::__context_popup_modify_clicked_cb(void *data, Evas_Object *obj,
466 BROWSER_LOGD("[%s]", __func__);
469 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
470 if (most_visited_sites->m_context_popup) {
471 evas_object_del(most_visited_sites->m_context_popup);
472 most_visited_sites->m_context_popup = NULL;
475 Browser_Data_Manager *data_manager = most_visited_sites->m_browser_view->get_data_manager();
476 Add_To_Most_Visited_Sites_View* add_to_most_visited_sites_view = NULL;
477 add_to_most_visited_sites_view = data_manager->create_add_to_most_visited_sites_view(most_visited_sites);
478 if (!add_to_most_visited_sites_view) {
479 BROWSER_LOGE("create_add_to_most_visited_sites_view failed");
482 if (!add_to_most_visited_sites_view->init()) {
483 BROWSER_LOGE("add_to_most_visited_sites_view->init failed");
484 data_manager->destroy_add_to_most_visited_sites_view();
489 Eina_Bool Most_Visited_Sites::_delete_selected_item(void)
491 BROWSER_LOGD("[%s]", __func__);
493 Eina_Bool is_ranked = EINA_FALSE;
495 if (!m_selected_item || !m_selected_item->item) {
496 BROWSER_LOGD("m_selected_item || m_selected_item->item is NULL");
500 if (m_selected_item->tack) {
502 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
504 if (it == m_selected_item->item)
507 } while (it = elm_gengrid_item_next_get(it));
510 BROWSER_LOGD("delete_most_visited_sites_item index = %d", m_selected_item->item);
511 if (!m_most_visited_sites_db->delete_most_visited_sites_item(m_selected_item->url)) {
512 BROWSER_LOGE("delete_most_visited_sites_item failed");
516 std::string history_id;
517 history_id = m_most_visited_sites_db->get_history_id_by_url(m_selected_item->url);
519 BROWSER_LOGD("delete_most_visited_sites_item history_id = %s, atoi(m_selected_item->history_id) = %d", history_id.c_str(), atoi(m_selected_item->history_id));
520 if (!m_most_visited_sites_db->delete_most_visited_sites_history_item(atoi(m_selected_item->history_id))) {
521 BROWSER_LOGE("delete_most_visited_sites_history_item failed");
525 is_ranked = EINA_TRUE;
527 BROWSER_LOGD("delete_most_visited_sites_item atoi(m_selected_item->history_id) = %d", atoi(m_selected_item->history_id));
528 if (!m_most_visited_sites_db->delete_most_visited_sites_history_item(atoi(m_selected_item->history_id))) {
529 BROWSER_LOGE("delete_most_visited_sites_history_item failed");
533 is_ranked = EINA_TRUE;
535 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
537 most_visited_sites_item* p_item = (most_visited_sites_item *)elm_object_item_data_get(it);
538 if (p_item->tack) { // only search in tacked items. (mysites items)
539 if (m_selected_item->url && p_item->url && (strlen(m_selected_item->url) == strlen(p_item->url))
540 && !strcmp(m_selected_item->url, p_item->url)) {
541 is_ranked = EINA_FALSE;
545 } while (it = elm_gengrid_item_next_get(it));
549 BROWSER_LOGD("remove screen shot [%s]", m_selected_item->url);
550 std::string screen_shot_path;
551 screen_shot_path = std::string(BROWSER_SCREEN_SHOT_DIR)
552 + std::string(m_selected_item->history_id);
553 remove(screen_shot_path.c_str());
556 elm_object_item_del(m_selected_item->item);
558 most_visited_sites_item *item = new(nothrow) most_visited_sites_item;
560 BROWSER_LOGE("new(nothrow) most_visited_sites_item is failed");
563 item->history_id = NULL;
566 item->tack = EINA_FALSE;
568 item->screen_shot = NULL;
569 item->data = (void *)this;
570 item->item = elm_gengrid_item_append(m_gengrid, &m_gengrid_item_class, item, __item_clicked_cb, item);
571 m_item_list.push_back(item);
573 if (!_reload_items()) {
574 BROWSER_LOGE("_reload_items failed");
581 void Most_Visited_Sites::__context_popup_delete_clicked_cb(void *data, Evas_Object *obj,
584 BROWSER_LOGD("[%s]", __func__);
588 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
589 if (most_visited_sites->m_context_popup) {
590 evas_object_del(most_visited_sites->m_context_popup);
591 most_visited_sites->m_context_popup = NULL;
594 if (!most_visited_sites->_delete_selected_item())
595 BROWSER_LOGE("_delete_selected_item failed");
598 void Most_Visited_Sites::__context_popup_bookmark_clicked_cb(void *data, Evas_Object *obj,
601 BROWSER_LOGD("[%s]", __func__);
604 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
605 if (most_visited_sites->m_context_popup) {
606 evas_object_del(most_visited_sites->m_context_popup);
607 most_visited_sites->m_context_popup = NULL;
610 Browser_Data_Manager *data_manager = most_visited_sites->m_browser_view->get_data_manager();
611 std::string url = std::string(most_visited_sites->m_selected_item->url);
612 std::string title = std::string(most_visited_sites->m_selected_item->title);
614 if (!data_manager->create_add_to_bookmark_view(title, url)) {
615 BROWSER_LOGE("create_add_to_bookmark_view failed");
619 if (!data_manager->get_add_to_bookmark_view()->init())
620 data_manager->destroy_add_to_bookmark_view();
623 Eina_Bool Most_Visited_Sites::_show_item_context_popup(void)
625 BROWSER_LOGD("[%s]", __func__);
626 if (!m_selected_item || !m_selected_item->item
627 || !m_selected_item->history_id) {
628 BROWSER_LOGE("Invalid item");
631 m_context_popup = elm_ctxpopup_add(m_gengrid);
632 if (!m_context_popup) {
633 BROWSER_LOGE("elm_ctxpopup_add failed");
636 evas_object_size_hint_weight_set(m_context_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
637 elm_ctxpopup_hover_parent_set(m_context_popup, m_gengrid);
638 elm_ctxpopup_direction_priority_set(m_context_popup, ELM_CTXPOPUP_DIRECTION_LEFT,
639 ELM_CTXPOPUP_DIRECTION_RIGHT, ELM_CTXPOPUP_DIRECTION_UP,
640 ELM_CTXPOPUP_DIRECTION_DOWN);
642 evas_object_smart_callback_add(m_context_popup,"dismissed",
643 __context_popup_dismissed_cb, this);
645 if (m_selected_item->tack)
646 elm_ctxpopup_item_append(m_context_popup, BR_STRING_UNLOCK, NULL,
647 __context_popup_unpin_clicked_cb, this);
649 elm_ctxpopup_item_append(m_context_popup, BR_STRING_LOCK, NULL,
650 __context_popup_pin_clicked_cb, this);
652 elm_ctxpopup_item_append(m_context_popup, BR_STRING_MODIFY, NULL,
653 __context_popup_modify_clicked_cb, this);
654 elm_ctxpopup_item_append(m_context_popup, BR_STRING_BOOKMARK, NULL,
655 __context_popup_bookmark_clicked_cb, this);
656 elm_ctxpopup_item_append(m_context_popup, BR_STRING_DELETE, NULL,
657 __context_popup_delete_clicked_cb, this);
659 Evas_Coord item_x = 0;
660 Evas_Coord item_y = 0;
661 Evas_Coord item_w = 0;
662 Evas_Coord item_h = 0;
663 evas_object_geometry_get(m_selected_item->layout, &item_x, &item_y, &item_w, &item_h);
664 evas_object_move(m_context_popup, item_x + (item_w / 3), item_y + (item_h / 4));
665 evas_object_show(m_context_popup);
670 void Most_Visited_Sites::__item_longpressed_cb(void *data, Evas_Object *obj,
673 BROWSER_LOGD("[%s]", __func__);
677 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
678 most_visited_sites_item *item = (most_visited_sites_item *)elm_object_item_data_get(it);
679 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
681 most_visited_sites->m_is_drag = EINA_TRUE;
682 most_visited_sites->m_selected_item = item;
685 edje_object_signal_emit(elm_layout_edje_get(most_visited_sites->m_selected_item->layout), "tile_released", "");
687 if (!most_visited_sites->_show_item_context_popup())
688 BROWSER_LOGE("_show_item_context_popup failed");
692 void Most_Visited_Sites::__item_drag_cb(void *data, Evas_Object *obj, void *event_info)
697 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
698 static int count = 0;
701 * If user drags the item, destroy the context popup.
702 * Let's assume that if the 'changed' callback is called more than 15,
703 * the user may drag the item to reoder. */
705 if (most_visited_sites->m_context_popup) {
706 evas_object_del(most_visited_sites->m_context_popup);
707 most_visited_sites->m_context_popup = NULL;
713 Eina_Bool Most_Visited_Sites::__gengrid_icon_get_idler_cb(void *data)
715 most_visited_sites_item *item = (most_visited_sites_item *)data;
716 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
717 if (!most_visited_sites->__get_most_visited_sites_item_layout(item))
718 BROWSER_LOGE("__get_most_visited_sites_item_layout failed");
720 return ECORE_CALLBACK_CANCEL;
723 Evas_Object *Most_Visited_Sites::__gengrid_icon_get_cb(void *data, Evas_Object *obj, const char *part)
728 most_visited_sites_item *item = (most_visited_sites_item *)data;
729 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
730 if (!strncmp(part, "elm.swallow.icon", strlen("elm.swallow.icon"))) {
731 item->layout = elm_layout_add(obj);
733 BROWSER_LOGE("elm_layout_add failed");
736 ecore_idler_add(__gengrid_icon_get_idler_cb, item);
742 Eina_Bool Most_Visited_Sites::_reload_items(void)
744 BROWSER_LOGD("[%s]", __func__);
745 elm_gengrid_clear(m_gengrid);
746 m_entry_list.clear();
747 m_most_visited_list.clear();
749 for(int i = 0 ; i < m_item_list.size() ; i++) {
750 if (m_item_list[i]) {
751 if (m_item_list[i]->screen_shot)
752 evas_object_del(m_item_list[i]->screen_shot);
753 if (m_item_list[i]->layout)
754 evas_object_del(m_item_list[i]->layout);
755 if (m_item_list[i]->history_id)
756 free(m_item_list[i]->history_id);
757 if (m_item_list[i]->url)
758 free(m_item_list[i]->url);
759 if (m_item_list[i]->title)
760 free(m_item_list[i]->title);
761 delete m_item_list[i];
766 if (!m_most_visited_sites_db->get_most_visited_sites_list(m_entry_list)) {
767 BROWSER_LOGE("get_most_visited_sites_list failed");
771 int item_count = BROWSER_MOST_VISITED_SITES_ITEM_MAX;
772 item_count = item_count - m_entry_list.size();
773 if (!m_most_visited_sites_db->get_most_visited_list(m_most_visited_list, m_entry_list, item_count)) {
774 BROWSER_LOGE("get_most_visited_list failed");
778 std::vector<Most_Visited_Sites_DB::most_visited_sites_entry>::iterator most_visited_sites_iterator;
779 std::vector<Most_Visited_Sites_DB::most_visited_sites_entry>::iterator most_visited_iterator;
781 most_visited_sites_iterator = m_entry_list.begin();
782 most_visited_iterator = m_most_visited_list.begin();
785 int most_visited_index = 0;
787 for (int i = 0 ; i < BROWSER_MOST_VISITED_SITES_ITEM_MAX ; i++) {
788 most_visited_sites_item *item = new(nothrow) most_visited_sites_item;
790 BROWSER_LOGE("new most_visited_sites_item failed");
793 if (entry_index < m_entry_list.size())/* && m_entry_list[entry_index].index == i) */{
794 item->history_id = strdup(m_entry_list[entry_index].id.c_str());
795 item->url = strdup(m_entry_list[entry_index].url.c_str());
796 item->title = strdup(m_entry_list[entry_index].title.c_str());
797 item->tack = EINA_TRUE;
799 } else if (most_visited_index < m_most_visited_list.size()) {
800 item->history_id = strdup(m_most_visited_list[most_visited_index].id.c_str());
801 item->url = strdup(m_most_visited_list[most_visited_index].url.c_str());
802 item->title = strdup(m_most_visited_list[most_visited_index].title.c_str());
803 item->tack = EINA_FALSE;
804 most_visited_index++;
806 item->history_id = NULL;
809 item->tack = EINA_FALSE;
812 item->screen_shot = NULL;
813 item->data = (void *)this;
814 item->item = elm_gengrid_item_append(m_gengrid, &m_gengrid_item_class, item, __item_clicked_cb, item);
815 m_item_list.push_back(item);
821 Eina_Bool Most_Visited_Sites::_item_moved(void)
823 BROWSER_LOGD("[%s]", __func__);
825 if (m_selected_item->url && strlen(m_selected_item->url)) {
826 if (!m_context_popup) {
827 m_selected_item->tack = EINA_TRUE;
828 edje_object_signal_emit(elm_layout_edje_get(m_selected_item->layout),
834 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
836 if (!m_most_visited_sites_db->delete_most_visited_sites_item(m_selected_item->url))
837 BROWSER_LOGE("fail to delete slot %d", index);
839 most_visited_sites_item *item = (most_visited_sites_item *)elm_object_item_data_get(it);
840 if (item && item->tack) {
841 if (!m_most_visited_sites_db->save_most_visited_sites_item(index, item->url,
842 item->title, item->history_id)) {
843 BROWSER_LOGE("save_most_visited_sites_item failed");
847 } while (it = elm_gengrid_item_next_get(it));
849 m_is_drag = EINA_FALSE;
854 void Most_Visited_Sites::__item_moved_cb(void *data, Evas_Object *obj, void *event_info)
856 BROWSER_LOGD("[%s]", __func__);
860 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
861 if (!most_visited_sites->_item_moved())
862 BROWSER_LOGE("_item_moved failed");
865 Eina_Bool Most_Visited_Sites::is_guide_text_running(void)
867 if (m_guide_text_main_layout)
873 void Most_Visited_Sites::destroy_guide_text_main_layout(void)
875 BROWSER_LOGD("[%s]", __func__);
876 if (m_guide_text_label) {
877 evas_object_del(m_guide_text_label);
878 m_guide_text_label = NULL;
880 if (m_never_show_check_box) {
881 evas_object_del(m_never_show_check_box);
882 m_never_show_check_box = NULL;
885 evas_object_del(m_ok_button);
888 if (m_never_show_text_label) {
889 evas_object_del(m_never_show_text_label);
890 m_never_show_text_label = NULL;
892 if (m_guide_text_main_layout) {
893 evas_object_del(m_guide_text_main_layout);
894 m_guide_text_main_layout = NULL;
898 void Most_Visited_Sites::__guide_text_ok_button_clicked_cb(void *data, Evas_Object *obj,
901 BROWSER_LOGD("[%s]", __func__);
905 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
906 Eina_Bool never_show = elm_check_state_get(most_visited_sites->m_never_show_check_box);
908 br_preference_set_bool(SHOW_MY_SITES_GUIDE, false);
911 elm_object_part_content_unset(most_visited_sites->m_browser_view->m_main_layout, "elm.swallow.mysites_guide");
912 edje_object_signal_emit(elm_layout_edje_get(most_visited_sites->m_browser_view->m_main_layout),
913 "hide,most_visited_sites_guide_text,signal", "");
914 most_visited_sites->destroy_guide_text_main_layout();
917 Evas_Object *Most_Visited_Sites::create_guide_text_main_layout(void)
919 BROWSER_LOGD("[%s]", __func__);
920 m_guide_text_main_layout = elm_layout_add(m_navi_bar);
921 if (!m_guide_text_main_layout) {
922 BROWSER_LOGE("elm_layout_add failed");
925 if (!elm_layout_file_set(m_guide_text_main_layout, BROWSER_EDJE_DIR"/most-visited-sites.edj",
927 BROWSER_LOGE("elm_layout_file_set failed");
930 evas_object_size_hint_weight_set(m_guide_text_main_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
931 evas_object_size_hint_align_set(m_guide_text_main_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
932 evas_object_show(m_guide_text_main_layout);
934 m_guide_text_label = elm_label_add(m_guide_text_main_layout);
935 if (!m_guide_text_label) {
936 BROWSER_LOGE("elm_label_add failed");
939 evas_object_size_hint_align_set(m_guide_text_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
940 evas_object_size_hint_weight_set(m_guide_text_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
941 elm_label_line_wrap_set(m_guide_text_label, ELM_WRAP_WORD);
942 std::string guide_text = std::string("<font_size=32><color=#101010>") + std::string(BR_STRING_MY_SITES_GUIDE_TEXT)
943 + std::string("</color></font_size>");
944 elm_object_text_set(m_guide_text_label, guide_text.c_str());
945 elm_object_part_content_set(m_guide_text_main_layout, "elm.swallow.guide_text_label", m_guide_text_label);
946 evas_object_show(m_guide_text_label);
948 m_never_show_check_box = elm_check_add(m_guide_text_main_layout);
949 if (!m_never_show_check_box) {
950 BROWSER_LOGE("elm_check_add failed");
953 elm_object_part_content_set(m_guide_text_main_layout, "elm.swallow.never_show_check_box", m_never_show_check_box);
954 evas_object_show(m_never_show_check_box);
956 m_never_show_text_label = elm_label_add(m_guide_text_main_layout);
957 if (!m_never_show_text_label) {
958 BROWSER_LOGE("elm_label_add failed");
961 evas_object_size_hint_align_set(m_never_show_text_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
962 evas_object_size_hint_weight_set(m_never_show_text_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
963 elm_label_line_wrap_set(m_never_show_text_label, ELM_WRAP_WORD);
965 std::string never_show_text = std::string("<font_size=30><color=#FFFFFF>") + std::string(BR_STRING_DO_NOT_ASK_AGAIN)
966 + std::string("</color></font_size>");
968 elm_object_text_set(m_never_show_text_label, never_show_text.c_str());
969 elm_object_part_content_set(m_guide_text_main_layout, "elm.swallow.never_show_text", m_never_show_text_label);
971 /* To be able to set the check box even touch on 'never show' text for convenience. */
972 edje_object_signal_callback_add(elm_layout_edje_get(m_guide_text_main_layout), "mouse,clicked,1",
973 "elm.swallow.never_show_text_click_area", __never_show_text_clicked_cb, this);
975 evas_object_show(m_never_show_text_label);
977 m_ok_button = elm_button_add(m_guide_text_main_layout);
979 BROWSER_LOGE("elm_button_add failed");
982 elm_object_style_set(m_ok_button, "browser/ok_button");
983 elm_object_text_set(m_ok_button, BR_STRING_OK);
984 elm_object_part_content_set(m_guide_text_main_layout, "elm.swallow.ok_button", m_ok_button);
985 evas_object_smart_callback_add(m_ok_button, "clicked", __guide_text_ok_button_clicked_cb, this);
986 evas_object_show(m_ok_button);
988 return m_guide_text_main_layout;
991 void Most_Visited_Sites::__never_show_text_clicked_cb(void *data, Evas_Object *obj,
992 const char *emission, const char *source)
994 BROWSER_LOGD("[%s]", __func__);
998 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
999 Eina_Bool never_show = elm_check_state_get(most_visited_sites->m_never_show_check_box);
1000 elm_check_state_set(most_visited_sites->m_never_show_check_box, !never_show);
1003 #if defined(HORIZONTAL_UI)
1004 void Most_Visited_Sites::rotate(void)
1006 BROWSER_LOGD("[%s]", __func__);
1007 if (m_browser_view->is_landscape()) {
1008 elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
1009 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "rotate,landscape,signal", "");
1011 elm_gengrid_align_set(m_gengrid, 0.5, 0.5);
1012 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "rotate,portrait,signal", "");
1017 void Most_Visited_Sites::_set_edit_mode(Eina_Bool edit_mode)
1019 BROWSER_LOGD("[%s]", __func__);
1020 m_edit_mode = edit_mode;
1022 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
1024 most_visited_sites_item *item_data = (most_visited_sites_item *)elm_object_item_data_get(it);
1027 edje_object_signal_emit(elm_layout_edje_get(item_data->layout), "show,delete_button,signal", "");
1029 edje_object_signal_emit(elm_layout_edje_get(item_data->layout), "hide,delete_button,signal", "");
1031 it = elm_gengrid_item_next_get(it);
1035 elm_genlist_realized_items_update(m_gengrid);
1038 void Most_Visited_Sites::__setting_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1040 BROWSER_LOGD("[%s]", __func__);
1041 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
1042 elm_object_part_content_unset(most_visited_sites->m_main_layout, "elm.swallow.setting_button");
1043 evas_object_hide(most_visited_sites->m_setting_button);
1045 elm_object_part_content_set(most_visited_sites->m_main_layout, "elm.swallow.setting_button", most_visited_sites->m_done_button);
1046 evas_object_show(most_visited_sites->m_done_button);
1048 most_visited_sites->_set_edit_mode(EINA_TRUE);
1051 void Most_Visited_Sites::__done_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1053 BROWSER_LOGD("[%s]", __func__);
1054 Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
1055 elm_object_part_content_unset(most_visited_sites->m_main_layout, "elm.swallow.setting_button");
1056 evas_object_hide(most_visited_sites->m_done_button);
1058 elm_object_part_content_set(most_visited_sites->m_main_layout, "elm.swallow.setting_button", most_visited_sites->m_setting_button);
1059 evas_object_show(most_visited_sites->m_setting_button);
1061 most_visited_sites->_set_edit_mode(EINA_FALSE);
1064 Evas_Object *Most_Visited_Sites::create_most_visited_sites_main_layout(void)
1066 BROWSER_LOGD("[%s]", __func__);
1067 m_main_layout = elm_layout_add(m_navi_bar);
1068 if (!m_main_layout) {
1069 BROWSER_LOGE("elm_layout_add failed");
1072 if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/most-visited-sites.edj",
1073 "most_visited_sites_layout")) {
1074 BROWSER_LOGE("Can not set layout most_visited_sites_layout\n");
1077 evas_object_size_hint_weight_set(m_main_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1078 evas_object_size_hint_align_set(m_main_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1079 evas_object_show(m_main_layout);
1081 m_gengrid = elm_gengrid_add(m_main_layout);
1083 BROWSER_LOGE("elm_gengrid_add failed");
1087 elm_object_part_content_set(m_main_layout, "elm.swallow.gengrid", m_gengrid);
1090 evas_object_geometry_get(m_browser_view->m_win, NULL, NULL, &window_w, NULL);
1092 elm_gengrid_item_size_set(m_gengrid, MOST_VISITED_SITES_ITEM_WIDTH, MOST_VISITED_SITES_ITEM_HEIGHT);
1094 #if defined(HORIZONTAL_UI)
1095 if (m_browser_view->is_landscape())
1096 elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
1099 elm_gengrid_align_set(m_gengrid, 0.5, 0.5);
1101 elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
1102 elm_gengrid_bounce_set(m_gengrid, EINA_FALSE, EINA_FALSE);
1103 elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
1104 //elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_NONE);
1106 // evas_object_smart_callback_add(m_gengrid, "longpressed", __item_longpressed_cb, this);
1107 evas_object_smart_callback_add(m_gengrid, "changed", __item_drag_cb, this);
1108 evas_object_smart_callback_add(m_gengrid, "moved", __item_moved_cb, this);
1110 // elm_gengrid_reorder_mode_set(m_gengrid, EINA_TRUE);
1111 // m_gengrid_item_class = elm_gengrid_item_class_new();
1112 // m_gengrid_item_class->item_style = "default_grid/browser/most_visited_sites";
1113 m_gengrid_item_class.item_style = "default_grid";
1114 m_gengrid_item_class.func.text_get = NULL;
1115 m_gengrid_item_class.func.content_get = __gengrid_icon_get_cb;
1116 m_gengrid_item_class.func.state_get = NULL;
1117 m_gengrid_item_class.func.del = NULL;
1119 if (!_reload_items()) {
1120 BROWSER_LOGE("new _reload_items failed");
1124 evas_object_show(m_gengrid);
1126 m_setting_button = elm_button_add(m_gengrid);
1127 if (!m_setting_button) {
1128 BROWSER_LOGE("elm_button_add failed");
1131 elm_object_style_set(m_setting_button, "browser/most_visited_sites_setting");
1133 elm_object_part_content_set(m_main_layout, "elm.swallow.setting_button", m_setting_button);
1134 evas_object_smart_callback_add(m_setting_button, "clicked", __setting_button_clicked_cb, this);
1135 evas_object_show(m_setting_button);
1137 m_done_button = elm_button_add(m_gengrid);
1138 if (!m_done_button) {
1139 BROWSER_LOGE("elm_button_add failed");
1142 elm_object_style_set(m_done_button, "browser/most_visited_sites_done");
1143 elm_object_text_set(m_done_button, BR_STRING_DONE);
1144 evas_object_smart_callback_add(m_done_button, "clicked", __done_button_clicked_cb, this);
1145 evas_object_hide(m_done_button);
1147 return m_main_layout;