[Title] Set divided selection info layout due to rotating issue.
[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                 elm_object_style_set(m_bg, "edit_mode");
940
941                 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
942                 if (!m_edit_mode_select_all_layout) {
943                         BROWSER_LOGE("elm_layout_add failed");
944                         return;
945                 }
946                 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
947                 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
948                 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
949                 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
950                                                 __edit_mode_select_all_clicked_cb, this);
951                 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
952                 if (!m_edit_mode_select_all_check_button) {
953                         BROWSER_LOGE("elm_layout_add failed");
954                         return;
955                 }
956                 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
957                                                 __edit_mode_select_all_check_changed_cb, this);
958                 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
959
960                 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
961                 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
962
963                 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
964                 evas_object_show(m_edit_mode_select_all_layout);
965
966                 Elm_Object_Item *it = NULL;
967                 Browser_Bookmark_DB::bookmark_item *item = NULL;
968                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
969                 while(it) {
970                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
971                         if (!item->is_editable)
972                                 elm_object_item_disabled_set(it, EINA_TRUE);
973
974                         it = elm_genlist_item_next_get(it);
975                 }
976                 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
977                 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
978                 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
979
980                 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
981
982                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
983                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
984                                                                 "hide,upper_folder,signal", "");
985                         evas_object_hide(m_upper_folder_list);
986                 }
987
988                 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
989                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
990         }else {
991                 elm_object_style_set(m_bg, "default");
992
993                 if (m_edit_mode_select_all_check_button) {
994                         evas_object_del(m_edit_mode_select_all_check_button);
995                         m_edit_mode_select_all_check_button = NULL;
996                 }
997                 if (m_edit_mode_select_all_layout) {
998                         elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
999                         evas_object_del(m_edit_mode_select_all_layout);
1000                         m_edit_mode_select_all_layout = NULL;
1001                 }
1002
1003                 Elm_Object_Item *it = NULL;
1004                 Browser_Bookmark_DB::bookmark_item *item = NULL;
1005                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1006                 while(it) {
1007                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1008                         if (!item->is_editable)
1009                                 elm_object_item_disabled_set(it, EINA_FALSE);
1010                         item->is_delete = EINA_FALSE;
1011                         it = elm_genlist_item_next_get(it);
1012                 }
1013                 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1014                 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1015
1016                 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
1017
1018                 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1019
1020                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
1021                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1022                                                                 "show,upper_folder,signal", "");
1023                         evas_object_show(m_upper_folder_list);
1024                 }
1025
1026                 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1027                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1028         }
1029 }
1030
1031 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
1032 {
1033         BROWSER_LOGD("mode=%d", mode);
1034         Evas_Object *history_layout = NULL;
1035         if (m_data_manager->get_history_layout())
1036                 history_layout = m_data_manager->get_history_layout()->get_main_layout();
1037
1038         m_view_mode = mode;
1039         if (mode == HISTORY_VIEW) {
1040                 if (history_layout) {
1041                         elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
1042                         evas_object_show(history_layout);
1043                 }
1044
1045                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
1046
1047                 _set_navigationbar_title(BR_STRING_HISTORY);
1048
1049                 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist))      {
1050                         if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
1051                                 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
1052                 } else {
1053                         if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
1054                                 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
1055                 }
1056         } else if (mode == BOOKMARK_VIEW){
1057                 if (history_layout)
1058                         evas_object_hide(history_layout);
1059                 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
1060
1061                 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1062                         _set_navigationbar_title(BR_STRING_BOOKMARKS);
1063                 else {
1064                         _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
1065                 }
1066
1067                 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
1068                         if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
1069                                 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
1070                 } else {
1071                         if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1072                                 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
1073                 }
1074         }
1075 }
1076
1077 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
1078 {
1079         if (!data)
1080                 return;
1081
1082         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1083         Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
1084         Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
1085         if (!selected_item) {
1086                 BROWSER_LOGD("no item selected");
1087                 return;
1088         }
1089
1090         if (selected_item == history_item) {
1091                 BROWSER_LOGD("tab history");
1092                 /* history selected */
1093                 if (!m_data_manager->get_history_layout()) {
1094                         if (!m_data_manager->create_history_layout()) {
1095                                 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
1096                                 return;
1097                         }
1098
1099                         if (!m_data_manager->get_history_layout()->init()) {
1100                                 BROWSER_LOGE("get_history_layout()->init() failed");
1101                                 return;
1102                         }
1103                 }
1104
1105                 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1106                 bookmark_view->_set_view_mode(HISTORY_VIEW);
1107
1108         } else {
1109                 BROWSER_LOGD("tab bookmark");
1110                 if (m_data_manager->get_history_layout()) {
1111                         m_data_manager->get_history_layout()->hide_notify_popup_layout(
1112                                 m_data_manager->get_history_layout()->m_sub_main_history_layout);
1113                         bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1114                 }
1115         }
1116 }
1117
1118 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1119 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1120 {
1121         BROWSER_LOGD("[%s]", __func__);
1122         if (!data)
1123                 return;
1124         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1125         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1126
1127         /* Pass the selected genlist item as parameter when bookmark -> Edit item
1128             because of increase performance. */
1129         bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1130
1131         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1132
1133         bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1134
1135         bookmark_view->_set_edit_mode(EINA_FALSE);
1136
1137         if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1138                                         bookmark_view->m_current_folder_id)) {
1139                 BROWSER_LOGE("create_edit_bookmark_view failed");
1140                 return;
1141         }
1142
1143         if (!m_data_manager->get_edit_bookmark_view()->init()) {
1144                 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1145                 m_data_manager->destroy_edit_bookmark_view();
1146                 return;
1147         }
1148 }
1149
1150 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1151 {
1152         BROWSER_LOGD("[%s]", __func__);
1153         if (!data)
1154                 return;
1155         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1156         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1157         Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1158         elm_genlist_item_flip_set(it, EINA_TRUE);
1159
1160         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1161
1162         evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1163 }
1164
1165 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1166                                                                                         void *event_info)
1167 {
1168         BROWSER_LOGD("[%s]", __func__);
1169         if (!data)
1170                 return;
1171
1172         Evas_Object *rename_edit_field = (Evas_Object *)data;
1173         elm_object_focus_set(rename_edit_field, EINA_FALSE);
1174 }
1175
1176 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1177 {
1178         BROWSER_LOGD("[%s]", __func__);
1179         if (!data)
1180                 return;
1181
1182         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1183         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1184
1185         Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1186
1187         Evas_Object *edit_field_entry = obj;
1188         char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1189         char *text = bookmark_view->_trim(markup_text);
1190         if (!text) {
1191                 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1192                 return;
1193         }
1194         Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1195
1196         Eina_Bool only_has_space = EINA_FALSE;
1197         int space_count = 0;
1198         if (text && strlen(text)) {
1199                 for (int i = 0 ; i < strlen(text) ; i++) {
1200                         if (text[i] == ' ')
1201                                 space_count++;
1202                 }
1203                 if (space_count == strlen(text))
1204                         only_has_space = EINA_TRUE;
1205         }
1206
1207         if (!text || strlen(text) == 0 || only_has_space) {
1208                 bookmark_view->show_msg_popup(BR_STRING_ENTER_FOLDER_NAME);
1209                 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1210         } else {
1211                 if (strcmp(text, item->title.c_str())) {
1212                         if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1213                                 item->title = text;
1214                                 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1215                         } else {
1216                                 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1217                                         bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1218
1219                                 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1220                                 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1221                         }
1222                 }
1223         }
1224         elm_genlist_item_flip_set(it, EINA_FALSE);
1225
1226         elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1227
1228         bookmark_view->m_rename_edit_field = NULL;
1229
1230         free(markup_text);
1231 }
1232
1233 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1234 {
1235         BROWSER_LOGD("[%s]", __func__);
1236 }
1237
1238 #if defined(GENLIST_SWEEP)
1239 void Browser_Bookmark_View::__sweep_right_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1240 {
1241         BROWSER_LOGD("[%s]", __func__);
1242         if (!data)
1243                 return;
1244         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1245
1246         if (elm_genlist_decorate_mode_get(obj))
1247                 return;
1248         else {
1249                 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_TRUE);
1250                 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_NONE);
1251         }
1252
1253         if (bookmark_view->m_current_sweep_item
1254             && (Elm_Object_Item *)event_info != bookmark_view->m_current_sweep_item) {
1255                 elm_genlist_item_select_mode_set(bookmark_view->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1256                 bookmark_view->m_current_sweep_item = (Elm_Object_Item *)event_info;
1257         }
1258 }
1259
1260 void Browser_Bookmark_View::__sweep_cancel_genlist_cb(void *data,
1261                                                 Evas_Object *obj, void *event_info)
1262 {
1263         BROWSER_LOGD("[%s]", __func__);
1264
1265         if (!data)
1266                 return;
1267
1268         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1269         Elm_Object_Item *it = (Elm_Object_Item*)elm_genlist_decorated_item_get(obj);
1270         if (it) {
1271                 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1272                 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1273
1274                 if (it == bookmark_view->m_current_sweep_item)
1275                         bookmark_view->m_current_sweep_item = NULL;
1276         }
1277 }
1278
1279 void Browser_Bookmark_View::__sweep_left_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1280 {
1281         BROWSER_LOGD("[%s]", __func__);
1282         if (!data)
1283                 return;
1284         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1285
1286         if (elm_genlist_decorate_mode_get(obj))
1287                 return;
1288         else {
1289                 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_FALSE);
1290                 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
1291         }
1292
1293         bookmark_view->m_current_sweep_item = NULL;
1294 }
1295 #endif
1296
1297 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1298 {
1299         BROWSER_LOGD("part=%s", part);
1300         if (!data)
1301                 return NULL;
1302
1303         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1304
1305         const char *title = item->title.c_str();
1306         BROWSER_LOGD("title(%p)=%s", title, title);
1307         const char *url = item->url.c_str();
1308         BROWSER_LOGD("url(%p)=%s", url, url);
1309
1310         if (part && strlen(part) > 0) {
1311                 if (!strncmp(part,"elm.text", strlen("elm.text"))
1312                     || !strncmp(part, "elm.base.text", strlen("elm.base.text"))
1313                     || !strncmp(part, "elm.slide.text.1", strlen("elm.slide.text.1"))) {
1314                         if (title && strlen(title))
1315                                 return strdup(title);
1316                         else
1317                                 return NULL;
1318                 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1319                         if (url && strlen(url))
1320                                 return strdup(url);
1321                         else
1322                                 return NULL;
1323                 }
1324         }
1325
1326         return NULL;
1327 }
1328
1329 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1330 {
1331         BROWSER_LOGD("[%s]", __func__);
1332         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1333         if (!data)
1334                 return NULL;
1335
1336         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1337
1338         if (part && strlen(part) > 0) {
1339                 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1340                         if (item->is_folder) {
1341                                 Evas_Object *folder_icon = elm_icon_add(obj);
1342                                 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1343                                         BROWSER_LOGE("elm_icon_file_set is failed.\n");
1344                                         return NULL;
1345                                 }
1346                                 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1347                                 return folder_icon;
1348                         } else {
1349                                 Evas_Object *favicon = NULL;
1350                                 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1351                                 if (favicon)
1352                                         return favicon;
1353                                 else {
1354                                         Evas_Object *default_icon = elm_icon_add(obj);
1355                                         if (!default_icon)
1356                                                 return NULL;
1357                                         if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1358                                                 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1359                                                 return NULL;
1360                                         }
1361                                         evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1362                                         return default_icon;
1363                                 }
1364                         }
1365                 } else if (!strncmp(part, "elm.slide.swallow.1", strlen("elm.slide.swallow.1"))) {
1366                         Evas_Object *edit_button = elm_button_add(obj);
1367                         if (!edit_button) {
1368                                 BROWSER_LOGE("elm_button_add is failed.\n");
1369                                 return NULL;
1370                         }
1371                         elm_object_style_set(edit_button, "text_only/sweep");
1372                         elm_object_text_set(edit_button, BR_STRING_EDIT);
1373                         if (!item->is_editable)
1374                                 elm_object_disabled_set(edit_button, EINA_TRUE);
1375                         evas_object_smart_callback_add(edit_button, "clicked", __slide_edit_button_clicked_cb, item);
1376                         return edit_button;
1377                 } else if (!strncmp(part, "elm.slide.swallow.2", strlen("elm.slide.swallow.2"))) {
1378                         if (item->is_folder) {
1379                                 Evas_Object *delete_button = elm_button_add(obj);
1380                                 if (!delete_button) {
1381                                         BROWSER_LOGE("elm_button_add is failed.\n");
1382                                         return NULL;
1383                                 }
1384                                 elm_object_style_set(delete_button, "text_only/sweep");
1385                                 elm_object_text_set(delete_button, BR_STRING_DELETE);
1386                                 if (!item->is_editable)
1387                                         elm_object_disabled_set(delete_button, EINA_TRUE);
1388                                 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1389                                 return delete_button;
1390                         } else {
1391                                 Evas_Object *share_button = elm_button_add(obj);
1392                                 if (!share_button) {
1393                                         BROWSER_LOGE("elm_button_add is failed.\n");
1394                                         return NULL;
1395                                 }
1396                                 elm_object_style_set(share_button, "text_only/sweep");
1397                                 elm_object_text_set(share_button, BR_STRING_SHARE);
1398                                 evas_object_smart_callback_add(share_button, "clicked", __slide_share_button_clicked_cb, item);
1399                                 return share_button;
1400                         }
1401                 } else if (!strncmp(part, "elm.slide.swallow.3", strlen("elm.slide.swallow.3"))) {
1402                         Evas_Object *delete_button = elm_button_add(obj);
1403                         if (!delete_button) {
1404                                 BROWSER_LOGE("elm_button_add is failed.\n");
1405                                 return NULL;
1406                         }
1407                         elm_object_style_set(delete_button, "text_only/sweep");
1408                         elm_object_text_set(delete_button, BR_STRING_DELETE);
1409                         if (!item->is_editable)
1410                                 elm_object_disabled_set(delete_button, EINA_TRUE);
1411                         evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1412                         return delete_button;
1413                 }
1414
1415                 if (elm_genlist_decorate_mode_get(obj)) {
1416                         if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1417                                 Evas_Object *check_button = elm_check_add(obj);
1418                                 if (!check_button) {
1419                                         BROWSER_LOGE("elm_check_add is failed.\n");
1420                                         return NULL;
1421                                 }
1422                                 evas_object_propagate_events_set(check_button, EINA_FALSE);
1423
1424                                 if (!item->is_editable)
1425                                         elm_object_disabled_set(check_button, EINA_TRUE);
1426
1427                                 elm_check_state_pointer_set(check_button, &item->is_delete);
1428                                 evas_object_smart_callback_add(check_button, "changed",
1429                                                                 __edit_mode_item_check_changed_cb, item);
1430                                 return check_button;
1431                         } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1432                                 Evas_Object *button = elm_button_add(obj);
1433                                 if (!button) {
1434                                         BROWSER_LOGE("elm_button_add is failed.\n");
1435                                         return NULL;
1436                                 }
1437                                 evas_object_propagate_events_set(button, EINA_FALSE);
1438
1439                                 if (!item->is_editable)
1440                                         elm_object_disabled_set(button, EINA_TRUE);
1441                                 if (item->is_folder) {
1442                                         elm_object_style_set(button, "rename");
1443                                         evas_object_smart_callback_add(button, "clicked",
1444                                                                 __rename_folder_button_clicked_cb, item);
1445                                 } else {
1446                                         elm_object_style_set(button, "reveal");
1447                                         evas_object_smart_callback_add(button, "clicked",
1448                                                                 __edit_bookmark_item_button_clicked_cb, item);
1449                                 }
1450                                 return button;
1451                         } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1452                                 Evas_Object *edit_field = br_elm_editfield_add(obj);
1453                                 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1454                                 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1455
1456                                 bookmark_view->m_rename_edit_field = edit_field;
1457                                 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1458
1459                                 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1460                                 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1461                                 elm_entry_cursor_end_set(edit_field_entry);
1462
1463                                 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1464                                                                 __rename_folder_unfocus_cb, data);
1465                                 evas_object_smart_callback_add(edit_field_entry, "activated",
1466                                                                 __rename_folder_entry_enter_key_cb, edit_field);
1467
1468                                 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1469
1470                                 return edit_field;
1471                         }
1472                 }
1473         }
1474
1475         return NULL;
1476 }
1477
1478 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1479 {
1480         BROWSER_LOGD("[%s]", __func__);
1481         Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1482         int folder_id;
1483         Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1484         if (!ret) {
1485                 BROWSER_LOGE("get_folder_id is failed.");
1486                 return EINA_FALSE;
1487         }
1488
1489         vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1490         ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1491         if (!ret) {
1492                 BROWSER_LOGE("get_bookmark_list failed");
1493                 return EINA_FALSE;
1494         }
1495
1496         int count = bookmark_list.size();
1497
1498         for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1499                 if (bookmark_list[i])
1500                         delete bookmark_list[i];
1501         }
1502         bookmark_list.clear();
1503
1504         if(count)
1505                 return EINA_FALSE;
1506         else
1507                 return EINA_TRUE;
1508 }
1509
1510 void Browser_Bookmark_View::__slide_edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1511 {
1512         BROWSER_LOGD("[%s]", __func__);
1513         if (!data)
1514                 return;
1515
1516         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1517         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1518         bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1519
1520         if (item->is_folder) {
1521                 /* edit folder by slide genlist item */
1522                 if (bookmark_view->_is_empty_folder(item->title)) {
1523                         bookmark_view->show_msg_popup(BR_STRING_EMPTY);
1524                         return;
1525                 }
1526
1527                 bookmark_view->_go_to_sub_foler(item->title.c_str());
1528
1529                 bookmark_view->_set_edit_mode(EINA_TRUE);
1530
1531                 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1532                 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1533                 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1534
1535                 edje_object_signal_emit(elm_layout_edje_get(bookmark_view->m_main_layout),
1536                                         "expand_header_no_animation,signal", "");
1537         } else {
1538                 /* edit bookmark item by slide genlist item */
1539                 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1540                     because of increase performance. */
1541                 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1542                                                         bookmark_view->m_current_folder_id)) {
1543                         BROWSER_LOGE("create_edit_bookmark_view failed");
1544                         return;
1545                 }
1546
1547                 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1548                         BROWSER_LOGE("new get_edit_bookmark_view()->init() failed");
1549                         m_data_manager->destroy_edit_bookmark_view();
1550                         return;
1551                 }
1552         }
1553
1554         elm_genlist_item_decorate_mode_set(bookmark_view->m_current_genlist_item_to_edit, "slide", EINA_FALSE);
1555         elm_genlist_item_select_mode_set(bookmark_view->m_current_genlist_item_to_edit, ELM_OBJECT_SELECT_MODE_DEFAULT);
1556 }
1557
1558 void Browser_Bookmark_View::__delete_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1559                                                                 void *event_info)
1560 {
1561         BROWSER_LOGD("event_info = %d", (int)event_info);
1562
1563         if (!data)
1564                 return;
1565
1566         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1567         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1568
1569         evas_object_del(bookmark_view->m_delete_confirm_popup);
1570
1571         bookmark_view->_delete_bookmark_item_by_slide_button(item);
1572 }
1573
1574 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1575                                                                 void *event_info)
1576 {
1577         BROWSER_LOGD("event_info = %d", (int)event_info);
1578
1579         if (!data)
1580                 return;
1581
1582         Evas_Object *popup = (Evas_Object *)data;
1583
1584         evas_object_del(popup);
1585 }
1586
1587 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1588                                                                 void *event_info)
1589 {
1590         BROWSER_LOGD("event_info = %d", (int)event_info);
1591
1592         if (!data)
1593                 return;
1594
1595         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1596
1597         if (bookmark_view->m_delete_confirm_popup) {
1598                 evas_object_del(bookmark_view->m_delete_confirm_popup);
1599                 bookmark_view->m_delete_confirm_popup = NULL;
1600         }
1601
1602         bookmark_view->_delete_selected_bookmark();
1603
1604         bookmark_view->_set_edit_mode(EINA_FALSE);
1605 }
1606
1607 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1608 {
1609         BROWSER_LOGD("[%s]", __func__);
1610
1611         m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1612         if (!m_delete_confirm_popup) {
1613                 BROWSER_LOGE("elm_popup_add failed");
1614                 return NULL;
1615         }
1616
1617         evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1618         elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1619
1620         Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1621         elm_object_text_set(ok_button, BR_STRING_YES);
1622         elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1623
1624         Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1625         elm_object_text_set(cancel_button, BR_STRING_NO);
1626         elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1627
1628         evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1629                                                                                 m_delete_confirm_popup);
1630
1631         evas_object_show(m_delete_confirm_popup);
1632
1633         return ok_button;
1634 }
1635
1636 void Browser_Bookmark_View::_delete_bookmark_item_by_slide_button(Browser_Bookmark_DB::bookmark_item *item)
1637 {
1638         BROWSER_LOGD("[%s]", __func__);
1639         Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1640         int ret = EINA_TRUE;
1641
1642         if (item->is_folder) {
1643                 int folder_id = 0;
1644                 ret = m_data_manager->get_bookmark_db()->get_folder_id(m_current_folder_id,
1645                                                                         item->title.c_str(), &folder_id);
1646                 if (!ret) {
1647                         BROWSER_LOGE("bookmark_db->get_folder_id failed");
1648                         return;
1649                 }
1650                 ret = m_data_manager->get_bookmark_db()->delete_folder(folder_id);
1651                 if (!ret) {
1652                         BROWSER_LOGE("bookmark_db->delete_folder failed");
1653                         return;
1654                 }
1655         } else {
1656                 ret = m_data_manager->get_bookmark_db()->delete_bookmark(item->id);
1657                 if (!ret) {
1658                         BROWSER_LOGE("bookmark_db->delete_bookmark failed");
1659                         return;
1660                 }
1661         }
1662
1663         _delete_bookmark_item_from_folder_list(item);
1664
1665         elm_object_item_del(it);
1666
1667         if (_get_current_folder_item_list().size() == 0) {
1668                 _show_empty_content_layout(EINA_TRUE);
1669         }
1670
1671         show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
1672 }
1673
1674 void Browser_Bookmark_View::__slide_share_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1675 {
1676         BROWSER_LOGD("[%s]", __func__);
1677         if (!data)
1678                 return;
1679
1680         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1681         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1682         if (!bookmark_view->_show_share_popup(item->url.c_str()))
1683                 BROWSER_LOGE("_show_share_popup failed");
1684 }
1685
1686 void Browser_Bookmark_View::__slide_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1687 {
1688         BROWSER_LOGD("[%s]", __func__);
1689         if (!data)
1690                 return;
1691
1692         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1693         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1694
1695         Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
1696         if (ok_button)
1697                 evas_object_smart_callback_add(ok_button, "clicked",
1698                         __delete_confirm_response_by_slide_button_cb, item);
1699 }
1700
1701 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1702 {
1703         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1704
1705         BROWSER_LOGD("moved it = %d", it);
1706
1707         Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1708         Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1709         Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1710
1711         if (next_it)
1712                 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1713
1714         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1715
1716         Elm_Object_Item *index_it = NULL;
1717         Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1718         it = elm_genlist_first_item_get(obj);
1719         while (index_it) {
1720                 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1721                 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1722                 index_it = elm_genlist_item_next_get(index_it);
1723         }
1724
1725         if (next_item && (item->order_index < next_item->order_index))
1726                 /* move down */
1727                 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1728         else
1729                 /* move up */
1730                 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1731 }
1732
1733 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1734 {
1735         BROWSER_LOGD("[%s]", __func__);
1736         Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1737
1738         Elm_Object_Item *it = NULL;
1739         Elm_Object_Item *next_it = NULL;
1740         Browser_Bookmark_DB::bookmark_item *item = NULL;
1741         Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1742         Eina_Bool ret = EINA_TRUE;
1743         int index = order_index;
1744
1745         if (is_move_down) {
1746                 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1747                 while(it) {
1748                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1749                         if (item->order_index > index) {
1750                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1751                                 if (!ret)
1752                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1753                                 int temp = item->order_index;
1754                                 item->order_index = index;
1755                                 index = temp;
1756                                 elm_object_item_data_set(it, item);
1757                         } else if (item->order_index == order_index) {
1758                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1759                                 item->order_index = index;
1760                                 elm_object_item_data_set(it, item);
1761                                 if (!ret)
1762                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1763                                 break;
1764                         }
1765                         it = elm_genlist_item_next_get(it);
1766                 }
1767         } else {
1768                 index = order_index;
1769                 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1770                 while(it) {
1771                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1772                         if (item->order_index < index) {
1773                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1774                                 if (!ret)
1775                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1776                                 int temp = item->order_index;
1777                                 item->order_index = index;
1778                                 index = temp;
1779                                 elm_object_item_data_set(it, item);
1780                         } else if (item->order_index == order_index) {
1781                                 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1782                                 item->order_index = index;
1783                                 elm_object_item_data_set(it, item);
1784                                 if (!ret)
1785                                         BROWSER_LOGD("modify_bookmark_order_index failed");
1786                                 break;
1787                         }
1788                         it = elm_genlist_item_prev_get(it);
1789                 }
1790         }
1791 }
1792
1793 void Browser_Bookmark_View::history_item_clicked(const char *url)
1794 {
1795         BROWSER_LOGD("[%s]", __func__);
1796
1797         if (m_data_manager->get_browser_view())
1798                 m_data_manager->get_browser_view()->load_url(url);
1799
1800         if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1801                 elm_naviframe_item_pop(m_navi_bar);
1802 }
1803
1804 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1805 {
1806         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1807         if (!data)
1808                 return;
1809
1810         Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1811         Browser_Bookmark_DB::bookmark_item *item = NULL;
1812         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1813
1814         if (!elm_genlist_decorate_mode_get(obj)) {
1815                 if (!item->is_folder) {
1816                         std::string url = std::string(item->url.c_str());
1817
1818                         if (m_data_manager->get_browser_view())
1819                                 m_data_manager->get_browser_view()->load_url(url.c_str());
1820
1821                         if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1822                             != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1823                                 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1824                 } else
1825                         bookmark_view->_go_to_sub_foler(item->title.c_str());
1826         } else {
1827                 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1828                 Browser_Bookmark_DB::bookmark_item *item = NULL;
1829                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1830                 if (item && item->is_editable) {
1831                         item->is_delete = !(item->is_delete);
1832                         elm_genlist_item_update(it);
1833                 }
1834
1835                 int delete_item_count = 0;
1836                 int editable_item_count = 0;
1837                 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1838                 while(it) {
1839                         if (item->is_editable)
1840                                 editable_item_count++;
1841                         item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1842                         if (item->is_delete)
1843                                 delete_item_count++;
1844                         it = elm_genlist_item_next_get(it);
1845                 }
1846
1847                 if (editable_item_count == delete_item_count)
1848                         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1849                 else
1850                         elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1851
1852                 bookmark_view->_show_selection_info();
1853         }
1854
1855         elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1856 }
1857
1858 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1859 {
1860         BROWSER_LOGD("[%s]", __func__);
1861         if (!data)
1862                 return;
1863
1864         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1865         bookmark_view->_go_up_to_main_folder();
1866
1867         bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1868 }
1869
1870 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1871 {
1872         if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1873                 return m_main_folder_genlist;
1874         else
1875                 return m_sub_folder_genlist;
1876 }
1877
1878 /* This just returns the copy of item list instance.
1879   * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1880   * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1881 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1882 {
1883         if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1884                 return m_main_folder_list;
1885         else
1886                 return m_sub_folder_list;
1887 }
1888
1889 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1890 {
1891         BROWSER_LOGD("is_empty=%d", is_empty);
1892         if (m_view_mode == BOOKMARK_VIEW) {
1893                 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1894                         BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1895         }
1896
1897         if (is_empty) {
1898                 if (m_edit_mode_select_all_check_button) {
1899                         evas_object_del(m_edit_mode_select_all_check_button);
1900                         m_edit_mode_select_all_check_button = NULL;
1901                 }
1902                 if (m_edit_mode_select_all_layout) {
1903                         elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1904                         evas_object_del(m_edit_mode_select_all_layout);
1905                         m_edit_mode_select_all_layout = NULL;
1906                 }
1907
1908                 if (m_no_contents) {
1909                         evas_object_del(m_no_contents);
1910                         m_no_contents = NULL;
1911                 }
1912
1913                 m_no_contents = elm_layout_add(m_main_layout);
1914                 if (!m_no_contents) {
1915                         BROWSER_LOGE("elm_layout_add failed");
1916                 }
1917                 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1918                 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1919                 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1920                 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1921                 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1922                 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1923                 evas_object_show(m_no_contents);
1924
1925                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1926         }else {
1927                 if (m_no_contents) {
1928                         elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1929                         evas_object_del(m_no_contents);
1930                         m_no_contents = NULL;
1931                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1932                                                 "show,content_box,signal", "");
1933                 }
1934
1935                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1936         }
1937 }
1938
1939 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1940 {
1941         BROWSER_LOGD("[%s]", __func__);
1942
1943         m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1944
1945         elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1946         elm_box_pack_end(m_genlist_content_box, m_conformant);
1947         evas_object_show(m_conformant);
1948
1949         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1950
1951         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1952         elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1953         evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1954
1955         for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1956                 if (m_sub_folder_list[i]) {
1957                         delete m_sub_folder_list[i];
1958                         m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1959                 }
1960         }
1961         m_sub_folder_list.clear();
1962
1963         if (m_upper_folder_icon) {
1964                 evas_object_del(m_upper_folder_icon);
1965                 m_upper_folder_icon = NULL;
1966         }
1967         if (m_upper_folder_list) {
1968                 evas_object_del(m_upper_folder_list);
1969                 m_upper_folder_list = NULL;
1970         }
1971         if (m_sub_folder_genlist) {
1972                 evas_object_del(m_sub_folder_genlist);
1973                 m_sub_folder_genlist = NULL;
1974         }
1975         if (m_sub_folder_conformant) {
1976                 evas_object_del(m_sub_folder_conformant);
1977                 m_sub_folder_conformant = NULL;
1978         }
1979
1980         if (m_main_folder_list.size() == 0)
1981                 _show_empty_content_layout(EINA_TRUE);
1982         else
1983                 _show_empty_content_layout(EINA_FALSE);
1984
1985         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1986 }
1987
1988 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1989 {
1990         int folder_id;
1991         string navigationbar_title = folder_name;
1992         Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1993                                                                         folder_name, &folder_id);
1994         if (!ret) {
1995                 BROWSER_LOGE("get_folder_id is failed.");
1996                 return;
1997         }
1998
1999         m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
2000         if (!m_sub_folder_genlist) {
2001                 BROWSER_LOGD("_create_sub_folder_genlist failed");
2002                 return;
2003         }
2004
2005         m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
2006         _set_navigationbar_title(navigationbar_title.c_str());
2007
2008         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2009
2010         if (!m_sub_folder_list.size())
2011                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2012 }
2013
2014 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
2015 {
2016         BROWSER_LOGD("title=[%s]", title);
2017         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2018         if (elm_object_item_content_get(top_it) == m_main_layout)
2019                 elm_object_item_text_set(top_it, title);
2020 }
2021
2022 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
2023 {
2024         BROWSER_LOGD("[%s]", __func__);
2025         Evas_Object *genlist = elm_genlist_add(m_main_layout);
2026         if (genlist) {
2027                 elm_box_unpack(m_genlist_content_box, m_conformant);
2028                 evas_object_hide(m_conformant);
2029
2030                 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
2031                 if (!m_sub_folder_conformant) {
2032                         BROWSER_LOGE("elm_conformant_add failed");
2033                         return EINA_FALSE;
2034                 }
2035                 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
2036                 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2037                 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2038                 evas_object_show(m_sub_folder_conformant);
2039                 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
2040
2041                 m_current_folder_id = folder_id;
2042
2043                 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2044                 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2045                 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2046                 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2047
2048 #if defined(GENLIST_SWEEP)
2049                 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2050                 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2051                 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2052                 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2053 #endif
2054
2055                 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2056
2057                 elm_object_content_set(m_sub_folder_conformant, genlist);
2058                 evas_object_show(genlist);
2059
2060                 m_upper_folder_list = elm_list_add(m_main_layout);
2061                 if (m_upper_folder_list) {
2062                         elm_list_bounce_set(m_upper_folder_list,  EINA_FALSE, EINA_FALSE);
2063                         evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2064                         evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
2065                         evas_object_show(m_upper_folder_list);
2066                         elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
2067                         m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
2068                         if (!m_upper_folder_icon) {
2069                                 BROWSER_LOGE("elm_icon_add failed");
2070                                 return NULL;
2071                         }
2072                         if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
2073                                 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
2074
2075                         evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2076                         evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2077                         elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
2078                                                 NULL, __upper_folder_clicked_cb, this);
2079                         evas_object_show(m_upper_folder_icon);
2080                         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
2081
2082                         Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2083                         elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
2084                         evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
2085                 }
2086
2087                 /* Fill bookmark list */
2088                 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
2089                                                                                         m_current_folder_id);
2090                 if (!ret) {
2091                         return NULL;
2092                         BROWSER_LOGE("get_bookmark_list failed");
2093                 }
2094
2095                 int size = m_sub_folder_list.size();
2096                 BROWSER_LOGD("bookmark count=%d", size);
2097                 for (int i = 0 ; i < size ; i++ ) {
2098                         m_sub_folder_list[i]->user_data_1 = (void *)this;
2099                         m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2100                                                 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
2101                                                 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2102                 }
2103
2104                 if (size == 0)
2105                         _show_empty_content_layout(EINA_TRUE);
2106                 else
2107                         _show_empty_content_layout(EINA_FALSE);
2108         }
2109
2110         return genlist;
2111 }
2112
2113 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
2114 {
2115         BROWSER_LOGD("[%s]", __func__);
2116         Evas_Object *genlist = elm_genlist_add(m_main_layout);
2117         if (genlist) {
2118                 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
2119
2120                 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2121                 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2122                 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2123                 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2124
2125 #if defined(GENLIST_SWEEP)
2126                 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2127                 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2128                 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2129                 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2130 #endif
2131                 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2132
2133                 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
2134                 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3.text";
2135                 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
2136                 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
2137                 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2138                 m_bookmark_genlist_item_class.func.state_get = NULL;
2139                 m_bookmark_genlist_item_class.func.del = NULL;
2140 //              m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
2141
2142                 m_folder_genlist_item_class.item_style = "1text.1icon.2";
2143                 m_folder_genlist_item_class.decorate_item_style = "mode/slide2";
2144                 m_folder_genlist_item_class.decorate_all_item_style = "edit_default";
2145                 m_folder_genlist_item_class.func.text_get = __genlist_label_get_cb;
2146                 m_folder_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2147                 m_folder_genlist_item_class.func.state_get = NULL;
2148                 m_folder_genlist_item_class.func.del = NULL;
2149                 evas_object_show(genlist);
2150
2151                 /* Fill bookmark list */
2152                 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
2153                                                                                         m_current_folder_id);
2154                 if (!ret) {
2155                         return NULL;
2156                         BROWSER_LOGE("get_bookmark_list failed");
2157                 }
2158
2159                 int size = m_main_folder_list.size();
2160                 BROWSER_LOGD("bookmark count=%d", size);
2161                 for (int i = 0 ; i < size ; i++ ) {
2162                         m_main_folder_list[i]->user_data_1 = (void *)this;
2163                         if (m_main_folder_list[i]->is_folder) {
2164                                 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2165                                                         &m_folder_genlist_item_class, m_main_folder_list[i], NULL,
2166                                                         ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2167
2168                         } else {
2169                                 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2170                                                         &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
2171                                                         ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2172                         }
2173                 }
2174         }
2175
2176         return genlist;
2177 }
2178
2179 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
2180 {
2181         if (!data)
2182                 return;
2183         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2184
2185         /* New folder */
2186         if (!m_data_manager->create_new_folder_view()) {
2187                 BROWSER_LOGE("create_new_folder_view failed");
2188                 return;
2189         }
2190
2191         if (!m_data_manager->get_new_folder_view()->init()) {
2192                 BROWSER_LOGE("get_new_folder_view()->init() failed");
2193                 m_data_manager->destroy_new_folder_view();
2194                 return;
2195         }
2196 }
2197
2198 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2199 {
2200         if (!data)
2201                 return;
2202         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2203         if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
2204                                                 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
2205                 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2206                 return;
2207         }
2208
2209         if (!m_data_manager->get_add_to_bookmark_view()->init())
2210                 m_data_manager->destroy_add_to_bookmark_view();
2211 }
2212
2213 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
2214 {
2215         if (m_bottom_control_bar)
2216                 evas_object_del(m_bottom_control_bar);
2217
2218         m_bookmark_delete_controlbar_item = NULL;
2219         m_create_folder_controlbar_item = NULL;
2220
2221         if (type == BOOKMARK_VIEW_DEFAULT) {
2222                 elm_object_style_set(m_bg, "default");
2223
2224                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2225
2226                 m_back_button = elm_button_add(m_main_layout);
2227                 if (!m_back_button) {
2228                         BROWSER_LOGE("elm_button_add failed");
2229                         return EINA_FALSE;
2230                 }
2231                 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2232                 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2233                 evas_object_show(m_back_button);
2234                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2235
2236                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2237                 if (!m_bottom_control_bar) {
2238                         BROWSER_LOGE("elm_toolbar_add failed");
2239                         return EINA_TRUE;
2240                 }
2241                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2242                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2243
2244                 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2245                                                         BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
2246                                                         NULL, __add_to_bookmark_cb, this);
2247                 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2248                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2249                                                         __edit_controlbar_item_clicked_cb, this);
2250                 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2251                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
2252                                                         NULL, __create_folder_button, this);
2253                 evas_object_show(m_bottom_control_bar);
2254
2255                 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
2256                         elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2257
2258                 if (!_get_current_folder_item_list().size())
2259                         elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2260
2261                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2262         } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
2263                 elm_object_style_set(m_bg, "edit_mode");
2264
2265                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2266                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
2267
2268                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2269                 if (!m_bottom_control_bar) {
2270                         BROWSER_LOGE("elm_toolbar_add failed");
2271                         return EINA_FALSE;
2272                 }
2273                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2274                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2275
2276                 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2277                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2278
2279                 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2280                                                                         BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
2281                                                                         NULL, __delete_controlbar_item_clicked_cb, this);
2282
2283                 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2284                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2285
2286                 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
2287                                                                                 __edit_controlbar_item_clicked_cb, this);
2288
2289                 if (type == BOOKMARK_VIEW_EDIT_MODE) {
2290                         int delete_item_count = 0;
2291                         Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
2292                         while(it) {
2293                                 Browser_Bookmark_DB::bookmark_item *item = NULL;
2294                                 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
2295                                 if (item->is_delete)
2296                                         delete_item_count++;
2297                                 it = elm_genlist_item_next_get(it);
2298                         }
2299
2300                         if (delete_item_count)
2301                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2302                         else
2303                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2304                 } else {
2305                         int delete_item_count = 0;
2306                         Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
2307                         while(it) {
2308                                 Browser_History_DB::history_item *item = NULL;
2309                                 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
2310
2311                                 /* Ignore the date label. */
2312                                 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
2313                                         if (item->is_delete)
2314                                                 delete_item_count++;
2315                                 }
2316                                 it = elm_genlist_item_next_get(it);
2317                         }
2318                         if (delete_item_count)
2319                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2320                         else
2321                                 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2322                 }
2323
2324                 evas_object_show(m_bottom_control_bar);
2325                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2326         } else if (type == HISTORY_VIEW_DEFAULT) {
2327                 elm_object_style_set(m_bg, "default");
2328
2329                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2330
2331                 m_back_button = elm_button_add(m_main_layout);
2332                 if (!m_back_button) {
2333                         BROWSER_LOGE("elm_button_add failed");
2334                         return EINA_FALSE;
2335                 }
2336                 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2337                 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2338                 evas_object_show(m_back_button);
2339                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2340
2341                 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2342                 if (!m_bottom_control_bar) {
2343                         BROWSER_LOGE("elm_toolbar_add failed");
2344                         return EINA_TRUE;
2345                 }
2346                 elm_object_style_set(m_bottom_control_bar, "browser/default");
2347                 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2348
2349                 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2350                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2351
2352                 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2353                                                                 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2354                                                                 __edit_controlbar_item_clicked_cb, this);
2355
2356                 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2357                 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2358
2359                 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
2360                 if (history_layout) {
2361                         if (!history_layout->m_history_list.size())
2362                                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2363                         else
2364                                 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
2365                 }
2366
2367                 evas_object_show(m_bottom_control_bar);
2368
2369                 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2370         }
2371
2372         elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2373
2374         return EINA_TRUE;
2375 }
2376
2377 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2378 {
2379         BROWSER_LOGD("[%s]", __func__);
2380         if (!data)
2381                 return;
2382
2383         Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2384         Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2385
2386         if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2387                 return;
2388
2389         /* Bookmark view -> Edit one bookmark item, then cancel. */
2390         m_data_manager->destroy_edit_bookmark_view();
2391
2392         /* History view -> slide one item -> add to bookmark, then done. */
2393         m_data_manager->destroy_add_to_bookmark_view();
2394
2395         m_data_manager->destroy_new_folder_view();
2396 }
2397
2398 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2399 {
2400         BROWSER_LOGD("[%s]", __func__);
2401         m_main_layout = elm_layout_add(m_navi_bar);
2402         if (!m_main_layout) {
2403                 BROWSER_LOGE("elm_layout_add failed");
2404                 return EINA_FALSE;
2405         }
2406         if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2407                                         "bookmark/main_layout")) {
2408                 BROWSER_LOGE("elm_layout_file_set failed");
2409                 return EINA_FALSE;
2410         }
2411
2412         elm_win_conformant_set(m_win, EINA_TRUE);
2413         m_conformant = elm_conformant_add(m_main_layout);
2414         if (!m_conformant) {
2415                 BROWSER_LOGE("elm_conformant_add failed");
2416                 return EINA_FALSE;
2417         }
2418         elm_object_style_set(m_conformant, "internal_layout");
2419         evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2420         evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2421         evas_object_show(m_conformant);
2422
2423         elm_object_style_set(m_bg, "default");
2424         m_sub_main_layout = elm_layout_add(m_main_layout);
2425         if (!m_sub_main_layout) {
2426                 BROWSER_LOGE("elm_layout_add failed");
2427                 return EINA_FALSE;
2428         }
2429         elm_layout_file_set(m_sub_main_layout,
2430                                 BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2431                                 "browser/selectioninfo");
2432         evas_object_size_hint_weight_set(
2433                                 m_sub_main_layout,
2434                                 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2435         evas_object_size_hint_align_set(
2436                                 m_sub_main_layout,
2437                                 EVAS_HINT_FILL, EVAS_HINT_FILL);
2438
2439         m_genlist_content_layout = elm_layout_add(m_sub_main_layout);
2440         if (!m_genlist_content_layout) {
2441                 BROWSER_LOGE("elm_layout_add failed");
2442                 return EINA_FALSE;
2443         }
2444         if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2445                                         "bookmark/content_layout")) {
2446                 BROWSER_LOGE("elm_layout_file_set failed");
2447                 return EINA_FALSE;
2448         }
2449         evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2450         evas_object_show(m_genlist_content_layout);
2451         edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2452
2453         m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2454         if (!m_genlist_content_box) {
2455                 BROWSER_LOGE("elm_box_add failed");
2456                 return EINA_FALSE;
2457         }
2458         evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2459         evas_object_show(m_genlist_content_box);
2460         elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2461         elm_box_pack_end(m_genlist_content_box, m_conformant);
2462
2463         m_main_folder_genlist = _create_main_folder_genlist();
2464         if (!m_main_folder_genlist) {
2465                 BROWSER_LOGE("_create_main_folder_genlist failed");
2466                 return EINA_FALSE;
2467         }
2468
2469         elm_object_content_set(m_conformant, m_main_folder_genlist);
2470
2471         m_back_button = elm_button_add(m_main_layout);
2472         if (!m_back_button) {
2473                 BROWSER_LOGE("elm_button_add failed");
2474                 return EINA_FALSE;
2475         }
2476         elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2477         evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2478         evas_object_show(m_back_button);
2479
2480         elm_object_part_content_set(m_sub_main_layout, "genlist.swallow.contents", m_genlist_content_layout);
2481         elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_sub_main_layout);
2482
2483         m_top_control_bar = elm_toolbar_add(m_main_layout);
2484         if (!m_top_control_bar) {
2485                 BROWSER_LOGE("elm_toolbar_add failed");
2486                 return EINA_FALSE;
2487         }
2488         elm_object_style_set(m_top_control_bar, "browser/tabbar");
2489
2490         elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2491
2492         elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2493
2494         Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2495                                                                 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2496         elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2497
2498         elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2499         elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2500
2501         evas_object_show(m_top_control_bar);
2502
2503         m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2504                                                                 m_main_layout, "browser/tabbar");
2505
2506         evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2507
2508         int size = m_main_folder_list.size();
2509         if (size == 0)
2510                 _show_empty_content_layout(EINA_TRUE);
2511         else
2512                 _show_empty_content_layout(EINA_FALSE);
2513
2514         return EINA_TRUE;
2515 }
2516