2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
17 #include "browser-add-to-bookmark-view.h"
18 #include "browser-bookmark-db.h"
19 #include "browser-bookmark-view.h"
20 #include "browser-history-layout.h"
21 #include "browser-new-folder-view.h"
22 #include "browser-string.h"
23 #include "browser-view.h"
25 #define UPPER_FOLDER_ICON_SIZE (64 * elm_scale_get())
27 Browser_Bookmark_View::Browser_Bookmark_View(void)
29 ,m_top_control_bar(NULL)
31 ,m_content_layout(NULL)
32 ,m_genlist_content_layout(NULL)
33 ,m_genlist_content_box(NULL)
34 ,m_main_folder_genlist(NULL)
35 ,m_sub_folder_genlist(NULL)
37 ,m_upper_folder_list(NULL)
38 ,m_upper_folder_icon(NULL)
39 ,m_view_mode(BOOKMARK_VIEW)
40 ,m_edit_mode_select_all_layout(NULL)
41 ,m_edit_mode_select_all_check_button(NULL)
42 ,m_current_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID)
44 ,m_current_genlist_item_to_edit(NULL)
45 ,m_sub_folder_conformant(NULL)
46 ,m_processing_popup_timer(NULL)
47 ,m_processing_progress_bar(NULL)
50 ,m_total_item_count(0)
51 ,m_processing_popup(NULL)
52 ,m_processing_popup_layout(NULL)
53 ,m_select_all_check_value(EINA_FALSE)
54 ,m_bottom_control_bar(NULL)
55 ,m_bookmark_delete_controlbar_item(NULL)
56 ,m_bookmark_edit_controlbar_item(NULL)
57 ,m_create_folder_controlbar_item(NULL)
59 ,m_delete_confirm_popup(NULL)
60 ,m_rename_edit_field(NULL)
62 BROWSER_LOGD("[%s]", __func__);
63 m_current_bookmark_navigationbar_title = "";
66 Browser_Bookmark_View::~Browser_Bookmark_View(void)
68 BROWSER_LOGD("[%s]", __func__);
71 for(int i = 0 ; i < m_sub_folder_list.size() ; i++ ) {
72 if (m_sub_folder_list[i])
73 delete m_sub_folder_list[i];
75 m_sub_folder_list.clear();
77 for(int i = 0 ; i < m_main_folder_list.size() ; i++ ) {
78 if (m_main_folder_list[i])
79 delete m_main_folder_list[i];
81 m_main_folder_list.clear();
83 m_data_manager->destroy_bookmark_db();
85 evas_object_smart_callback_del(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb);
87 if (m_delete_confirm_popup)
88 evas_object_del(m_delete_confirm_popup);
91 Eina_Bool Browser_Bookmark_View::init(void)
93 BROWSER_LOGD("[%s]", __func__);
94 if (!m_data_manager->create_bookmark_db()) {
95 BROWSER_LOGE("m_data_manager->create_bookmark_db failed");
99 return _create_main_layout();
102 void Browser_Bookmark_View::return_to_bookmark_view(int added_bookmark_id)
104 BROWSER_LOGD("added_bookmark_id = %d", added_bookmark_id);
105 if (m_view_mode == BOOKMARK_VIEW) {
106 /* In case that bookmark view -> Edit bookmark item, then return to bookmark view. */
107 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
108 int delete_item_count = 0;
109 int editable_item_count = 0;
110 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
112 Browser_Bookmark_DB::bookmark_item *item = NULL;
113 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
114 if (item->is_editable)
115 editable_item_count++;
118 it = elm_genlist_item_next_get(it);
121 if (editable_item_count == delete_item_count)
122 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_TRUE);
124 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
126 if (delete_item_count == 0)
127 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
130 int size = _get_current_folder_item_list().size();
132 _show_empty_content_layout(EINA_TRUE);
134 _show_empty_content_layout(EINA_FALSE);
136 if (!m_data_manager->get_history_layout())
140 /* boomark view -> history -> add to bookmark by slide button, then done. */
141 if (added_bookmark_id != -1) {
142 Browser_Bookmark_DB::bookmark_item *item = m_data_manager->get_bookmark_db()->get_bookmark_item_by_id(added_bookmark_id);
144 BROWSER_LOGE("get_bookmark_item_by_id failed");
148 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
150 Browser_Bookmark_DB::bookmark_item *exist_item = NULL;
151 exist_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
152 if (exist_item->id == added_bookmark_id) {
153 exist_item->url = item->url;
154 exist_item->title = item->title;
155 exist_item->parent = item->parent;
156 elm_genlist_item_update(it);
159 it = elm_genlist_item_next_get(it);
162 if (m_current_folder_id == item->parent) {
163 /* If the saved bookmark item is in the current folder, just add it to current folder. */
164 Evas_Object *genlist = NULL;
165 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
166 genlist = m_main_folder_genlist;
168 genlist = m_sub_folder_genlist;
170 item->user_data_1 = (void *)this;
171 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_bookmark_genlist_item_class,
172 item, NULL, ELM_GENLIST_ITEM_NONE,
173 __bookmark_item_clicked_cb, this);
175 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
176 m_main_folder_list.push_back(item);
178 m_sub_folder_list.push_back(item);
179 } else if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID
180 && item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID){
181 /* If the current folder is sub folder but the saved folder is main folder,
182 * add the saved bookmark item to main folder. */
183 item->user_data_1 = (void *)this;
184 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
185 item, NULL, ELM_GENLIST_ITEM_NONE,
186 __bookmark_item_clicked_cb, this);
187 m_main_folder_list.push_back(item);
190 /* If the bookmark is empty page, destroy the empty layout to show the bookmark list. */
191 if (_get_current_folder_item_list().size() == 0)
192 _show_empty_content_layout(EINA_TRUE);
194 _show_empty_content_layout(EINA_FALSE);
198 void Browser_Bookmark_View::__back_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
200 BROWSER_LOGD("[%s]", __func__);
204 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
205 Evas_Object *navi_bar = bookmark_view->m_navi_bar;
207 if (elm_naviframe_bottom_item_get(navi_bar) != elm_naviframe_top_item_get(navi_bar))
208 elm_naviframe_item_pop(navi_bar);
210 /* Set the title if enter the add to bookmark while loading. */
211 m_data_manager->get_browser_view()->return_to_browser_view();
214 void Browser_Bookmark_View::__edit_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
216 BROWSER_LOGD("[%s]", __func__);
220 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
221 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
223 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
224 if (!elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
226 bookmark_view->_set_edit_mode(EINA_TRUE);
228 if (bookmark_view->m_rename_edit_field) {
229 Browser_Bookmark_DB::bookmark_item *item = NULL;
230 item = (Browser_Bookmark_DB::bookmark_item *)evas_object_data_get(bookmark_view->m_rename_edit_field, "item");
231 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(bookmark_view->m_rename_edit_field);
232 elm_entry_entry_set(edit_field_entry, item->title.c_str());
235 /* Cancel Edit bookmark */
236 bookmark_view->_set_edit_mode(EINA_FALSE);
238 } else if (history_layout) {
239 if (!elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
241 history_layout->_set_edit_mode(EINA_TRUE);
243 /* Cancel Delete bookmark */
244 history_layout->_set_edit_mode(EINA_FALSE);
248 if (bookmark_view->m_rename_edit_field)
249 elm_object_focus_set(bookmark_view->m_rename_edit_field, EINA_FALSE);
252 void Browser_Bookmark_View::__delete_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
257 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
258 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
260 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
261 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist())) {
262 /* Delete bookmark */
263 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
265 evas_object_smart_callback_add(ok_button, "clicked",
266 __delete_confirm_response_by_edit_mode_cb, bookmark_view);
270 if (history_layout && elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
271 /* Delete bookmark */
272 Evas_Object *ok_button = history_layout->_show_delete_confirm_popup();
274 evas_object_smart_callback_add(ok_button, "clicked",
275 Browser_History_Layout::__delete_confirm_response_by_edit_mode_cb,
281 void Browser_Bookmark_View::_delete_bookmark_item_from_folder_list(Browser_Bookmark_DB::bookmark_item *item)
283 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
284 for(int index = 0 ; index < m_main_folder_list.size() ; index++) {
285 if (m_main_folder_list[index] == item) {
286 delete m_main_folder_list[index];
287 m_main_folder_list.erase(m_main_folder_list.begin() + index);
291 for(int index = 0 ; index < m_sub_folder_list.size() ; index++) {
292 if (m_sub_folder_list[index] == item) {
293 delete m_sub_folder_list[index];
294 m_sub_folder_list.erase(m_sub_folder_list.begin() + index);
300 void Browser_Bookmark_View::_delete_selected_bookmark(void)
302 BROWSER_LOGD("[%s]", __func__);
303 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
304 Eina_List *delete_item_list = NULL;
305 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
306 int remain_count = 0;
308 Browser_Bookmark_DB::bookmark_item *item = NULL;
309 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
311 delete_item_list = eina_list_append(delete_item_list, it);
314 it = elm_genlist_item_next_get(it);
317 int count = eina_list_count(delete_item_list);
319 if (count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
320 /* If delete more than 100 items, show the processing popup. */
321 _show_delete_processing_popup();
323 for (int i = 0; i < count; i++) {
324 it = (Elm_Object_Item *)eina_list_data_get(delete_item_list);
325 Browser_Bookmark_DB::bookmark_item *item = NULL;
326 Eina_Bool ret = EINA_TRUE;
327 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
328 if (item->is_folder) {
330 ret = bookmark_db->get_folder_id(m_current_folder_id, item->title.c_str(), &folder_id);
332 BROWSER_LOGE("bookmark_db->get_folder_id failed");
335 ret = bookmark_db->delete_folder(folder_id);
337 BROWSER_LOGE("bookmark_db->delete_folder failed");
341 ret = bookmark_db->delete_bookmark(item->id);
343 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
347 delete_item_list = eina_list_next(delete_item_list);
349 _delete_bookmark_item_from_folder_list(item);
351 elm_object_item_del(it);
353 eina_list_free(delete_item_list);
355 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
357 if (remain_count == 0)
358 _show_empty_content_layout(EINA_TRUE);
360 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
364 void Browser_Bookmark_View::__edit_mode_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
366 BROWSER_LOGD("[%s]", __func__);
369 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
370 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
371 int delete_item_count = 0;
372 int editable_item_count = 0;
374 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
376 Browser_Bookmark_DB::bookmark_item *item = NULL;
377 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
378 if (item->is_editable)
379 editable_item_count++;
382 it = elm_genlist_item_next_get(it);
385 if (editable_item_count == delete_item_count)
386 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
388 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
390 bookmark_view->_show_selection_info();
393 void Browser_Bookmark_View::_show_delete_processing_popup(void)
395 BROWSER_LOGD("[%s]", __func__);
396 if (m_processing_popup)
397 evas_object_del(m_processing_popup);
399 m_processing_popup = elm_popup_add(m_main_layout);
400 if (!m_processing_popup) {
401 BROWSER_LOGE("elm_popup_add failed");
405 if (m_processing_popup_layout)
406 evas_object_del(m_processing_popup_layout);
407 m_processing_popup_layout = elm_layout_add(m_processing_popup);
408 if (!m_processing_popup_layout) {
409 BROWSER_LOGE("elm_layout_add failed");
412 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
413 "browser/popup_center_progressview")) {
414 BROWSER_LOGE("elm_layout_file_set failed");
417 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
419 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
420 elm_object_style_set(m_processing_progress_bar, "list_progress");
421 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
422 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
423 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
424 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
426 if (m_processing_popup_timer)
427 ecore_timer_del(m_processing_popup_timer);
429 m_processed_count = 0;
430 m_processed_it = elm_genlist_last_item_get(_get_current_folder_genlist());
432 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
433 m_total_item_count = 0;
435 Browser_Bookmark_DB::bookmark_item *item = NULL;
436 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
438 if(item->is_editable && item->is_delete)
439 m_total_item_count++;
441 it = elm_genlist_item_next_get(it);
444 m_processing_popup_timer = ecore_timer_add(0.1, __delete_processing_popup_timer_cb, this);
445 evas_object_show(m_processing_progress_bar);
447 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
448 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
449 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
450 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
452 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
454 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
455 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
456 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
457 evas_object_smart_callback_add(cancel_button, "clicked", __delete_processing_popup_response_cb, this);
459 evas_object_show(m_processing_popup);
462 Eina_Bool Browser_Bookmark_View::__delete_processing_popup_timer_cb(void *data)
465 return ECORE_CALLBACK_CANCEL;
467 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
468 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
470 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
472 double value = elm_progressbar_value_get(progress_bar);
474 __delete_processing_popup_response_cb(bookmark_view, NULL, NULL);
476 bookmark_view->m_processing_popup_timer = NULL;
477 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
479 return ECORE_CALLBACK_CANCEL;
482 while(bookmark_view->m_processed_it) {
483 Browser_Bookmark_DB::bookmark_item *item = NULL;
484 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
486 if(item->is_editable && item->is_delete) {
487 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
489 if (item->is_folder) {
491 ret = bookmark_db->get_folder_id(bookmark_view->m_current_folder_id,
492 item->title.c_str(), &folder_id);
494 BROWSER_LOGE("bookmark_db->get_folder_id failed");
495 return ECORE_CALLBACK_CANCEL;
497 ret = bookmark_db->delete_folder(folder_id);
499 BROWSER_LOGE("bookmark_db->delete_folder failed");
500 return ECORE_CALLBACK_CANCEL;
503 ret = bookmark_db->delete_bookmark(item->id);
505 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
506 return ECORE_CALLBACK_CANCEL;
509 bookmark_view->_delete_bookmark_item_from_folder_list(item);
510 bookmark_view->m_processed_count++;
511 Elm_Object_Item *it = bookmark_view->m_processed_it;
512 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
513 elm_object_item_del(it);
515 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
517 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
519 if (bookmark_view->m_processed_count % 5 == 0)
523 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
524 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
526 char progress_text[20] = {0, };
527 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
528 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
530 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
531 "elm.text.right", progress_text);
533 return ECORE_CALLBACK_RENEW;
536 void Browser_Bookmark_View::_show_select_processing_popup(void)
538 BROWSER_LOGD("[%s]", __func__);
539 if (m_processing_popup)
540 evas_object_del(m_processing_popup);
542 m_processing_popup = elm_popup_add(m_main_layout);
543 if (!m_processing_popup) {
544 BROWSER_LOGE("elm_popup_add failed");
548 if (m_processing_popup_layout)
549 evas_object_del(m_processing_popup_layout);
550 m_processing_popup_layout = elm_layout_add(m_processing_popup);
551 if (!m_processing_popup_layout) {
552 BROWSER_LOGE("elm_layout_add failed");
555 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
556 "browser/popup_center_progressview")) {
557 BROWSER_LOGE("elm_layout_file_set failed");
560 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
562 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
563 elm_object_style_set(m_processing_progress_bar, "list_progress");
564 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
565 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
566 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
567 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
569 if (m_processing_popup_timer)
570 ecore_timer_del(m_processing_popup_timer);
572 m_processed_count = 0;
573 m_processed_it = elm_genlist_first_item_get(_get_current_folder_genlist());
575 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
576 m_total_item_count = 0;
578 Browser_Bookmark_DB::bookmark_item *item = NULL;
579 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
581 if(item->is_editable)
582 m_total_item_count++;
584 it = elm_genlist_item_next_get(it);
587 m_processing_popup_timer = ecore_timer_add(0.1, __select_processing_popup_timer_cb, this);
588 evas_object_show(m_processing_progress_bar);
590 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
591 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
592 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
593 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
595 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
597 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
598 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
599 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
600 evas_object_smart_callback_add(cancel_button, "clicked", __select_processing_popup_response_cb, this);
602 evas_object_show(m_processing_popup);
604 Eina_Bool check_value = elm_check_state_get(m_edit_mode_select_all_check_button);
605 m_select_all_check_value = check_value;
608 elm_check_state_set(m_edit_mode_select_all_check_button, !check_value);
611 Eina_Bool Browser_Bookmark_View::__select_processing_popup_timer_cb(void *data)
614 return ECORE_CALLBACK_CANCEL;
616 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
617 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
619 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
621 double value = elm_progressbar_value_get(progress_bar);
623 __select_processing_popup_response_cb(bookmark_view, NULL, NULL);
625 bookmark_view->m_processing_popup_timer = NULL;
626 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !check_value);
627 bookmark_view->_show_selection_info();
629 return ECORE_CALLBACK_CANCEL;
632 while(bookmark_view->m_processed_it) {
633 Browser_Bookmark_DB::bookmark_item *item = NULL;
634 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
636 if(item->is_editable) {
637 item->is_delete = !check_value;
638 elm_genlist_item_update(bookmark_view->m_processed_it);
639 bookmark_view->m_processed_count++;
642 bookmark_view->m_processed_it = elm_genlist_item_next_get(bookmark_view->m_processed_it);
644 if (bookmark_view->m_processed_count % 30 == 0)
648 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
649 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
651 char progress_text[20] = {0, };
652 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
653 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
655 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
656 "elm.text.right", progress_text);
658 return ECORE_CALLBACK_RENEW;
661 void Browser_Bookmark_View::__delete_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
663 BROWSER_LOGD("[%s]", __func__);
667 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
669 bookmark_view->m_processing_progress_bar = NULL;
670 bookmark_view->m_processed_it = NULL;
672 evas_object_del(bookmark_view->m_processing_popup);
674 if (bookmark_view->m_processing_popup_timer) {
675 ecore_timer_del(bookmark_view->m_processing_popup_timer);
676 bookmark_view->m_processing_popup_timer = NULL;
679 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
681 vector<Browser_Bookmark_DB::bookmark_item *> item_list = bookmark_view->_get_current_folder_item_list();
682 if (item_list.size() == 0)
683 bookmark_view->_show_empty_content_layout(EINA_TRUE);
686 void Browser_Bookmark_View::__select_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
688 BROWSER_LOGD("[%s]", __func__);
692 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
694 evas_object_del(bookmark_view->m_processing_popup);
695 bookmark_view->m_processing_progress_bar = NULL;
696 bookmark_view->m_processed_it = NULL;
698 if (bookmark_view->m_processing_popup_timer) {
699 ecore_timer_del(bookmark_view->m_processing_popup_timer);
700 bookmark_view->m_processing_popup_timer = NULL;
703 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
706 Browser_Bookmark_DB::bookmark_item *item = NULL;
707 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
709 if(item->is_editable && item->is_delete)
712 it = elm_genlist_item_next_get(it);
716 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_FALSE);
718 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_TRUE);
721 void Browser_Bookmark_View::__edit_mode_select_all_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
726 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
727 int item_count = bookmark_view->_get_current_folder_item_list().size();
728 BROWSER_LOGD("item_count=%d", item_count);
730 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT)
731 bookmark_view->_show_select_processing_popup();
733 Eina_Bool value = elm_check_state_get(bookmark_view->m_edit_mode_select_all_check_button);
734 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !value);
736 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
738 Browser_Bookmark_DB::bookmark_item *item = NULL;
739 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
741 if(item->is_editable) {
742 item->is_delete = !value;
743 elm_genlist_item_update(it);
746 it = elm_genlist_item_next_get(it);
749 bookmark_view->_show_selection_info();
753 void Browser_Bookmark_View::__edit_mode_select_all_check_changed_cb(void *data,
754 Evas_Object *obj, void *event_info)
756 BROWSER_LOGD("[%s]", __func__);
760 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
761 int item_count = bookmark_view->_get_current_folder_item_list().size();
762 BROWSER_LOGD("item_count=%d", item_count);
763 Eina_Bool value = elm_check_state_get(obj);
765 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
766 /* Workaround to share the same code with __edit_mode_select_all_clicked_cb */
767 elm_check_state_set(obj, !value);
768 bookmark_view->_show_select_processing_popup();
770 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
772 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
774 if(item->is_editable) {
775 item->is_delete = value;
776 elm_genlist_item_update(it);
779 it = elm_genlist_item_next_get(it);
782 bookmark_view->_show_selection_info();
786 void Browser_Bookmark_View::_show_selection_info(void)
788 BROWSER_LOGD("[%s]", __func__);
789 int editable_item_count = 0;
790 int editable_folder_count = 0;
792 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
794 Browser_Bookmark_DB::bookmark_item *item = NULL;
795 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
796 if (item->is_delete) {
798 editable_folder_count++;
800 editable_item_count++;
802 it = elm_genlist_item_next_get(it);
805 if (editable_folder_count == 0 && editable_item_count == 0) {
806 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
810 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
812 if (editable_folder_count + editable_item_count == 1) {
813 show_notify_popup(BR_STRING_ONE_ITEM_SELECTED, 0, EINA_TRUE);
814 } else if (editable_folder_count + editable_item_count > 1) {
815 char *small_popup_text = NULL;
816 int string_len = strlen(BR_STRING_ITEMS_SELECTED) + 4; /* 4 : reserved for maximun count */
818 small_popup_text = (char *)malloc(string_len * sizeof(char));
819 memset(small_popup_text, 0x00, string_len);
821 snprintf(small_popup_text, string_len, BR_STRING_ITEMS_SELECTED, editable_folder_count + editable_item_count);
822 show_notify_popup(small_popup_text, 0, EINA_TRUE);
824 if (small_popup_text)
825 free(small_popup_text);
826 small_popup_text = 0x00;
830 void Browser_Bookmark_View::_set_edit_mode(Eina_Bool edit_mode)
832 BROWSER_LOGD("[%s]", __func__);
836 elm_object_style_set(m_bg, "edit_mode");
838 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
839 if (!m_edit_mode_select_all_layout) {
840 BROWSER_LOGE("elm_layout_add failed");
843 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
844 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
845 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
846 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
847 __edit_mode_select_all_clicked_cb, this);
848 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
849 if (!m_edit_mode_select_all_check_button) {
850 BROWSER_LOGE("elm_layout_add failed");
853 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
854 __edit_mode_select_all_check_changed_cb, this);
855 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
857 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
858 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
860 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
861 evas_object_show(m_edit_mode_select_all_layout);
863 Elm_Object_Item *it = NULL;
864 Browser_Bookmark_DB::bookmark_item *item = NULL;
865 it = elm_genlist_first_item_get(_get_current_folder_genlist());
867 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
868 if (!item->is_editable)
869 elm_object_item_disabled_set(it, EINA_TRUE);
871 it = elm_genlist_item_next_get(it);
873 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
874 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
875 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
877 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
879 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
880 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
881 "hide,upper_folder,signal", "");
882 evas_object_hide(m_upper_folder_list);
885 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
886 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
888 elm_object_style_set(m_bg, "default");
890 if (m_edit_mode_select_all_check_button) {
891 evas_object_del(m_edit_mode_select_all_check_button);
892 m_edit_mode_select_all_check_button = NULL;
894 if (m_edit_mode_select_all_layout) {
895 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
896 evas_object_del(m_edit_mode_select_all_layout);
897 m_edit_mode_select_all_layout = NULL;
900 Elm_Object_Item *it = NULL;
901 Browser_Bookmark_DB::bookmark_item *item = NULL;
902 it = elm_genlist_first_item_get(_get_current_folder_genlist());
904 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
905 if (!item->is_editable)
906 elm_object_item_disabled_set(it, EINA_FALSE);
907 item->is_delete = EINA_FALSE;
908 it = elm_genlist_item_next_get(it);
910 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
911 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
913 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
915 _set_navigationbar_title(BR_STRING_BOOKMARKS);
917 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
918 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
919 "show,upper_folder,signal", "");
920 evas_object_show(m_upper_folder_list);
923 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
924 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
928 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
930 BROWSER_LOGD("mode=%d", mode);
931 Evas_Object *history_layout = NULL;
932 if (m_data_manager->get_history_layout())
933 history_layout = m_data_manager->get_history_layout()->get_main_layout();
936 if (mode == HISTORY_VIEW) {
937 if (history_layout) {
938 elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
939 evas_object_show(history_layout);
942 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
944 _set_navigationbar_title(BR_STRING_HISTORY);
946 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist)) {
947 if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
948 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
950 if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
951 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
953 } else if (mode == BOOKMARK_VIEW){
955 evas_object_hide(history_layout);
956 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
958 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
959 _set_navigationbar_title(BR_STRING_BOOKMARKS);
961 _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
964 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
965 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
966 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
968 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
969 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
974 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
979 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
980 Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
981 Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
982 if (!selected_item) {
983 BROWSER_LOGD("no item selected");
987 if (selected_item == history_item) {
988 BROWSER_LOGD("tab history");
989 /* history selected */
990 if (!m_data_manager->get_history_layout()) {
991 if (!m_data_manager->create_history_layout()) {
992 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
996 if (!m_data_manager->get_history_layout()->init()) {
997 BROWSER_LOGE("get_history_layout()->init() failed");
1002 bookmark_view->hide_notify_popup();
1003 bookmark_view->_set_view_mode(HISTORY_VIEW);
1006 BROWSER_LOGD("tab bookmark");
1007 if (m_data_manager->get_history_layout()) {
1008 m_data_manager->get_history_layout()->hide_notify_popup();
1009 bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1014 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1015 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1017 BROWSER_LOGD("[%s]", __func__);
1020 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1021 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1023 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1024 because of increase performance. */
1025 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1027 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1029 bookmark_view->hide_notify_popup();
1031 bookmark_view->_set_edit_mode(EINA_FALSE);
1033 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1034 bookmark_view->m_current_folder_id)) {
1035 BROWSER_LOGE("create_edit_bookmark_view failed");
1039 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1040 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1041 m_data_manager->destroy_edit_bookmark_view();
1046 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1048 BROWSER_LOGD("[%s]", __func__);
1051 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1052 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1053 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1054 elm_genlist_item_flip_set(it, EINA_TRUE);
1056 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1058 evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1061 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1064 BROWSER_LOGD("[%s]", __func__);
1068 Evas_Object *rename_edit_field = (Evas_Object *)data;
1069 elm_object_focus_set(rename_edit_field, EINA_FALSE);
1072 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1074 BROWSER_LOGD("[%s]", __func__);
1078 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1079 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1081 Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1083 Evas_Object *edit_field_entry = obj;
1084 char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1085 char *text = bookmark_view->_trim(markup_text);
1087 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1090 Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1092 Eina_Bool only_has_space = EINA_FALSE;
1093 int space_count = 0;
1094 if (text && strlen(text)) {
1095 for (int i = 0 ; i < strlen(text) ; i++) {
1099 if (space_count == strlen(text))
1100 only_has_space = EINA_TRUE;
1103 if (!text || strlen(text) == 0 || only_has_space) {
1104 bookmark_view->show_msg_popup(BR_STRING_EMPTY_FOLDER_NAME);
1105 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1107 if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1109 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1111 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1112 bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1113 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1114 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1117 elm_genlist_item_flip_set(it, EINA_FALSE);
1119 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1121 bookmark_view->m_rename_edit_field = NULL;
1126 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1128 BROWSER_LOGD("[%s]", __func__);
1131 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1133 BROWSER_LOGD("part=%s", part);
1137 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1138 std::string title = item->title;
1139 std::string url = item->url;
1142 if (part && strlen(part) > 0) {
1143 if (!strncmp(part,"elm.text", strlen("elm.text"))
1144 || !strncmp(part, "elm.base.text", strlen("elm.base.text"))) {
1145 if (!title.empty() && title.length() > 0)
1146 return strdup(title.c_str());
1149 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1150 if (!url.empty() && url.length() > 0)
1151 return strdup(url.c_str());
1160 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1162 BROWSER_LOGD("[%s]", __func__);
1163 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1167 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1169 if (part && strlen(part) > 0) {
1170 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1171 if (item->is_folder) {
1172 Evas_Object *folder_icon = elm_icon_add(obj);
1173 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1174 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1177 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1180 Evas_Object *favicon = NULL;
1181 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1185 Evas_Object *default_icon = elm_icon_add(obj);
1188 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1189 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1192 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1193 return default_icon;
1198 if (elm_genlist_decorate_mode_get(obj)) {
1199 if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1200 Evas_Object *check_button = elm_check_add(obj);
1201 if (!check_button) {
1202 BROWSER_LOGE("elm_check_add is failed.\n");
1205 evas_object_propagate_events_set(check_button, EINA_FALSE);
1207 if (!item->is_editable)
1208 elm_object_disabled_set(check_button, EINA_TRUE);
1210 elm_check_state_pointer_set(check_button, &item->is_delete);
1211 evas_object_smart_callback_add(check_button, "changed",
1212 __edit_mode_item_check_changed_cb, item);
1213 return check_button;
1214 } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1215 Evas_Object *button = elm_button_add(obj);
1217 BROWSER_LOGE("elm_button_add is failed.\n");
1220 evas_object_propagate_events_set(button, EINA_FALSE);
1222 if (!item->is_editable)
1223 elm_object_disabled_set(button, EINA_TRUE);
1224 if (item->is_folder) {
1225 elm_object_style_set(button, "rename");
1226 evas_object_smart_callback_add(button, "clicked",
1227 __rename_folder_button_clicked_cb, item);
1229 elm_object_style_set(button, "reveal");
1230 evas_object_smart_callback_add(button, "clicked",
1231 __edit_bookmark_item_button_clicked_cb, item);
1234 } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1235 Evas_Object *edit_field = br_elm_editfield_add(obj);
1236 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1237 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1239 bookmark_view->m_rename_edit_field = edit_field;
1240 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1242 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1243 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1244 elm_entry_cursor_end_set(edit_field_entry);
1246 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1247 __rename_folder_unfocus_cb, data);
1248 evas_object_smart_callback_add(edit_field_entry, "activated",
1249 __rename_folder_entry_enter_key_cb, edit_field);
1251 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1261 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1263 BROWSER_LOGD("[%s]", __func__);
1264 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1266 Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1268 BROWSER_LOGE("get_folder_id is failed.");
1272 vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1273 ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1275 BROWSER_LOGE("get_bookmark_list failed");
1279 int count = bookmark_list.size();
1281 for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1282 if (bookmark_list[i])
1283 delete bookmark_list[i];
1285 bookmark_list.clear();
1294 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1297 BROWSER_LOGD("event_info = %d", (int)event_info);
1302 Evas_Object *popup = (Evas_Object *)data;
1304 evas_object_del(popup);
1307 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1310 BROWSER_LOGD("event_info = %d", (int)event_info);
1315 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1317 if (bookmark_view->m_delete_confirm_popup) {
1318 evas_object_del(bookmark_view->m_delete_confirm_popup);
1319 bookmark_view->m_delete_confirm_popup = NULL;
1322 bookmark_view->_delete_selected_bookmark();
1324 bookmark_view->_set_edit_mode(EINA_FALSE);
1327 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1329 BROWSER_LOGD("[%s]", __func__);
1331 m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1332 if (!m_delete_confirm_popup) {
1333 BROWSER_LOGE("elm_popup_add failed");
1337 evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1338 elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1340 Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1341 elm_object_text_set(ok_button, BR_STRING_YES);
1342 elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1344 Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1345 elm_object_text_set(cancel_button, BR_STRING_NO);
1346 elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1348 evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1349 m_delete_confirm_popup);
1351 evas_object_show(m_delete_confirm_popup);
1356 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1358 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1360 BROWSER_LOGD("moved it = %d", it);
1362 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1363 Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1364 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1367 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1369 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1371 Elm_Object_Item *index_it = NULL;
1372 Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1373 it = elm_genlist_first_item_get(obj);
1375 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1376 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1377 index_it = elm_genlist_item_next_get(index_it);
1380 if (next_item && (item->order_index < next_item->order_index))
1382 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1385 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1388 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1390 BROWSER_LOGD("[%s]", __func__);
1391 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1393 Elm_Object_Item *it = NULL;
1394 Elm_Object_Item *next_it = NULL;
1395 Browser_Bookmark_DB::bookmark_item *item = NULL;
1396 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1397 Eina_Bool ret = EINA_TRUE;
1398 int index = order_index;
1401 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1403 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1404 if (item->order_index > index) {
1405 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1407 BROWSER_LOGD("modify_bookmark_order_index failed");
1408 int temp = item->order_index;
1409 item->order_index = index;
1411 elm_object_item_data_set(it, item);
1412 } else if (item->order_index == order_index) {
1413 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1414 item->order_index = index;
1415 elm_object_item_data_set(it, item);
1417 BROWSER_LOGD("modify_bookmark_order_index failed");
1420 it = elm_genlist_item_next_get(it);
1423 index = order_index;
1424 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1426 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1427 if (item->order_index < index) {
1428 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1430 BROWSER_LOGD("modify_bookmark_order_index failed");
1431 int temp = item->order_index;
1432 item->order_index = index;
1434 elm_object_item_data_set(it, item);
1435 } else if (item->order_index == order_index) {
1436 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1437 item->order_index = index;
1438 elm_object_item_data_set(it, item);
1440 BROWSER_LOGD("modify_bookmark_order_index failed");
1443 it = elm_genlist_item_prev_get(it);
1448 void Browser_Bookmark_View::history_item_clicked(const char *url)
1450 BROWSER_LOGD("[%s]", __func__);
1452 if (m_data_manager->get_browser_view())
1453 m_data_manager->get_browser_view()->load_url(url);
1455 if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1456 elm_naviframe_item_pop(m_navi_bar);
1459 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1461 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1465 Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1466 Browser_Bookmark_DB::bookmark_item *item = NULL;
1467 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1469 if (!elm_genlist_decorate_mode_get(obj)) {
1470 if (!item->is_folder) {
1471 std::string url = std::string(item->url.c_str());
1473 if (m_data_manager->get_browser_view())
1474 m_data_manager->get_browser_view()->load_url(url.c_str());
1476 if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1477 != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1478 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1480 bookmark_view->_go_to_sub_foler(item->title.c_str());
1482 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1483 Browser_Bookmark_DB::bookmark_item *item = NULL;
1484 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1485 if (item && item->is_editable) {
1486 item->is_delete = !(item->is_delete);
1487 elm_genlist_item_update(it);
1490 int delete_item_count = 0;
1491 int editable_item_count = 0;
1492 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1494 if (item->is_editable)
1495 editable_item_count++;
1496 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1497 if (item->is_delete)
1498 delete_item_count++;
1499 it = elm_genlist_item_next_get(it);
1502 if (editable_item_count == delete_item_count)
1503 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1505 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1507 bookmark_view->_show_selection_info();
1510 elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1513 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1515 BROWSER_LOGD("[%s]", __func__);
1519 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1520 bookmark_view->_go_up_to_main_folder();
1522 bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1525 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1527 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1528 return m_main_folder_genlist;
1530 return m_sub_folder_genlist;
1533 /* This just returns the copy of item list instance.
1534 * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1535 * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1536 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1538 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1539 return m_main_folder_list;
1541 return m_sub_folder_list;
1544 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1546 BROWSER_LOGD("is_empty=%d", is_empty);
1547 if (m_view_mode == BOOKMARK_VIEW) {
1548 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1549 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1553 if (m_edit_mode_select_all_check_button) {
1554 evas_object_del(m_edit_mode_select_all_check_button);
1555 m_edit_mode_select_all_check_button = NULL;
1557 if (m_edit_mode_select_all_layout) {
1558 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1559 evas_object_del(m_edit_mode_select_all_layout);
1560 m_edit_mode_select_all_layout = NULL;
1563 if (m_no_contents) {
1564 evas_object_del(m_no_contents);
1565 m_no_contents = NULL;
1568 m_no_contents = elm_layout_add(m_main_layout);
1569 if (!m_no_contents) {
1570 BROWSER_LOGE("elm_layout_add failed");
1572 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1573 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1574 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1575 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1576 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1577 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1578 evas_object_show(m_no_contents);
1580 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1582 if (m_no_contents) {
1583 elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1584 evas_object_del(m_no_contents);
1585 m_no_contents = NULL;
1586 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1587 "show,content_box,signal", "");
1590 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1594 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1596 BROWSER_LOGD("[%s]", __func__);
1598 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1600 elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1601 elm_box_pack_end(m_genlist_content_box, m_conformant);
1602 evas_object_show(m_conformant);
1604 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1606 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1607 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1608 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1610 for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1611 if (m_sub_folder_list[i]) {
1612 delete m_sub_folder_list[i];
1613 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1616 m_sub_folder_list.clear();
1618 if (m_upper_folder_icon) {
1619 evas_object_del(m_upper_folder_icon);
1620 m_upper_folder_icon = NULL;
1622 if (m_upper_folder_list) {
1623 evas_object_del(m_upper_folder_list);
1624 m_upper_folder_list = NULL;
1626 if (m_sub_folder_genlist) {
1627 evas_object_del(m_sub_folder_genlist);
1628 m_sub_folder_genlist = NULL;
1630 if (m_sub_folder_conformant) {
1631 evas_object_del(m_sub_folder_conformant);
1632 m_sub_folder_conformant = NULL;
1635 if (m_main_folder_list.size() == 0)
1636 _show_empty_content_layout(EINA_TRUE);
1638 _show_empty_content_layout(EINA_FALSE);
1640 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1643 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1646 string navigationbar_title = folder_name;
1647 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1648 folder_name, &folder_id);
1650 BROWSER_LOGE("get_folder_id is failed.");
1654 m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
1655 if (!m_sub_folder_genlist) {
1656 BROWSER_LOGD("_create_sub_folder_genlist failed");
1660 m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
1661 _set_navigationbar_title(navigationbar_title.c_str());
1663 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
1665 if (!m_sub_folder_list.size())
1666 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1669 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
1671 BROWSER_LOGD("title=[%s]", title);
1672 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1673 if (elm_object_item_content_get(top_it) == m_main_layout)
1674 elm_object_item_text_set(top_it, title);
1677 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
1679 BROWSER_LOGD("[%s]", __func__);
1680 Evas_Object *genlist = elm_genlist_add(m_main_layout);
1682 elm_box_unpack(m_genlist_content_box, m_conformant);
1683 evas_object_hide(m_conformant);
1685 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
1686 if (!m_sub_folder_conformant) {
1687 BROWSER_LOGE("elm_conformant_add failed");
1690 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
1691 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1692 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
1693 evas_object_show(m_sub_folder_conformant);
1694 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
1696 m_current_folder_id = folder_id;
1698 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1699 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1700 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
1701 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1703 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
1705 elm_object_content_set(m_sub_folder_conformant, genlist);
1706 evas_object_show(genlist);
1708 m_upper_folder_list = elm_list_add(m_main_layout);
1709 if (m_upper_folder_list) {
1710 elm_list_bounce_set(m_upper_folder_list, EINA_FALSE, EINA_FALSE);
1711 evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1712 evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
1713 evas_object_show(m_upper_folder_list);
1714 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
1715 m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
1716 if (!m_upper_folder_icon) {
1717 BROWSER_LOGE("elm_icon_add failed");
1720 if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
1721 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
1723 evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
1724 evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
1725 elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
1726 NULL, __upper_folder_clicked_cb, this);
1727 evas_object_show(m_upper_folder_icon);
1728 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
1730 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1731 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
1732 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
1735 /* Fill bookmark list */
1736 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
1737 m_current_folder_id);
1740 BROWSER_LOGE("get_bookmark_list failed");
1743 int size = m_sub_folder_list.size();
1744 BROWSER_LOGD("bookmark count=%d", size);
1745 for (int i = 0 ; i < size ; i++ ) {
1746 m_sub_folder_list[i]->user_data_1 = (void *)this;
1747 m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
1748 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
1749 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
1753 _show_empty_content_layout(EINA_TRUE);
1755 _show_empty_content_layout(EINA_FALSE);
1761 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
1763 BROWSER_LOGD("[%s]", __func__);
1764 Evas_Object *genlist = elm_genlist_add(m_main_layout);
1766 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1768 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1769 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1770 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
1771 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1773 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
1775 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
1776 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3";
1777 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
1778 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
1779 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
1780 m_bookmark_genlist_item_class.func.state_get = NULL;
1781 m_bookmark_genlist_item_class.func.del = NULL;
1782 // m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
1784 evas_object_show(genlist);
1786 /* Fill bookmark list */
1787 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
1788 m_current_folder_id);
1791 BROWSER_LOGE("get_bookmark_list failed");
1794 int size = m_main_folder_list.size();
1795 BROWSER_LOGD("bookmark count=%d", size);
1796 for (int i = 0 ; i < size ; i++ ) {
1797 m_main_folder_list[i]->user_data_1 = (void *)this;
1798 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
1799 &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
1800 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
1807 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
1811 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1814 if (!m_data_manager->create_new_folder_view()) {
1815 BROWSER_LOGE("create_new_folder_view failed");
1819 if (!m_data_manager->get_new_folder_view()->init()) {
1820 BROWSER_LOGE("get_new_folder_view()->init() failed");
1821 m_data_manager->destroy_new_folder_view();
1826 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
1830 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1831 if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
1832 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
1833 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
1837 if (!m_data_manager->get_add_to_bookmark_view()->init())
1838 m_data_manager->destroy_add_to_bookmark_view();
1841 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
1843 if (m_bottom_control_bar)
1844 evas_object_del(m_bottom_control_bar);
1846 m_bookmark_delete_controlbar_item = NULL;
1847 m_create_folder_controlbar_item = NULL;
1849 if (type == BOOKMARK_VIEW_DEFAULT) {
1850 elm_object_style_set(m_bg, "default");
1852 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
1854 m_back_button = elm_button_add(m_main_layout);
1855 if (!m_back_button) {
1856 BROWSER_LOGE("elm_button_add failed");
1859 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
1860 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
1861 evas_object_show(m_back_button);
1862 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
1864 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
1865 if (!m_bottom_control_bar) {
1866 BROWSER_LOGE("elm_toolbar_add failed");
1869 elm_object_style_set(m_bottom_control_bar, "browser/default");
1870 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
1872 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
1873 BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
1874 NULL, __add_to_bookmark_cb, this);
1875 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
1876 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
1877 __edit_controlbar_item_clicked_cb, this);
1878 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
1879 BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
1880 NULL, __create_folder_button, this);
1881 evas_object_show(m_bottom_control_bar);
1883 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1884 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
1886 if (!_get_current_folder_item_list().size())
1887 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1889 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
1890 } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
1891 elm_object_style_set(m_bg, "edit_mode");
1893 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
1894 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
1896 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
1897 if (!m_bottom_control_bar) {
1898 BROWSER_LOGE("elm_toolbar_add failed");
1901 elm_object_style_set(m_bottom_control_bar, "browser/default");
1902 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
1904 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
1905 elm_object_item_disabled_set(empty_item, EINA_TRUE);
1907 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
1908 __edit_controlbar_item_clicked_cb, this);
1910 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
1911 elm_object_item_disabled_set(empty_item, EINA_TRUE);
1912 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
1913 BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
1914 NULL, __delete_controlbar_item_clicked_cb, this);
1916 if (type == BOOKMARK_VIEW_EDIT_MODE) {
1917 int delete_item_count = 0;
1918 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
1920 Browser_Bookmark_DB::bookmark_item *item = NULL;
1921 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1922 if (item->is_delete)
1923 delete_item_count++;
1924 it = elm_genlist_item_next_get(it);
1927 if (delete_item_count)
1928 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
1930 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
1932 int delete_item_count = 0;
1933 Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
1935 Browser_History_DB::history_item *item = NULL;
1936 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
1938 /* Ignore the date label. */
1939 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
1940 if (item->is_delete)
1941 delete_item_count++;
1943 it = elm_genlist_item_next_get(it);
1945 if (delete_item_count)
1946 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
1948 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
1951 evas_object_show(m_bottom_control_bar);
1952 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
1953 } else if (type == HISTORY_VIEW_DEFAULT) {
1954 elm_object_style_set(m_bg, "default");
1956 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
1958 m_back_button = elm_button_add(m_main_layout);
1959 if (!m_back_button) {
1960 BROWSER_LOGE("elm_button_add failed");
1963 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
1964 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
1965 evas_object_show(m_back_button);
1966 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
1968 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
1969 if (!m_bottom_control_bar) {
1970 BROWSER_LOGE("elm_toolbar_add failed");
1973 elm_object_style_set(m_bottom_control_bar, "browser/default");
1974 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
1976 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
1977 elm_object_item_disabled_set(empty_item, EINA_TRUE);
1979 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
1980 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
1981 __edit_controlbar_item_clicked_cb, this);
1983 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
1984 elm_object_item_disabled_set(empty_item, EINA_TRUE);
1986 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
1987 if (history_layout) {
1988 if (!history_layout->m_history_list.size())
1989 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1991 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1994 evas_object_show(m_bottom_control_bar);
1996 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
1999 elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2004 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2006 BROWSER_LOGD("[%s]", __func__);
2010 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2011 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2013 if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2016 /* Bookmark view -> Edit one bookmark item, then cancel. */
2017 m_data_manager->destroy_edit_bookmark_view();
2019 /* History view -> slide one item -> add to bookmark, then done. */
2020 m_data_manager->destroy_add_to_bookmark_view();
2022 m_data_manager->destroy_new_folder_view();
2025 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2027 BROWSER_LOGD("[%s]", __func__);
2028 m_main_layout = elm_layout_add(m_navi_bar);
2029 if (!m_main_layout) {
2030 BROWSER_LOGE("elm_layout_add failed");
2033 if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2034 "bookmark/main_layout")) {
2035 BROWSER_LOGE("elm_layout_file_set failed");
2039 elm_win_conformant_set(m_win, EINA_TRUE);
2040 m_conformant = elm_conformant_add(m_main_layout);
2041 if (!m_conformant) {
2042 BROWSER_LOGE("elm_conformant_add failed");
2045 elm_object_style_set(m_conformant, "internal_layout");
2046 evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2047 evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2048 evas_object_show(m_conformant);
2050 elm_object_style_set(m_bg, "default");
2052 m_genlist_content_layout = elm_layout_add(m_main_layout);
2053 if (!m_genlist_content_layout) {
2054 BROWSER_LOGE("elm_layout_add failed");
2057 if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2058 "bookmark/content_layout")) {
2059 BROWSER_LOGE("elm_layout_file_set failed");
2062 evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2063 evas_object_show(m_genlist_content_layout);
2064 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2066 m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2067 if (!m_genlist_content_box) {
2068 BROWSER_LOGE("elm_box_add failed");
2071 evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2072 evas_object_show(m_genlist_content_box);
2073 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2074 elm_box_pack_end(m_genlist_content_box, m_conformant);
2076 m_main_folder_genlist = _create_main_folder_genlist();
2077 if (!m_main_folder_genlist) {
2078 BROWSER_LOGE("_create_main_folder_genlist failed");
2082 elm_object_content_set(m_conformant, m_main_folder_genlist);
2084 m_back_button = elm_button_add(m_main_layout);
2085 if (!m_back_button) {
2086 BROWSER_LOGE("elm_button_add failed");
2089 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2090 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2091 evas_object_show(m_back_button);
2093 elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_genlist_content_layout);
2095 m_top_control_bar = elm_toolbar_add(m_main_layout);
2096 if (!m_top_control_bar) {
2097 BROWSER_LOGE("elm_toolbar_add failed");
2100 elm_object_style_set(m_top_control_bar, "browser/tabbar");
2102 elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2104 elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2106 Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2107 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2108 elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2110 elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2111 elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2113 evas_object_show(m_top_control_bar);
2115 m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2116 m_main_layout, "browser/tabbar");
2118 evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2120 int size = m_main_folder_list.size();
2122 _show_empty_content_layout(EINA_TRUE);
2124 _show_empty_content_layout(EINA_FALSE);