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_genlist_content_layout(NULL)
34 ,m_genlist_content_box(NULL)
35 ,m_main_folder_genlist(NULL)
36 ,m_sub_folder_genlist(NULL)
38 ,m_upper_folder_list(NULL)
39 ,m_upper_folder_icon(NULL)
40 ,m_view_mode(BOOKMARK_VIEW)
41 ,m_edit_mode_select_all_layout(NULL)
42 ,m_edit_mode_select_all_check_button(NULL)
43 ,m_current_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID)
45 ,m_current_genlist_item_to_edit(NULL)
46 ,m_sub_folder_conformant(NULL)
47 ,m_processing_popup_timer(NULL)
48 ,m_processing_progress_bar(NULL)
51 ,m_total_item_count(0)
52 ,m_processing_popup(NULL)
53 ,m_processing_popup_layout(NULL)
54 ,m_select_all_check_value(EINA_FALSE)
55 ,m_bottom_control_bar(NULL)
56 ,m_bookmark_delete_controlbar_item(NULL)
57 ,m_bookmark_edit_controlbar_item(NULL)
58 ,m_create_folder_controlbar_item(NULL)
59 ,m_current_sweep_item(NULL)
61 ,m_delete_confirm_popup(NULL)
62 ,m_rename_edit_field(NULL)
64 BROWSER_LOGD("[%s]", __func__);
65 m_current_bookmark_navigationbar_title = "";
68 Browser_Bookmark_View::~Browser_Bookmark_View(void)
70 BROWSER_LOGD("[%s]", __func__);
73 for(int i = 0 ; i < m_sub_folder_list.size() ; i++ ) {
74 if (m_sub_folder_list[i]) {
75 delete m_sub_folder_list[i];
76 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
79 m_sub_folder_list.clear();
81 for(int i = 0 ; i < m_main_folder_list.size() ; i++ ) {
82 if (m_main_folder_list[i]) {
83 delete m_main_folder_list[i];
84 m_main_folder_list.erase(m_main_folder_list.begin() + i);
87 m_main_folder_list.clear();
89 m_data_manager->destroy_bookmark_db();
91 evas_object_smart_callback_del(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb);
93 if (m_delete_confirm_popup)
94 evas_object_del(m_delete_confirm_popup);
98 Eina_Bool Browser_Bookmark_View::init(void)
100 BROWSER_LOGD("[%s]", __func__);
101 if (!m_data_manager->create_bookmark_db()) {
102 BROWSER_LOGE("m_data_manager->create_bookmark_db failed");
106 return _create_main_layout();
109 Eina_Bool Browser_Bookmark_View::append_bookmark_item(const char *title, const char *url)
111 if (!url || !title) {
112 BROWSER_LOGE("url or title is null");
116 if (!m_data_manager->get_bookmark_db()->save_bookmark(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title, url)) {
117 BROWSER_LOGE("save_bookmark failed");
121 Browser_Bookmark_DB::bookmark_item *item = new(nothrow) Browser_Bookmark_DB::bookmark_item;
123 BROWSER_LOGE("new(nothrow) Browser_Bookmark_DB::bookmark_item failed");
127 int bookmark_id = -1;
128 m_data_manager->get_bookmark_db()->get_bookmark_id_by_title_url(BROWSER_BOOKMARK_MAIN_FOLDER_ID, title,
131 item->parent = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
132 item->user_data_1 = (void *)this;
133 item->url = std::string(url);
134 item->title = std::string(title);
135 item->is_folder = EINA_FALSE;
136 item->id = bookmark_id;
137 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
138 item, NULL, ELM_GENLIST_ITEM_NONE,
139 __bookmark_item_clicked_cb, this);
141 m_main_folder_list.push_back(item);
143 _show_empty_content_layout(EINA_FALSE);
148 void Browser_Bookmark_View::delete_bookmark_item(int bookmark_id)
150 BROWSER_LOGD("[%s]", __func__);
153 ret = m_data_manager->get_bookmark_db()->delete_bookmark(bookmark_id);
155 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
159 Elm_Object_Item *it = elm_genlist_first_item_get(m_main_folder_genlist);
161 Browser_Bookmark_DB::bookmark_item *item = NULL;
162 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
163 if (item->id == bookmark_id) {
164 elm_object_item_del(it);
168 it = elm_genlist_item_next_get(it);
171 for(int index = 0 ; index < m_main_folder_list.size() ; index++) {
172 if (m_main_folder_list[index]->id == bookmark_id) {
173 delete m_main_folder_list[index];
174 m_main_folder_list.erase(m_main_folder_list.begin() + index);
179 if (m_main_folder_list.size() == 0) {
180 _show_empty_content_layout(EINA_TRUE);
184 void Browser_Bookmark_View::return_to_bookmark_view(int added_bookmark_id)
186 BROWSER_LOGD("added_bookmark_id = %d", added_bookmark_id);
187 if (m_view_mode == BOOKMARK_VIEW) {
188 /* In case that bookmark view -> Edit bookmark item, then return to bookmark view. */
189 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
190 int delete_item_count = 0;
191 int editable_item_count = 0;
192 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
194 Browser_Bookmark_DB::bookmark_item *item = NULL;
195 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
196 if (item->is_editable)
197 editable_item_count++;
200 it = elm_genlist_item_next_get(it);
203 if (editable_item_count == delete_item_count)
204 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_TRUE);
206 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
208 if (delete_item_count == 0)
209 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
212 int size = _get_current_folder_item_list().size();
214 _show_empty_content_layout(EINA_TRUE);
216 _show_empty_content_layout(EINA_FALSE);
218 if (!m_data_manager->get_history_layout())
221 /* In case that history view -> add to bookmark by slide-right, then return to history view. */
222 if (m_data_manager->get_history_layout()->m_current_sweep_item) {
223 elm_genlist_item_decorate_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, "slide", EINA_FALSE);
224 elm_genlist_item_select_mode_set(m_data_manager->get_history_layout()->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
225 m_data_manager->get_history_layout()->m_current_sweep_item = NULL;
229 /* boomark view -> history -> add to bookmark by slide button, then done. */
230 if (added_bookmark_id != -1) {
231 Browser_Bookmark_DB::bookmark_item *item = m_data_manager->get_bookmark_db()->get_bookmark_item_by_id(added_bookmark_id);
233 BROWSER_LOGE("get_bookmark_item_by_id failed");
237 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
239 Browser_Bookmark_DB::bookmark_item *exist_item = NULL;
240 exist_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
241 if (exist_item->id == added_bookmark_id) {
242 exist_item->url = item->url;
243 exist_item->title = item->title;
244 exist_item->parent = item->parent;
245 elm_genlist_item_update(it);
248 it = elm_genlist_item_next_get(it);
251 if (m_current_folder_id == item->parent) {
252 /* If the saved bookmark item is in the current folder, just add it to current folder. */
253 Evas_Object *genlist = NULL;
254 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
255 genlist = m_main_folder_genlist;
257 genlist = m_sub_folder_genlist;
259 item->user_data_1 = (void *)this;
260 if (item->is_folder) {
261 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_folder_genlist_item_class,
262 item, NULL, ELM_GENLIST_ITEM_NONE,
263 __bookmark_item_clicked_cb, this);
266 item->user_data_2 = (void *)elm_genlist_item_append(genlist, &m_bookmark_genlist_item_class,
267 item, NULL, ELM_GENLIST_ITEM_NONE,
268 __bookmark_item_clicked_cb, this);
271 if (item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
272 m_main_folder_list.push_back(item);
274 m_sub_folder_list.push_back(item);
275 } else if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID
276 && item->parent == BROWSER_BOOKMARK_MAIN_FOLDER_ID){
277 /* If the current folder is sub folder but the saved folder is main folder,
278 * add the saved bookmark item to main folder. */
279 item->user_data_1 = (void *)this;
280 if (item->is_folder) {
281 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_folder_genlist_item_class,
282 item, NULL, ELM_GENLIST_ITEM_NONE,
283 __bookmark_item_clicked_cb, this);
285 item->user_data_2 = (void *)elm_genlist_item_append(m_main_folder_genlist, &m_bookmark_genlist_item_class,
286 item, NULL, ELM_GENLIST_ITEM_NONE,
287 __bookmark_item_clicked_cb, this);
289 m_main_folder_list.push_back(item);
292 /* If the bookmark is empty page, destroy the empty layout to show the bookmark list. */
293 if (_get_current_folder_item_list().size() == 0)
294 _show_empty_content_layout(EINA_TRUE);
296 _show_empty_content_layout(EINA_FALSE);
300 void Browser_Bookmark_View::__back_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
302 BROWSER_LOGD("[%s]", __func__);
306 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
307 Evas_Object *navi_bar = bookmark_view->m_navi_bar;
309 if (elm_naviframe_bottom_item_get(navi_bar) != elm_naviframe_top_item_get(navi_bar))
310 elm_naviframe_item_pop(navi_bar);
312 /* Set the title if enter the add to bookmark while loading. */
313 m_data_manager->get_browser_view()->return_to_browser_view();
316 void Browser_Bookmark_View::__edit_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
318 BROWSER_LOGD("[%s]", __func__);
322 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
323 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
325 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
326 if (!elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
328 bookmark_view->_set_edit_mode(EINA_TRUE);
330 if (bookmark_view->m_rename_edit_field) {
331 Browser_Bookmark_DB::bookmark_item *item = NULL;
332 item = (Browser_Bookmark_DB::bookmark_item *)evas_object_data_get(bookmark_view->m_rename_edit_field, "item");
333 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(bookmark_view->m_rename_edit_field);
334 elm_entry_entry_set(edit_field_entry, item->title.c_str());
337 /* Cancel Edit bookmark */
338 bookmark_view->_set_edit_mode(EINA_FALSE);
340 } else if (history_layout) {
341 if (!elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
343 history_layout->_set_edit_mode(EINA_TRUE);
345 /* Cancel Delete bookmark */
346 history_layout->_set_edit_mode(EINA_FALSE);
350 if (bookmark_view->m_rename_edit_field)
351 elm_object_focus_set(bookmark_view->m_rename_edit_field, EINA_FALSE);
354 void Browser_Bookmark_View::__delete_controlbar_item_clicked_cb(void *data, Evas_Object *obj, void *event_info)
359 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
360 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
362 if (bookmark_view->m_view_mode == BOOKMARK_VIEW) {
363 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist())) {
364 /* Delete bookmark */
365 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
367 evas_object_smart_callback_add(ok_button, "clicked",
368 __delete_confirm_response_by_edit_mode_cb, bookmark_view);
372 if (history_layout && elm_genlist_decorate_mode_get(history_layout->m_history_genlist)) {
373 /* Delete bookmark */
374 Evas_Object *ok_button = history_layout->_show_delete_confirm_popup();
376 evas_object_smart_callback_add(ok_button, "clicked",
377 Browser_History_Layout::__delete_confirm_response_by_edit_mode_cb,
383 void Browser_Bookmark_View::_delete_bookmark_item_from_folder_list(Browser_Bookmark_DB::bookmark_item *item)
385 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
386 for(int index = 0 ; index < m_main_folder_list.size() ; index++) {
387 if (m_main_folder_list[index] == item) {
388 delete m_main_folder_list[index];
389 m_main_folder_list.erase(m_main_folder_list.begin() + index);
393 for(int index = 0 ; index < m_sub_folder_list.size() ; index++) {
394 if (m_sub_folder_list[index] == item) {
395 delete m_sub_folder_list[index];
396 m_sub_folder_list.erase(m_sub_folder_list.begin() + index);
402 void Browser_Bookmark_View::_delete_selected_bookmark(void)
404 BROWSER_LOGD("[%s]", __func__);
405 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
406 Eina_List *delete_item_list = NULL;
407 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
408 int remain_count = 0;
410 Browser_Bookmark_DB::bookmark_item *item = NULL;
411 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
413 delete_item_list = eina_list_append(delete_item_list, it);
416 it = elm_genlist_item_next_get(it);
419 int count = eina_list_count(delete_item_list);
421 if (count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
422 /* If delete more than 100 items, show the processing popup. */
423 _show_delete_processing_popup();
425 for (int i = 0; i < count; i++) {
426 it = (Elm_Object_Item *)eina_list_data_get(delete_item_list);
427 Browser_Bookmark_DB::bookmark_item *item = NULL;
428 Eina_Bool ret = EINA_TRUE;
429 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
430 if (item->is_folder) {
432 ret = bookmark_db->get_folder_id(m_current_folder_id, item->title.c_str(), &folder_id);
434 BROWSER_LOGE("bookmark_db->get_folder_id failed");
437 ret = bookmark_db->delete_folder(folder_id);
439 BROWSER_LOGE("bookmark_db->delete_folder failed");
443 ret = bookmark_db->delete_bookmark(item->id);
445 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
449 delete_item_list = eina_list_next(delete_item_list);
451 _delete_bookmark_item_from_folder_list(item);
453 elm_object_item_del(it);
455 eina_list_free(delete_item_list);
457 elm_check_state_set(m_edit_mode_select_all_check_button, EINA_FALSE);
459 if (remain_count == 0)
460 _show_empty_content_layout(EINA_TRUE);
462 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
466 void Browser_Bookmark_View::__edit_mode_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
468 BROWSER_LOGD("[%s]", __func__);
471 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
472 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
473 int delete_item_count = 0;
474 int editable_item_count = 0;
476 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
478 Browser_Bookmark_DB::bookmark_item *item = NULL;
479 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
480 if (item->is_editable)
481 editable_item_count++;
484 it = elm_genlist_item_next_get(it);
487 if (editable_item_count == delete_item_count)
488 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
490 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
492 bookmark_view->_show_selection_info();
495 void Browser_Bookmark_View::_show_delete_processing_popup(void)
497 BROWSER_LOGD("[%s]", __func__);
498 if (m_processing_popup)
499 evas_object_del(m_processing_popup);
501 m_processing_popup = elm_popup_add(m_main_layout);
502 if (!m_processing_popup) {
503 BROWSER_LOGE("elm_popup_add failed");
507 if (m_processing_popup_layout)
508 evas_object_del(m_processing_popup_layout);
509 m_processing_popup_layout = elm_layout_add(m_processing_popup);
510 if (!m_processing_popup_layout) {
511 BROWSER_LOGE("elm_layout_add failed");
514 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
515 "browser/popup_center_progressview")) {
516 BROWSER_LOGE("elm_layout_file_set failed");
519 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
521 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
522 elm_object_style_set(m_processing_progress_bar, "list_progress");
523 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
524 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
525 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
526 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
528 if (m_processing_popup_timer)
529 ecore_timer_del(m_processing_popup_timer);
531 m_processed_count = 0;
532 m_processed_it = elm_genlist_last_item_get(_get_current_folder_genlist());
534 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
535 m_total_item_count = 0;
537 Browser_Bookmark_DB::bookmark_item *item = NULL;
538 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
540 if(item->is_editable && item->is_delete)
541 m_total_item_count++;
543 it = elm_genlist_item_next_get(it);
546 m_processing_popup_timer = ecore_timer_add(0.1, __delete_processing_popup_timer_cb, this);
547 evas_object_show(m_processing_progress_bar);
549 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
550 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
551 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
552 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
554 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
556 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
557 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
558 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
559 evas_object_smart_callback_add(cancel_button, "clicked", __delete_processing_popup_response_cb, this);
561 evas_object_show(m_processing_popup);
564 Eina_Bool Browser_Bookmark_View::__delete_processing_popup_timer_cb(void *data)
567 return ECORE_CALLBACK_CANCEL;
569 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
570 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
572 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
574 double value = elm_progressbar_value_get(progress_bar);
576 __delete_processing_popup_response_cb(bookmark_view, NULL, NULL);
578 bookmark_view->m_processing_popup_timer = NULL;
579 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
581 return ECORE_CALLBACK_CANCEL;
584 while(bookmark_view->m_processed_it) {
585 Browser_Bookmark_DB::bookmark_item *item = NULL;
586 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
588 if(item->is_editable && item->is_delete) {
589 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
591 if (item->is_folder) {
593 ret = bookmark_db->get_folder_id(bookmark_view->m_current_folder_id,
594 item->title.c_str(), &folder_id);
596 BROWSER_LOGE("bookmark_db->get_folder_id failed");
597 return ECORE_CALLBACK_CANCEL;
599 ret = bookmark_db->delete_folder(folder_id);
601 BROWSER_LOGE("bookmark_db->delete_folder failed");
602 return ECORE_CALLBACK_CANCEL;
605 ret = bookmark_db->delete_bookmark(item->id);
607 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
608 return ECORE_CALLBACK_CANCEL;
611 bookmark_view->_delete_bookmark_item_from_folder_list(item);
612 bookmark_view->m_processed_count++;
613 Elm_Object_Item *it = bookmark_view->m_processed_it;
614 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
615 elm_object_item_del(it);
617 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
619 bookmark_view->m_processed_it = elm_genlist_item_prev_get(bookmark_view->m_processed_it);
621 if (bookmark_view->m_processed_count % 5 == 0)
625 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
626 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
628 char progress_text[20] = {0, };
629 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
630 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
632 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
633 "elm.text.right", progress_text);
635 return ECORE_CALLBACK_RENEW;
638 void Browser_Bookmark_View::_show_select_processing_popup(void)
640 BROWSER_LOGD("[%s]", __func__);
641 if (m_processing_popup)
642 evas_object_del(m_processing_popup);
644 m_processing_popup = elm_popup_add(m_main_layout);
645 if (!m_processing_popup) {
646 BROWSER_LOGE("elm_popup_add failed");
650 if (m_processing_popup_layout)
651 evas_object_del(m_processing_popup_layout);
652 m_processing_popup_layout = elm_layout_add(m_processing_popup);
653 if (!m_processing_popup_layout) {
654 BROWSER_LOGE("elm_layout_add failed");
657 if (!elm_layout_file_set(m_processing_popup_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
658 "browser/popup_center_progressview")) {
659 BROWSER_LOGE("elm_layout_file_set failed");
662 evas_object_size_hint_weight_set(m_processing_popup_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
664 m_processing_progress_bar = elm_progressbar_add(m_processing_popup);
665 elm_object_style_set(m_processing_progress_bar, "list_progress");
666 elm_progressbar_horizontal_set(m_processing_progress_bar, EINA_TRUE);
667 evas_object_size_hint_align_set(m_processing_progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL);
668 evas_object_size_hint_weight_set(m_processing_progress_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
669 elm_progressbar_value_set(m_processing_progress_bar, 0.0);
671 if (m_processing_popup_timer)
672 ecore_timer_del(m_processing_popup_timer);
674 m_processed_count = 0;
675 m_processed_it = elm_genlist_first_item_get(_get_current_folder_genlist());
677 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
678 m_total_item_count = 0;
680 Browser_Bookmark_DB::bookmark_item *item = NULL;
681 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
683 if(item->is_editable)
684 m_total_item_count++;
686 it = elm_genlist_item_next_get(it);
689 m_processing_popup_timer = ecore_timer_add(0.1, __select_processing_popup_timer_cb, this);
690 evas_object_show(m_processing_progress_bar);
692 elm_object_part_content_set(m_processing_popup_layout, "elm.swallow.content", m_processing_progress_bar);
693 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.title", BR_STRING_PROCESSING);
694 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.left", "");
695 edje_object_part_text_set(elm_layout_edje_get(m_processing_popup_layout), "elm.text.right", "");
697 elm_object_content_set(m_processing_popup, m_processing_popup_layout);
699 Evas_Object *cancel_button = elm_button_add(m_processing_popup);
700 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
701 elm_object_part_content_set(m_processing_popup, "button1", cancel_button);
702 evas_object_smart_callback_add(cancel_button, "clicked", __select_processing_popup_response_cb, this);
704 evas_object_show(m_processing_popup);
706 Eina_Bool check_value = elm_check_state_get(m_edit_mode_select_all_check_button);
707 m_select_all_check_value = check_value;
710 elm_check_state_set(m_edit_mode_select_all_check_button, !check_value);
713 Eina_Bool Browser_Bookmark_View::__select_processing_popup_timer_cb(void *data)
716 return ECORE_CALLBACK_CANCEL;
718 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
719 Evas_Object* progress_bar = bookmark_view->m_processing_progress_bar;
721 Eina_Bool check_value = bookmark_view->m_select_all_check_value;
723 double value = elm_progressbar_value_get(progress_bar);
725 __select_processing_popup_response_cb(bookmark_view, NULL, NULL);
727 bookmark_view->m_processing_popup_timer = NULL;
728 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !check_value);
729 bookmark_view->_show_selection_info();
731 return ECORE_CALLBACK_CANCEL;
734 while(bookmark_view->m_processed_it) {
735 Browser_Bookmark_DB::bookmark_item *item = NULL;
736 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(bookmark_view->m_processed_it);
738 if(item->is_editable) {
739 item->is_delete = !check_value;
740 elm_genlist_item_update(bookmark_view->m_processed_it);
741 bookmark_view->m_processed_count++;
744 bookmark_view->m_processed_it = elm_genlist_item_next_get(bookmark_view->m_processed_it);
746 if (bookmark_view->m_processed_count % 30 == 0)
750 elm_progressbar_value_set(bookmark_view->m_processing_progress_bar,
751 (float)((float)bookmark_view->m_processed_count / (float)bookmark_view->m_total_item_count));
753 char progress_text[20] = {0, };
754 snprintf(progress_text, sizeof(progress_text) - 1, "%d / %d",
755 bookmark_view->m_processed_count, bookmark_view->m_total_item_count);
757 edje_object_part_text_set(elm_layout_edje_get(bookmark_view->m_processing_popup_layout),
758 "elm.text.right", progress_text);
760 return ECORE_CALLBACK_RENEW;
763 void Browser_Bookmark_View::__delete_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
765 BROWSER_LOGD("[%s]", __func__);
769 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
771 bookmark_view->m_processing_progress_bar = NULL;
772 bookmark_view->m_processed_it = NULL;
774 evas_object_del(bookmark_view->m_processing_popup);
776 if (bookmark_view->m_processing_popup_timer) {
777 ecore_timer_del(bookmark_view->m_processing_popup_timer);
778 bookmark_view->m_processing_popup_timer = NULL;
781 bookmark_view->show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
783 vector<Browser_Bookmark_DB::bookmark_item *> item_list = bookmark_view->_get_current_folder_item_list();
784 if (item_list.size() == 0)
785 bookmark_view->_show_empty_content_layout(EINA_TRUE);
788 void Browser_Bookmark_View::__select_processing_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
790 BROWSER_LOGD("[%s]", __func__);
794 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
796 evas_object_del(bookmark_view->m_processing_popup);
797 bookmark_view->m_processing_progress_bar = NULL;
798 bookmark_view->m_processed_it = NULL;
800 if (bookmark_view->m_processing_popup_timer) {
801 ecore_timer_del(bookmark_view->m_processing_popup_timer);
802 bookmark_view->m_processing_popup_timer = NULL;
805 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
808 Browser_Bookmark_DB::bookmark_item *item = NULL;
809 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
811 if(item->is_editable && item->is_delete)
814 it = elm_genlist_item_next_get(it);
818 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_FALSE);
820 elm_object_item_disabled_set(bookmark_view->m_bookmark_delete_controlbar_item, EINA_TRUE);
823 void Browser_Bookmark_View::__edit_mode_select_all_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
828 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
829 int item_count = bookmark_view->_get_current_folder_item_list().size();
830 BROWSER_LOGD("item_count=%d", item_count);
832 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT)
833 bookmark_view->_show_select_processing_popup();
835 Eina_Bool value = elm_check_state_get(bookmark_view->m_edit_mode_select_all_check_button);
836 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, !value);
838 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
840 Browser_Bookmark_DB::bookmark_item *item = NULL;
841 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
843 if(item->is_editable) {
844 item->is_delete = !value;
845 elm_genlist_item_update(it);
848 it = elm_genlist_item_next_get(it);
851 bookmark_view->_show_selection_info();
855 void Browser_Bookmark_View::__edit_mode_select_all_check_changed_cb(void *data,
856 Evas_Object *obj, void *event_info)
858 BROWSER_LOGD("[%s]", __func__);
862 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
863 int item_count = bookmark_view->_get_current_folder_item_list().size();
864 BROWSER_LOGD("item_count=%d", item_count);
865 Eina_Bool value = elm_check_state_get(obj);
867 if (item_count >= BROWSER_BOOKMARK_PROCESS_BLOCK_COUNT) {
868 /* Workaround to share the same code with __edit_mode_select_all_clicked_cb */
869 elm_check_state_set(obj, !value);
870 bookmark_view->_show_select_processing_popup();
872 Elm_Object_Item *it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
874 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
876 if(item->is_editable) {
877 item->is_delete = value;
878 elm_genlist_item_update(it);
881 it = elm_genlist_item_next_get(it);
884 bookmark_view->_show_selection_info();
888 void Browser_Bookmark_View::_show_selection_info(void)
890 BROWSER_LOGD("[%s]", __func__);
891 int editable_item_count = 0;
892 int editable_folder_count = 0;
894 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
896 Browser_Bookmark_DB::bookmark_item *item = NULL;
897 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
898 if (item->is_delete) {
900 editable_folder_count++;
902 editable_item_count++;
904 it = elm_genlist_item_next_get(it);
907 if (editable_folder_count == 0 && editable_item_count == 0) {
908 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
912 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
914 if (editable_folder_count + editable_item_count == 1) {
915 show_notify_popup(BR_STRING_ONE_ITEM_SELECTED, 0, EINA_TRUE);
916 } else if (editable_folder_count + editable_item_count > 1) {
917 char *small_popup_text = NULL;
918 int string_len = strlen(BR_STRING_ITEMS_SELECTED) + 4; /* 4 : reserved for maximun count */
920 small_popup_text = (char *)malloc(string_len * sizeof(char));
921 memset(small_popup_text, 0x00, string_len);
923 snprintf(small_popup_text, string_len, BR_STRING_ITEMS_SELECTED, editable_folder_count + editable_item_count);
924 show_notify_popup(small_popup_text, 0, EINA_TRUE);
926 if (small_popup_text)
927 free(small_popup_text);
928 small_popup_text = 0x00;
932 void Browser_Bookmark_View::_set_edit_mode(Eina_Bool edit_mode)
934 BROWSER_LOGD("[%s]", __func__);
938 elm_object_style_set(m_bg, "edit_mode");
940 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
941 if (!m_edit_mode_select_all_layout) {
942 BROWSER_LOGE("elm_layout_add failed");
945 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
946 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
947 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
948 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
949 __edit_mode_select_all_clicked_cb, this);
950 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
951 if (!m_edit_mode_select_all_check_button) {
952 BROWSER_LOGE("elm_layout_add failed");
955 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
956 __edit_mode_select_all_check_changed_cb, this);
957 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
959 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
960 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
962 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
963 evas_object_show(m_edit_mode_select_all_layout);
965 Elm_Object_Item *it = NULL;
966 Browser_Bookmark_DB::bookmark_item *item = NULL;
967 it = elm_genlist_first_item_get(_get_current_folder_genlist());
969 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
970 if (!item->is_editable)
971 elm_object_item_disabled_set(it, EINA_TRUE);
973 it = elm_genlist_item_next_get(it);
975 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
976 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
977 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
979 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
981 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
982 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
983 "hide,upper_folder,signal", "");
984 evas_object_hide(m_upper_folder_list);
987 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
988 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
990 elm_object_style_set(m_bg, "default");
992 if (m_edit_mode_select_all_check_button) {
993 evas_object_del(m_edit_mode_select_all_check_button);
994 m_edit_mode_select_all_check_button = NULL;
996 if (m_edit_mode_select_all_layout) {
997 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
998 evas_object_del(m_edit_mode_select_all_layout);
999 m_edit_mode_select_all_layout = NULL;
1002 Elm_Object_Item *it = NULL;
1003 Browser_Bookmark_DB::bookmark_item *item = NULL;
1004 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1006 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1007 if (!item->is_editable)
1008 elm_object_item_disabled_set(it, EINA_FALSE);
1009 item->is_delete = EINA_FALSE;
1010 it = elm_genlist_item_next_get(it);
1012 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1013 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1015 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
1017 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1019 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
1020 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1021 "show,upper_folder,signal", "");
1022 evas_object_show(m_upper_folder_list);
1025 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1026 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1030 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
1032 BROWSER_LOGD("mode=%d", mode);
1033 Evas_Object *history_layout = NULL;
1034 if (m_data_manager->get_history_layout())
1035 history_layout = m_data_manager->get_history_layout()->get_main_layout();
1038 if (mode == HISTORY_VIEW) {
1039 if (history_layout) {
1040 elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
1041 evas_object_show(history_layout);
1044 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
1046 _set_navigationbar_title(BR_STRING_HISTORY);
1048 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist)) {
1049 if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
1050 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
1052 if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
1053 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
1055 } else if (mode == BOOKMARK_VIEW){
1057 evas_object_hide(history_layout);
1058 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
1060 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1061 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1063 _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
1066 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
1067 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
1068 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
1070 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1071 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
1076 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
1081 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1082 Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
1083 Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
1084 if (!selected_item) {
1085 BROWSER_LOGD("no item selected");
1089 if (selected_item == history_item) {
1090 BROWSER_LOGD("tab history");
1091 /* history selected */
1092 if (!m_data_manager->get_history_layout()) {
1093 if (!m_data_manager->create_history_layout()) {
1094 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
1098 if (!m_data_manager->get_history_layout()->init()) {
1099 BROWSER_LOGE("get_history_layout()->init() failed");
1104 bookmark_view->hide_notify_popup();
1105 bookmark_view->_set_view_mode(HISTORY_VIEW);
1108 BROWSER_LOGD("tab bookmark");
1109 if (m_data_manager->get_history_layout()) {
1110 m_data_manager->get_history_layout()->hide_notify_popup();
1111 bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1116 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1117 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1119 BROWSER_LOGD("[%s]", __func__);
1122 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1123 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1125 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1126 because of increase performance. */
1127 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1129 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1131 bookmark_view->hide_notify_popup();
1133 bookmark_view->_set_edit_mode(EINA_FALSE);
1135 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1136 bookmark_view->m_current_folder_id)) {
1137 BROWSER_LOGE("create_edit_bookmark_view failed");
1141 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1142 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1143 m_data_manager->destroy_edit_bookmark_view();
1148 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1150 BROWSER_LOGD("[%s]", __func__);
1153 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1154 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1155 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1156 elm_genlist_item_flip_set(it, EINA_TRUE);
1158 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1160 evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1163 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1166 BROWSER_LOGD("[%s]", __func__);
1170 Evas_Object *rename_edit_field = (Evas_Object *)data;
1171 elm_object_focus_set(rename_edit_field, EINA_FALSE);
1174 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1176 BROWSER_LOGD("[%s]", __func__);
1180 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1181 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1183 Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1185 Evas_Object *edit_field_entry = obj;
1186 char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1187 char *text = bookmark_view->_trim(markup_text);
1189 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1192 Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1194 Eina_Bool only_has_space = EINA_FALSE;
1195 int space_count = 0;
1196 if (text && strlen(text)) {
1197 for (int i = 0 ; i < strlen(text) ; i++) {
1201 if (space_count == strlen(text))
1202 only_has_space = EINA_TRUE;
1205 if (!text || strlen(text) == 0 || only_has_space) {
1206 bookmark_view->show_msg_popup(BR_STRING_ENTER_FOLDER_NAME);
1207 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1209 if (strcmp(text, item->title.c_str())) {
1210 if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1212 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1214 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1215 bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1217 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1218 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1222 elm_genlist_item_flip_set(it, EINA_FALSE);
1224 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1226 bookmark_view->m_rename_edit_field = NULL;
1231 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1233 BROWSER_LOGD("[%s]", __func__);
1236 #if defined(GENLIST_SWEEP)
1237 void Browser_Bookmark_View::__sweep_right_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1239 BROWSER_LOGD("[%s]", __func__);
1242 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1244 if (elm_genlist_decorate_mode_get(obj))
1247 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_TRUE);
1248 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_NONE);
1251 if (bookmark_view->m_current_sweep_item
1252 && (Elm_Object_Item *)event_info != bookmark_view->m_current_sweep_item) {
1253 elm_genlist_item_select_mode_set(bookmark_view->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1254 bookmark_view->m_current_sweep_item = (Elm_Object_Item *)event_info;
1258 void Browser_Bookmark_View::__sweep_cancel_genlist_cb(void *data,
1259 Evas_Object *obj, void *event_info)
1261 BROWSER_LOGD("[%s]", __func__);
1266 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1267 Elm_Object_Item *it = (Elm_Object_Item*)elm_genlist_decorated_item_get(obj);
1269 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1270 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1272 if (it == bookmark_view->m_current_sweep_item)
1273 bookmark_view->m_current_sweep_item = NULL;
1277 void Browser_Bookmark_View::__sweep_left_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1279 BROWSER_LOGD("[%s]", __func__);
1282 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1284 if (elm_genlist_decorate_mode_get(obj))
1287 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_FALSE);
1288 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
1291 bookmark_view->m_current_sweep_item = NULL;
1295 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1297 BROWSER_LOGD("part=%s", part);
1301 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1303 const char *title = item->title.c_str();
1304 BROWSER_LOGD("title(%p)=%s", title, title);
1305 const char *url = item->url.c_str();
1306 BROWSER_LOGD("url(%p)=%s", url, url);
1308 if (part && strlen(part) > 0) {
1309 if (!strncmp(part,"elm.text", strlen("elm.text"))
1310 || !strncmp(part, "elm.base.text", strlen("elm.base.text"))
1311 || !strncmp(part, "elm.slide.text.1", strlen("elm.slide.text.1"))) {
1312 if (title && strlen(title))
1313 return strdup(title);
1316 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1317 if (url && strlen(url))
1327 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1329 BROWSER_LOGD("[%s]", __func__);
1330 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1334 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1336 if (part && strlen(part) > 0) {
1337 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1338 if (item->is_folder) {
1339 Evas_Object *folder_icon = elm_icon_add(obj);
1340 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1341 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1344 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1347 Evas_Object *favicon = NULL;
1348 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1352 Evas_Object *default_icon = elm_icon_add(obj);
1355 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1356 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1359 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1360 return default_icon;
1363 } else if (!strncmp(part, "elm.slide.swallow.1", strlen("elm.slide.swallow.1"))) {
1364 Evas_Object *edit_button = elm_button_add(obj);
1366 BROWSER_LOGE("elm_button_add is failed.\n");
1369 elm_object_style_set(edit_button, "text_only/sweep");
1370 elm_object_text_set(edit_button, BR_STRING_EDIT);
1371 if (!item->is_editable)
1372 elm_object_disabled_set(edit_button, EINA_TRUE);
1373 evas_object_smart_callback_add(edit_button, "clicked", __slide_edit_button_clicked_cb, item);
1375 } else if (!strncmp(part, "elm.slide.swallow.2", strlen("elm.slide.swallow.2"))) {
1376 if (item->is_folder) {
1377 Evas_Object *delete_button = elm_button_add(obj);
1378 if (!delete_button) {
1379 BROWSER_LOGE("elm_button_add is failed.\n");
1382 elm_object_style_set(delete_button, "text_only/sweep");
1383 elm_object_text_set(delete_button, BR_STRING_DELETE);
1384 if (!item->is_editable)
1385 elm_object_disabled_set(delete_button, EINA_TRUE);
1386 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1387 return delete_button;
1389 Evas_Object *share_button = elm_button_add(obj);
1390 if (!share_button) {
1391 BROWSER_LOGE("elm_button_add is failed.\n");
1394 elm_object_style_set(share_button, "text_only/sweep");
1395 elm_object_text_set(share_button, BR_STRING_SHARE);
1396 evas_object_smart_callback_add(share_button, "clicked", __slide_share_button_clicked_cb, item);
1397 return share_button;
1399 } else if (!strncmp(part, "elm.slide.swallow.3", strlen("elm.slide.swallow.3"))) {
1400 Evas_Object *delete_button = elm_button_add(obj);
1401 if (!delete_button) {
1402 BROWSER_LOGE("elm_button_add is failed.\n");
1405 elm_object_style_set(delete_button, "text_only/sweep");
1406 elm_object_text_set(delete_button, BR_STRING_DELETE);
1407 if (!item->is_editable)
1408 elm_object_disabled_set(delete_button, EINA_TRUE);
1409 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1410 return delete_button;
1413 if (elm_genlist_decorate_mode_get(obj)) {
1414 if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1415 Evas_Object *check_button = elm_check_add(obj);
1416 if (!check_button) {
1417 BROWSER_LOGE("elm_check_add is failed.\n");
1420 evas_object_propagate_events_set(check_button, EINA_FALSE);
1422 if (!item->is_editable)
1423 elm_object_disabled_set(check_button, EINA_TRUE);
1425 elm_check_state_pointer_set(check_button, &item->is_delete);
1426 evas_object_smart_callback_add(check_button, "changed",
1427 __edit_mode_item_check_changed_cb, item);
1428 return check_button;
1429 } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1430 Evas_Object *button = elm_button_add(obj);
1432 BROWSER_LOGE("elm_button_add is failed.\n");
1435 evas_object_propagate_events_set(button, EINA_FALSE);
1437 if (!item->is_editable)
1438 elm_object_disabled_set(button, EINA_TRUE);
1439 if (item->is_folder) {
1440 elm_object_style_set(button, "rename");
1441 evas_object_smart_callback_add(button, "clicked",
1442 __rename_folder_button_clicked_cb, item);
1444 elm_object_style_set(button, "reveal");
1445 evas_object_smart_callback_add(button, "clicked",
1446 __edit_bookmark_item_button_clicked_cb, item);
1449 } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1450 Evas_Object *edit_field = br_elm_editfield_add(obj);
1451 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1452 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1454 bookmark_view->m_rename_edit_field = edit_field;
1455 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1457 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1458 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1459 elm_entry_cursor_end_set(edit_field_entry);
1461 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1462 __rename_folder_unfocus_cb, data);
1463 evas_object_smart_callback_add(edit_field_entry, "activated",
1464 __rename_folder_entry_enter_key_cb, edit_field);
1466 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1476 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1478 BROWSER_LOGD("[%s]", __func__);
1479 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1481 Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1483 BROWSER_LOGE("get_folder_id is failed.");
1487 vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1488 ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1490 BROWSER_LOGE("get_bookmark_list failed");
1494 int count = bookmark_list.size();
1496 for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1497 if (bookmark_list[i])
1498 delete bookmark_list[i];
1500 bookmark_list.clear();
1508 void Browser_Bookmark_View::__slide_edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1510 BROWSER_LOGD("[%s]", __func__);
1514 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1515 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1516 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1518 if (item->is_folder) {
1519 /* edit folder by slide genlist item */
1520 if (bookmark_view->_is_empty_folder(item->title)) {
1521 bookmark_view->show_msg_popup(BR_STRING_EMPTY);
1525 bookmark_view->_go_to_sub_foler(item->title.c_str());
1527 bookmark_view->_set_edit_mode(EINA_TRUE);
1529 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1530 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1531 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1533 edje_object_signal_emit(elm_layout_edje_get(bookmark_view->m_main_layout),
1534 "expand_header_no_animation,signal", "");
1536 /* edit bookmark item by slide genlist item */
1537 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1538 because of increase performance. */
1539 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1540 bookmark_view->m_current_folder_id)) {
1541 BROWSER_LOGE("create_edit_bookmark_view failed");
1545 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1546 BROWSER_LOGE("new get_edit_bookmark_view()->init() failed");
1547 m_data_manager->destroy_edit_bookmark_view();
1552 elm_genlist_item_decorate_mode_set(bookmark_view->m_current_genlist_item_to_edit, "slide", EINA_FALSE);
1553 elm_genlist_item_select_mode_set(bookmark_view->m_current_genlist_item_to_edit, ELM_OBJECT_SELECT_MODE_DEFAULT);
1556 void Browser_Bookmark_View::__delete_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1559 BROWSER_LOGD("event_info = %d", (int)event_info);
1564 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1565 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1567 evas_object_del(bookmark_view->m_delete_confirm_popup);
1569 bookmark_view->_delete_bookmark_item_by_slide_button(item);
1572 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1575 BROWSER_LOGD("event_info = %d", (int)event_info);
1580 Evas_Object *popup = (Evas_Object *)data;
1582 evas_object_del(popup);
1585 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1588 BROWSER_LOGD("event_info = %d", (int)event_info);
1593 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1595 if (bookmark_view->m_delete_confirm_popup) {
1596 evas_object_del(bookmark_view->m_delete_confirm_popup);
1597 bookmark_view->m_delete_confirm_popup = NULL;
1600 bookmark_view->_delete_selected_bookmark();
1602 bookmark_view->_set_edit_mode(EINA_FALSE);
1605 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1607 BROWSER_LOGD("[%s]", __func__);
1609 m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1610 if (!m_delete_confirm_popup) {
1611 BROWSER_LOGE("elm_popup_add failed");
1615 evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1616 elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1618 Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1619 elm_object_text_set(ok_button, BR_STRING_YES);
1620 elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1622 Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1623 elm_object_text_set(cancel_button, BR_STRING_NO);
1624 elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1626 evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1627 m_delete_confirm_popup);
1629 evas_object_show(m_delete_confirm_popup);
1634 void Browser_Bookmark_View::_delete_bookmark_item_by_slide_button(Browser_Bookmark_DB::bookmark_item *item)
1636 BROWSER_LOGD("[%s]", __func__);
1637 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1638 int ret = EINA_TRUE;
1640 if (item->is_folder) {
1642 ret = m_data_manager->get_bookmark_db()->get_folder_id(m_current_folder_id,
1643 item->title.c_str(), &folder_id);
1645 BROWSER_LOGE("bookmark_db->get_folder_id failed");
1648 ret = m_data_manager->get_bookmark_db()->delete_folder(folder_id);
1650 BROWSER_LOGE("bookmark_db->delete_folder failed");
1654 ret = m_data_manager->get_bookmark_db()->delete_bookmark(item->id);
1656 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
1661 _delete_bookmark_item_from_folder_list(item);
1663 elm_object_item_del(it);
1665 if (_get_current_folder_item_list().size() == 0) {
1666 _show_empty_content_layout(EINA_TRUE);
1669 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
1672 void Browser_Bookmark_View::__slide_share_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1674 BROWSER_LOGD("[%s]", __func__);
1678 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1679 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1680 if (!bookmark_view->_show_share_popup(item->url.c_str()))
1681 BROWSER_LOGE("_show_share_popup failed");
1684 void Browser_Bookmark_View::__slide_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1686 BROWSER_LOGD("[%s]", __func__);
1690 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1691 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1693 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
1695 evas_object_smart_callback_add(ok_button, "clicked",
1696 __delete_confirm_response_by_slide_button_cb, item);
1699 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1701 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1703 BROWSER_LOGD("moved it = %d", it);
1705 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1706 Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1707 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1710 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1712 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1714 Elm_Object_Item *index_it = NULL;
1715 Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1716 it = elm_genlist_first_item_get(obj);
1718 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1719 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1720 index_it = elm_genlist_item_next_get(index_it);
1723 if (next_item && (item->order_index < next_item->order_index))
1725 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1728 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1731 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1733 BROWSER_LOGD("[%s]", __func__);
1734 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1736 Elm_Object_Item *it = NULL;
1737 Elm_Object_Item *next_it = NULL;
1738 Browser_Bookmark_DB::bookmark_item *item = NULL;
1739 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1740 Eina_Bool ret = EINA_TRUE;
1741 int index = order_index;
1744 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1746 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1747 if (item->order_index > index) {
1748 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1750 BROWSER_LOGD("modify_bookmark_order_index failed");
1751 int temp = item->order_index;
1752 item->order_index = index;
1754 elm_object_item_data_set(it, item);
1755 } else if (item->order_index == order_index) {
1756 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1757 item->order_index = index;
1758 elm_object_item_data_set(it, item);
1760 BROWSER_LOGD("modify_bookmark_order_index failed");
1763 it = elm_genlist_item_next_get(it);
1766 index = order_index;
1767 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1769 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1770 if (item->order_index < index) {
1771 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1773 BROWSER_LOGD("modify_bookmark_order_index failed");
1774 int temp = item->order_index;
1775 item->order_index = index;
1777 elm_object_item_data_set(it, item);
1778 } else if (item->order_index == order_index) {
1779 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1780 item->order_index = index;
1781 elm_object_item_data_set(it, item);
1783 BROWSER_LOGD("modify_bookmark_order_index failed");
1786 it = elm_genlist_item_prev_get(it);
1791 void Browser_Bookmark_View::history_item_clicked(const char *url)
1793 BROWSER_LOGD("[%s]", __func__);
1795 if (m_data_manager->get_browser_view())
1796 m_data_manager->get_browser_view()->load_url(url);
1798 if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1799 elm_naviframe_item_pop(m_navi_bar);
1802 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1804 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1808 Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1809 Browser_Bookmark_DB::bookmark_item *item = NULL;
1810 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1812 if (!elm_genlist_decorate_mode_get(obj)) {
1813 if (!item->is_folder) {
1814 std::string url = std::string(item->url.c_str());
1816 if (m_data_manager->get_browser_view())
1817 m_data_manager->get_browser_view()->load_url(url.c_str());
1819 if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1820 != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1821 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1823 bookmark_view->_go_to_sub_foler(item->title.c_str());
1825 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1826 Browser_Bookmark_DB::bookmark_item *item = NULL;
1827 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1828 if (item && item->is_editable) {
1829 item->is_delete = !(item->is_delete);
1830 elm_genlist_item_update(it);
1833 int delete_item_count = 0;
1834 int editable_item_count = 0;
1835 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1837 if (item->is_editable)
1838 editable_item_count++;
1839 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1840 if (item->is_delete)
1841 delete_item_count++;
1842 it = elm_genlist_item_next_get(it);
1845 if (editable_item_count == delete_item_count)
1846 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1848 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1850 bookmark_view->_show_selection_info();
1853 elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1856 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1858 BROWSER_LOGD("[%s]", __func__);
1862 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1863 bookmark_view->_go_up_to_main_folder();
1865 bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1868 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1870 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1871 return m_main_folder_genlist;
1873 return m_sub_folder_genlist;
1876 /* This just returns the copy of item list instance.
1877 * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1878 * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1879 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1881 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1882 return m_main_folder_list;
1884 return m_sub_folder_list;
1887 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1889 BROWSER_LOGD("is_empty=%d", is_empty);
1890 if (m_view_mode == BOOKMARK_VIEW) {
1891 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1892 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1896 if (m_edit_mode_select_all_check_button) {
1897 evas_object_del(m_edit_mode_select_all_check_button);
1898 m_edit_mode_select_all_check_button = NULL;
1900 if (m_edit_mode_select_all_layout) {
1901 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1902 evas_object_del(m_edit_mode_select_all_layout);
1903 m_edit_mode_select_all_layout = NULL;
1906 if (m_no_contents) {
1907 evas_object_del(m_no_contents);
1908 m_no_contents = NULL;
1911 m_no_contents = elm_layout_add(m_main_layout);
1912 if (!m_no_contents) {
1913 BROWSER_LOGE("elm_layout_add failed");
1915 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1916 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1917 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1918 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1919 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1920 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1921 evas_object_show(m_no_contents);
1923 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1925 if (m_no_contents) {
1926 elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1927 evas_object_del(m_no_contents);
1928 m_no_contents = NULL;
1929 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1930 "show,content_box,signal", "");
1933 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1937 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1939 BROWSER_LOGD("[%s]", __func__);
1941 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1943 elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1944 elm_box_pack_end(m_genlist_content_box, m_conformant);
1945 evas_object_show(m_conformant);
1947 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1949 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1950 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1951 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1953 for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1954 if (m_sub_folder_list[i]) {
1955 delete m_sub_folder_list[i];
1956 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1959 m_sub_folder_list.clear();
1961 if (m_upper_folder_icon) {
1962 evas_object_del(m_upper_folder_icon);
1963 m_upper_folder_icon = NULL;
1965 if (m_upper_folder_list) {
1966 evas_object_del(m_upper_folder_list);
1967 m_upper_folder_list = NULL;
1969 if (m_sub_folder_genlist) {
1970 evas_object_del(m_sub_folder_genlist);
1971 m_sub_folder_genlist = NULL;
1973 if (m_sub_folder_conformant) {
1974 evas_object_del(m_sub_folder_conformant);
1975 m_sub_folder_conformant = NULL;
1978 if (m_main_folder_list.size() == 0)
1979 _show_empty_content_layout(EINA_TRUE);
1981 _show_empty_content_layout(EINA_FALSE);
1983 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1986 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1989 string navigationbar_title = folder_name;
1990 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1991 folder_name, &folder_id);
1993 BROWSER_LOGE("get_folder_id is failed.");
1997 m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
1998 if (!m_sub_folder_genlist) {
1999 BROWSER_LOGD("_create_sub_folder_genlist failed");
2003 m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
2004 _set_navigationbar_title(navigationbar_title.c_str());
2006 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2008 if (!m_sub_folder_list.size())
2009 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2012 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
2014 BROWSER_LOGD("title=[%s]", title);
2015 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2016 if (elm_object_item_content_get(top_it) == m_main_layout)
2017 elm_object_item_text_set(top_it, title);
2020 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
2022 BROWSER_LOGD("[%s]", __func__);
2023 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2025 elm_box_unpack(m_genlist_content_box, m_conformant);
2026 evas_object_hide(m_conformant);
2028 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
2029 if (!m_sub_folder_conformant) {
2030 BROWSER_LOGE("elm_conformant_add failed");
2033 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
2034 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2035 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2036 evas_object_show(m_sub_folder_conformant);
2037 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
2039 m_current_folder_id = folder_id;
2041 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2042 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2043 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2044 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2046 #if defined(GENLIST_SWEEP)
2047 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2048 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2049 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2050 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2053 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2055 elm_object_content_set(m_sub_folder_conformant, genlist);
2056 evas_object_show(genlist);
2058 m_upper_folder_list = elm_list_add(m_main_layout);
2059 if (m_upper_folder_list) {
2060 elm_list_bounce_set(m_upper_folder_list, EINA_FALSE, EINA_FALSE);
2061 evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2062 evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
2063 evas_object_show(m_upper_folder_list);
2064 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
2065 m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
2066 if (!m_upper_folder_icon) {
2067 BROWSER_LOGE("elm_icon_add failed");
2070 if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
2071 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
2073 evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2074 evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2075 elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
2076 NULL, __upper_folder_clicked_cb, this);
2077 evas_object_show(m_upper_folder_icon);
2078 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
2080 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2081 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
2082 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
2085 /* Fill bookmark list */
2086 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
2087 m_current_folder_id);
2090 BROWSER_LOGE("get_bookmark_list failed");
2093 int size = m_sub_folder_list.size();
2094 BROWSER_LOGD("bookmark count=%d", size);
2095 for (int i = 0 ; i < size ; i++ ) {
2096 m_sub_folder_list[i]->user_data_1 = (void *)this;
2097 m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2098 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
2099 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2103 _show_empty_content_layout(EINA_TRUE);
2105 _show_empty_content_layout(EINA_FALSE);
2111 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
2113 BROWSER_LOGD("[%s]", __func__);
2114 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2116 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
2118 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2119 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2120 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2121 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2123 #if defined(GENLIST_SWEEP)
2124 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2125 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2126 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2127 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2129 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2131 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
2132 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3.text";
2133 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
2134 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
2135 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2136 m_bookmark_genlist_item_class.func.state_get = NULL;
2137 m_bookmark_genlist_item_class.func.del = NULL;
2138 // m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
2140 m_folder_genlist_item_class.item_style = "1text.1icon.2";
2141 m_folder_genlist_item_class.decorate_item_style = "mode/slide2";
2142 m_folder_genlist_item_class.decorate_all_item_style = "edit_default";
2143 m_folder_genlist_item_class.func.text_get = __genlist_label_get_cb;
2144 m_folder_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2145 m_folder_genlist_item_class.func.state_get = NULL;
2146 m_folder_genlist_item_class.func.del = NULL;
2147 evas_object_show(genlist);
2149 /* Fill bookmark list */
2150 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
2151 m_current_folder_id);
2154 BROWSER_LOGE("get_bookmark_list failed");
2157 int size = m_main_folder_list.size();
2158 BROWSER_LOGD("bookmark count=%d", size);
2159 for (int i = 0 ; i < size ; i++ ) {
2160 m_main_folder_list[i]->user_data_1 = (void *)this;
2161 if (m_main_folder_list[i]->is_folder) {
2162 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2163 &m_folder_genlist_item_class, m_main_folder_list[i], NULL,
2164 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2167 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2168 &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
2169 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2177 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
2181 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2184 if (!m_data_manager->create_new_folder_view()) {
2185 BROWSER_LOGE("create_new_folder_view failed");
2189 if (!m_data_manager->get_new_folder_view()->init()) {
2190 BROWSER_LOGE("get_new_folder_view()->init() failed");
2191 m_data_manager->destroy_new_folder_view();
2196 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2200 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2201 if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
2202 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
2203 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2207 if (!m_data_manager->get_add_to_bookmark_view()->init())
2208 m_data_manager->destroy_add_to_bookmark_view();
2211 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
2213 if (m_bottom_control_bar)
2214 evas_object_del(m_bottom_control_bar);
2216 m_bookmark_delete_controlbar_item = NULL;
2217 m_create_folder_controlbar_item = NULL;
2219 if (type == BOOKMARK_VIEW_DEFAULT) {
2220 elm_object_style_set(m_bg, "default");
2222 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2224 m_back_button = elm_button_add(m_main_layout);
2225 if (!m_back_button) {
2226 BROWSER_LOGE("elm_button_add failed");
2229 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2230 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2231 evas_object_show(m_back_button);
2232 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2234 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2235 if (!m_bottom_control_bar) {
2236 BROWSER_LOGE("elm_toolbar_add failed");
2239 elm_object_style_set(m_bottom_control_bar, "browser/default");
2240 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2242 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2243 BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
2244 NULL, __add_to_bookmark_cb, this);
2245 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2246 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2247 __edit_controlbar_item_clicked_cb, this);
2248 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2249 BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
2250 NULL, __create_folder_button, this);
2251 evas_object_show(m_bottom_control_bar);
2253 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
2254 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2256 if (!_get_current_folder_item_list().size())
2257 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2259 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2260 } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
2261 elm_object_style_set(m_bg, "edit_mode");
2263 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2264 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
2266 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2267 if (!m_bottom_control_bar) {
2268 BROWSER_LOGE("elm_toolbar_add failed");
2271 elm_object_style_set(m_bottom_control_bar, "browser/default");
2272 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2274 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2275 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2277 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2278 BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
2279 NULL, __delete_controlbar_item_clicked_cb, this);
2281 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2282 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2284 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
2285 __edit_controlbar_item_clicked_cb, this);
2287 if (type == BOOKMARK_VIEW_EDIT_MODE) {
2288 int delete_item_count = 0;
2289 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
2291 Browser_Bookmark_DB::bookmark_item *item = NULL;
2292 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
2293 if (item->is_delete)
2294 delete_item_count++;
2295 it = elm_genlist_item_next_get(it);
2298 if (delete_item_count)
2299 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2301 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2303 int delete_item_count = 0;
2304 Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
2306 Browser_History_DB::history_item *item = NULL;
2307 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
2309 /* Ignore the date label. */
2310 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
2311 if (item->is_delete)
2312 delete_item_count++;
2314 it = elm_genlist_item_next_get(it);
2316 if (delete_item_count)
2317 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2319 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2322 evas_object_show(m_bottom_control_bar);
2323 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2324 } else if (type == HISTORY_VIEW_DEFAULT) {
2325 elm_object_style_set(m_bg, "default");
2327 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2329 m_back_button = elm_button_add(m_main_layout);
2330 if (!m_back_button) {
2331 BROWSER_LOGE("elm_button_add failed");
2334 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2335 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2336 evas_object_show(m_back_button);
2337 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2339 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2340 if (!m_bottom_control_bar) {
2341 BROWSER_LOGE("elm_toolbar_add failed");
2344 elm_object_style_set(m_bottom_control_bar, "browser/default");
2345 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2347 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2348 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2350 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2351 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2352 __edit_controlbar_item_clicked_cb, this);
2354 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2355 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2357 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
2358 if (history_layout) {
2359 if (!history_layout->m_history_list.size())
2360 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2362 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
2365 evas_object_show(m_bottom_control_bar);
2367 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2370 elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2375 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2377 BROWSER_LOGD("[%s]", __func__);
2381 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2382 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2384 if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2387 /* Bookmark view -> Edit one bookmark item, then cancel. */
2388 m_data_manager->destroy_edit_bookmark_view();
2390 /* History view -> slide one item -> add to bookmark, then done. */
2391 m_data_manager->destroy_add_to_bookmark_view();
2393 m_data_manager->destroy_new_folder_view();
2396 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2398 BROWSER_LOGD("[%s]", __func__);
2399 m_main_layout = elm_layout_add(m_navi_bar);
2400 if (!m_main_layout) {
2401 BROWSER_LOGE("elm_layout_add failed");
2404 if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2405 "bookmark/main_layout")) {
2406 BROWSER_LOGE("elm_layout_file_set failed");
2410 elm_win_conformant_set(m_win, EINA_TRUE);
2411 m_conformant = elm_conformant_add(m_main_layout);
2412 if (!m_conformant) {
2413 BROWSER_LOGE("elm_conformant_add failed");
2416 elm_object_style_set(m_conformant, "internal_layout");
2417 evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2418 evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2419 evas_object_show(m_conformant);
2421 elm_object_style_set(m_bg, "default");
2423 m_genlist_content_layout = elm_layout_add(m_main_layout);
2424 if (!m_genlist_content_layout) {
2425 BROWSER_LOGE("elm_layout_add failed");
2428 if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2429 "bookmark/content_layout")) {
2430 BROWSER_LOGE("elm_layout_file_set failed");
2433 evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2434 evas_object_show(m_genlist_content_layout);
2435 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2437 m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2438 if (!m_genlist_content_box) {
2439 BROWSER_LOGE("elm_box_add failed");
2442 evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2443 evas_object_show(m_genlist_content_box);
2444 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2445 elm_box_pack_end(m_genlist_content_box, m_conformant);
2447 m_main_folder_genlist = _create_main_folder_genlist();
2448 if (!m_main_folder_genlist) {
2449 BROWSER_LOGE("_create_main_folder_genlist failed");
2453 elm_object_content_set(m_conformant, m_main_folder_genlist);
2455 m_back_button = elm_button_add(m_main_layout);
2456 if (!m_back_button) {
2457 BROWSER_LOGE("elm_button_add failed");
2460 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2461 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2462 evas_object_show(m_back_button);
2464 elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_genlist_content_layout);
2466 m_top_control_bar = elm_toolbar_add(m_main_layout);
2467 if (!m_top_control_bar) {
2468 BROWSER_LOGE("elm_toolbar_add failed");
2471 elm_object_style_set(m_top_control_bar, "browser/tabbar");
2473 elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2475 elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2477 Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2478 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2479 elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2481 elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2482 elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2484 evas_object_show(m_top_control_bar);
2486 m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2487 m_main_layout, "browser/tabbar");
2489 evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2491 int size = m_main_folder_list.size();
2493 _show_empty_content_layout(EINA_TRUE);
2495 _show_empty_content_layout(EINA_FALSE);