dc38d9e5d8e2faecd17714ba040d29b40b063c9b
[profile/ivi/org.tizen.browser.git] / src / most-visited-sites / most-visited-sites.cpp
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
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
7  *
8  *    http://www.tizenopensource.org/license
9  *
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.
15  *
16  */
17
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"
25
26 #define MOST_VISITED_SITES_ITEM_WIDTH   (226 * elm_scale_get())
27 #define MOST_VISITED_SITES_ITEM_HEIGHT  (273 * elm_scale_get())
28
29 Most_Visited_Sites::Most_Visited_Sites(Evas_Object *navi_bar, Browser_View *browser_view,
30                                                 Most_Visited_Sites_DB *most_visited_sites_db)
31 :
32         m_navi_bar(navi_bar)
33         ,m_browser_view(browser_view)
34         ,m_gengrid(NULL)
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)
43         ,m_ok_button(NULL)
44         ,m_main_layout(NULL)
45         ,m_setting_button(NULL)
46         ,m_edit_mode(EINA_FALSE)
47         ,m_done_button(NULL)
48         ,m_is_item_clicked(EINA_FALSE)
49 //      ,m_gengrid_item_class(NULL)
50 {
51         BROWSER_LOGD("[%s]", __func__);
52         m_item_list.clear();
53 }
54
55 Most_Visited_Sites::~Most_Visited_Sites(void)
56 {
57         BROWSER_LOGD("[%s]", __func__);
58         if (m_main_layout)
59                 evas_object_del(m_main_layout);
60
61 //      if (m_gengrid_item_class)
62 //              elm_gengrid_item_class_free(m_gengrid_item_class);
63
64         m_entry_list.clear();
65         m_most_visited_list.clear();
66
67         for(int i = 0 ; i < m_item_list.size() ; i++) {
68                 if (m_item_list[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];
80                 }
81         }
82 }
83
84
85 Evas_Object *Most_Visited_Sites::__get_most_visited_sites_item_layout(most_visited_sites_item *item)
86 {
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");
90                 return NULL;
91         }
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);
94
95         item->screen_shot = elm_icon_add(item->layout);
96         if (!item->screen_shot) {
97                 BROWSER_LOGE("elm_icon_add failed");
98                 return NULL;
99         }
100
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. */
107                         if (!item->tack) {
108                                 /* If the item is from history. */
109                                 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
110                                 do {
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);
121                                                         }
122                                                         break;
123                                                 }
124                                         }
125                                 } while (it = elm_gengrid_item_next_get(it));
126                         }
127                 }
128                 if (item->url) {
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);
131                 }
132         }
133         else {
134                 /* If empty slot. */
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");
138                         return NULL;
139                 }
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);
143         }
144
145         if (item->url) {
146                 if (item->title) {
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),
150                                                         "titlearea", "");
151                 }
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", "");
154                 if (item->tack)
155                         edje_object_signal_emit(elm_layout_edje_get(item->layout), "tack_icon", "");
156                 else
157                         edje_object_signal_emit(elm_layout_edje_get(item->layout), "hide,pin_icon", "");
158         }
159         evas_object_show(item->screen_shot);
160         evas_object_show(item->layout);
161
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);
164
165         edje_object_signal_callback_add(elm_layout_edje_get(item->layout), "mouse,clicked,1",
166                         "bookmark_icon_bg", __bookmark_button_clicked_cb, item);
167
168         if (m_edit_mode)
169                 edje_object_signal_emit(elm_layout_edje_get(item->layout), "show,delete_button,signal", "");
170
171         return item->layout;
172 }
173
174 void Most_Visited_Sites::__bookmark_button_clicked_cb(void *data, Evas_Object *obj,
175                                                         const char *emission, const char *source)
176 {
177         BROWSER_LOGD("[%s]", __func__);
178
179         most_visited_sites_item *item = (most_visited_sites_item *)data;
180         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
181
182         if (!most_visited_sites->m_edit_mode)
183                 return;
184
185         Browser_Bookmark_DB *bookmark_db = m_data_manager->create_bookmark_db();
186         if (!bookmark_db) {
187                 BROWSER_LOGE("create_bookmark_db failed");
188                 return;
189         }
190
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);
197         } else {
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);
202         }
203
204         m_data_manager->destroy_bookmark_db();
205 }
206
207 void Most_Visited_Sites::__delete_button_clicked_cb(void *data, Evas_Object *obj,
208                                                         const char *emission, const char *source)
209 {
210         BROWSER_LOGD("[%s]", __func__);
211
212         most_visited_sites_item *item = (most_visited_sites_item *)data;
213         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
214
215         if (!most_visited_sites->_delete_selected_item())
216                 BROWSER_LOGE("_delete_selected_item failed");
217 }
218
219 Eina_Bool Most_Visited_Sites::_empty_item_clicked(most_visited_sites_item *item)
220 {
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;
225
226         if (m_is_drag)
227                 return EINA_FALSE;
228
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");
232                 return EINA_FALSE;
233         }
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();
237                 return EINA_FALSE;
238         }
239
240         return EINA_TRUE;
241 }
242
243 /*void Most_Visited_Sites::__empty_item_clicked_cb(void *data, Evas_Object *obj,
244                                                                 void *event_info)
245 {
246         BROWSER_LOGD("[%s]", __func__);
247         if (!data)
248                 return;
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");
253 }*/
254
255 void Most_Visited_Sites::__item_press_cb(void *data, Evas *evas, Evas_Object *obj,
256                                                                         void *event_info)
257 {
258         BROWSER_LOGD("[%s]", __func__);
259
260         if (!data)
261                 return;
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;
266 }
267
268 void Most_Visited_Sites::__item_release_cb(void *data, Evas *evas, Evas_Object *obj,
269                                                                         void *event_info)
270 {
271         BROWSER_LOGD("[%s]", __func__);
272
273         if (!data)
274                 return;
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", "");
278
279         most_visited_sites->m_is_drag = EINA_FALSE;
280 }
281
282 Eina_Bool Most_Visited_Sites::__load_url_idler_cb(void *data)
283 {
284         BROWSER_LOGD("[%s]", __func__);
285
286         if (!data) {
287                 BROWSER_LOGE("data is NULL");
288                 return EINA_FALSE;
289         }
290
291         most_visited_sites_item *item = (most_visited_sites_item *)data;
292         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
293
294         if (!item->url){
295                 BROWSER_LOGE("url in Most_Visited_Sites class is NULL");
296                 return EINA_FALSE;
297         }
298
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());
302
303         return ECORE_CALLBACK_CANCEL;
304 }
305
306 void Most_Visited_Sites::__item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
307 {
308         BROWSER_LOGD("[%s]", __func__);
309         if (!data)
310                 return;
311
312         most_visited_sites_item *item = (most_visited_sites_item *)data;
313         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)(item->data);
314
315         if (most_visited_sites->m_is_item_clicked) {
316                 BROWSER_LOGE("item is already clicked");
317                 return;
318         }
319
320         if (!item->history_id || !item->url) {
321                 BROWSER_LOGE("empty item");
322                 return;
323         }
324
325         most_visited_sites->m_selected_item = item;
326
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);
330                 return;
331         }
332
333 #if 0
334         if (!most_visited_sites->m_selected_item) {
335                 BROWSER_LOGE("most_visited_sites->m_selected_item is null");
336                 return;
337         }
338 #endif
339         edje_object_signal_emit(elm_layout_edje_get(item->layout), "tile_released", "");
340
341         elm_gengrid_item_selected_set(most_visited_sites->m_selected_item->item, EINA_FALSE);
342
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();
348
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);
351
352                         int index = 0;
353                         Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
354                         do {
355                                 if (it == most_visited_sites->m_selected_item->item)
356                                         break;
357                                 index++;
358                         } while (it = elm_gengrid_item_next_get(it));
359
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);
365
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);
371                 }
372         }
373 }
374
375 void Most_Visited_Sites::__context_popup_dismissed_cb(void *data, Evas_Object *obj,
376                                                                         void *event_info)
377 {
378         BROWSER_LOGD("[%s]", __func__);
379         if (!data)
380                 return;
381
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;
386         }
387 }
388
389 void Most_Visited_Sites::__context_popup_unpin_clicked_cb(void *data, Evas_Object *obj,
390                                                                         void *event_info)
391 {
392         BROWSER_LOGD("[%s]", __func__);
393         if (!data)
394                 return;
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;
399         }
400
401         int index = 0;
402         Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
403         do {
404                 if (it == most_visited_sites->m_selected_item->item)
405                         break;
406                 index++;
407         } while (it = elm_gengrid_item_next_get(it));
408
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");
411                 return;
412         }
413
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;
417
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();
428         }
429 }
430
431 void Most_Visited_Sites::__context_popup_pin_clicked_cb(void *data, Evas_Object *obj,
432                                                                         void *event_info)
433 {
434         BROWSER_LOGD("[%s]", __func__);
435         if (!data)
436                 return;
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;
441         }
442
443         int index = 0;
444         Elm_Object_Item *it = elm_gengrid_first_item_get(most_visited_sites->m_gengrid);
445         do {
446                 if (it == most_visited_sites->m_selected_item->item)
447                         break;
448                 index++;
449         } while (it = elm_gengrid_item_next_get(it));
450
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");
455                 return;
456         }
457
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),
460                                                                 "tack_icon", "");
461 }
462
463 void Most_Visited_Sites::__context_popup_modify_clicked_cb(void *data, Evas_Object *obj,
464                                                                         void *event_info)
465 {
466         BROWSER_LOGD("[%s]", __func__);
467         if (!data)
468                 return;
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;
473         }
474
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");
480                 return;
481         }
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();
485                 return;
486         }
487 }
488
489 Eina_Bool Most_Visited_Sites::_delete_selected_item(void)
490 {
491         BROWSER_LOGD("[%s]", __func__);
492
493         Eina_Bool is_ranked = EINA_FALSE;
494
495         if (!m_selected_item || !m_selected_item->item) {
496                 BROWSER_LOGD("m_selected_item || m_selected_item->item is NULL");
497                 return EINA_FALSE;
498         }
499
500         if (m_selected_item->tack) {
501                 int index = 0;
502                 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
503                 do {
504                         if (it == m_selected_item->item)
505                                 break;
506                         index++;
507                 } while (it = elm_gengrid_item_next_get(it));
508
509
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");
513                         return EINA_FALSE;
514                 }
515
516                 std::string history_id;
517                 history_id = m_most_visited_sites_db->get_history_id_by_url(m_selected_item->url);
518
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");
522                         return EINA_FALSE;
523                 }
524
525                 is_ranked = EINA_TRUE;
526         } else {
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");
530                         return EINA_FALSE;
531                 }
532
533                 is_ranked = EINA_TRUE;
534
535                 Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
536                 do {
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;
542                                         break;
543                                 }
544                         }
545                 } while (it = elm_gengrid_item_next_get(it));
546         }
547
548         if (is_ranked) {
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());
554         }
555
556         elm_object_item_del(m_selected_item->item);
557
558         most_visited_sites_item *item = new(nothrow) most_visited_sites_item;
559         if (!item) {
560                 BROWSER_LOGE("new(nothrow) most_visited_sites_item is failed");
561                 return EINA_FALSE;
562         }
563         item->history_id = NULL;
564         item->url = NULL;
565         item->title = NULL;
566         item->tack = EINA_FALSE;
567         item->layout = NULL;
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);
572 #if 0
573         if (!_reload_items()) {
574                 BROWSER_LOGE("_reload_items failed");
575                 return EINA_FALSE;
576         }
577 #endif
578         return EINA_TRUE;
579 }
580
581 void Most_Visited_Sites::__context_popup_delete_clicked_cb(void *data, Evas_Object *obj,
582                                                                         void *event_info)
583 {
584         BROWSER_LOGD("[%s]", __func__);
585         if (!data)
586                 return;
587
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;
592         }
593
594         if (!most_visited_sites->_delete_selected_item())
595                 BROWSER_LOGE("_delete_selected_item failed");
596 }
597
598 void Most_Visited_Sites::__context_popup_bookmark_clicked_cb(void *data, Evas_Object *obj,
599                                                                         void *event_info)
600 {
601         BROWSER_LOGD("[%s]", __func__);
602         if (!data)
603                 return;
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;
608         }
609
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);
613
614         if (!data_manager->create_add_to_bookmark_view(title, url)) {
615                 BROWSER_LOGE("create_add_to_bookmark_view failed");
616                 return;
617         }
618
619         if (!data_manager->get_add_to_bookmark_view()->init())
620                 data_manager->destroy_add_to_bookmark_view();
621 }
622
623 Eina_Bool Most_Visited_Sites::_show_item_context_popup(void)
624 {
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");
629                 return EINA_FALSE;
630         }
631         m_context_popup = elm_ctxpopup_add(m_gengrid);
632         if (!m_context_popup) {
633                 BROWSER_LOGE("elm_ctxpopup_add failed");
634                 return EINA_FALSE;
635         }
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);
641
642         evas_object_smart_callback_add(m_context_popup,"dismissed",
643                                                 __context_popup_dismissed_cb, this);
644
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);
648         else
649                 elm_ctxpopup_item_append(m_context_popup, BR_STRING_LOCK, NULL,
650                                         __context_popup_pin_clicked_cb, this);
651
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);
658
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);
666
667         return EINA_TRUE;
668 }
669
670 void Most_Visited_Sites::__item_longpressed_cb(void *data, Evas_Object *obj,
671                                                                 void *event_info)
672 {
673         BROWSER_LOGD("[%s]", __func__);
674         if (!data)
675                 return;
676
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;
680
681         most_visited_sites->m_is_drag = EINA_TRUE;
682         most_visited_sites->m_selected_item = item;
683
684 #if 0
685         edje_object_signal_emit(elm_layout_edje_get(most_visited_sites->m_selected_item->layout), "tile_released", "");
686
687         if (!most_visited_sites->_show_item_context_popup())
688                 BROWSER_LOGE("_show_item_context_popup failed");
689 #endif
690 }
691
692 void Most_Visited_Sites::__item_drag_cb(void *data, Evas_Object *obj, void *event_info)
693 {
694         if (!data)
695                 return;
696
697         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
698         static int count = 0;
699         count++;
700         /* Workaround.
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. */
704         if (count > 15) {
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;
708                 }
709                 count = 0;
710         }
711 }
712
713 Eina_Bool Most_Visited_Sites::__gengrid_icon_get_idler_cb(void *data)
714 {
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");
719
720         return ECORE_CALLBACK_CANCEL;
721 }
722
723 Evas_Object *Most_Visited_Sites::__gengrid_icon_get_cb(void *data, Evas_Object *obj, const char *part)
724 {
725         if (!data)
726                 return NULL;
727
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);
732                 if (!item->layout) {
733                         BROWSER_LOGE("elm_layout_add failed");
734                         return NULL;
735                 }
736                 ecore_idler_add(__gengrid_icon_get_idler_cb, item);
737                 return item->layout;
738         }
739         return NULL;
740 }
741
742 Eina_Bool Most_Visited_Sites::_reload_items(void)
743 {
744         BROWSER_LOGD("[%s]", __func__);
745         elm_gengrid_clear(m_gengrid);
746         m_entry_list.clear();
747         m_most_visited_list.clear();
748
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];
762                 }
763         }
764         m_item_list.clear();
765
766         if (!m_most_visited_sites_db->get_most_visited_sites_list(m_entry_list)) {
767                 BROWSER_LOGE("get_most_visited_sites_list failed");
768                 return EINA_FALSE;
769         }
770
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");
775                 return EINA_FALSE;
776         }
777
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;
780
781         most_visited_sites_iterator = m_entry_list.begin();
782         most_visited_iterator = m_most_visited_list.begin();
783
784         int entry_index = 0;
785         int most_visited_index = 0;
786
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;
789                 if (!item) {
790                         BROWSER_LOGE("new most_visited_sites_item failed");
791                         return EINA_FALSE;
792                 }
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;
798                         entry_index++;
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++;
805                 } else {
806                         item->history_id = NULL;
807                         item->url = NULL;
808                         item->title = NULL;
809                         item->tack = EINA_FALSE;
810                 }
811                 item->layout = NULL;
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);
816         }
817
818         return EINA_TRUE;
819 }
820
821 Eina_Bool Most_Visited_Sites::_item_moved(void)
822 {
823         BROWSER_LOGD("[%s]", __func__);
824
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),
829                                                                         "tack_icon", "");
830                 }
831         }
832
833         int index = 0;
834         Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
835         do {
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);
838
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");
844                         }
845                 }
846                 index++;
847         } while (it = elm_gengrid_item_next_get(it));
848
849         m_is_drag = EINA_FALSE;
850
851         return EINA_TRUE;
852 }
853
854 void Most_Visited_Sites::__item_moved_cb(void *data, Evas_Object *obj, void *event_info)
855 {
856         BROWSER_LOGD("[%s]", __func__);
857         if (!data)
858                 return;
859
860         Most_Visited_Sites *most_visited_sites = (Most_Visited_Sites *)data;
861         if (!most_visited_sites->_item_moved())
862                 BROWSER_LOGE("_item_moved failed");
863 }
864
865 Eina_Bool Most_Visited_Sites::is_guide_text_running(void)
866 {
867         if (m_guide_text_main_layout)
868                 return EINA_TRUE;
869         else
870                 return EINA_FALSE;
871 }
872
873 void Most_Visited_Sites::destroy_guide_text_main_layout(void)
874 {
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;
879         }
880         if (m_never_show_check_box) {
881                 evas_object_del(m_never_show_check_box);
882                 m_never_show_check_box = NULL;
883         }
884         if (m_ok_button) {
885                 evas_object_del(m_ok_button);
886                 m_ok_button = NULL;
887         }
888         if (m_never_show_text_label) {
889                 evas_object_del(m_never_show_text_label);
890                 m_never_show_text_label = NULL;
891         }
892         if (m_guide_text_main_layout) {
893                 evas_object_del(m_guide_text_main_layout);
894                 m_guide_text_main_layout = NULL;
895         }
896 }
897
898 void Most_Visited_Sites::__guide_text_ok_button_clicked_cb(void *data, Evas_Object *obj,
899                                                                                 void *event_info)
900 {
901         BROWSER_LOGD("[%s]", __func__);
902         if (!data)
903                 return;
904
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);
907         if (never_show) {
908                 br_preference_set_bool(SHOW_MY_SITES_GUIDE, false);
909         }
910
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();
915 }
916
917 Evas_Object *Most_Visited_Sites::create_guide_text_main_layout(void)
918 {
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");
923                 return NULL;
924         }
925         if (!elm_layout_file_set(m_guide_text_main_layout, BROWSER_EDJE_DIR"/most-visited-sites.edj",
926                                                                 "guide_text")) {
927                 BROWSER_LOGE("elm_layout_file_set failed");
928                 return NULL;
929         }
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);
933
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");
937                 return NULL;
938         }
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);
947
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");
951                 return NULL;
952         }
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);
955
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");
959                 return NULL;
960         }
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);
964
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>");
967
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);
970
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);
974
975         evas_object_show(m_never_show_text_label);
976
977         m_ok_button = elm_button_add(m_guide_text_main_layout);
978         if (!m_ok_button) {
979                 BROWSER_LOGE("elm_button_add failed");
980                 return NULL;
981         }
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);
987
988         return m_guide_text_main_layout;
989 }
990
991 void Most_Visited_Sites::__never_show_text_clicked_cb(void *data, Evas_Object *obj,
992                                                         const char *emission, const char *source)
993 {
994         BROWSER_LOGD("[%s]", __func__);
995         if (!data)
996                 return;
997
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);
1001 }
1002
1003 #if defined(HORIZONTAL_UI)
1004 void Most_Visited_Sites::rotate(void)
1005 {
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", "");
1010         } else {
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", "");
1013         }
1014 }
1015 #endif
1016
1017 void Most_Visited_Sites::_set_edit_mode(Eina_Bool edit_mode)
1018 {
1019         BROWSER_LOGD("[%s]", __func__);
1020         m_edit_mode = edit_mode;
1021
1022         Elm_Object_Item *it = elm_gengrid_first_item_get(m_gengrid);
1023         while (it) {
1024                 most_visited_sites_item *item_data = (most_visited_sites_item *)elm_object_item_data_get(it);
1025
1026                 if (edit_mode)
1027                         edje_object_signal_emit(elm_layout_edje_get(item_data->layout), "show,delete_button,signal", "");
1028                 else
1029                         edje_object_signal_emit(elm_layout_edje_get(item_data->layout), "hide,delete_button,signal", "");
1030
1031                 it = elm_gengrid_item_next_get(it);
1032         }
1033
1034         if (!edit_mode)
1035                 elm_genlist_realized_items_update(m_gengrid);
1036 }
1037
1038 void Most_Visited_Sites::__setting_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1039 {
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);
1044
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);
1047
1048         most_visited_sites->_set_edit_mode(EINA_TRUE);
1049 }
1050
1051 void Most_Visited_Sites::__done_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1052 {
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);
1057
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);
1060
1061         most_visited_sites->_set_edit_mode(EINA_FALSE);
1062 }
1063
1064 Evas_Object *Most_Visited_Sites::create_most_visited_sites_main_layout(void)
1065 {
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");
1070                 return NULL;
1071         }
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");
1075                 return NULL;
1076         }
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);
1080
1081         m_gengrid = elm_gengrid_add(m_main_layout);
1082         if (!m_gengrid) {
1083                 BROWSER_LOGE("elm_gengrid_add failed");
1084                 return NULL;
1085         }
1086
1087         elm_object_part_content_set(m_main_layout, "elm.swallow.gengrid", m_gengrid);
1088
1089         int window_w = 0;
1090         evas_object_geometry_get(m_browser_view->m_win, NULL, NULL, &window_w, NULL);
1091
1092         elm_gengrid_item_size_set(m_gengrid, MOST_VISITED_SITES_ITEM_WIDTH, MOST_VISITED_SITES_ITEM_HEIGHT);
1093
1094 #if defined(HORIZONTAL_UI)
1095         if (m_browser_view->is_landscape())
1096                 elm_gengrid_align_set(m_gengrid, 0.5, 0.0);
1097         else
1098 #endif
1099                 elm_gengrid_align_set(m_gengrid, 0.5, 0.5);
1100
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);
1105
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);
1109
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;
1118
1119         if (!_reload_items()) {
1120                 BROWSER_LOGE("new _reload_items failed");
1121                 return NULL;
1122         }
1123
1124         evas_object_show(m_gengrid);
1125
1126         m_setting_button = elm_button_add(m_gengrid);
1127         if (!m_setting_button) {
1128                 BROWSER_LOGE("elm_button_add failed");
1129                 return NULL;
1130         }
1131         elm_object_style_set(m_setting_button, "browser/most_visited_sites_setting");
1132
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);
1136
1137         m_done_button = elm_button_add(m_gengrid);
1138         if (!m_done_button) {
1139                 BROWSER_LOGE("elm_button_add failed");
1140                 return NULL;
1141         }
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);
1146
1147         return m_main_layout;
1148 }
1149