bc9625bd5510ebf312c9c5c6d9e5c3e653648df5
[profile/ivi/org.tizen.browser.git] / src / browser-bookmark / browser-bookmark-view.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 "browser-bookmark-db.h"
20 #include "browser-bookmark-view.h"
21 #include "browser-history-layout.h"
22 #include "browser-new-folder-view.h"
23 #include "browser-string.h"
24 #include "browser-view.h"
25
26 #define UPPER_FOLDER_ICON_SIZE  (64 * elm_scale_get())
27
28 Browser_Bookmark_View::Browser_Bookmark_View(void)
29 :       m_back_button(NULL)
30         ,m_top_control_bar(NULL)
31         ,m_conformant(NULL)
32         ,m_content_layout(NULL)
33         ,m_sub_main_layout(NULL)
34         ,m_genlist_content_layout(NULL)
35         ,m_genlist_content_box(NULL)
36         ,m_main_folder_genlist(NULL)
37         ,m_sub_folder_genlist(NULL)
38         ,m_main_layout(NULL)
39         ,m_upper_folder_list(NULL)
40         ,m_upper_folder_icon(NULL)
41         ,m_view_mode(BOOKMARK_VIEW)
42         ,m_edit_mode_select_all_layout(NULL)
43         ,m_edit_mode_select_all_check_button(NULL)
44         ,m_current_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID)
45         ,m_no_contents(NULL)
46         ,m_current_genlist_item_to_edit(NULL)
47         ,m_sub_folder_conformant(NULL)
48         ,m_processing_popup_timer(NULL)
49         ,m_processing_progress_bar(NULL)
50         ,m_processed_it(NULL)
51         ,m_processed_count(0)
52         ,m_total_item_count(0)
53         ,m_processing_popup(NULL)
54         ,m_processing_popup_layout(NULL)
55         ,m_select_all_check_value(EINA_FALSE)
56         ,m_bottom_control_bar(NULL)
57         ,m_bookmark_delete_controlbar_item(NULL)
58         ,m_bookmark_edit_controlbar_item(NULL)
59         ,m_create_folder_controlbar_item(NULL)
60         ,m_current_sweep_item(NULL)
61         ,m_navi_it(NULL)
62         ,m_delete_confirm_popup(NULL)
63         ,m_rename_edit_field(NULL)
64 {
65         BROWSER_LOGD("[%s]", __func__);
66         m_current_bookmark_navigationbar_title = "";
67 }
68
69 Browser_Bookmark_View::~Browser_Bookmark_View(void)
70 {
71         BROWSER_LOGD("[%s]", __func__);
72         hide_notify_popup_layout(m_sub_main_layout);
73
74         for(int i = 0 ; i < m_sub_folder_list.size() ; i++ ) {
75                 if (m_sub_folder_list[i]) {
76                         delete m_sub_folder_list[i];
77                         m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
78                 }
79         }
80         m_sub_folder_list.clear();
81
82         for(int i = 0 ; i < m_main_folder_list.size() ; i++ ) {
83                 if (m_main_folder_list[i]) {
84                         delete m_main_folder_list[i];
85                         m_main_folder_list.erase(m_main_folder_list.begin() + i);
86                 }
87         }
88         m_main_folder_list.clear();
89
90         m_data_manager->destroy_bookmark_db();
91
92         evas_object_smart_callback_del(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb);
93
94         if (m_delete_confirm_popup)
95                 evas_object_del(m_delete_confirm_popup);
96
97 }
98
99 Eina_Bool Browser_Bookmark_View::init(void)
100 {
101         BROWSER_LOGD("[%s]", __func__);
102         if (!m_data_manager->create_bookmark_db()) {
103                 BROWSER_LOGE("m_data_manager->create_bookmark_db failed");
104                 return EINA_FALSE;
105         }
106
107         return _create_main_layout();
108 }
109
110 Eina_Bool Browser_Bookmark_View::append_bookmark_item(const char *title, const char *url)
111 {
112         if (!url || !title) {
113                 BROWSER_LOGE("url or title is null");
114                 return EINA_FALSE;
115         }
116
117         if (!m_data_manager->get_bookmark_db()->save_bookmark(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title, url)) {
118                 BROWSER_LOGE("save_bookmark failed");
119                 return EINA_FALSE;
120         }
121
122         Browser_Bookmark_DB::bookmark_item *item = new(nothrow) Browser_Bookmark_DB::bookmark_item;
123         if (!item) {
124                 BROWSER_LOGE("new(nothrow) Browser_Bookmark_DB::bookmark_item failed");
125                 return EINA_FALSE;
126         }
127
128         int bookmark_id = -1;
129         m_data_manager->get_bookmark_db()->get_bookmark_id_by_title_url(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title,
130                                 url, &bookmark_id);
131
132         item->parent = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
133         item->user_data_1 = (void *)this;
134         item->url = std::string(url);
135         item->title = std::string(title);
136         item->is_folder = EINA_FALSE;
137         item->id = bookmark_id;
138         item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
139                                                         item, NULL, ELM_GENLIST_ITEM_NONE,
140                                                         __bookmark_item_clicked_cb, this);
141
142         m_main_folder_list.push_back(item);
143
144         _show_empty_content_layout(EINA_FALSE);
145
146         return EINA_TRUE;
147 }
148
149 void Browser_Bookmark_View::delete_bookmark_item(int bookmark_id)
150 {
151         BROWSER_LOGD("[%s]", __func__);
152         int ret = EINA_TRUE;
153
154         ret = m_data_manager->get_bookmark_db()->delete_bookmark(bookmark_id);
155         if (!ret) {
156                 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
157                 return;
158         }
159
160         Elm_Object_Item *it = elm_genlist_first_item_get(m_main_folder_genlist);
161         while (it) {
162                 Browser_Bookmark_DB::bookmark_item *item = NULL;
163                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
164                 if (item->id == bookmark_id) {
165                         elm_object_item_del(it);
166                         break;
167                 }
168
169                 it = elm_genlist_item_next_get(it);
170         }
171
172         for(int index = 0 ; index <  m_main_folder_list.size() ; index++) {
173                 if (m_main_folder_list[index]->id == bookmark_id) {
174                         delete m_main_folder_list[index];
175                         m_main_folder_list.erase(m_main_folder_list.begin() + index);
176                         break;
177                 }
178         }
179
180         if (m_main_folder_list.size() == 0) {
181                 _show_empty_content_layout(EINA_TRUE);
182         }
183 }
184
185 void Browser_Bookmark_View::return_to_bookmark_view(int added_bookmark_id)
186 {
187         BROWSER_LOGD("added_bookmark_id = %d", added_bookmark_id);
188         if (m_view_mode == BOOKMARK_VIEW) {
189                 /* In case that bookmark view -> Edit bookmark item, then return to bookmark view. */
190                 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
191                         int delete_item_count = 0;
192                         int editable_item_count = 0;
193                         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
194                         while(it) {
195                                 Browser_Bookmark_DB::bookmark_item *item = NULL;
196                                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
197                                 if (item->is_editable)
198                                         editable_item_count++;
199                                 if (item->is_delete)
200                                         delete_item_count++;
201                                 it = elm_genlist_item_next_get(it);
202                         }
203
204                         if (editable_item_count == delete_item_count)
205                                 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_TRUE);
206                         else
207                                 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
208
209                         if (delete_item_count == 0)
210                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
211                 }
212
213                 int size = _get_current_folder_item_list().size();
214                 if (size == 0)
215                         _show_empty_content_layout(EINA_TRUE);
216                 else
217                         _show_empty_content_layout(EINA_FALSE);
218         } else {
219                 if (!m_data_manager->get_history_layout())
220                         return;
221
222                 /* In case that history view -> add to bookmark by slide-right, then return to history view. */
223                 if (m_data_manager->get_history_layout()->m_current_sweep_item) {
224                         elm_genlist_item_decorate_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, "slide", EINA_FALSE);
225                         elm_genlist_item_select_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
226                         m_data_manager->get_history_layout()->m_current_sweep_item = NULL;
227                 }
228         }
229
230         /* boomark view -> history -> add to bookmark by slide button, then done. */
231         if (added_bookmark_id != -1) {
232                 Browser_Bookmark_DB::bookmark_item *item = m_data_manager->get_bookmark_db()->get_bookmark_item_by_id(added_bookmark_id);
233                 if (!item) {
234                         BROWSER_LOGE("get_bookmark_item_by_id failed");
235                         return;
236                 }
237
238                 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
239                 while (it) {
240                         Browser_Bookmark_DB::bookmark_item *exist_item = NULL;
241                         exist_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
242                         if (exist_item->id == added_bookmark_id) {
243                                 exist_item->url = item->url;
244                                 exist_item->title = item->title;
245                                 exist_item->parent = item->parent;
246                                 elm_genlist_item_update(it);
247                                 return;
248                         }
249                         it = elm_genlist_item_next_get(it);
250                 }
251
252                 if (m_current_folder_id == item->parent) {
253                         /* If the saved bookmark item is in the current folder, just add it to current folder. */
254                         Evas_Object *genlist = NULL;
255                         if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
256                                 genlist = m_main_folder_genlist;
257                         else
258                                 genlist = m_sub_folder_genlist;
259
260                         item->user_data_1 = (void *)this;
261                         if (item->is_folder) {
262                                 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_folder_genlist_item_class,
263                                                                         item, NULL, ELM_GENLIST_ITEM_NONE,
264                                                                         __bookmark_item_clicked_cb, this);
265
266                         } else {
267                                 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_bookmark_genlist_item_class,
268                                                                         item, NULL, ELM_GENLIST_ITEM_NONE,
269                                                                         __bookmark_item_clicked_cb, this);
270                         }
271
272                         if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
273                                 m_main_folder_list.push_back(item);
274                         else
275                                 m_sub_folder_list.push_back(item);
276                 } else if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID
277                            && item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID){
278                         /* If the current folder is sub folder but the saved folder is main folder,
279                           * add the saved bookmark item to main folder. */
280                         item->user_data_1 = (void *)this;
281                         if (item->is_folder) {
282                         item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_folder_genlist_item_class,
283                                                                         item, NULL, ELM_GENLIST_ITEM_NONE,
284                                                                         __bookmark_item_clicked_cb, this);
285                         } else {
286                         item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
287                                                                         item, NULL, ELM_GENLIST_ITEM_NONE,
288                                                                         __bookmark_item_clicked_cb, this);
289                         }
290                         m_main_folder_list.push_back(item);
291                 }
292
293                 /* If the bookmark is empty page, destroy the empty layout to show the bookmark list. */
294                 if (_get_current_folder_item_list().size() == 0)
295                         _show_empty_content_layout(EINA_TRUE);
296                 else
297                         _show_empty_content_layout(EINA_FALSE);
298         }
299 }
300
301 void Browser_Bookmark_View::__back_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
302 {
303         BROWSER_LOGD("[%s]", __func__);
304         if (!data)
305                 return;
306
307         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
308         Evas_Object *navi_bar = bookmark_view->m_navi_bar;
309
310         if (elm_naviframe_bottom_item_get(navi_bar) != elm_naviframe_top_item_get(navi_bar))
311                 elm_naviframe_item_pop(navi_bar);
312
313         /* Set the title if enter the add to bookmark while loading. */
314         m_data_manager->get_browser_view()->return_to_browser_view();
315 }
316
317 void Browser_Bookmark_View::__edit_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
318 {
319         BROWSER_LOGD("[%s]", __func__);
320         if (!data)
321                 return;
322
323         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
324         Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
325
326         if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
327                 if (!elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
328                         /* Edit bookmark */
329                         bookmark_view->_set_edit_mode(EINA_TRUE);
330                 else {
331                         if (bookmark_view->m_rename_edit_field) {
332                                 Browser_Bookmark_DB::bookmark_item *item = NULL;
333                                 item = (Browser_Bookmark_DB::bookmark_item *)evas_object_data_get(bookmark_view->m_rename_edit_field, "item");
334                                 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(bookmark_view->m_rename_edit_field);
335                                 elm_entry_entry_set(edit_field_entry, item->title.c_str());
336                         }
337
338                         /* Cancel Edit bookmark */
339                         bookmark_view->_set_edit_mode(EINA_FALSE);
340                 }
341         } else if (history_layout) {
342                 if (!elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
343                         /* Delete history */
344                         history_layout->_set_edit_mode(EINA_TRUE);
345                 } else {
346                         /* Cancel Delete bookmark */
347                         history_layout->_set_edit_mode(EINA_FALSE);
348                 }
349         }
350
351         if (bookmark_view->m_rename_edit_field)
352                 elm_object_focus_set(bookmark_view->m_rename_edit_field, EINA_FALSE);
353 }
354
355 void Browser_Bookmark_View::__delete_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
356 {
357         if (!data)
358                 return;
359
360         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
361         Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
362
363         if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
364                 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist())) {
365                         /* Delete bookmark */
366                         Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
367                         if (ok_button)
368                                 evas_object_smart_callback_add(ok_button, "clicked",
369                                                 __delete_confirm_response_by_edit_mode_cb, bookmark_view);
370
371                 }
372         } else {
373                 if (history_layout && elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
374                         /* Delete bookmark */
375                         Evas_Object *ok_button = history_layout->_show_delete_confirm_popup();
376                         if (ok_button)
377                                 evas_object_smart_callback_add(ok_button, "clicked",
378                                                 Browser_History_Layout::__delete_confirm_response_by_edit_mode_cb,
379                                                 history_layout);
380                 }
381         }
382 }
383
384 void Browser_Bookmark_View::_delete_bookmark_item_from_folder_list(Browser_Bookmark_DB::bookmark_item *item)
385 {
386         if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
387                 for(int index = 0 ; index <  m_main_folder_list.size() ; index++) {
388                         if (m_main_folder_list[index] == item) {
389                                 delete m_main_folder_list[index];
390                                 m_main_folder_list.erase(m_main_folder_list.begin() + index);
391                         }
392                 }
393         } else {
394                 for(int index = 0 ; index <  m_sub_folder_list.size() ; index++) {
395                         if (m_sub_folder_list[index] == item) {
396                                 delete m_sub_folder_list[index];
397                                 m_sub_folder_list.erase(m_sub_folder_list.begin() + index);
398                         }
399                 }
400         }
401 }
402
403 void Browser_Bookmark_View::_delete_selected_bookmark(void)
404 {
405         BROWSER_LOGD("[%s]", __func__);
406         Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
407         Eina_List *delete_item_list = NULL;
408         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
409         int remain_count = 0;
410         while(it) {
411                 Browser_Bookmark_DB::bookmark_item *item = NULL;
412                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
413                 if (item->is_delete)
414                         delete_item_list = eina_list_append(delete_item_list, it);
415                 else
416                         remain_count++;
417                 it = elm_genlist_item_next_get(it);
418         }
419
420         int count = eina_list_count(delete_item_list);
421
422         if (count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
423                 /* If delete more than 100 items, show the processing popup. */
424                 _show_delete_processing_popup();
425         } else {
426                 for (int i = 0; i < count; i++) {
427                         it = (Elm_Object_Item *)eina_list_data_get(delete_item_list);
428                         Browser_Bookmark_DB::bookmark_item *item = NULL;
429                         Eina_Bool ret = EINA_TRUE;
430                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
431                         if (item->is_folder) {
432                                 int folder_id = 0;
433                                 ret = bookmark_db->get_folder_id(m_current_folder_id, item->title.c_str(), &folder_id);
434                                 if (!ret) {
435                                         BROWSER_LOGE("bookmark_db->get_folder_id failed");
436                                         return;
437                                 }
438                                 ret = bookmark_db->delete_folder(folder_id);
439                                 if (!ret) {
440                                         BROWSER_LOGE("bookmark_db->delete_folder failed");
441                                         return;
442                                 }
443                         } else {
444                                 ret = bookmark_db->delete_bookmark(item->id);
445                                 if (!ret) {
446                                         BROWSER_LOGE("bookmark_db->delete_bookmark failed");
447                                         return;
448                                 }
449                         }
450                         delete_item_list = eina_list_next(delete_item_list);
451
452                         _delete_bookmark_item_from_folder_list(item);
453
454                         elm_object_item_del(it);
455                 }
456                 eina_list_free(delete_item_list);
457
458                 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
459
460                 if (remain_count == 0)
461                         _show_empty_content_layout(EINA_TRUE);
462
463                 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
464         }
465 }
466
467 void Browser_Bookmark_View::__edit_mode_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
468 {
469         BROWSER_LOGD("[%s]", __func__);
470         if (!data)
471                 return;
472         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
473         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
474         int delete_item_count = 0;
475         int editable_item_count = 0;
476
477         Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
478         while(it) {
479                 Browser_Bookmark_DB::bookmark_item *item = NULL;
480                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
481                 if (item->is_editable)
482                         editable_item_count++;
483                 if (item->is_delete)
484                         delete_item_count++;
485                 it = elm_genlist_item_next_get(it);
486         }
487
488         if (editable_item_count == delete_item_count)
489                 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
490         else
491                 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
492
493         bookmark_view->_show_selection_info();
494 }
495
496 void Browser_Bookmark_View::_show_delete_processing_popup(void)
497 {
498         BROWSER_LOGD("[%s]", __func__);
499         if (m_processing_popup)
500                 evas_object_del(m_processing_popup);
501
502         m_processing_popup = elm_popup_add(m_main_layout);
503         if (!m_processing_popup) {
504                 BROWSER_LOGE("elm_popup_add failed");
505                 return;
506         }
507
508         if (m_processing_popup_layout)
509                 evas_object_del(m_processing_popup_layout);
510         m_processing_popup_layout = elm_layout_add(m_processing_popup);
511         if (!m_processing_popup_layout) {
512                 BROWSER_LOGE("elm_layout_add failed");
513                 return;
514         }
515         if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
516                                                         "browser/popup_center_progressview")) {
517                 BROWSER_LOGE("elm_layout_file_set failed");
518                 return;
519         }
520         evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
521
522         m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
523         elm_object_style_set(m_processing_progress_bar, "list_progress");
524         elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
525         evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
526         evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
527         elm_progressbar_value_set(m_processing_progress_bar, 0.0);
528
529         if (m_processing_popup_timer)
530                 ecore_timer_del(m_processing_popup_timer);
531
532         m_processed_count = 0;
533         m_processed_it = elm_genlist_last_item_get(_get_current_folder_genlist());
534
535         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
536         m_total_item_count = 0;
537         while(it) {
538                 Browser_Bookmark_DB::bookmark_item *item = NULL;
539                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
540                 if (item) {
541                         if(item->is_editable && item->is_delete)
542                                 m_total_item_count++;
543                 }
544                 it = elm_genlist_item_next_get(it);
545         }
546
547         m_processing_popup_timer = ecore_timer_add(0.1, __delete_processing_popup_timer_cb, this);
548         evas_object_show(m_processing_progress_bar);
549
550         elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
551         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
552         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
553         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
554
555         elm_object_content_set(m_processing_popup, m_processing_popup_layout);
556
557         Evas_Object *cancel_button = elm_button_add(m_processing_popup);
558         elm_object_text_set(cancel_button, BR_STRING_CANCEL);
559         elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
560         evas_object_smart_callback_add(cancel_button, "clicked", __delete_processing_popup_response_cb, this);
561
562         evas_object_show(m_processing_popup);
563 }
564
565 Eina_Bool Browser_Bookmark_View::__delete_processing_popup_timer_cb(void *data)
566 {
567         if (!data)
568                 return ECORE_CALLBACK_CANCEL;
569
570         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
571         Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
572
573         Eina_Bool check_value = bookmark_view->m_select_all_check_value;
574
575         double value = elm_progressbar_value_get(progress_bar);
576         if (value >= 1.0) {
577                 __delete_processing_popup_response_cb(bookmark_view, NULL, NULL);
578
579                 bookmark_view->m_processing_popup_timer = NULL;
580                 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
581
582                 return ECORE_CALLBACK_CANCEL;
583         }
584
585         while(bookmark_view->m_processed_it) {
586                 Browser_Bookmark_DB::bookmark_item *item = NULL;
587                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
588                 if (item) {
589                         if(item->is_editable && item->is_delete) {
590                                 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
591                                 int ret = EINA_TRUE;
592                                 if (item->is_folder) {
593                                         int folder_id = 0;
594                                         ret = bookmark_db->get_folder_id(bookmark_view->m_current_folder_id,
595                                                                                 item->title.c_str(), &folder_id);
596                                         if (!ret) {
597                                                 BROWSER_LOGE("bookmark_db->get_folder_id failed");
598                                                 return ECORE_CALLBACK_CANCEL;
599                                         }
600                                         ret = bookmark_db->delete_folder(folder_id);
601                                         if (!ret) {
602                                                 BROWSER_LOGE("bookmark_db->delete_folder failed");
603                                                 return ECORE_CALLBACK_CANCEL;
604                                         }
605                                 } else {
606                                         ret = bookmark_db->delete_bookmark(item->id);
607                                         if (!ret) {
608                                                 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
609                                                 return ECORE_CALLBACK_CANCEL;
610                                         }
611                                 }
612                                 bookmark_view->_delete_bookmark_item_from_folder_list(item);
613                                 bookmark_view->m_processed_count++;
614                                 Elm_Object_Item *it = bookmark_view->m_processed_it;
615                                 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
616                                 elm_object_item_del(it);
617                         } else
618                                 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
619                 } else
620                         bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
621
622                 if (bookmark_view->m_processed_count % 5 == 0)
623                         break;
624         }
625
626         elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
627                                 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
628
629         char progress_text[20] = {0, };
630         snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
631                         bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
632
633         edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
634                                 "elm.text.right", progress_text);
635
636         return ECORE_CALLBACK_RENEW;
637 }
638
639 void Browser_Bookmark_View::_show_select_processing_popup(void)
640 {
641         BROWSER_LOGD("[%s]", __func__);
642         if (m_processing_popup)
643                 evas_object_del(m_processing_popup);
644
645         m_processing_popup = elm_popup_add(m_main_layout);
646         if (!m_processing_popup) {
647                 BROWSER_LOGE("elm_popup_add failed");
648                 return;
649         }
650
651         if (m_processing_popup_layout)
652                 evas_object_del(m_processing_popup_layout);
653         m_processing_popup_layout = elm_layout_add(m_processing_popup);
654         if (!m_processing_popup_layout) {
655                 BROWSER_LOGE("elm_layout_add failed");
656                 return;
657         }
658         if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
659                                                         "browser/popup_center_progressview")) {
660                 BROWSER_LOGE("elm_layout_file_set failed");
661                 return;
662         }
663         evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
664
665         m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
666         elm_object_style_set(m_processing_progress_bar, "list_progress");
667         elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
668         evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
669         evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
670         elm_progressbar_value_set(m_processing_progress_bar, 0.0);
671
672         if (m_processing_popup_timer)
673                 ecore_timer_del(m_processing_popup_timer);
674
675         m_processed_count = 0;
676         m_processed_it = elm_genlist_first_item_get(_get_current_folder_genlist());
677
678         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
679         m_total_item_count = 0;
680         while(it) {
681                 Browser_Bookmark_DB::bookmark_item *item = NULL;
682                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
683                 if (item) {
684                         if(item->is_editable)
685                                 m_total_item_count++;
686                 }
687                 it = elm_genlist_item_next_get(it);
688         }
689
690         m_processing_popup_timer = ecore_timer_add(0.1, __select_processing_popup_timer_cb, this);
691         evas_object_show(m_processing_progress_bar);
692
693         elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
694         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
695         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
696         edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
697
698         elm_object_content_set(m_processing_popup, m_processing_popup_layout);
699
700         Evas_Object *cancel_button = elm_button_add(m_processing_popup);
701         elm_object_text_set(cancel_button, BR_STRING_CANCEL);
702         elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
703         evas_object_smart_callback_add(cancel_button, "clicked", __select_processing_popup_response_cb, this);
704
705         evas_object_show(m_processing_popup);
706
707         Eina_Bool check_value = elm_check_state_get(m_edit_mode_select_all_check_button);
708         m_select_all_check_value = check_value;
709
710         if (check_value)
711                 elm_check_state_set(m_edit_mode_select_all_check_button, !check_value);
712 }
713
714 Eina_Bool Browser_Bookmark_View::__select_processing_popup_timer_cb(void *data)
715 {
716         if (!data)
717                 return ECORE_CALLBACK_CANCEL;
718
719         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
720         Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
721
722         Eina_Bool check_value = bookmark_view->m_select_all_check_value;
723
724         double value = elm_progressbar_value_get(progress_bar);
725         if (value >= 1.0) {
726                 __select_processing_popup_response_cb(bookmark_view, NULL, NULL);
727
728                 bookmark_view->m_processing_popup_timer = NULL;
729                 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !check_value);
730                 bookmark_view->_show_selection_info();
731
732                 return ECORE_CALLBACK_CANCEL;
733         }
734
735         while(bookmark_view->m_processed_it) {
736                 Browser_Bookmark_DB::bookmark_item *item = NULL;
737                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
738                 if (item) {
739                         if(item->is_editable) {
740                                 item->is_delete = !check_value;
741                                 elm_genlist_item_update(bookmark_view->m_processed_it);
742                                 bookmark_view->m_processed_count++;
743                         }
744                 }
745                 bookmark_view->m_processed_it = elm_genlist_item_next_get(bookmark_view->m_processed_it);
746
747                 if (bookmark_view->m_processed_count % 30 == 0)
748                         break;
749         }
750
751         elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
752                                 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
753
754         char progress_text[20] = {0, };
755         snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
756                         bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
757
758         edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
759                                 "elm.text.right", progress_text);
760
761         return ECORE_CALLBACK_RENEW;
762 }
763
764 void Browser_Bookmark_View::__delete_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
765 {
766         BROWSER_LOGD("[%s]", __func__);
767         if (!data)
768                 return;
769
770         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
771
772         bookmark_view->m_processing_progress_bar = NULL;
773         bookmark_view->m_processed_it = NULL;
774
775         evas_object_del(bookmark_view->m_processing_popup);
776
777         if (bookmark_view->m_processing_popup_timer) {
778                 ecore_timer_del(bookmark_view->m_processing_popup_timer);
779                 bookmark_view->m_processing_popup_timer = NULL;
780         }
781
782         bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
783
784         vector<Browser_Bookmark_DB::bookmark_item *> item_list = bookmark_view->_get_current_folder_item_list();
785         if (item_list.size() == 0)
786                 bookmark_view->_show_empty_content_layout(EINA_TRUE);
787 }
788
789 void Browser_Bookmark_View::__select_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
790 {
791         BROWSER_LOGD("[%s]", __func__);
792         if (!data)
793                 return;
794
795         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
796
797         evas_object_del(bookmark_view->m_processing_popup);
798         bookmark_view->m_processing_progress_bar = NULL;
799         bookmark_view->m_processed_it = NULL;
800
801         if (bookmark_view->m_processing_popup_timer) {
802                 ecore_timer_del(bookmark_view->m_processing_popup_timer);
803                 bookmark_view->m_processing_popup_timer = NULL;
804         }
805
806         Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
807         int check_count = 0;
808         while(it) {
809                 Browser_Bookmark_DB::bookmark_item *item = NULL;
810                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
811                 if (item) {
812                         if(item->is_editable && item->is_delete)
813                                 check_count++;
814                 }
815                 it = elm_genlist_item_next_get(it);
816         }
817
818         if (check_count)
819                 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_FALSE);
820         else
821                 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_TRUE);
822 }
823
824 void Browser_Bookmark_View::__edit_mode_select_all_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
825 {
826         if (!data)
827                 return;
828
829         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
830         int item_count = bookmark_view->_get_current_folder_item_list().size();
831         BROWSER_LOGD("item_count=%d", item_count);
832
833         if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT)
834                 bookmark_view->_show_select_processing_popup();
835         else {
836                 Eina_Bool value = elm_check_state_get(bookmark_view->m_edit_mode_select_all_check_button);
837                 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !value);
838
839                 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
840                 while(it) {
841                         Browser_Bookmark_DB::bookmark_item *item = NULL;
842                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
843                         if (item) {
844                                 if(item->is_editable) {
845                                         item->is_delete = !value;
846                                         elm_genlist_item_update(it);
847                                 }
848                         }
849                         it = elm_genlist_item_next_get(it);
850                 }
851
852                 bookmark_view->_show_selection_info();
853         }
854 }
855
856 void Browser_Bookmark_View::__edit_mode_select_all_check_changed_cb(void *data,
857                                                         Evas_Object *obj, void *event_info)
858 {
859         BROWSER_LOGD("[%s]", __func__);
860         if (!data)
861                 return;
862
863         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
864         int item_count = bookmark_view->_get_current_folder_item_list().size();
865         BROWSER_LOGD("item_count=%d", item_count);
866         Eina_Bool value = elm_check_state_get(obj);
867
868         if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
869                 /* Workaround to share the same code with __edit_mode_select_all_clicked_cb */
870                 elm_check_state_set(obj, !value);
871                 bookmark_view->_show_select_processing_popup();
872         } else {
873                 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
874                 while(it) {
875                         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
876                         if (item) {
877                                 if(item->is_editable) {
878                                         item->is_delete = value;
879                                         elm_genlist_item_update(it);
880                                 }
881                         }
882                         it = elm_genlist_item_next_get(it);
883                 }
884
885                 bookmark_view->_show_selection_info();
886         }
887 }
888
889 void Browser_Bookmark_View::_show_selection_info(void)
890 {
891         BROWSER_LOGD("[%s]", __func__);
892         int editable_item_count = 0;
893         int editable_folder_count = 0;
894
895         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
896         while(it) {
897                 Browser_Bookmark_DB::bookmark_item *item = NULL;
898                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
899                 if (item->is_delete) {
900                         if (item->is_folder)
901                                 editable_folder_count++;
902                         else
903                                 editable_item_count++;
904                 }
905                 it = elm_genlist_item_next_get(it);
906         }
907
908         if (editable_folder_count == 0 && editable_item_count == 0) {
909                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
910                 hide_notify_popup_layout(m_sub_main_layout);
911                 return;
912         } else
913                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
914
915         if (editable_folder_count + editable_item_count == 1) {
916                 show_notify_popup_layout(BR_STRING_ONE_ITEM_SELECTED, 0, m_sub_main_layout);
917         } else if (editable_folder_count + editable_item_count > 1) {
918                 char *small_popup_text = NULL;
919                 int string_len = strlen(BR_STRING_ITEMS_SELECTED) + 4; /* 4 : reserved for maximun count */
920
921                 small_popup_text = (char *)malloc(string_len * sizeof(char));
922                 memset(small_popup_text, 0x00, string_len);
923
924                 snprintf(small_popup_text, string_len, BR_STRING_ITEMS_SELECTED, editable_folder_count + editable_item_count);
925                 show_notify_popup_layout(small_popup_text, 0, m_sub_main_layout);
926
927                 if (small_popup_text)
928                         free(small_popup_text);
929                 small_popup_text = 0x00;
930         }
931 }
932
933 void Browser_Bookmark_View::_set_edit_mode(Eina_Bool edit_mode)
934 {
935         BROWSER_LOGD("[%s]", __func__);
936         hide_notify_popup_layout(m_sub_main_layout);
937
938         if (edit_mode) {
939 #if defined(GENLIST_SWEEP)
940                 if (m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID)
941                         br_elm_genlist_sweep_item_recover(m_main_folder_genlist);
942                 else
943                         br_elm_genlist_sweep_item_recover(m_sub_folder_genlist);
944 #endif
945                 elm_object_style_set(m_bg, "edit_mode");
946
947                 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
948                 if (!m_edit_mode_select_all_layout) {
949                         BROWSER_LOGE("elm_layout_add failed");
950                         return;
951                 }
952                 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
953                 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
954                 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
955                 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
956                                                 __edit_mode_select_all_clicked_cb, this);
957                 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
958                 if (!m_edit_mode_select_all_check_button) {
959                         BROWSER_LOGE("elm_layout_add failed");
960                         return;
961                 }
962                 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
963                                                 __edit_mode_select_all_check_changed_cb, this);
964                 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
965
966                 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
967                 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
968
969                 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
970                 evas_object_show(m_edit_mode_select_all_layout);
971
972                 Elm_Object_Item *it = NULL;
973                 Browser_Bookmark_DB::bookmark_item *item = NULL;
974                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
975                 while(it) {
976                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
977                         if (!item->is_editable)
978                                 elm_object_item_disabled_set(it, EINA_TRUE);
979
980                         it = elm_genlist_item_next_get(it);
981                 }
982                 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
983                 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
984                 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
985
986                 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
987
988                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
989                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
990                                                                 "hide,upper_folder,signal", "");
991                         evas_object_hide(m_upper_folder_list);
992                 }
993
994                 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
995                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
996         }else {
997                 elm_object_style_set(m_bg, "default");
998
999                 if (m_edit_mode_select_all_check_button) {
1000                         evas_object_del(m_edit_mode_select_all_check_button);
1001                         m_edit_mode_select_all_check_button = NULL;
1002                 }
1003                 if (m_edit_mode_select_all_layout) {
1004                         elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1005                         evas_object_del(m_edit_mode_select_all_layout);
1006                         m_edit_mode_select_all_layout = NULL;
1007                 }
1008
1009                 Elm_Object_Item *it = NULL;
1010                 Browser_Bookmark_DB::bookmark_item *item = NULL;
1011                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1012                 while(it) {
1013                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1014                         if (!item->is_editable)
1015                                 elm_object_item_disabled_set(it, EINA_FALSE);
1016                         item->is_delete = EINA_FALSE;
1017                         it = elm_genlist_item_next_get(it);
1018                 }
1019                 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1020                 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1021
1022                 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
1023
1024                 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1025
1026                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
1027                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1028                                                                 "show,upper_folder,signal", "");
1029                         evas_object_show(m_upper_folder_list);
1030                 }
1031
1032                 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1033                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1034         }
1035 }
1036
1037 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
1038 {
1039         BROWSER_LOGD("mode=%d", mode);
1040         Evas_Object *history_layout = NULL;
1041         if (m_data_manager->get_history_layout())
1042                 history_layout = m_data_manager->get_history_layout()->get_main_layout();
1043
1044         m_view_mode = mode;
1045         if (mode == HISTORY_VIEW) {
1046                 if (history_layout) {
1047                         elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
1048                         evas_object_show(history_layout);
1049                 }
1050
1051                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
1052
1053                 _set_navigationbar_title(BR_STRING_HISTORY);
1054
1055                 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist))      {
1056                         if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
1057                                 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
1058                 } else {
1059                         if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
1060                                 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
1061                 }
1062         } else if (mode == BOOKMARK_VIEW){
1063                 if (history_layout)
1064                         evas_object_hide(history_layout);
1065                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
1066
1067                 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1068                         _set_navigationbar_title(BR_STRING_BOOKMARKS);
1069                 else {
1070                         _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
1071                 }
1072
1073                 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
1074                         if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
1075                                 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
1076                 } else {
1077                         if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1078                                 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
1079                 }
1080         }
1081 }
1082
1083 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
1084 {
1085         if (!data)
1086                 return;
1087
1088         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1089         Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
1090         Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
1091         if (!selected_item) {
1092                 BROWSER_LOGD("no item selected");
1093                 return;
1094         }
1095
1096         if (selected_item == history_item) {
1097                 BROWSER_LOGD("tab history");
1098                 /* history selected */
1099                 if (!m_data_manager->get_history_layout()) {
1100                         if (!m_data_manager->create_history_layout()) {
1101                                 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
1102                                 return;
1103                         }
1104
1105                         if (!m_data_manager->get_history_layout()->init()) {
1106                                 BROWSER_LOGE("get_history_layout()->init() failed");
1107                                 return;
1108                         }
1109                 }
1110
1111                 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1112                 bookmark_view->_set_view_mode(HISTORY_VIEW);
1113
1114         } else {
1115                 BROWSER_LOGD("tab bookmark");
1116                 if (m_data_manager->get_history_layout()) {
1117                         m_data_manager->get_history_layout()->hide_notify_popup_layout(
1118                                 m_data_manager->get_history_layout()->m_sub_main_history_layout);
1119                         bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1120                 }
1121         }
1122 }
1123
1124 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1125 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1126 {
1127         BROWSER_LOGD("[%s]", __func__);
1128         if (!data)
1129                 return;
1130         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1131         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1132
1133         /* Pass the selected genlist item as parameter when bookmark -> Edit item
1134             because of increase performance. */
1135         bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1136
1137         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1138
1139         bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1140
1141         bookmark_view->_set_edit_mode(EINA_FALSE);
1142
1143         if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1144                                         bookmark_view->m_current_folder_id)) {
1145                 BROWSER_LOGE("create_edit_bookmark_view failed");
1146                 return;
1147         }
1148
1149         if (!m_data_manager->get_edit_bookmark_view()->init()) {
1150                 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1151                 m_data_manager->destroy_edit_bookmark_view();
1152                 return;
1153         }
1154 }
1155
1156 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1157 {
1158         BROWSER_LOGD("[%s]", __func__);
1159         if (!data)
1160                 return;
1161         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1162         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1163         Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1164         elm_genlist_item_flip_set(it, EINA_TRUE);
1165
1166         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1167
1168         evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1169 }
1170
1171 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1172                                                                                         void *event_info)
1173 {
1174         BROWSER_LOGD("[%s]", __func__);
1175         if (!data)
1176                 return;
1177
1178         Evas_Object *rename_edit_field = (Evas_Object *)data;
1179         elm_object_focus_set(rename_edit_field, EINA_FALSE);
1180 }
1181
1182 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1183 {
1184         BROWSER_LOGD("[%s]", __func__);
1185         if (!data)
1186                 return;
1187
1188         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1189         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1190
1191         Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1192
1193         Evas_Object *edit_field_entry = obj;
1194         char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1195         char *text = bookmark_view->_trim(markup_text);
1196         if (!text) {
1197                 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1198                 return;
1199         }
1200         Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1201
1202         Eina_Bool only_has_space = EINA_FALSE;
1203         int space_count = 0;
1204         if (text && strlen(text)) {
1205                 for (int i = 0 ; i < strlen(text) ; i++) {
1206                         if (text[i] == ' ')
1207                                 space_count++;
1208                 }
1209                 if (space_count == strlen(text))
1210                         only_has_space = EINA_TRUE;
1211         }
1212
1213         if (!text || strlen(text) == 0 || only_has_space) {
1214                 bookmark_view->show_msg_popup(BR_STRING_ENTER_FOLDER_NAME);
1215                 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1216         } else {
1217                 if (strcmp(text, item->title.c_str())) {
1218                         if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1219                                 item->title = text;
1220                                 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1221                         } else {
1222                                 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1223                                         bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1224
1225                                 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1226                                 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1227                         }
1228                 }
1229         }
1230         elm_genlist_item_flip_set(it, EINA_FALSE);
1231
1232         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1233
1234         bookmark_view->m_rename_edit_field = NULL;
1235
1236         free(markup_text);
1237 }
1238
1239 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1240 {
1241         BROWSER_LOGD("[%s]", __func__);
1242 }
1243
1244 #if defined(GENLIST_SWEEP)
1245 void Browser_Bookmark_View::__sweep_right_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1246 {
1247         BROWSER_LOGD("[%s]", __func__);
1248         if (!data)
1249                 return;
1250         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1251
1252         if (elm_genlist_decorate_mode_get(obj))
1253                 return;
1254         else {
1255                 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_TRUE);
1256                 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_NONE);
1257         }
1258
1259         if (bookmark_view->m_current_sweep_item
1260             && (Elm_Object_Item *)event_info != bookmark_view->m_current_sweep_item) {
1261                 elm_genlist_item_select_mode_set(bookmark_view->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1262                 bookmark_view->m_current_sweep_item = (Elm_Object_Item *)event_info;
1263         }
1264 }
1265
1266 void Browser_Bookmark_View::__sweep_cancel_genlist_cb(void *data,
1267                                                 Evas_Object *obj, void *event_info)
1268 {
1269         BROWSER_LOGD("[%s]", __func__);
1270
1271         if (!data)
1272                 return;
1273
1274         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1275         Elm_Object_Item *it = (Elm_Object_Item*)elm_genlist_decorated_item_get(obj);
1276         if (it) {
1277                 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1278                 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1279
1280                 if (it == bookmark_view->m_current_sweep_item)
1281                         bookmark_view->m_current_sweep_item = NULL;
1282         }
1283 }
1284
1285 void Browser_Bookmark_View::__sweep_left_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1286 {
1287         BROWSER_LOGD("[%s]", __func__);
1288         if (!data)
1289                 return;
1290         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1291
1292         if (elm_genlist_decorate_mode_get(obj))
1293                 return;
1294         else {
1295                 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_FALSE);
1296                 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
1297         }
1298
1299         bookmark_view->m_current_sweep_item = NULL;
1300 }
1301 #endif
1302
1303 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1304 {
1305         BROWSER_LOGD("part=%s", part);
1306         if (!data)
1307                 return NULL;
1308
1309         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1310
1311         const char *title = item->title.c_str();
1312         BROWSER_LOGD("title(%p)=%s", title, title);
1313         const char *url = item->url.c_str();
1314         BROWSER_LOGD("url(%p)=%s", url, url);
1315
1316         if (part && strlen(part) > 0) {
1317                 if (!strncmp(part,"elm.text", strlen("elm.text"))
1318                     || !strncmp(part, "elm.base.text", strlen("elm.base.text"))
1319                     || !strncmp(part, "elm.slide.text.1", strlen("elm.slide.text.1"))) {
1320                         if (title && strlen(title))
1321                                 return strdup(title);
1322                         else
1323                                 return NULL;
1324                 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1325                         if (url && strlen(url))
1326                                 return strdup(url);
1327                         else
1328                                 return NULL;
1329                 }
1330         }
1331
1332         return NULL;
1333 }
1334
1335 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1336 {
1337         BROWSER_LOGD("[%s]", __func__);
1338         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1339         if (!data)
1340                 return NULL;
1341
1342         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1343
1344         if (part && strlen(part) > 0) {
1345                 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1346                         if (item->is_folder) {
1347                                 Evas_Object *folder_icon = elm_icon_add(obj);
1348                                 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1349                                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
1350                                         return NULL;
1351                                 }
1352                                 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1353                                 return folder_icon;
1354                         } else {
1355                                 Evas_Object *favicon = NULL;
1356                                 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1357                                 if (favicon)
1358                                         return favicon;
1359                                 else {
1360                                         Evas_Object *default_icon = elm_icon_add(obj);
1361                                         if (!default_icon)
1362                                                 return NULL;
1363                                         if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1364                                                 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1365                                                 return NULL;
1366                                         }
1367                                         evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1368                                         return default_icon;
1369                                 }
1370                         }
1371                 } else if (!strncmp(part, "elm.slide.swallow.1", strlen("elm.slide.swallow.1"))) {
1372                         Evas_Object *edit_button = elm_button_add(obj);
1373                         if (!edit_button) {
1374                                 BROWSER_LOGE("elm_button_add is failed.\n");
1375                                 return NULL;
1376                         }
1377                         elm_object_style_set(edit_button, "text_only/sweep");
1378                         elm_object_text_set(edit_button, BR_STRING_EDIT);
1379                         if (!item->is_editable)
1380                                 elm_object_disabled_set(edit_button, EINA_TRUE);
1381                         evas_object_smart_callback_add(edit_button, "clicked", __slide_edit_button_clicked_cb, item);
1382                         return edit_button;
1383                 } else if (!strncmp(part, "elm.slide.swallow.2", strlen("elm.slide.swallow.2"))) {
1384                         if (item->is_folder) {
1385                                 Evas_Object *delete_button = elm_button_add(obj);
1386                                 if (!delete_button) {
1387                                         BROWSER_LOGE("elm_button_add is failed.\n");
1388                                         return NULL;
1389                                 }
1390                                 elm_object_style_set(delete_button, "text_only/sweep");
1391                                 elm_object_text_set(delete_button, BR_STRING_DELETE);
1392                                 if (!item->is_editable)
1393                                         elm_object_disabled_set(delete_button, EINA_TRUE);
1394                                 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1395                                 return delete_button;
1396                         } else {
1397                                 Evas_Object *share_button = elm_button_add(obj);
1398                                 if (!share_button) {
1399                                         BROWSER_LOGE("elm_button_add is failed.\n");
1400                                         return NULL;
1401                                 }
1402                                 elm_object_style_set(share_button, "text_only/sweep");
1403                                 elm_object_text_set(share_button, BR_STRING_SHARE);
1404                                 evas_object_smart_callback_add(share_button, "clicked", __slide_share_button_clicked_cb, item);
1405                                 return share_button;
1406                         }
1407                 } else if (!strncmp(part, "elm.slide.swallow.3", strlen("elm.slide.swallow.3"))) {
1408                         Evas_Object *delete_button = elm_button_add(obj);
1409                         if (!delete_button) {
1410                                 BROWSER_LOGE("elm_button_add is failed.\n");
1411                                 return NULL;
1412                         }
1413                         elm_object_style_set(delete_button, "text_only/sweep");
1414                         elm_object_text_set(delete_button, BR_STRING_DELETE);
1415                         if (!item->is_editable)
1416                                 elm_object_disabled_set(delete_button, EINA_TRUE);
1417                         evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1418                         return delete_button;
1419                 }
1420
1421                 if (elm_genlist_decorate_mode_get(obj)) {
1422                         if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1423                                 Evas_Object *check_button = elm_check_add(obj);
1424                                 if (!check_button) {
1425                                         BROWSER_LOGE("elm_check_add is failed.\n");
1426                                         return NULL;
1427                                 }
1428                                 evas_object_propagate_events_set(check_button, EINA_FALSE);
1429
1430                                 if (!item->is_editable)
1431                                         elm_object_disabled_set(check_button, EINA_TRUE);
1432
1433                                 elm_check_state_pointer_set(check_button, &item->is_delete);
1434                                 evas_object_smart_callback_add(check_button, "changed",
1435                                                                 __edit_mode_item_check_changed_cb, item);
1436                                 return check_button;
1437                         } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1438                                 Evas_Object *button = elm_button_add(obj);
1439                                 if (!button) {
1440                                         BROWSER_LOGE("elm_button_add is failed.\n");
1441                                         return NULL;
1442                                 }
1443                                 evas_object_propagate_events_set(button, EINA_FALSE);
1444
1445                                 if (!item->is_editable)
1446                                         elm_object_disabled_set(button, EINA_TRUE);
1447                                 if (item->is_folder) {
1448                                         elm_object_style_set(button, "rename");
1449                                         evas_object_smart_callback_add(button, "clicked",
1450                                                                 __rename_folder_button_clicked_cb, item);
1451                                 } else {
1452                                         elm_object_style_set(button, "reveal");
1453                                         evas_object_smart_callback_add(button, "clicked",
1454                                                                 __edit_bookmark_item_button_clicked_cb, item);
1455                                 }
1456                                 return button;
1457                         } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1458                                 Evas_Object *edit_field = br_elm_editfield_add(obj);
1459                                 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1460                                 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1461
1462                                 bookmark_view->m_rename_edit_field = edit_field;
1463                                 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1464
1465                                 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1466                                 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1467                                 elm_entry_cursor_end_set(edit_field_entry);
1468
1469                                 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1470                                                                 __rename_folder_unfocus_cb, data);
1471                                 evas_object_smart_callback_add(edit_field_entry, "activated",
1472                                                                 __rename_folder_entry_enter_key_cb, edit_field);
1473
1474                                 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1475
1476                                 return edit_field;
1477                         }
1478                 }
1479         }
1480
1481         return NULL;
1482 }
1483
1484 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1485 {
1486         BROWSER_LOGD("[%s]", __func__);
1487         Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1488         int folder_id;
1489         Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1490         if (!ret) {
1491                 BROWSER_LOGE("get_folder_id is failed.");
1492                 return EINA_FALSE;
1493         }
1494
1495         vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1496         ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1497         if (!ret) {
1498                 BROWSER_LOGE("get_bookmark_list failed");
1499                 return EINA_FALSE;
1500         }
1501
1502         int count = bookmark_list.size();
1503
1504         for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1505                 if (bookmark_list[i])
1506                         delete bookmark_list[i];
1507         }
1508         bookmark_list.clear();
1509
1510         if(count)
1511                 return EINA_FALSE;
1512         else
1513                 return EINA_TRUE;
1514 }
1515
1516 void Browser_Bookmark_View::__slide_edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1517 {
1518         BROWSER_LOGD("[%s]", __func__);
1519         if (!data)
1520                 return;
1521
1522         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1523         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1524         bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1525
1526         if (item->is_folder) {
1527                 /* edit folder by slide genlist item */
1528                 if (bookmark_view->_is_empty_folder(item->title)) {
1529                         bookmark_view->show_msg_popup(BR_STRING_EMPTY);
1530                         return;
1531                 }
1532
1533                 bookmark_view->_go_to_sub_foler(item->title.c_str());
1534
1535                 bookmark_view->_set_edit_mode(EINA_TRUE);
1536
1537                 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1538                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1539                 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1540
1541                 edje_object_signal_emit(elm_layout_edje_get(bookmark_view->m_main_layout),
1542                                         "expand_header_no_animation,signal", "");
1543         } else {
1544                 /* edit bookmark item by slide genlist item */
1545                 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1546                     because of increase performance. */
1547                 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1548                                                         bookmark_view->m_current_folder_id)) {
1549                         BROWSER_LOGE("create_edit_bookmark_view failed");
1550                         return;
1551                 }
1552
1553                 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1554                         BROWSER_LOGE("new get_edit_bookmark_view()->init() failed");
1555                         m_data_manager->destroy_edit_bookmark_view();
1556                         return;
1557                 }
1558         }
1559
1560         elm_genlist_item_decorate_mode_set(bookmark_view->m_current_genlist_item_to_edit, "slide", EINA_FALSE);
1561         elm_genlist_item_select_mode_set(bookmark_view->m_current_genlist_item_to_edit, ELM_OBJECT_SELECT_MODE_DEFAULT);
1562 }
1563
1564 void Browser_Bookmark_View::__delete_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1565                                                                 void *event_info)
1566 {
1567         BROWSER_LOGD("event_info = %d", (int)event_info);
1568
1569         if (!data)
1570                 return;
1571
1572         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1573         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1574
1575         evas_object_del(bookmark_view->m_delete_confirm_popup);
1576
1577         bookmark_view->_delete_bookmark_item_by_slide_button(item);
1578 }
1579
1580 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1581                                                                 void *event_info)
1582 {
1583         BROWSER_LOGD("event_info = %d", (int)event_info);
1584
1585         if (!data)
1586                 return;
1587
1588         Evas_Object *popup = (Evas_Object *)data;
1589
1590         evas_object_del(popup);
1591 }
1592
1593 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1594                                                                 void *event_info)
1595 {
1596         BROWSER_LOGD("event_info = %d", (int)event_info);
1597
1598         if (!data)
1599                 return;
1600
1601         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1602
1603         if (bookmark_view->m_delete_confirm_popup) {
1604                 evas_object_del(bookmark_view->m_delete_confirm_popup);
1605                 bookmark_view->m_delete_confirm_popup = NULL;
1606         }
1607
1608         bookmark_view->_delete_selected_bookmark();
1609
1610         bookmark_view->_set_edit_mode(EINA_FALSE);
1611 }
1612
1613 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1614 {
1615         BROWSER_LOGD("[%s]", __func__);
1616
1617         m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1618         if (!m_delete_confirm_popup) {
1619                 BROWSER_LOGE("elm_popup_add failed");
1620                 return NULL;
1621         }
1622
1623         evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1624         elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1625
1626         Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1627         elm_object_text_set(ok_button, BR_STRING_YES);
1628         elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1629
1630         Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1631         elm_object_text_set(cancel_button, BR_STRING_NO);
1632         elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1633
1634         evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1635                                                                                 m_delete_confirm_popup);
1636
1637         evas_object_show(m_delete_confirm_popup);
1638
1639         return ok_button;
1640 }
1641
1642 void Browser_Bookmark_View::_delete_bookmark_item_by_slide_button(Browser_Bookmark_DB::bookmark_item *item)
1643 {
1644         BROWSER_LOGD("[%s]", __func__);
1645         Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1646         int ret = EINA_TRUE;
1647
1648         if (item->is_folder) {
1649                 int folder_id = 0;
1650                 ret = m_data_manager->get_bookmark_db()->get_folder_id(m_current_folder_id,
1651                                                                         item->title.c_str(), &folder_id);
1652                 if (!ret) {
1653                         BROWSER_LOGE("bookmark_db->get_folder_id failed");
1654                         return;
1655                 }
1656                 ret = m_data_manager->get_bookmark_db()->delete_folder(folder_id);
1657                 if (!ret) {
1658                         BROWSER_LOGE("bookmark_db->delete_folder failed");
1659                         return;
1660                 }
1661         } else {
1662                 ret = m_data_manager->get_bookmark_db()->delete_bookmark(item->id);
1663                 if (!ret) {
1664                         BROWSER_LOGE("bookmark_db->delete_bookmark failed");
1665                         return;
1666                 }
1667         }
1668
1669         _delete_bookmark_item_from_folder_list(item);
1670
1671         elm_object_item_del(it);
1672
1673         if (_get_current_folder_item_list().size() == 0) {
1674                 _show_empty_content_layout(EINA_TRUE);
1675         }
1676
1677         show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
1678 }
1679
1680 void Browser_Bookmark_View::__slide_share_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1681 {
1682         BROWSER_LOGD("[%s]", __func__);
1683         if (!data)
1684                 return;
1685
1686         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1687         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1688         if (!bookmark_view->_show_share_popup(item->url.c_str()))
1689                 BROWSER_LOGE("_show_share_popup failed");
1690 }
1691
1692 void Browser_Bookmark_View::__slide_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1693 {
1694         BROWSER_LOGD("[%s]", __func__);
1695         if (!data)
1696                 return;
1697
1698         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1699         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1700
1701         Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
1702         if (ok_button)
1703                 evas_object_smart_callback_add(ok_button, "clicked",
1704                         __delete_confirm_response_by_slide_button_cb, item);
1705 }
1706
1707 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1708 {
1709         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1710
1711         BROWSER_LOGD("moved it = %d", it);
1712
1713         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1714         Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1715         Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1716
1717         if (next_it)
1718                 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1719
1720         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1721
1722         Elm_Object_Item *index_it = NULL;
1723         Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1724         it = elm_genlist_first_item_get(obj);
1725         while (index_it) {
1726                 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1727                 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1728                 index_it = elm_genlist_item_next_get(index_it);
1729         }
1730
1731         if (next_item && (item->order_index < next_item->order_index))
1732                 /* move down */
1733                 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1734         else
1735                 /* move up */
1736                 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1737 }
1738
1739 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1740 {
1741         BROWSER_LOGD("[%s]", __func__);
1742         Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1743
1744         Elm_Object_Item *it = NULL;
1745         Elm_Object_Item *next_it = NULL;
1746         Browser_Bookmark_DB::bookmark_item *item = NULL;
1747         Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1748         Eina_Bool ret = EINA_TRUE;
1749         int index = order_index;
1750
1751         if (is_move_down) {
1752                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1753                 while(it) {
1754                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1755                         if (item->order_index > index) {
1756                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1757                                 if (!ret)
1758                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1759                                 int temp = item->order_index;
1760                                 item->order_index = index;
1761                                 index = temp;
1762                                 elm_object_item_data_set(it, item);
1763                         } else if (item->order_index == order_index) {
1764                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1765                                 item->order_index = index;
1766                                 elm_object_item_data_set(it, item);
1767                                 if (!ret)
1768                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1769                                 break;
1770                         }
1771                         it = elm_genlist_item_next_get(it);
1772                 }
1773         } else {
1774                 index = order_index;
1775                 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1776                 while(it) {
1777                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1778                         if (item->order_index < index) {
1779                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1780                                 if (!ret)
1781                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1782                                 int temp = item->order_index;
1783                                 item->order_index = index;
1784                                 index = temp;
1785                                 elm_object_item_data_set(it, item);
1786                         } else if (item->order_index == order_index) {
1787                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1788                                 item->order_index = index;
1789                                 elm_object_item_data_set(it, item);
1790                                 if (!ret)
1791                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1792                                 break;
1793                         }
1794                         it = elm_genlist_item_prev_get(it);
1795                 }
1796         }
1797 }
1798
1799 void Browser_Bookmark_View::history_item_clicked(const char *url)
1800 {
1801         BROWSER_LOGD("[%s]", __func__);
1802
1803         if (m_data_manager->get_browser_view())
1804                 m_data_manager->get_browser_view()->load_url(url);
1805
1806         if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1807                 elm_naviframe_item_pop(m_navi_bar);
1808 }
1809
1810 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1811 {
1812         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1813         if (!data)
1814                 return;
1815
1816         Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1817         Browser_Bookmark_DB::bookmark_item *item = NULL;
1818         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1819
1820         if (!elm_genlist_decorate_mode_get(obj)) {
1821                 if (!item->is_folder) {
1822                         std::string url = std::string(item->url.c_str());
1823
1824                         if (m_data_manager->get_browser_view())
1825                                 m_data_manager->get_browser_view()->load_url(url.c_str());
1826
1827                         if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1828                             != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1829                                 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1830                 } else
1831                         bookmark_view->_go_to_sub_foler(item->title.c_str());
1832         } else {
1833                 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1834                 Browser_Bookmark_DB::bookmark_item *item = NULL;
1835                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1836                 if (item && item->is_editable) {
1837                         item->is_delete = !(item->is_delete);
1838                         elm_genlist_item_update(it);
1839                 }
1840
1841                 int delete_item_count = 0;
1842                 int editable_item_count = 0;
1843                 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1844                 while(it) {
1845                         if (item->is_editable)
1846                                 editable_item_count++;
1847                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1848                         if (item->is_delete)
1849                                 delete_item_count++;
1850                         it = elm_genlist_item_next_get(it);
1851                 }
1852
1853                 if (editable_item_count == delete_item_count)
1854                         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1855                 else
1856                         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1857
1858                 bookmark_view->_show_selection_info();
1859         }
1860
1861         elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1862 }
1863
1864 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1865 {
1866         BROWSER_LOGD("[%s]", __func__);
1867         if (!data)
1868                 return;
1869
1870         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1871         bookmark_view->_go_up_to_main_folder();
1872
1873         bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1874 }
1875
1876 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1877 {
1878         if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1879                 return m_main_folder_genlist;
1880         else
1881                 return m_sub_folder_genlist;
1882 }
1883
1884 /* This just returns the copy of item list instance.
1885   * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1886   * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1887 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1888 {
1889         if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1890                 return m_main_folder_list;
1891         else
1892                 return m_sub_folder_list;
1893 }
1894
1895 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1896 {
1897         BROWSER_LOGD("is_empty=%d", is_empty);
1898         if (m_view_mode == BOOKMARK_VIEW) {
1899                 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1900                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1901         }
1902
1903         if (is_empty) {
1904                 if (m_edit_mode_select_all_check_button) {
1905                         evas_object_del(m_edit_mode_select_all_check_button);
1906                         m_edit_mode_select_all_check_button = NULL;
1907                 }
1908                 if (m_edit_mode_select_all_layout) {
1909                         elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1910                         evas_object_del(m_edit_mode_select_all_layout);
1911                         m_edit_mode_select_all_layout = NULL;
1912                 }
1913
1914                 if (m_no_contents) {
1915                         evas_object_del(m_no_contents);
1916                         m_no_contents = NULL;
1917                 }
1918
1919                 m_no_contents = elm_layout_add(m_main_layout);
1920                 if (!m_no_contents) {
1921                         BROWSER_LOGE("elm_layout_add failed");
1922                 }
1923                 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1924                 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1925                 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1926                 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1927                 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1928                 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1929                 evas_object_show(m_no_contents);
1930
1931                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1932         }else {
1933                 if (m_no_contents) {
1934                         elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1935                         evas_object_del(m_no_contents);
1936                         m_no_contents = NULL;
1937                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1938                                                 "show,content_box,signal", "");
1939                 }
1940
1941                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1942         }
1943 }
1944
1945 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1946 {
1947         BROWSER_LOGD("[%s]", __func__);
1948
1949         m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1950
1951         elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1952         elm_box_pack_end(m_genlist_content_box, m_conformant);
1953         evas_object_show(m_conformant);
1954
1955         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1956
1957         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1958         elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1959         evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1960
1961         for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1962                 if (m_sub_folder_list[i]) {
1963                         delete m_sub_folder_list[i];
1964                         m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1965                 }
1966         }
1967         m_sub_folder_list.clear();
1968
1969         if (m_upper_folder_icon) {
1970                 evas_object_del(m_upper_folder_icon);
1971                 m_upper_folder_icon = NULL;
1972         }
1973         if (m_upper_folder_list) {
1974                 evas_object_del(m_upper_folder_list);
1975                 m_upper_folder_list = NULL;
1976         }
1977         if (m_sub_folder_genlist) {
1978                 evas_object_del(m_sub_folder_genlist);
1979                 m_sub_folder_genlist = NULL;
1980         }
1981         if (m_sub_folder_conformant) {
1982                 evas_object_del(m_sub_folder_conformant);
1983                 m_sub_folder_conformant = NULL;
1984         }
1985
1986         if (m_main_folder_list.size() == 0)
1987                 _show_empty_content_layout(EINA_TRUE);
1988         else
1989                 _show_empty_content_layout(EINA_FALSE);
1990
1991         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1992 }
1993
1994 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1995 {
1996         int folder_id;
1997         string navigationbar_title = folder_name;
1998         Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1999                                                                         folder_name, &folder_id);
2000         if (!ret) {
2001                 BROWSER_LOGE("get_folder_id is failed.");
2002                 return;
2003         }
2004
2005         m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
2006         if (!m_sub_folder_genlist) {
2007                 BROWSER_LOGD("_create_sub_folder_genlist failed");
2008                 return;
2009         }
2010
2011         m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
2012         _set_navigationbar_title(navigationbar_title.c_str());
2013
2014         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2015
2016         if (!m_sub_folder_list.size())
2017                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2018 }
2019
2020 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
2021 {
2022         BROWSER_LOGD("title=[%s]", title);
2023         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2024         if (elm_object_item_content_get(top_it) == m_main_layout)
2025                 elm_object_item_text_set(top_it, title);
2026 }
2027
2028 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
2029 {
2030         BROWSER_LOGD("[%s]", __func__);
2031         Evas_Object *genlist = elm_genlist_add(m_main_layout);
2032         if (genlist) {
2033                 elm_box_unpack(m_genlist_content_box, m_conformant);
2034                 evas_object_hide(m_conformant);
2035
2036                 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
2037                 if (!m_sub_folder_conformant) {
2038                         BROWSER_LOGE("elm_conformant_add failed");
2039                         return EINA_FALSE;
2040                 }
2041                 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
2042                 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2043                 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2044                 evas_object_show(m_sub_folder_conformant);
2045                 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
2046
2047                 m_current_folder_id = folder_id;
2048
2049                 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2050                 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2051                 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2052                 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2053
2054 #if defined(GENLIST_SWEEP)
2055                 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2056                 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2057                 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2058                 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2059 #endif
2060
2061                 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2062
2063                 elm_object_content_set(m_sub_folder_conformant, genlist);
2064                 evas_object_show(genlist);
2065
2066                 m_upper_folder_list = elm_list_add(m_main_layout);
2067                 if (m_upper_folder_list) {
2068                         elm_list_bounce_set(m_upper_folder_list,  EINA_FALSE, EINA_FALSE);
2069                         evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2070                         evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
2071                         evas_object_show(m_upper_folder_list);
2072                         elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
2073                         m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
2074                         if (!m_upper_folder_icon) {
2075                                 BROWSER_LOGE("elm_icon_add failed");
2076                                 return NULL;
2077                         }
2078                         if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
2079                                 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
2080
2081                         evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2082                         evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2083                         elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
2084                                                 NULL, __upper_folder_clicked_cb, this);
2085                         evas_object_show(m_upper_folder_icon);
2086                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
2087
2088                         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2089                         elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
2090                         evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
2091                 }
2092
2093                 /* Fill bookmark list */
2094                 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
2095                                                                                         m_current_folder_id);
2096                 if (!ret) {
2097                         return NULL;
2098                         BROWSER_LOGE("get_bookmark_list failed");
2099                 }
2100
2101                 int size = m_sub_folder_list.size();
2102                 BROWSER_LOGD("bookmark count=%d", size);
2103                 for (int i = 0 ; i < size ; i++ ) {
2104                         m_sub_folder_list[i]->user_data_1 = (void *)this;
2105                         m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2106                                                 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
2107                                                 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2108                 }
2109
2110                 if (size == 0)
2111                         _show_empty_content_layout(EINA_TRUE);
2112                 else
2113                         _show_empty_content_layout(EINA_FALSE);
2114         }
2115
2116         return genlist;
2117 }
2118
2119 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
2120 {
2121         BROWSER_LOGD("[%s]", __func__);
2122         Evas_Object *genlist = elm_genlist_add(m_main_layout);
2123         if (genlist) {
2124                 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
2125
2126                 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2127                 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2128                 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2129                 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2130
2131 #if defined(GENLIST_SWEEP)
2132                 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2133                 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2134                 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2135                 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2136 #endif
2137                 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2138
2139                 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
2140                 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3.text";
2141                 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
2142                 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
2143                 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2144                 m_bookmark_genlist_item_class.func.state_get = NULL;
2145                 m_bookmark_genlist_item_class.func.del = NULL;
2146 //              m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
2147
2148                 m_folder_genlist_item_class.item_style = "1text.1icon.2";
2149                 m_folder_genlist_item_class.decorate_item_style = "mode/slide2";
2150                 m_folder_genlist_item_class.decorate_all_item_style = "edit_default";
2151                 m_folder_genlist_item_class.func.text_get = __genlist_label_get_cb;
2152                 m_folder_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2153                 m_folder_genlist_item_class.func.state_get = NULL;
2154                 m_folder_genlist_item_class.func.del = NULL;
2155                 evas_object_show(genlist);
2156
2157                 /* Fill bookmark list */
2158                 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
2159                                                                                         m_current_folder_id);
2160                 if (!ret) {
2161                         return NULL;
2162                         BROWSER_LOGE("get_bookmark_list failed");
2163                 }
2164
2165                 int size = m_main_folder_list.size();
2166                 BROWSER_LOGD("bookmark count=%d", size);
2167                 for (int i = 0 ; i < size ; i++ ) {
2168                         m_main_folder_list[i]->user_data_1 = (void *)this;
2169                         if (m_main_folder_list[i]->is_folder) {
2170                                 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2171                                                         &m_folder_genlist_item_class, m_main_folder_list[i], NULL,
2172                                                         ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2173
2174                         } else {
2175                                 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2176                                                         &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
2177                                                         ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2178                         }
2179                 }
2180         }
2181
2182         return genlist;
2183 }
2184
2185 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
2186 {
2187         if (!data)
2188                 return;
2189         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2190
2191         /* New folder */
2192         if (!m_data_manager->create_new_folder_view()) {
2193                 BROWSER_LOGE("create_new_folder_view failed");
2194                 return;
2195         }
2196
2197         if (!m_data_manager->get_new_folder_view()->init()) {
2198                 BROWSER_LOGE("get_new_folder_view()->init() failed");
2199                 m_data_manager->destroy_new_folder_view();
2200                 return;
2201         }
2202 }
2203
2204 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2205 {
2206         if (!data)
2207                 return;
2208         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2209         if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
2210                                                 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
2211                 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2212                 return;
2213         }
2214
2215         if (!m_data_manager->get_add_to_bookmark_view()->init())
2216                 m_data_manager->destroy_add_to_bookmark_view();
2217 }
2218
2219 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
2220 {
2221         if (m_bottom_control_bar)
2222                 evas_object_del(m_bottom_control_bar);
2223
2224         m_bookmark_delete_controlbar_item = NULL;
2225         m_create_folder_controlbar_item = NULL;
2226
2227         if (type == BOOKMARK_VIEW_DEFAULT) {
2228                 elm_object_style_set(m_bg, "default");
2229
2230                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2231
2232                 m_back_button = elm_button_add(m_main_layout);
2233                 if (!m_back_button) {
2234                         BROWSER_LOGE("elm_button_add failed");
2235                         return EINA_FALSE;
2236                 }
2237                 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2238                 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2239                 evas_object_show(m_back_button);
2240                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2241
2242                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2243                 if (!m_bottom_control_bar) {
2244                         BROWSER_LOGE("elm_toolbar_add failed");
2245                         return EINA_TRUE;
2246                 }
2247                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2248                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2249
2250                 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2251                                                         BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
2252                                                         NULL, __add_to_bookmark_cb, this);
2253                 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2254                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2255                                                         __edit_controlbar_item_clicked_cb, this);
2256                 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2257                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
2258                                                         NULL, __create_folder_button, this);
2259                 evas_object_show(m_bottom_control_bar);
2260
2261                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
2262                         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2263
2264                 if (!_get_current_folder_item_list().size())
2265                         elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2266
2267                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2268         } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
2269                 elm_object_style_set(m_bg, "edit_mode");
2270
2271                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2272                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
2273
2274                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2275                 if (!m_bottom_control_bar) {
2276                         BROWSER_LOGE("elm_toolbar_add failed");
2277                         return EINA_FALSE;
2278                 }
2279                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2280                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2281
2282                 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2283                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2284
2285                 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2286                                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
2287                                                                         NULL, __delete_controlbar_item_clicked_cb, this);
2288
2289                 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2290                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2291
2292                 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
2293                                                                                 __edit_controlbar_item_clicked_cb, this);
2294
2295                 if (type == BOOKMARK_VIEW_EDIT_MODE) {
2296                         int delete_item_count = 0;
2297                         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
2298                         while(it) {
2299                                 Browser_Bookmark_DB::bookmark_item *item = NULL;
2300                                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
2301                                 if (item->is_delete)
2302                                         delete_item_count++;
2303                                 it = elm_genlist_item_next_get(it);
2304                         }
2305
2306                         if (delete_item_count)
2307                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2308                         else
2309                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2310                 } else {
2311                         int delete_item_count = 0;
2312                         Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
2313                         while(it) {
2314                                 Browser_History_DB::history_item *item = NULL;
2315                                 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
2316
2317                                 /* Ignore the date label. */
2318                                 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
2319                                         if (item->is_delete)
2320                                                 delete_item_count++;
2321                                 }
2322                                 it = elm_genlist_item_next_get(it);
2323                         }
2324                         if (delete_item_count)
2325                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2326                         else
2327                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2328                 }
2329
2330                 evas_object_show(m_bottom_control_bar);
2331                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2332         } else if (type == HISTORY_VIEW_DEFAULT) {
2333                 elm_object_style_set(m_bg, "default");
2334
2335                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2336
2337                 m_back_button = elm_button_add(m_main_layout);
2338                 if (!m_back_button) {
2339                         BROWSER_LOGE("elm_button_add failed");
2340                         return EINA_FALSE;
2341                 }
2342                 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2343                 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2344                 evas_object_show(m_back_button);
2345                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2346
2347                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2348                 if (!m_bottom_control_bar) {
2349                         BROWSER_LOGE("elm_toolbar_add failed");
2350                         return EINA_TRUE;
2351                 }
2352                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2353                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2354
2355                 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2356                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2357
2358                 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2359                                                                 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2360                                                                 __edit_controlbar_item_clicked_cb, this);
2361
2362                 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2363                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2364
2365                 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
2366                 if (history_layout) {
2367                         if (!history_layout->m_history_list.size())
2368                                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2369                         else
2370                                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
2371                 }
2372
2373                 evas_object_show(m_bottom_control_bar);
2374
2375                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2376         }
2377
2378         elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2379
2380         return EINA_TRUE;
2381 }
2382
2383 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2384 {
2385         BROWSER_LOGD("[%s]", __func__);
2386         if (!data)
2387                 return;
2388
2389         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2390         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2391
2392         if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2393                 return;
2394
2395         /* Bookmark view -> Edit one bookmark item, then cancel. */
2396         m_data_manager->destroy_edit_bookmark_view();
2397
2398         /* History view -> slide one item -> add to bookmark, then done. */
2399         m_data_manager->destroy_add_to_bookmark_view();
2400
2401         m_data_manager->destroy_new_folder_view();
2402 }
2403
2404 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2405 {
2406         BROWSER_LOGD("[%s]", __func__);
2407         m_main_layout = elm_layout_add(m_navi_bar);
2408         if (!m_main_layout) {
2409                 BROWSER_LOGE("elm_layout_add failed");
2410                 return EINA_FALSE;
2411         }
2412         if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2413                                         "bookmark/main_layout")) {
2414                 BROWSER_LOGE("elm_layout_file_set failed");
2415                 return EINA_FALSE;
2416         }
2417
2418         elm_win_conformant_set(m_win, EINA_TRUE);
2419         m_conformant = elm_conformant_add(m_main_layout);
2420         if (!m_conformant) {
2421                 BROWSER_LOGE("elm_conformant_add failed");
2422                 return EINA_FALSE;
2423         }
2424         elm_object_style_set(m_conformant, "internal_layout");
2425         evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2426         evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2427         evas_object_show(m_conformant);
2428
2429         elm_object_style_set(m_bg, "default");
2430         m_sub_main_layout = elm_layout_add(m_main_layout);
2431         if (!m_sub_main_layout) {
2432                 BROWSER_LOGE("elm_layout_add failed");
2433                 return EINA_FALSE;
2434         }
2435         elm_layout_file_set(m_sub_main_layout,
2436                                 BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2437                                 "browser/selectioninfo");
2438         evas_object_size_hint_weight_set(
2439                                 m_sub_main_layout,
2440                                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2441         evas_object_size_hint_align_set(
2442                                 m_sub_main_layout,
2443                                 EVAS_HINT_FILL, EVAS_HINT_FILL);
2444
2445         m_genlist_content_layout = elm_layout_add(m_sub_main_layout);
2446         if (!m_genlist_content_layout) {
2447                 BROWSER_LOGE("elm_layout_add failed");
2448                 return EINA_FALSE;
2449         }
2450         if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2451                                         "bookmark/content_layout")) {
2452                 BROWSER_LOGE("elm_layout_file_set failed");
2453                 return EINA_FALSE;
2454         }
2455         evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2456         evas_object_show(m_genlist_content_layout);
2457         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2458
2459         m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2460         if (!m_genlist_content_box) {
2461                 BROWSER_LOGE("elm_box_add failed");
2462                 return EINA_FALSE;
2463         }
2464         evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2465         evas_object_show(m_genlist_content_box);
2466         elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2467         elm_box_pack_end(m_genlist_content_box, m_conformant);
2468
2469         m_main_folder_genlist = _create_main_folder_genlist();
2470         if (!m_main_folder_genlist) {
2471                 BROWSER_LOGE("_create_main_folder_genlist failed");
2472                 return EINA_FALSE;
2473         }
2474
2475         elm_object_content_set(m_conformant, m_main_folder_genlist);
2476
2477         m_back_button = elm_button_add(m_main_layout);
2478         if (!m_back_button) {
2479                 BROWSER_LOGE("elm_button_add failed");
2480                 return EINA_FALSE;
2481         }
2482         elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2483         evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2484         evas_object_show(m_back_button);
2485
2486         elm_object_part_content_set(m_sub_main_layout, "genlist.swallow.contents", m_genlist_content_layout);
2487         elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_sub_main_layout);
2488
2489         m_top_control_bar = elm_toolbar_add(m_main_layout);
2490         if (!m_top_control_bar) {
2491                 BROWSER_LOGE("elm_toolbar_add failed");
2492                 return EINA_FALSE;
2493         }
2494         elm_object_style_set(m_top_control_bar, "browser/tabbar");
2495
2496         elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2497
2498         elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2499
2500         Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2501                                                                 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2502         elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2503
2504         elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2505         elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2506
2507         evas_object_show(m_top_control_bar);
2508
2509         m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2510                                                                 m_main_layout, "browser/tabbar");
2511
2512         evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2513
2514         int size = m_main_folder_list.size();
2515         if (size == 0)
2516                 _show_empty_content_layout(EINA_TRUE);
2517         else
2518                 _show_empty_content_layout(EINA_FALSE);
2519
2520         return EINA_TRUE;
2521 }
2522