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