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