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.
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"
26 #define UPPER_FOLDER_ICON_SIZE (64 * elm_scale_get())
28 Browser_Bookmark_View::Browser_Bookmark_View(void)
30 ,m_top_control_bar(NULL)
32 ,m_content_layout(NULL)
33 ,m_sub_main_layout(NULL)
34 ,m_genlist_content_layout(NULL)
35 ,m_genlist_content_box(NULL)
36 ,m_main_folder_genlist(NULL)
37 ,m_sub_folder_genlist(NULL)
39 ,m_upper_folder_list(NULL)
40 ,m_upper_folder_icon(NULL)
41 ,m_view_mode(BOOKMARK_VIEW)
42 ,m_edit_mode_select_all_layout(NULL)
43 ,m_edit_mode_select_all_check_button(NULL)
44 ,m_current_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID)
46 ,m_current_genlist_item_to_edit(NULL)
47 ,m_sub_folder_conformant(NULL)
48 ,m_processing_popup_timer(NULL)
49 ,m_processing_progress_bar(NULL)
52 ,m_total_item_count(0)
53 ,m_processing_popup(NULL)
54 ,m_processing_popup_layout(NULL)
55 ,m_select_all_check_value(EINA_FALSE)
56 ,m_bottom_control_bar(NULL)
57 ,m_bookmark_delete_controlbar_item(NULL)
58 ,m_bookmark_edit_controlbar_item(NULL)
59 ,m_create_folder_controlbar_item(NULL)
60 ,m_current_sweep_item(NULL)
62 ,m_delete_confirm_popup(NULL)
63 ,m_rename_edit_field(NULL)
65 BROWSER_LOGD("[%s]", __func__);
66 m_current_bookmark_navigationbar_title = "";
69 Browser_Bookmark_View::~Browser_Bookmark_View(void)
71 BROWSER_LOGD("[%s]", __func__);
72 hide_notify_popup_layout(m_sub_main_layout);
74 for(int i = 0 ; i < m_sub_folder_list.size() ; i++ ) {
75 if (m_sub_folder_list[i]) {
76 delete m_sub_folder_list[i];
77 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
80 m_sub_folder_list.clear();
82 for(int i = 0 ; i < m_main_folder_list.size() ; i++ ) {
83 if (m_main_folder_list[i]) {
84 delete m_main_folder_list[i];
85 m_main_folder_list.erase(m_main_folder_list.begin() + i);
88 m_main_folder_list.clear();
90 m_data_manager->destroy_bookmark_db();
92 evas_object_smart_callback_del(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb);
94 if (m_delete_confirm_popup)
95 evas_object_del(m_delete_confirm_popup);
99 Eina_Bool Browser_Bookmark_View::init(void)
101 BROWSER_LOGD("[%s]", __func__);
102 if (!m_data_manager->create_bookmark_db()) {
103 BROWSER_LOGE("m_data_manager->create_bookmark_db failed");
107 return _create_main_layout();
110 Eina_Bool Browser_Bookmark_View::append_bookmark_item(const char *title, const char *url)
112 if (!url || !title) {
113 BROWSER_LOGE("url or title is null");
117 if (!m_data_manager->get_bookmark_db()->save_bookmark(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title, url)) {
118 BROWSER_LOGE("save_bookmark failed");
122 Browser_Bookmark_DB::bookmark_item *item = new(nothrow) Browser_Bookmark_DB::bookmark_item;
124 BROWSER_LOGE("new(nothrow) Browser_Bookmark_DB::bookmark_item failed");
128 int bookmark_id = -1;
129 m_data_manager->get_bookmark_db()->get_bookmark_id_by_title_url(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title,
132 item->parent = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
133 item->user_data_1 = (void *)this;
134 item->url = std::string(url);
135 item->title = std::string(title);
136 item->is_folder = EINA_FALSE;
137 item->id = bookmark_id;
138 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
139 item, NULL, ELM_GENLIST_ITEM_NONE,
140 __bookmark_item_clicked_cb, this);
142 m_main_folder_list.push_back(item);
144 _show_empty_content_layout(EINA_FALSE);
149 void Browser_Bookmark_View::delete_bookmark_item(int bookmark_id)
151 BROWSER_LOGD("[%s]", __func__);
154 ret = m_data_manager->get_bookmark_db()->delete_bookmark(bookmark_id);
156 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
160 Elm_Object_Item *it = elm_genlist_first_item_get(m_main_folder_genlist);
162 Browser_Bookmark_DB::bookmark_item *item = NULL;
163 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
164 if (item->id == bookmark_id) {
165 elm_object_item_del(it);
169 it = elm_genlist_item_next_get(it);
172 for(int index = 0 ; index < m_main_folder_list.size() ; index++) {
173 if (m_main_folder_list[index]->id == bookmark_id) {
174 delete m_main_folder_list[index];
175 m_main_folder_list.erase(m_main_folder_list.begin() + index);
180 if (m_main_folder_list.size() == 0) {
181 _show_empty_content_layout(EINA_TRUE);
185 void Browser_Bookmark_View::return_to_bookmark_view(int added_bookmark_id)
187 BROWSER_LOGD("added_bookmark_id = %d", added_bookmark_id);
188 if (m_view_mode == BOOKMARK_VIEW) {
189 /* In case that bookmark view -> Edit bookmark item, then return to bookmark view. */
190 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
191 int delete_item_count = 0;
192 int editable_item_count = 0;
193 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
195 Browser_Bookmark_DB::bookmark_item *item = NULL;
196 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
197 if (item->is_editable)
198 editable_item_count++;
201 it = elm_genlist_item_next_get(it);
204 if (editable_item_count == delete_item_count)
205 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_TRUE);
207 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
209 if (delete_item_count == 0)
210 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
213 int size = _get_current_folder_item_list().size();
215 _show_empty_content_layout(EINA_TRUE);
217 _show_empty_content_layout(EINA_FALSE);
219 if (!m_data_manager->get_history_layout())
222 /* In case that history view -> add to bookmark by slide-right, then return to history view. */
223 if (m_data_manager->get_history_layout()->m_current_sweep_item) {
224 elm_genlist_item_decorate_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, "slide", EINA_FALSE);
225 elm_genlist_item_select_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
226 m_data_manager->get_history_layout()->m_current_sweep_item = NULL;
230 /* boomark view -> history -> add to bookmark by slide button, then done. */
231 if (added_bookmark_id != -1) {
232 Browser_Bookmark_DB::bookmark_item *item = m_data_manager->get_bookmark_db()->get_bookmark_item_by_id(added_bookmark_id);
234 BROWSER_LOGE("get_bookmark_item_by_id failed");
238 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
240 Browser_Bookmark_DB::bookmark_item *exist_item = NULL;
241 exist_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
242 if (exist_item->id == added_bookmark_id) {
243 exist_item->url = item->url;
244 exist_item->title = item->title;
245 exist_item->parent = item->parent;
246 elm_genlist_item_update(it);
249 it = elm_genlist_item_next_get(it);
252 if (m_current_folder_id == item->parent) {
253 /* If the saved bookmark item is in the current folder, just add it to current folder. */
254 Evas_Object *genlist = NULL;
255 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
256 genlist = m_main_folder_genlist;
258 genlist = m_sub_folder_genlist;
260 item->user_data_1 = (void *)this;
261 if (item->is_folder) {
262 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_folder_genlist_item_class,
263 item, NULL, ELM_GENLIST_ITEM_NONE,
264 __bookmark_item_clicked_cb, this);
267 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_bookmark_genlist_item_class,
268 item, NULL, ELM_GENLIST_ITEM_NONE,
269 __bookmark_item_clicked_cb, this);
272 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
273 m_main_folder_list.push_back(item);
275 m_sub_folder_list.push_back(item);
276 } else if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID
277 && item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID){
278 /* If the current folder is sub folder but the saved folder is main folder,
279 * add the saved bookmark item to main folder. */
280 item->user_data_1 = (void *)this;
281 if (item->is_folder) {
282 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_folder_genlist_item_class,
283 item, NULL, ELM_GENLIST_ITEM_NONE,
284 __bookmark_item_clicked_cb, this);
286 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
287 item, NULL, ELM_GENLIST_ITEM_NONE,
288 __bookmark_item_clicked_cb, this);
290 m_main_folder_list.push_back(item);
293 /* If the bookmark is empty page, destroy the empty layout to show the bookmark list. */
294 if (_get_current_folder_item_list().size() == 0)
295 _show_empty_content_layout(EINA_TRUE);
297 _show_empty_content_layout(EINA_FALSE);
301 void Browser_Bookmark_View::__back_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
303 BROWSER_LOGD("[%s]", __func__);
307 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
308 Evas_Object *navi_bar = bookmark_view->m_navi_bar;
310 if (elm_naviframe_bottom_item_get(navi_bar) != elm_naviframe_top_item_get(navi_bar))
311 elm_naviframe_item_pop(navi_bar);
313 /* Set the title if enter the add to bookmark while loading. */
314 m_data_manager->get_browser_view()->return_to_browser_view();
317 void Browser_Bookmark_View::__edit_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
319 BROWSER_LOGD("[%s]", __func__);
323 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
324 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
326 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
327 if (!elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
329 bookmark_view->_set_edit_mode(EINA_TRUE);
331 if (bookmark_view->m_rename_edit_field) {
332 Browser_Bookmark_DB::bookmark_item *item = NULL;
333 item = (Browser_Bookmark_DB::bookmark_item *)evas_object_data_get(bookmark_view->m_rename_edit_field, "item");
334 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(bookmark_view->m_rename_edit_field);
335 elm_entry_entry_set(edit_field_entry, item->title.c_str());
338 /* Cancel Edit bookmark */
339 bookmark_view->_set_edit_mode(EINA_FALSE);
341 } else if (history_layout) {
342 if (!elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
344 history_layout->_set_edit_mode(EINA_TRUE);
346 /* Cancel Delete bookmark */
347 history_layout->_set_edit_mode(EINA_FALSE);
351 if (bookmark_view->m_rename_edit_field)
352 elm_object_focus_set(bookmark_view->m_rename_edit_field, EINA_FALSE);
355 void Browser_Bookmark_View::__delete_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
360 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
361 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
363 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
364 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist())) {
365 /* Delete bookmark */
366 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
368 evas_object_smart_callback_add(ok_button, "clicked",
369 __delete_confirm_response_by_edit_mode_cb, bookmark_view);
373 if (history_layout && elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
374 /* Delete bookmark */
375 Evas_Object *ok_button = history_layout->_show_delete_confirm_popup();
377 evas_object_smart_callback_add(ok_button, "clicked",
378 Browser_History_Layout::__delete_confirm_response_by_edit_mode_cb,
384 void Browser_Bookmark_View::_delete_bookmark_item_from_folder_list(Browser_Bookmark_DB::bookmark_item *item)
386 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
387 for(int index = 0 ; index < m_main_folder_list.size() ; index++) {
388 if (m_main_folder_list[index] == item) {
389 delete m_main_folder_list[index];
390 m_main_folder_list.erase(m_main_folder_list.begin() + index);
394 for(int index = 0 ; index < m_sub_folder_list.size() ; index++) {
395 if (m_sub_folder_list[index] == item) {
396 delete m_sub_folder_list[index];
397 m_sub_folder_list.erase(m_sub_folder_list.begin() + index);
403 void Browser_Bookmark_View::_delete_selected_bookmark(void)
405 BROWSER_LOGD("[%s]", __func__);
406 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
407 Eina_List *delete_item_list = NULL;
408 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
409 int remain_count = 0;
411 Browser_Bookmark_DB::bookmark_item *item = NULL;
412 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
414 delete_item_list = eina_list_append(delete_item_list, it);
417 it = elm_genlist_item_next_get(it);
420 int count = eina_list_count(delete_item_list);
422 if (count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
423 /* If delete more than 100 items, show the processing popup. */
424 _show_delete_processing_popup();
426 for (int i = 0; i < count; i++) {
427 it = (Elm_Object_Item *)eina_list_data_get(delete_item_list);
428 Browser_Bookmark_DB::bookmark_item *item = NULL;
429 Eina_Bool ret = EINA_TRUE;
430 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
431 if (item->is_folder) {
433 ret = bookmark_db->get_folder_id(m_current_folder_id, item->title.c_str(), &folder_id);
435 BROWSER_LOGE("bookmark_db->get_folder_id failed");
438 ret = bookmark_db->delete_folder(folder_id);
440 BROWSER_LOGE("bookmark_db->delete_folder failed");
444 ret = bookmark_db->delete_bookmark(item->id);
446 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
450 delete_item_list = eina_list_next(delete_item_list);
452 _delete_bookmark_item_from_folder_list(item);
454 elm_object_item_del(it);
456 eina_list_free(delete_item_list);
458 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
460 if (remain_count == 0)
461 _show_empty_content_layout(EINA_TRUE);
463 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
467 void Browser_Bookmark_View::__edit_mode_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
469 BROWSER_LOGD("[%s]", __func__);
472 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
473 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
474 int delete_item_count = 0;
475 int editable_item_count = 0;
477 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
479 Browser_Bookmark_DB::bookmark_item *item = NULL;
480 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
481 if (item->is_editable)
482 editable_item_count++;
485 it = elm_genlist_item_next_get(it);
488 if (editable_item_count == delete_item_count)
489 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
491 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
493 bookmark_view->_show_selection_info();
496 void Browser_Bookmark_View::_show_delete_processing_popup(void)
498 BROWSER_LOGD("[%s]", __func__);
499 if (m_processing_popup)
500 evas_object_del(m_processing_popup);
502 m_processing_popup = elm_popup_add(m_main_layout);
503 if (!m_processing_popup) {
504 BROWSER_LOGE("elm_popup_add failed");
508 if (m_processing_popup_layout)
509 evas_object_del(m_processing_popup_layout);
510 m_processing_popup_layout = elm_layout_add(m_processing_popup);
511 if (!m_processing_popup_layout) {
512 BROWSER_LOGE("elm_layout_add failed");
515 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
516 "browser/popup_center_progressview")) {
517 BROWSER_LOGE("elm_layout_file_set failed");
520 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
522 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
523 elm_object_style_set(m_processing_progress_bar, "list_progress");
524 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
525 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
526 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
527 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
529 if (m_processing_popup_timer)
530 ecore_timer_del(m_processing_popup_timer);
532 m_processed_count = 0;
533 m_processed_it = elm_genlist_last_item_get(_get_current_folder_genlist());
535 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
536 m_total_item_count = 0;
538 Browser_Bookmark_DB::bookmark_item *item = NULL;
539 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
541 if(item->is_editable && item->is_delete)
542 m_total_item_count++;
544 it = elm_genlist_item_next_get(it);
547 m_processing_popup_timer = ecore_timer_add(0.1, __delete_processing_popup_timer_cb, this);
548 evas_object_show(m_processing_progress_bar);
550 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
551 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
552 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
553 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
555 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
557 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
558 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
559 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
560 evas_object_smart_callback_add(cancel_button, "clicked", __delete_processing_popup_response_cb, this);
562 evas_object_show(m_processing_popup);
565 Eina_Bool Browser_Bookmark_View::__delete_processing_popup_timer_cb(void *data)
568 return ECORE_CALLBACK_CANCEL;
570 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
571 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
573 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
575 double value = elm_progressbar_value_get(progress_bar);
577 __delete_processing_popup_response_cb(bookmark_view, NULL, NULL);
579 bookmark_view->m_processing_popup_timer = NULL;
580 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
582 return ECORE_CALLBACK_CANCEL;
585 while(bookmark_view->m_processed_it) {
586 Browser_Bookmark_DB::bookmark_item *item = NULL;
587 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
589 if(item->is_editable && item->is_delete) {
590 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
592 if (item->is_folder) {
594 ret = bookmark_db->get_folder_id(bookmark_view->m_current_folder_id,
595 item->title.c_str(), &folder_id);
597 BROWSER_LOGE("bookmark_db->get_folder_id failed");
598 return ECORE_CALLBACK_CANCEL;
600 ret = bookmark_db->delete_folder(folder_id);
602 BROWSER_LOGE("bookmark_db->delete_folder failed");
603 return ECORE_CALLBACK_CANCEL;
606 ret = bookmark_db->delete_bookmark(item->id);
608 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
609 return ECORE_CALLBACK_CANCEL;
612 bookmark_view->_delete_bookmark_item_from_folder_list(item);
613 bookmark_view->m_processed_count++;
614 Elm_Object_Item *it = bookmark_view->m_processed_it;
615 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
616 elm_object_item_del(it);
618 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
620 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
622 if (bookmark_view->m_processed_count % 5 == 0)
626 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
627 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
629 char progress_text[20] = {0, };
630 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
631 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
633 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
634 "elm.text.right", progress_text);
636 return ECORE_CALLBACK_RENEW;
639 void Browser_Bookmark_View::_show_select_processing_popup(void)
641 BROWSER_LOGD("[%s]", __func__);
642 if (m_processing_popup)
643 evas_object_del(m_processing_popup);
645 m_processing_popup = elm_popup_add(m_main_layout);
646 if (!m_processing_popup) {
647 BROWSER_LOGE("elm_popup_add failed");
651 if (m_processing_popup_layout)
652 evas_object_del(m_processing_popup_layout);
653 m_processing_popup_layout = elm_layout_add(m_processing_popup);
654 if (!m_processing_popup_layout) {
655 BROWSER_LOGE("elm_layout_add failed");
658 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
659 "browser/popup_center_progressview")) {
660 BROWSER_LOGE("elm_layout_file_set failed");
663 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
665 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
666 elm_object_style_set(m_processing_progress_bar, "list_progress");
667 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
668 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
669 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
670 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
672 if (m_processing_popup_timer)
673 ecore_timer_del(m_processing_popup_timer);
675 m_processed_count = 0;
676 m_processed_it = elm_genlist_first_item_get(_get_current_folder_genlist());
678 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
679 m_total_item_count = 0;
681 Browser_Bookmark_DB::bookmark_item *item = NULL;
682 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
684 if(item->is_editable)
685 m_total_item_count++;
687 it = elm_genlist_item_next_get(it);
690 m_processing_popup_timer = ecore_timer_add(0.1, __select_processing_popup_timer_cb, this);
691 evas_object_show(m_processing_progress_bar);
693 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
694 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
695 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
696 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
698 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
700 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
701 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
702 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
703 evas_object_smart_callback_add(cancel_button, "clicked", __select_processing_popup_response_cb, this);
705 evas_object_show(m_processing_popup);
707 Eina_Bool check_value = elm_check_state_get(m_edit_mode_select_all_check_button);
708 m_select_all_check_value = check_value;
711 elm_check_state_set(m_edit_mode_select_all_check_button, !check_value);
714 Eina_Bool Browser_Bookmark_View::__select_processing_popup_timer_cb(void *data)
717 return ECORE_CALLBACK_CANCEL;
719 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
720 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
722 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
724 double value = elm_progressbar_value_get(progress_bar);
726 __select_processing_popup_response_cb(bookmark_view, NULL, NULL);
728 bookmark_view->m_processing_popup_timer = NULL;
729 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !check_value);
730 bookmark_view->_show_selection_info();
732 return ECORE_CALLBACK_CANCEL;
735 while(bookmark_view->m_processed_it) {
736 Browser_Bookmark_DB::bookmark_item *item = NULL;
737 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
739 if(item->is_editable) {
740 item->is_delete = !check_value;
741 elm_genlist_item_update(bookmark_view->m_processed_it);
742 bookmark_view->m_processed_count++;
745 bookmark_view->m_processed_it = elm_genlist_item_next_get(bookmark_view->m_processed_it);
747 if (bookmark_view->m_processed_count % 30 == 0)
751 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
752 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
754 char progress_text[20] = {0, };
755 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
756 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
758 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
759 "elm.text.right", progress_text);
761 return ECORE_CALLBACK_RENEW;
764 void Browser_Bookmark_View::__delete_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
766 BROWSER_LOGD("[%s]", __func__);
770 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
772 bookmark_view->m_processing_progress_bar = NULL;
773 bookmark_view->m_processed_it = NULL;
775 evas_object_del(bookmark_view->m_processing_popup);
777 if (bookmark_view->m_processing_popup_timer) {
778 ecore_timer_del(bookmark_view->m_processing_popup_timer);
779 bookmark_view->m_processing_popup_timer = NULL;
782 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
784 vector<Browser_Bookmark_DB::bookmark_item *> item_list = bookmark_view->_get_current_folder_item_list();
785 if (item_list.size() == 0)
786 bookmark_view->_show_empty_content_layout(EINA_TRUE);
789 void Browser_Bookmark_View::__select_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
791 BROWSER_LOGD("[%s]", __func__);
795 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
797 evas_object_del(bookmark_view->m_processing_popup);
798 bookmark_view->m_processing_progress_bar = NULL;
799 bookmark_view->m_processed_it = NULL;
801 if (bookmark_view->m_processing_popup_timer) {
802 ecore_timer_del(bookmark_view->m_processing_popup_timer);
803 bookmark_view->m_processing_popup_timer = NULL;
806 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
809 Browser_Bookmark_DB::bookmark_item *item = NULL;
810 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
812 if(item->is_editable && item->is_delete)
815 it = elm_genlist_item_next_get(it);
819 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_FALSE);
821 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_TRUE);
824 void Browser_Bookmark_View::__edit_mode_select_all_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
829 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
830 int item_count = bookmark_view->_get_current_folder_item_list().size();
831 BROWSER_LOGD("item_count=%d", item_count);
833 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT)
834 bookmark_view->_show_select_processing_popup();
836 Eina_Bool value = elm_check_state_get(bookmark_view->m_edit_mode_select_all_check_button);
837 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !value);
839 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
841 Browser_Bookmark_DB::bookmark_item *item = NULL;
842 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
844 if(item->is_editable) {
845 item->is_delete = !value;
846 elm_genlist_item_update(it);
849 it = elm_genlist_item_next_get(it);
852 bookmark_view->_show_selection_info();
856 void Browser_Bookmark_View::__edit_mode_select_all_check_changed_cb(void *data,
857 Evas_Object *obj, void *event_info)
859 BROWSER_LOGD("[%s]", __func__);
863 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
864 int item_count = bookmark_view->_get_current_folder_item_list().size();
865 BROWSER_LOGD("item_count=%d", item_count);
866 Eina_Bool value = elm_check_state_get(obj);
868 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
869 /* Workaround to share the same code with __edit_mode_select_all_clicked_cb */
870 elm_check_state_set(obj, !value);
871 bookmark_view->_show_select_processing_popup();
873 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
875 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
877 if(item->is_editable) {
878 item->is_delete = value;
879 elm_genlist_item_update(it);
882 it = elm_genlist_item_next_get(it);
885 bookmark_view->_show_selection_info();
889 void Browser_Bookmark_View::_show_selection_info(void)
891 BROWSER_LOGD("[%s]", __func__);
892 int editable_item_count = 0;
893 int editable_folder_count = 0;
895 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
897 Browser_Bookmark_DB::bookmark_item *item = NULL;
898 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
899 if (item->is_delete) {
901 editable_folder_count++;
903 editable_item_count++;
905 it = elm_genlist_item_next_get(it);
908 if (editable_folder_count == 0 && editable_item_count == 0) {
909 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
910 hide_notify_popup_layout(m_sub_main_layout);
913 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
915 if (editable_folder_count + editable_item_count == 1) {
916 show_notify_popup_layout(BR_STRING_ONE_ITEM_SELECTED, 0, m_sub_main_layout);
917 } else if (editable_folder_count + editable_item_count > 1) {
918 char *small_popup_text = NULL;
919 int string_len = strlen(BR_STRING_ITEMS_SELECTED) + 4; /* 4 : reserved for maximun count */
921 small_popup_text = (char *)malloc(string_len * sizeof(char));
922 memset(small_popup_text, 0x00, string_len);
924 snprintf(small_popup_text, string_len, BR_STRING_ITEMS_SELECTED, editable_folder_count + editable_item_count);
925 show_notify_popup_layout(small_popup_text, 0, m_sub_main_layout);
927 if (small_popup_text)
928 free(small_popup_text);
929 small_popup_text = 0x00;
933 void Browser_Bookmark_View::_set_edit_mode(Eina_Bool edit_mode)
935 BROWSER_LOGD("[%s]", __func__);
936 hide_notify_popup_layout(m_sub_main_layout);
939 elm_object_style_set(m_bg, "edit_mode");
941 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
942 if (!m_edit_mode_select_all_layout) {
943 BROWSER_LOGE("elm_layout_add failed");
946 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
947 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
948 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
949 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
950 __edit_mode_select_all_clicked_cb, this);
951 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
952 if (!m_edit_mode_select_all_check_button) {
953 BROWSER_LOGE("elm_layout_add failed");
956 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
957 __edit_mode_select_all_check_changed_cb, this);
958 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
960 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
961 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
963 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
964 evas_object_show(m_edit_mode_select_all_layout);
966 Elm_Object_Item *it = NULL;
967 Browser_Bookmark_DB::bookmark_item *item = NULL;
968 it = elm_genlist_first_item_get(_get_current_folder_genlist());
970 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
971 if (!item->is_editable)
972 elm_object_item_disabled_set(it, EINA_TRUE);
974 it = elm_genlist_item_next_get(it);
976 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
977 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
978 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
980 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
982 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
983 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
984 "hide,upper_folder,signal", "");
985 evas_object_hide(m_upper_folder_list);
988 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
989 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
991 elm_object_style_set(m_bg, "default");
993 if (m_edit_mode_select_all_check_button) {
994 evas_object_del(m_edit_mode_select_all_check_button);
995 m_edit_mode_select_all_check_button = NULL;
997 if (m_edit_mode_select_all_layout) {
998 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
999 evas_object_del(m_edit_mode_select_all_layout);
1000 m_edit_mode_select_all_layout = NULL;
1003 Elm_Object_Item *it = NULL;
1004 Browser_Bookmark_DB::bookmark_item *item = NULL;
1005 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1007 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1008 if (!item->is_editable)
1009 elm_object_item_disabled_set(it, EINA_FALSE);
1010 item->is_delete = EINA_FALSE;
1011 it = elm_genlist_item_next_get(it);
1013 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1014 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1016 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
1018 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1020 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
1021 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1022 "show,upper_folder,signal", "");
1023 evas_object_show(m_upper_folder_list);
1026 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1027 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1031 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
1033 BROWSER_LOGD("mode=%d", mode);
1034 Evas_Object *history_layout = NULL;
1035 if (m_data_manager->get_history_layout())
1036 history_layout = m_data_manager->get_history_layout()->get_main_layout();
1039 if (mode == HISTORY_VIEW) {
1040 if (history_layout) {
1041 elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
1042 evas_object_show(history_layout);
1045 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
1047 _set_navigationbar_title(BR_STRING_HISTORY);
1049 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist)) {
1050 if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
1051 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
1053 if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
1054 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
1056 } else if (mode == BOOKMARK_VIEW){
1058 evas_object_hide(history_layout);
1059 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
1061 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1062 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1064 _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
1067 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
1068 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
1069 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
1071 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1072 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
1077 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
1082 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1083 Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
1084 Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
1085 if (!selected_item) {
1086 BROWSER_LOGD("no item selected");
1090 if (selected_item == history_item) {
1091 BROWSER_LOGD("tab history");
1092 /* history selected */
1093 if (!m_data_manager->get_history_layout()) {
1094 if (!m_data_manager->create_history_layout()) {
1095 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
1099 if (!m_data_manager->get_history_layout()->init()) {
1100 BROWSER_LOGE("get_history_layout()->init() failed");
1105 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1106 bookmark_view->_set_view_mode(HISTORY_VIEW);
1109 BROWSER_LOGD("tab bookmark");
1110 if (m_data_manager->get_history_layout()) {
1111 m_data_manager->get_history_layout()->hide_notify_popup_layout(
1112 m_data_manager->get_history_layout()->m_sub_main_history_layout);
1113 bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1118 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1119 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1121 BROWSER_LOGD("[%s]", __func__);
1124 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1125 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1127 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1128 because of increase performance. */
1129 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1131 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1133 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1135 bookmark_view->_set_edit_mode(EINA_FALSE);
1137 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1138 bookmark_view->m_current_folder_id)) {
1139 BROWSER_LOGE("create_edit_bookmark_view failed");
1143 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1144 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1145 m_data_manager->destroy_edit_bookmark_view();
1150 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1152 BROWSER_LOGD("[%s]", __func__);
1155 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1156 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1157 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1158 elm_genlist_item_flip_set(it, EINA_TRUE);
1160 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1162 evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1165 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1168 BROWSER_LOGD("[%s]", __func__);
1172 Evas_Object *rename_edit_field = (Evas_Object *)data;
1173 elm_object_focus_set(rename_edit_field, EINA_FALSE);
1176 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1178 BROWSER_LOGD("[%s]", __func__);
1182 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1183 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1185 Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1187 Evas_Object *edit_field_entry = obj;
1188 char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1189 char *text = bookmark_view->_trim(markup_text);
1191 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1194 Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1196 Eina_Bool only_has_space = EINA_FALSE;
1197 int space_count = 0;
1198 if (text && strlen(text)) {
1199 for (int i = 0 ; i < strlen(text) ; i++) {
1203 if (space_count == strlen(text))
1204 only_has_space = EINA_TRUE;
1207 if (!text || strlen(text) == 0 || only_has_space) {
1208 bookmark_view->show_msg_popup(BR_STRING_ENTER_FOLDER_NAME);
1209 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1211 if (strcmp(text, item->title.c_str())) {
1212 if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1214 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1216 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1217 bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1219 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1220 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1224 elm_genlist_item_flip_set(it, EINA_FALSE);
1226 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1228 bookmark_view->m_rename_edit_field = NULL;
1233 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1235 BROWSER_LOGD("[%s]", __func__);
1238 #if defined(GENLIST_SWEEP)
1239 void Browser_Bookmark_View::__sweep_right_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1241 BROWSER_LOGD("[%s]", __func__);
1244 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1246 if (elm_genlist_decorate_mode_get(obj))
1249 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_TRUE);
1250 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_NONE);
1253 if (bookmark_view->m_current_sweep_item
1254 && (Elm_Object_Item *)event_info != bookmark_view->m_current_sweep_item) {
1255 elm_genlist_item_select_mode_set(bookmark_view->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1256 bookmark_view->m_current_sweep_item = (Elm_Object_Item *)event_info;
1260 void Browser_Bookmark_View::__sweep_cancel_genlist_cb(void *data,
1261 Evas_Object *obj, void *event_info)
1263 BROWSER_LOGD("[%s]", __func__);
1268 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1269 Elm_Object_Item *it = (Elm_Object_Item*)elm_genlist_decorated_item_get(obj);
1271 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1272 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1274 if (it == bookmark_view->m_current_sweep_item)
1275 bookmark_view->m_current_sweep_item = NULL;
1279 void Browser_Bookmark_View::__sweep_left_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1281 BROWSER_LOGD("[%s]", __func__);
1284 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1286 if (elm_genlist_decorate_mode_get(obj))
1289 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_FALSE);
1290 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
1293 bookmark_view->m_current_sweep_item = NULL;
1297 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1299 BROWSER_LOGD("part=%s", part);
1303 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1305 const char *title = item->title.c_str();
1306 BROWSER_LOGD("title(%p)=%s", title, title);
1307 const char *url = item->url.c_str();
1308 BROWSER_LOGD("url(%p)=%s", url, url);
1310 if (part && strlen(part) > 0) {
1311 if (!strncmp(part,"elm.text", strlen("elm.text"))
1312 || !strncmp(part, "elm.base.text", strlen("elm.base.text"))
1313 || !strncmp(part, "elm.slide.text.1", strlen("elm.slide.text.1"))) {
1314 if (title && strlen(title))
1315 return strdup(title);
1318 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1319 if (url && strlen(url))
1329 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1331 BROWSER_LOGD("[%s]", __func__);
1332 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1336 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1338 if (part && strlen(part) > 0) {
1339 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1340 if (item->is_folder) {
1341 Evas_Object *folder_icon = elm_icon_add(obj);
1342 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1343 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1346 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1349 Evas_Object *favicon = NULL;
1350 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1354 Evas_Object *default_icon = elm_icon_add(obj);
1357 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1358 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1361 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1362 return default_icon;
1365 } else if (!strncmp(part, "elm.slide.swallow.1", strlen("elm.slide.swallow.1"))) {
1366 Evas_Object *edit_button = elm_button_add(obj);
1368 BROWSER_LOGE("elm_button_add is failed.\n");
1371 elm_object_style_set(edit_button, "text_only/sweep");
1372 elm_object_text_set(edit_button, BR_STRING_EDIT);
1373 if (!item->is_editable)
1374 elm_object_disabled_set(edit_button, EINA_TRUE);
1375 evas_object_smart_callback_add(edit_button, "clicked", __slide_edit_button_clicked_cb, item);
1377 } else if (!strncmp(part, "elm.slide.swallow.2", strlen("elm.slide.swallow.2"))) {
1378 if (item->is_folder) {
1379 Evas_Object *delete_button = elm_button_add(obj);
1380 if (!delete_button) {
1381 BROWSER_LOGE("elm_button_add is failed.\n");
1384 elm_object_style_set(delete_button, "text_only/sweep");
1385 elm_object_text_set(delete_button, BR_STRING_DELETE);
1386 if (!item->is_editable)
1387 elm_object_disabled_set(delete_button, EINA_TRUE);
1388 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1389 return delete_button;
1391 Evas_Object *share_button = elm_button_add(obj);
1392 if (!share_button) {
1393 BROWSER_LOGE("elm_button_add is failed.\n");
1396 elm_object_style_set(share_button, "text_only/sweep");
1397 elm_object_text_set(share_button, BR_STRING_SHARE);
1398 evas_object_smart_callback_add(share_button, "clicked", __slide_share_button_clicked_cb, item);
1399 return share_button;
1401 } else if (!strncmp(part, "elm.slide.swallow.3", strlen("elm.slide.swallow.3"))) {
1402 Evas_Object *delete_button = elm_button_add(obj);
1403 if (!delete_button) {
1404 BROWSER_LOGE("elm_button_add is failed.\n");
1407 elm_object_style_set(delete_button, "text_only/sweep");
1408 elm_object_text_set(delete_button, BR_STRING_DELETE);
1409 if (!item->is_editable)
1410 elm_object_disabled_set(delete_button, EINA_TRUE);
1411 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1412 return delete_button;
1415 if (elm_genlist_decorate_mode_get(obj)) {
1416 if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1417 Evas_Object *check_button = elm_check_add(obj);
1418 if (!check_button) {
1419 BROWSER_LOGE("elm_check_add is failed.\n");
1422 evas_object_propagate_events_set(check_button, EINA_FALSE);
1424 if (!item->is_editable)
1425 elm_object_disabled_set(check_button, EINA_TRUE);
1427 elm_check_state_pointer_set(check_button, &item->is_delete);
1428 evas_object_smart_callback_add(check_button, "changed",
1429 __edit_mode_item_check_changed_cb, item);
1430 return check_button;
1431 } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1432 Evas_Object *button = elm_button_add(obj);
1434 BROWSER_LOGE("elm_button_add is failed.\n");
1437 evas_object_propagate_events_set(button, EINA_FALSE);
1439 if (!item->is_editable)
1440 elm_object_disabled_set(button, EINA_TRUE);
1441 if (item->is_folder) {
1442 elm_object_style_set(button, "rename");
1443 evas_object_smart_callback_add(button, "clicked",
1444 __rename_folder_button_clicked_cb, item);
1446 elm_object_style_set(button, "reveal");
1447 evas_object_smart_callback_add(button, "clicked",
1448 __edit_bookmark_item_button_clicked_cb, item);
1451 } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1452 Evas_Object *edit_field = br_elm_editfield_add(obj);
1453 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1454 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1456 bookmark_view->m_rename_edit_field = edit_field;
1457 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1459 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1460 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1461 elm_entry_cursor_end_set(edit_field_entry);
1463 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1464 __rename_folder_unfocus_cb, data);
1465 evas_object_smart_callback_add(edit_field_entry, "activated",
1466 __rename_folder_entry_enter_key_cb, edit_field);
1468 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1478 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1480 BROWSER_LOGD("[%s]", __func__);
1481 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1483 Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1485 BROWSER_LOGE("get_folder_id is failed.");
1489 vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1490 ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1492 BROWSER_LOGE("get_bookmark_list failed");
1496 int count = bookmark_list.size();
1498 for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1499 if (bookmark_list[i])
1500 delete bookmark_list[i];
1502 bookmark_list.clear();
1510 void Browser_Bookmark_View::__slide_edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1512 BROWSER_LOGD("[%s]", __func__);
1516 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1517 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1518 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1520 if (item->is_folder) {
1521 /* edit folder by slide genlist item */
1522 if (bookmark_view->_is_empty_folder(item->title)) {
1523 bookmark_view->show_msg_popup(BR_STRING_EMPTY);
1527 bookmark_view->_go_to_sub_foler(item->title.c_str());
1529 bookmark_view->_set_edit_mode(EINA_TRUE);
1531 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1532 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1533 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1535 edje_object_signal_emit(elm_layout_edje_get(bookmark_view->m_main_layout),
1536 "expand_header_no_animation,signal", "");
1538 /* edit bookmark item by slide genlist item */
1539 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1540 because of increase performance. */
1541 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1542 bookmark_view->m_current_folder_id)) {
1543 BROWSER_LOGE("create_edit_bookmark_view failed");
1547 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1548 BROWSER_LOGE("new get_edit_bookmark_view()->init() failed");
1549 m_data_manager->destroy_edit_bookmark_view();
1554 elm_genlist_item_decorate_mode_set(bookmark_view->m_current_genlist_item_to_edit, "slide", EINA_FALSE);
1555 elm_genlist_item_select_mode_set(bookmark_view->m_current_genlist_item_to_edit, ELM_OBJECT_SELECT_MODE_DEFAULT);
1558 void Browser_Bookmark_View::__delete_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1561 BROWSER_LOGD("event_info = %d", (int)event_info);
1566 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1567 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1569 evas_object_del(bookmark_view->m_delete_confirm_popup);
1571 bookmark_view->_delete_bookmark_item_by_slide_button(item);
1574 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1577 BROWSER_LOGD("event_info = %d", (int)event_info);
1582 Evas_Object *popup = (Evas_Object *)data;
1584 evas_object_del(popup);
1587 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1590 BROWSER_LOGD("event_info = %d", (int)event_info);
1595 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1597 if (bookmark_view->m_delete_confirm_popup) {
1598 evas_object_del(bookmark_view->m_delete_confirm_popup);
1599 bookmark_view->m_delete_confirm_popup = NULL;
1602 bookmark_view->_delete_selected_bookmark();
1604 bookmark_view->_set_edit_mode(EINA_FALSE);
1607 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1609 BROWSER_LOGD("[%s]", __func__);
1611 m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1612 if (!m_delete_confirm_popup) {
1613 BROWSER_LOGE("elm_popup_add failed");
1617 evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1618 elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1620 Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1621 elm_object_text_set(ok_button, BR_STRING_YES);
1622 elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1624 Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1625 elm_object_text_set(cancel_button, BR_STRING_NO);
1626 elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1628 evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1629 m_delete_confirm_popup);
1631 evas_object_show(m_delete_confirm_popup);
1636 void Browser_Bookmark_View::_delete_bookmark_item_by_slide_button(Browser_Bookmark_DB::bookmark_item *item)
1638 BROWSER_LOGD("[%s]", __func__);
1639 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1640 int ret = EINA_TRUE;
1642 if (item->is_folder) {
1644 ret = m_data_manager->get_bookmark_db()->get_folder_id(m_current_folder_id,
1645 item->title.c_str(), &folder_id);
1647 BROWSER_LOGE("bookmark_db->get_folder_id failed");
1650 ret = m_data_manager->get_bookmark_db()->delete_folder(folder_id);
1652 BROWSER_LOGE("bookmark_db->delete_folder failed");
1656 ret = m_data_manager->get_bookmark_db()->delete_bookmark(item->id);
1658 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
1663 _delete_bookmark_item_from_folder_list(item);
1665 elm_object_item_del(it);
1667 if (_get_current_folder_item_list().size() == 0) {
1668 _show_empty_content_layout(EINA_TRUE);
1671 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
1674 void Browser_Bookmark_View::__slide_share_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1676 BROWSER_LOGD("[%s]", __func__);
1680 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1681 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1682 if (!bookmark_view->_show_share_popup(item->url.c_str()))
1683 BROWSER_LOGE("_show_share_popup failed");
1686 void Browser_Bookmark_View::__slide_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1688 BROWSER_LOGD("[%s]", __func__);
1692 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1693 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1695 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
1697 evas_object_smart_callback_add(ok_button, "clicked",
1698 __delete_confirm_response_by_slide_button_cb, item);
1701 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1703 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1705 BROWSER_LOGD("moved it = %d", it);
1707 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1708 Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1709 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1712 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1714 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1716 Elm_Object_Item *index_it = NULL;
1717 Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1718 it = elm_genlist_first_item_get(obj);
1720 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1721 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1722 index_it = elm_genlist_item_next_get(index_it);
1725 if (next_item && (item->order_index < next_item->order_index))
1727 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1730 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1733 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1735 BROWSER_LOGD("[%s]", __func__);
1736 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1738 Elm_Object_Item *it = NULL;
1739 Elm_Object_Item *next_it = NULL;
1740 Browser_Bookmark_DB::bookmark_item *item = NULL;
1741 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1742 Eina_Bool ret = EINA_TRUE;
1743 int index = order_index;
1746 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1748 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1749 if (item->order_index > index) {
1750 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1752 BROWSER_LOGD("modify_bookmark_order_index failed");
1753 int temp = item->order_index;
1754 item->order_index = index;
1756 elm_object_item_data_set(it, item);
1757 } else if (item->order_index == order_index) {
1758 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1759 item->order_index = index;
1760 elm_object_item_data_set(it, item);
1762 BROWSER_LOGD("modify_bookmark_order_index failed");
1765 it = elm_genlist_item_next_get(it);
1768 index = order_index;
1769 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1771 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1772 if (item->order_index < index) {
1773 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1775 BROWSER_LOGD("modify_bookmark_order_index failed");
1776 int temp = item->order_index;
1777 item->order_index = index;
1779 elm_object_item_data_set(it, item);
1780 } else if (item->order_index == order_index) {
1781 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1782 item->order_index = index;
1783 elm_object_item_data_set(it, item);
1785 BROWSER_LOGD("modify_bookmark_order_index failed");
1788 it = elm_genlist_item_prev_get(it);
1793 void Browser_Bookmark_View::history_item_clicked(const char *url)
1795 BROWSER_LOGD("[%s]", __func__);
1797 if (m_data_manager->get_browser_view())
1798 m_data_manager->get_browser_view()->load_url(url);
1800 if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1801 elm_naviframe_item_pop(m_navi_bar);
1804 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1806 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1810 Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1811 Browser_Bookmark_DB::bookmark_item *item = NULL;
1812 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1814 if (!elm_genlist_decorate_mode_get(obj)) {
1815 if (!item->is_folder) {
1816 std::string url = std::string(item->url.c_str());
1818 if (m_data_manager->get_browser_view())
1819 m_data_manager->get_browser_view()->load_url(url.c_str());
1821 if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1822 != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1823 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1825 bookmark_view->_go_to_sub_foler(item->title.c_str());
1827 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1828 Browser_Bookmark_DB::bookmark_item *item = NULL;
1829 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1830 if (item && item->is_editable) {
1831 item->is_delete = !(item->is_delete);
1832 elm_genlist_item_update(it);
1835 int delete_item_count = 0;
1836 int editable_item_count = 0;
1837 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1839 if (item->is_editable)
1840 editable_item_count++;
1841 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1842 if (item->is_delete)
1843 delete_item_count++;
1844 it = elm_genlist_item_next_get(it);
1847 if (editable_item_count == delete_item_count)
1848 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1850 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1852 bookmark_view->_show_selection_info();
1855 elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1858 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1860 BROWSER_LOGD("[%s]", __func__);
1864 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1865 bookmark_view->_go_up_to_main_folder();
1867 bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1870 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1872 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1873 return m_main_folder_genlist;
1875 return m_sub_folder_genlist;
1878 /* This just returns the copy of item list instance.
1879 * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1880 * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1881 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1883 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1884 return m_main_folder_list;
1886 return m_sub_folder_list;
1889 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1891 BROWSER_LOGD("is_empty=%d", is_empty);
1892 if (m_view_mode == BOOKMARK_VIEW) {
1893 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1894 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1898 if (m_edit_mode_select_all_check_button) {
1899 evas_object_del(m_edit_mode_select_all_check_button);
1900 m_edit_mode_select_all_check_button = NULL;
1902 if (m_edit_mode_select_all_layout) {
1903 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1904 evas_object_del(m_edit_mode_select_all_layout);
1905 m_edit_mode_select_all_layout = NULL;
1908 if (m_no_contents) {
1909 evas_object_del(m_no_contents);
1910 m_no_contents = NULL;
1913 m_no_contents = elm_layout_add(m_main_layout);
1914 if (!m_no_contents) {
1915 BROWSER_LOGE("elm_layout_add failed");
1917 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1918 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1919 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1920 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1921 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1922 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1923 evas_object_show(m_no_contents);
1925 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1927 if (m_no_contents) {
1928 elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1929 evas_object_del(m_no_contents);
1930 m_no_contents = NULL;
1931 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1932 "show,content_box,signal", "");
1935 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1939 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1941 BROWSER_LOGD("[%s]", __func__);
1943 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1945 elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1946 elm_box_pack_end(m_genlist_content_box, m_conformant);
1947 evas_object_show(m_conformant);
1949 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1951 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1952 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1953 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1955 for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1956 if (m_sub_folder_list[i]) {
1957 delete m_sub_folder_list[i];
1958 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1961 m_sub_folder_list.clear();
1963 if (m_upper_folder_icon) {
1964 evas_object_del(m_upper_folder_icon);
1965 m_upper_folder_icon = NULL;
1967 if (m_upper_folder_list) {
1968 evas_object_del(m_upper_folder_list);
1969 m_upper_folder_list = NULL;
1971 if (m_sub_folder_genlist) {
1972 evas_object_del(m_sub_folder_genlist);
1973 m_sub_folder_genlist = NULL;
1975 if (m_sub_folder_conformant) {
1976 evas_object_del(m_sub_folder_conformant);
1977 m_sub_folder_conformant = NULL;
1980 if (m_main_folder_list.size() == 0)
1981 _show_empty_content_layout(EINA_TRUE);
1983 _show_empty_content_layout(EINA_FALSE);
1985 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1988 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1991 string navigationbar_title = folder_name;
1992 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1993 folder_name, &folder_id);
1995 BROWSER_LOGE("get_folder_id is failed.");
1999 m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
2000 if (!m_sub_folder_genlist) {
2001 BROWSER_LOGD("_create_sub_folder_genlist failed");
2005 m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
2006 _set_navigationbar_title(navigationbar_title.c_str());
2008 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2010 if (!m_sub_folder_list.size())
2011 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2014 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
2016 BROWSER_LOGD("title=[%s]", title);
2017 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2018 if (elm_object_item_content_get(top_it) == m_main_layout)
2019 elm_object_item_text_set(top_it, title);
2022 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
2024 BROWSER_LOGD("[%s]", __func__);
2025 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2027 elm_box_unpack(m_genlist_content_box, m_conformant);
2028 evas_object_hide(m_conformant);
2030 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
2031 if (!m_sub_folder_conformant) {
2032 BROWSER_LOGE("elm_conformant_add failed");
2035 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
2036 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2037 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2038 evas_object_show(m_sub_folder_conformant);
2039 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
2041 m_current_folder_id = folder_id;
2043 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2044 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2045 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2046 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2048 #if defined(GENLIST_SWEEP)
2049 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2050 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2051 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2052 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2055 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2057 elm_object_content_set(m_sub_folder_conformant, genlist);
2058 evas_object_show(genlist);
2060 m_upper_folder_list = elm_list_add(m_main_layout);
2061 if (m_upper_folder_list) {
2062 elm_list_bounce_set(m_upper_folder_list, EINA_FALSE, EINA_FALSE);
2063 evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2064 evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
2065 evas_object_show(m_upper_folder_list);
2066 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
2067 m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
2068 if (!m_upper_folder_icon) {
2069 BROWSER_LOGE("elm_icon_add failed");
2072 if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
2073 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
2075 evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2076 evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2077 elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
2078 NULL, __upper_folder_clicked_cb, this);
2079 evas_object_show(m_upper_folder_icon);
2080 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
2082 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2083 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
2084 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
2087 /* Fill bookmark list */
2088 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
2089 m_current_folder_id);
2092 BROWSER_LOGE("get_bookmark_list failed");
2095 int size = m_sub_folder_list.size();
2096 BROWSER_LOGD("bookmark count=%d", size);
2097 for (int i = 0 ; i < size ; i++ ) {
2098 m_sub_folder_list[i]->user_data_1 = (void *)this;
2099 m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2100 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
2101 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2105 _show_empty_content_layout(EINA_TRUE);
2107 _show_empty_content_layout(EINA_FALSE);
2113 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
2115 BROWSER_LOGD("[%s]", __func__);
2116 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2118 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
2120 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2121 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2122 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2123 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2125 #if defined(GENLIST_SWEEP)
2126 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2127 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2128 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2129 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2131 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2133 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
2134 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3.text";
2135 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
2136 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
2137 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2138 m_bookmark_genlist_item_class.func.state_get = NULL;
2139 m_bookmark_genlist_item_class.func.del = NULL;
2140 // m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
2142 m_folder_genlist_item_class.item_style = "1text.1icon.2";
2143 m_folder_genlist_item_class.decorate_item_style = "mode/slide2";
2144 m_folder_genlist_item_class.decorate_all_item_style = "edit_default";
2145 m_folder_genlist_item_class.func.text_get = __genlist_label_get_cb;
2146 m_folder_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2147 m_folder_genlist_item_class.func.state_get = NULL;
2148 m_folder_genlist_item_class.func.del = NULL;
2149 evas_object_show(genlist);
2151 /* Fill bookmark list */
2152 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
2153 m_current_folder_id);
2156 BROWSER_LOGE("get_bookmark_list failed");
2159 int size = m_main_folder_list.size();
2160 BROWSER_LOGD("bookmark count=%d", size);
2161 for (int i = 0 ; i < size ; i++ ) {
2162 m_main_folder_list[i]->user_data_1 = (void *)this;
2163 if (m_main_folder_list[i]->is_folder) {
2164 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2165 &m_folder_genlist_item_class, m_main_folder_list[i], NULL,
2166 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2169 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2170 &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
2171 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2179 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
2183 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2186 if (!m_data_manager->create_new_folder_view()) {
2187 BROWSER_LOGE("create_new_folder_view failed");
2191 if (!m_data_manager->get_new_folder_view()->init()) {
2192 BROWSER_LOGE("get_new_folder_view()->init() failed");
2193 m_data_manager->destroy_new_folder_view();
2198 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2202 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2203 if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
2204 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
2205 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2209 if (!m_data_manager->get_add_to_bookmark_view()->init())
2210 m_data_manager->destroy_add_to_bookmark_view();
2213 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
2215 if (m_bottom_control_bar)
2216 evas_object_del(m_bottom_control_bar);
2218 m_bookmark_delete_controlbar_item = NULL;
2219 m_create_folder_controlbar_item = NULL;
2221 if (type == BOOKMARK_VIEW_DEFAULT) {
2222 elm_object_style_set(m_bg, "default");
2224 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2226 m_back_button = elm_button_add(m_main_layout);
2227 if (!m_back_button) {
2228 BROWSER_LOGE("elm_button_add failed");
2231 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2232 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2233 evas_object_show(m_back_button);
2234 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2236 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2237 if (!m_bottom_control_bar) {
2238 BROWSER_LOGE("elm_toolbar_add failed");
2241 elm_object_style_set(m_bottom_control_bar, "browser/default");
2242 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2244 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2245 BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
2246 NULL, __add_to_bookmark_cb, this);
2247 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2248 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2249 __edit_controlbar_item_clicked_cb, this);
2250 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2251 BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
2252 NULL, __create_folder_button, this);
2253 evas_object_show(m_bottom_control_bar);
2255 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
2256 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2258 if (!_get_current_folder_item_list().size())
2259 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2261 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2262 } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
2263 elm_object_style_set(m_bg, "edit_mode");
2265 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2266 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
2268 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2269 if (!m_bottom_control_bar) {
2270 BROWSER_LOGE("elm_toolbar_add failed");
2273 elm_object_style_set(m_bottom_control_bar, "browser/default");
2274 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2276 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2277 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2279 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2280 BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
2281 NULL, __delete_controlbar_item_clicked_cb, this);
2283 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2284 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2286 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
2287 __edit_controlbar_item_clicked_cb, this);
2289 if (type == BOOKMARK_VIEW_EDIT_MODE) {
2290 int delete_item_count = 0;
2291 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
2293 Browser_Bookmark_DB::bookmark_item *item = NULL;
2294 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
2295 if (item->is_delete)
2296 delete_item_count++;
2297 it = elm_genlist_item_next_get(it);
2300 if (delete_item_count)
2301 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2303 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2305 int delete_item_count = 0;
2306 Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
2308 Browser_History_DB::history_item *item = NULL;
2309 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
2311 /* Ignore the date label. */
2312 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
2313 if (item->is_delete)
2314 delete_item_count++;
2316 it = elm_genlist_item_next_get(it);
2318 if (delete_item_count)
2319 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2321 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2324 evas_object_show(m_bottom_control_bar);
2325 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2326 } else if (type == HISTORY_VIEW_DEFAULT) {
2327 elm_object_style_set(m_bg, "default");
2329 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2331 m_back_button = elm_button_add(m_main_layout);
2332 if (!m_back_button) {
2333 BROWSER_LOGE("elm_button_add failed");
2336 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2337 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2338 evas_object_show(m_back_button);
2339 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2341 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2342 if (!m_bottom_control_bar) {
2343 BROWSER_LOGE("elm_toolbar_add failed");
2346 elm_object_style_set(m_bottom_control_bar, "browser/default");
2347 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2349 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2350 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2352 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2353 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2354 __edit_controlbar_item_clicked_cb, this);
2356 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2357 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2359 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
2360 if (history_layout) {
2361 if (!history_layout->m_history_list.size())
2362 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2364 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
2367 evas_object_show(m_bottom_control_bar);
2369 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2372 elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2377 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2379 BROWSER_LOGD("[%s]", __func__);
2383 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2384 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2386 if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2389 /* Bookmark view -> Edit one bookmark item, then cancel. */
2390 m_data_manager->destroy_edit_bookmark_view();
2392 /* History view -> slide one item -> add to bookmark, then done. */
2393 m_data_manager->destroy_add_to_bookmark_view();
2395 m_data_manager->destroy_new_folder_view();
2398 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2400 BROWSER_LOGD("[%s]", __func__);
2401 m_main_layout = elm_layout_add(m_navi_bar);
2402 if (!m_main_layout) {
2403 BROWSER_LOGE("elm_layout_add failed");
2406 if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2407 "bookmark/main_layout")) {
2408 BROWSER_LOGE("elm_layout_file_set failed");
2412 elm_win_conformant_set(m_win, EINA_TRUE);
2413 m_conformant = elm_conformant_add(m_main_layout);
2414 if (!m_conformant) {
2415 BROWSER_LOGE("elm_conformant_add failed");
2418 elm_object_style_set(m_conformant, "internal_layout");
2419 evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2420 evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2421 evas_object_show(m_conformant);
2423 elm_object_style_set(m_bg, "default");
2424 m_sub_main_layout = elm_layout_add(m_main_layout);
2425 if (!m_sub_main_layout) {
2426 BROWSER_LOGE("elm_layout_add failed");
2429 elm_layout_file_set(m_sub_main_layout,
2430 BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2431 "browser/selectioninfo");
2432 evas_object_size_hint_weight_set(
2434 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2435 evas_object_size_hint_align_set(
2437 EVAS_HINT_FILL, EVAS_HINT_FILL);
2439 m_genlist_content_layout = elm_layout_add(m_sub_main_layout);
2440 if (!m_genlist_content_layout) {
2441 BROWSER_LOGE("elm_layout_add failed");
2444 if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2445 "bookmark/content_layout")) {
2446 BROWSER_LOGE("elm_layout_file_set failed");
2449 evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2450 evas_object_show(m_genlist_content_layout);
2451 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2453 m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2454 if (!m_genlist_content_box) {
2455 BROWSER_LOGE("elm_box_add failed");
2458 evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2459 evas_object_show(m_genlist_content_box);
2460 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2461 elm_box_pack_end(m_genlist_content_box, m_conformant);
2463 m_main_folder_genlist = _create_main_folder_genlist();
2464 if (!m_main_folder_genlist) {
2465 BROWSER_LOGE("_create_main_folder_genlist failed");
2469 elm_object_content_set(m_conformant, m_main_folder_genlist);
2471 m_back_button = elm_button_add(m_main_layout);
2472 if (!m_back_button) {
2473 BROWSER_LOGE("elm_button_add failed");
2476 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2477 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2478 evas_object_show(m_back_button);
2480 elm_object_part_content_set(m_sub_main_layout, "genlist.swallow.contents", m_genlist_content_layout);
2481 elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_sub_main_layout);
2483 m_top_control_bar = elm_toolbar_add(m_main_layout);
2484 if (!m_top_control_bar) {
2485 BROWSER_LOGE("elm_toolbar_add failed");
2488 elm_object_style_set(m_top_control_bar, "browser/tabbar");
2490 elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2492 elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2494 Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2495 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2496 elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2498 elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2499 elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2501 evas_object_show(m_top_control_bar);
2503 m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2504 m_main_layout, "browser/tabbar");
2506 evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2508 int size = m_main_folder_list.size();
2510 _show_empty_content_layout(EINA_TRUE);
2512 _show_empty_content_layout(EINA_FALSE);