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 #if defined(GENLIST_SWEEP)
940 if (m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID)
941 br_elm_genlist_sweep_item_recover(m_main_folder_genlist);
943 br_elm_genlist_sweep_item_recover(m_sub_folder_genlist);
945 elm_object_style_set(m_bg, "edit_mode");
947 m_edit_mode_select_all_layout = elm_layout_add(m_genlist_content_box);
948 if (!m_edit_mode_select_all_layout) {
949 BROWSER_LOGE("elm_layout_add failed");
952 elm_layout_theme_set(m_edit_mode_select_all_layout, "genlist", "item", "select_all/default");
953 evas_object_size_hint_weight_set(m_edit_mode_select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
954 evas_object_size_hint_align_set(m_edit_mode_select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
955 evas_object_event_callback_add(m_edit_mode_select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
956 __edit_mode_select_all_clicked_cb, this);
957 m_edit_mode_select_all_check_button = elm_check_add(m_edit_mode_select_all_layout);
958 if (!m_edit_mode_select_all_check_button) {
959 BROWSER_LOGE("elm_layout_add failed");
962 evas_object_smart_callback_add(m_edit_mode_select_all_check_button, "changed",
963 __edit_mode_select_all_check_changed_cb, this);
964 evas_object_propagate_events_set(m_edit_mode_select_all_check_button, EINA_FALSE);
966 elm_object_part_content_set(m_edit_mode_select_all_layout, "elm.icon", m_edit_mode_select_all_check_button);
967 elm_object_text_set(m_edit_mode_select_all_layout, BR_STRING_SELECT_ALL);
969 elm_box_pack_start(m_genlist_content_box, m_edit_mode_select_all_layout);
970 evas_object_show(m_edit_mode_select_all_layout);
972 Elm_Object_Item *it = NULL;
973 Browser_Bookmark_DB::bookmark_item *item = NULL;
974 it = elm_genlist_first_item_get(_get_current_folder_genlist());
976 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
977 if (!item->is_editable)
978 elm_object_item_disabled_set(it, EINA_TRUE);
980 it = elm_genlist_item_next_get(it);
982 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_TRUE);
983 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_TRUE);
984 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_ALWAYS);
986 _set_navigationbar_title(BR_STRING_SELECT_ITEMS);
988 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
989 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
990 "hide,upper_folder,signal", "");
991 evas_object_hide(m_upper_folder_list);
994 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
995 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
997 elm_object_style_set(m_bg, "default");
999 if (m_edit_mode_select_all_check_button) {
1000 evas_object_del(m_edit_mode_select_all_check_button);
1001 m_edit_mode_select_all_check_button = NULL;
1003 if (m_edit_mode_select_all_layout) {
1004 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1005 evas_object_del(m_edit_mode_select_all_layout);
1006 m_edit_mode_select_all_layout = NULL;
1009 Elm_Object_Item *it = NULL;
1010 Browser_Bookmark_DB::bookmark_item *item = NULL;
1011 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1013 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1014 if (!item->is_editable)
1015 elm_object_item_disabled_set(it, EINA_FALSE);
1016 item->is_delete = EINA_FALSE;
1017 it = elm_genlist_item_next_get(it);
1019 elm_genlist_decorate_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1020 elm_genlist_reorder_mode_set(_get_current_folder_genlist(), EINA_FALSE);
1022 elm_genlist_select_mode_set(_get_current_folder_genlist(), ELM_OBJECT_SELECT_MODE_DEFAULT);
1024 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1026 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID) {
1027 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1028 "show,upper_folder,signal", "");
1029 evas_object_show(m_upper_folder_list);
1032 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1033 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1037 void Browser_Bookmark_View::_set_view_mode(view_mode mode)
1039 BROWSER_LOGD("mode=%d", mode);
1040 Evas_Object *history_layout = NULL;
1041 if (m_data_manager->get_history_layout())
1042 history_layout = m_data_manager->get_history_layout()->get_main_layout();
1045 if (mode == HISTORY_VIEW) {
1046 if (history_layout) {
1047 elm_object_part_content_set(m_main_layout, "elm.swallow.content1", history_layout);
1048 evas_object_show(history_layout);
1051 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content1,signal", "");
1053 _set_navigationbar_title(BR_STRING_HISTORY);
1055 if (elm_genlist_decorate_mode_get(m_data_manager->get_history_layout()->m_history_genlist)) {
1056 if (!_set_controlbar_type(HISTORY_VIEW_EDIT_MODE))
1057 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_EDIT_MODE failed");
1059 if (!_set_controlbar_type(HISTORY_VIEW_DEFAULT))
1060 BROWSER_LOGE("_set_controlbar_type HISTORY_VIEW_DEFAULT failed");
1062 } else if (mode == BOOKMARK_VIEW){
1064 evas_object_hide(history_layout);
1065 edje_object_signal_emit(elm_layout_edje_get(m_main_layout), "show,content0,signal", "");
1067 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1068 _set_navigationbar_title(BR_STRING_BOOKMARKS);
1070 _set_navigationbar_title(m_current_bookmark_navigationbar_title.c_str());
1073 if (elm_genlist_decorate_mode_get(_get_current_folder_genlist())) {
1074 if (!_set_controlbar_type(BOOKMARK_VIEW_EDIT_MODE))
1075 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_EDIT_MODE failed");
1077 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1078 BROWSER_LOGE("_set_controlbar_type BOOKMARK_VIEW_DEFAULT failed");
1083 void Browser_Bookmark_View::__controlbar_tab_changed_cb(void *data, Evas_Object *obj, void *event_info)
1088 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1089 Elm_Object_Item *selected_item = elm_toolbar_selected_item_get(obj);
1090 Elm_Object_Item *history_item = elm_toolbar_last_item_get(obj);
1091 if (!selected_item) {
1092 BROWSER_LOGD("no item selected");
1096 if (selected_item == history_item) {
1097 BROWSER_LOGD("tab history");
1098 /* history selected */
1099 if (!m_data_manager->get_history_layout()) {
1100 if (!m_data_manager->create_history_layout()) {
1101 BROWSER_LOGE("m_data_manager->create_history_layout() failed");
1105 if (!m_data_manager->get_history_layout()->init()) {
1106 BROWSER_LOGE("get_history_layout()->init() failed");
1111 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1112 bookmark_view->_set_view_mode(HISTORY_VIEW);
1115 BROWSER_LOGD("tab bookmark");
1116 if (m_data_manager->get_history_layout()) {
1117 m_data_manager->get_history_layout()->hide_notify_popup_layout(
1118 m_data_manager->get_history_layout()->m_sub_main_history_layout);
1119 bookmark_view->_set_view_mode(BOOKMARK_VIEW);
1124 /* bookmark -> edit(left option button -> edit button of each bookmark item. */
1125 void Browser_Bookmark_View::__edit_bookmark_item_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1127 BROWSER_LOGD("[%s]", __func__);
1130 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1131 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1133 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1134 because of increase performance. */
1135 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1137 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1139 bookmark_view->hide_notify_popup_layout(bookmark_view->m_sub_main_layout);
1141 bookmark_view->_set_edit_mode(EINA_FALSE);
1143 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1144 bookmark_view->m_current_folder_id)) {
1145 BROWSER_LOGE("create_edit_bookmark_view failed");
1149 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1150 BROWSER_LOGE("get_edit_bookmark_view()->init() failed");
1151 m_data_manager->destroy_edit_bookmark_view();
1156 void Browser_Bookmark_View::__rename_folder_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1158 BROWSER_LOGD("[%s]", __func__);
1161 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1162 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1163 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1164 elm_genlist_item_flip_set(it, EINA_TRUE);
1166 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1168 evas_object_data_set(bookmark_view->_get_current_folder_genlist(), "selected_it", it);
1171 void Browser_Bookmark_View::__rename_folder_entry_enter_key_cb(void *data, Evas_Object *obj,
1174 BROWSER_LOGD("[%s]", __func__);
1178 Evas_Object *rename_edit_field = (Evas_Object *)data;
1179 elm_object_focus_set(rename_edit_field, EINA_FALSE);
1182 void Browser_Bookmark_View::__rename_folder_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1184 BROWSER_LOGD("[%s]", __func__);
1188 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1189 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1191 Evas_Object *genlist = bookmark_view->_get_current_folder_genlist();
1193 Evas_Object *edit_field_entry = obj;
1194 char *markup_text = elm_entry_markup_to_utf8(elm_entry_entry_get(edit_field_entry));
1195 char *text = bookmark_view->_trim(markup_text);
1197 BROWSER_LOGE("elm_entry_markup_to_utf8 failed");
1200 Elm_Object_Item *it = (Elm_Object_Item *)evas_object_data_get(genlist, "selected_it");
1202 Eina_Bool only_has_space = EINA_FALSE;
1203 int space_count = 0;
1204 if (text && strlen(text)) {
1205 for (int i = 0 ; i < strlen(text) ; i++) {
1209 if (space_count == strlen(text))
1210 only_has_space = EINA_TRUE;
1213 if (!text || strlen(text) == 0 || only_has_space) {
1214 bookmark_view->show_msg_popup(BR_STRING_ENTER_FOLDER_NAME);
1215 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1217 if (strcmp(text, item->title.c_str())) {
1218 if (!m_data_manager->get_bookmark_db()->is_duplicated(text)) {
1220 m_data_manager->get_bookmark_db()->modify_bookmark_title(item->id, text);
1222 if (elm_genlist_decorate_mode_get(bookmark_view->_get_current_folder_genlist()))
1223 bookmark_view->show_msg_popup(BR_STRING_ALREADY_EXISTS);
1225 std::string folder_name = m_data_manager->get_bookmark_db()->get_folder_name_by_id(item->id);
1226 elm_entry_entry_set(edit_field_entry, folder_name.c_str());
1230 elm_genlist_item_flip_set(it, EINA_FALSE);
1232 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1234 bookmark_view->m_rename_edit_field = NULL;
1239 void Browser_Bookmark_View::__drag_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1241 BROWSER_LOGD("[%s]", __func__);
1244 #if defined(GENLIST_SWEEP)
1245 void Browser_Bookmark_View::__sweep_right_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1247 BROWSER_LOGD("[%s]", __func__);
1250 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1252 if (elm_genlist_decorate_mode_get(obj))
1255 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_TRUE);
1256 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_NONE);
1259 if (bookmark_view->m_current_sweep_item
1260 && (Elm_Object_Item *)event_info != bookmark_view->m_current_sweep_item) {
1261 elm_genlist_item_select_mode_set(bookmark_view->m_current_sweep_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1262 bookmark_view->m_current_sweep_item = (Elm_Object_Item *)event_info;
1266 void Browser_Bookmark_View::__sweep_cancel_genlist_cb(void *data,
1267 Evas_Object *obj, void *event_info)
1269 BROWSER_LOGD("[%s]", __func__);
1274 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1275 Elm_Object_Item *it = (Elm_Object_Item*)elm_genlist_decorated_item_get(obj);
1277 elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
1278 elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
1280 if (it == bookmark_view->m_current_sweep_item)
1281 bookmark_view->m_current_sweep_item = NULL;
1285 void Browser_Bookmark_View::__sweep_left_genlist_cb(void *data, Evas_Object *obj, void *event_info)
1287 BROWSER_LOGD("[%s]", __func__);
1290 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1292 if (elm_genlist_decorate_mode_get(obj))
1295 elm_genlist_item_decorate_mode_set((Elm_Object_Item *)event_info, "slide", EINA_FALSE);
1296 elm_genlist_item_select_mode_set((Elm_Object_Item *)event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
1299 bookmark_view->m_current_sweep_item = NULL;
1303 char *Browser_Bookmark_View::__genlist_label_get_cb(void *data, Evas_Object *obj, const char *part)
1305 BROWSER_LOGD("part=%s", part);
1309 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1311 const char *title = item->title.c_str();
1312 BROWSER_LOGD("title(%p)=%s", title, title);
1313 const char *url = item->url.c_str();
1314 BROWSER_LOGD("url(%p)=%s", url, url);
1316 if (part && strlen(part) > 0) {
1317 if (!strncmp(part,"elm.text", strlen("elm.text"))
1318 || !strncmp(part, "elm.base.text", strlen("elm.base.text"))
1319 || !strncmp(part, "elm.slide.text.1", strlen("elm.slide.text.1"))) {
1320 if (title && strlen(title))
1321 return strdup(title);
1324 } else if (!strncmp(part, "elm.text.sub", strlen("elm.text.sub"))) {
1325 if (url && strlen(url))
1335 Evas_Object *Browser_Bookmark_View::__genlist_icon_get_cb(void *data, Evas_Object *obj, const char *part)
1337 BROWSER_LOGD("[%s]", __func__);
1338 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1342 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)item->user_data_1;
1344 if (part && strlen(part) > 0) {
1345 if (!strncmp(part, "elm.icon", strlen("elm.icon"))) {
1346 if (item->is_folder) {
1347 Evas_Object *folder_icon = elm_icon_add(obj);
1348 if (!elm_icon_file_set(folder_icon, BROWSER_IMAGE_DIR"/folder.png", NULL)) {
1349 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1352 evas_object_size_hint_aspect_set(folder_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1355 Evas_Object *favicon = NULL;
1356 favicon = m_data_manager->get_browser_view()->get_favicon(item->url.c_str());
1360 Evas_Object *default_icon = elm_icon_add(obj);
1363 if (!elm_icon_file_set(default_icon, BROWSER_IMAGE_DIR"/faviconDefault.png", NULL)) {
1364 BROWSER_LOGE("elm_icon_file_set is failed.\n");
1367 evas_object_size_hint_aspect_set(default_icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1368 return default_icon;
1371 } else if (!strncmp(part, "elm.slide.swallow.1", strlen("elm.slide.swallow.1"))) {
1372 Evas_Object *edit_button = elm_button_add(obj);
1374 BROWSER_LOGE("elm_button_add is failed.\n");
1377 elm_object_style_set(edit_button, "text_only/sweep");
1378 elm_object_text_set(edit_button, BR_STRING_EDIT);
1379 if (!item->is_editable)
1380 elm_object_disabled_set(edit_button, EINA_TRUE);
1381 evas_object_smart_callback_add(edit_button, "clicked", __slide_edit_button_clicked_cb, item);
1383 } else if (!strncmp(part, "elm.slide.swallow.2", strlen("elm.slide.swallow.2"))) {
1384 if (item->is_folder) {
1385 Evas_Object *delete_button = elm_button_add(obj);
1386 if (!delete_button) {
1387 BROWSER_LOGE("elm_button_add is failed.\n");
1390 elm_object_style_set(delete_button, "text_only/sweep");
1391 elm_object_text_set(delete_button, BR_STRING_DELETE);
1392 if (!item->is_editable)
1393 elm_object_disabled_set(delete_button, EINA_TRUE);
1394 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1395 return delete_button;
1397 Evas_Object *share_button = elm_button_add(obj);
1398 if (!share_button) {
1399 BROWSER_LOGE("elm_button_add is failed.\n");
1402 elm_object_style_set(share_button, "text_only/sweep");
1403 elm_object_text_set(share_button, BR_STRING_SHARE);
1404 evas_object_smart_callback_add(share_button, "clicked", __slide_share_button_clicked_cb, item);
1405 return share_button;
1407 } else if (!strncmp(part, "elm.slide.swallow.3", strlen("elm.slide.swallow.3"))) {
1408 Evas_Object *delete_button = elm_button_add(obj);
1409 if (!delete_button) {
1410 BROWSER_LOGE("elm_button_add is failed.\n");
1413 elm_object_style_set(delete_button, "text_only/sweep");
1414 elm_object_text_set(delete_button, BR_STRING_DELETE);
1415 if (!item->is_editable)
1416 elm_object_disabled_set(delete_button, EINA_TRUE);
1417 evas_object_smart_callback_add(delete_button, "clicked", __slide_delete_button_clicked_cb, item);
1418 return delete_button;
1421 if (elm_genlist_decorate_mode_get(obj)) {
1422 if (!strncmp(part, "elm.edit.icon.1", strlen("elm.edit.icon.1"))) {
1423 Evas_Object *check_button = elm_check_add(obj);
1424 if (!check_button) {
1425 BROWSER_LOGE("elm_check_add is failed.\n");
1428 evas_object_propagate_events_set(check_button, EINA_FALSE);
1430 if (!item->is_editable)
1431 elm_object_disabled_set(check_button, EINA_TRUE);
1433 elm_check_state_pointer_set(check_button, &item->is_delete);
1434 evas_object_smart_callback_add(check_button, "changed",
1435 __edit_mode_item_check_changed_cb, item);
1436 return check_button;
1437 } else if (!strncmp(part, "elm.edit.icon.2", strlen("elm.edit.icon.2"))) {
1438 Evas_Object *button = elm_button_add(obj);
1440 BROWSER_LOGE("elm_button_add is failed.\n");
1443 evas_object_propagate_events_set(button, EINA_FALSE);
1445 if (!item->is_editable)
1446 elm_object_disabled_set(button, EINA_TRUE);
1447 if (item->is_folder) {
1448 elm_object_style_set(button, "rename");
1449 evas_object_smart_callback_add(button, "clicked",
1450 __rename_folder_button_clicked_cb, item);
1452 elm_object_style_set(button, "reveal");
1453 evas_object_smart_callback_add(button, "clicked",
1454 __edit_bookmark_item_button_clicked_cb, item);
1457 } else if (!strncmp(part, "elm.flip.content", strlen("elm.flip.content"))) {
1458 Evas_Object *edit_field = br_elm_editfield_add(obj);
1459 br_elm_editfield_entry_single_line_set(edit_field, EINA_TRUE);
1460 br_elm_editfield_eraser_set(edit_field, EINA_TRUE);
1462 bookmark_view->m_rename_edit_field = edit_field;
1463 evas_object_data_set(bookmark_view->m_rename_edit_field, "item", item);
1465 Evas_Object *edit_field_entry = br_elm_editfield_entry_get(edit_field);
1466 elm_entry_entry_set(edit_field_entry, item->title.c_str());
1467 elm_entry_cursor_end_set(edit_field_entry);
1469 evas_object_smart_callback_add(edit_field_entry, "unfocused",
1470 __rename_folder_unfocus_cb, data);
1471 evas_object_smart_callback_add(edit_field_entry, "activated",
1472 __rename_folder_entry_enter_key_cb, edit_field);
1474 ecore_idler_add(__set_focus_editfield_idler_cb, edit_field);
1484 Eina_Bool Browser_Bookmark_View::_is_empty_folder(string folder_name)
1486 BROWSER_LOGD("[%s]", __func__);
1487 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1489 Eina_Bool ret = bookmark_db->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID, folder_name.c_str(), &folder_id);
1491 BROWSER_LOGE("get_folder_id is failed.");
1495 vector<Browser_Bookmark_DB::bookmark_item *> bookmark_list;
1496 ret = bookmark_db->get_bookmark_list(bookmark_list, folder_id);
1498 BROWSER_LOGE("get_bookmark_list failed");
1502 int count = bookmark_list.size();
1504 for(int i = 0 ; i < bookmark_list.size() ; i++ ) {
1505 if (bookmark_list[i])
1506 delete bookmark_list[i];
1508 bookmark_list.clear();
1516 void Browser_Bookmark_View::__slide_edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1518 BROWSER_LOGD("[%s]", __func__);
1522 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1523 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1524 bookmark_view->m_current_genlist_item_to_edit = (Elm_Object_Item *)(item->user_data_2);
1526 if (item->is_folder) {
1527 /* edit folder by slide genlist item */
1528 if (bookmark_view->_is_empty_folder(item->title)) {
1529 bookmark_view->show_msg_popup(BR_STRING_EMPTY);
1533 bookmark_view->_go_to_sub_foler(item->title.c_str());
1535 bookmark_view->_set_edit_mode(EINA_TRUE);
1537 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1538 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1539 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1541 edje_object_signal_emit(elm_layout_edje_get(bookmark_view->m_main_layout),
1542 "expand_header_no_animation,signal", "");
1544 /* edit bookmark item by slide genlist item */
1545 /* Pass the selected genlist item as parameter when bookmark -> Edit item
1546 because of increase performance. */
1547 if (!m_data_manager->create_edit_bookmark_view(item->title, item->url,
1548 bookmark_view->m_current_folder_id)) {
1549 BROWSER_LOGE("create_edit_bookmark_view failed");
1553 if (!m_data_manager->get_edit_bookmark_view()->init()) {
1554 BROWSER_LOGE("new get_edit_bookmark_view()->init() failed");
1555 m_data_manager->destroy_edit_bookmark_view();
1560 elm_genlist_item_decorate_mode_set(bookmark_view->m_current_genlist_item_to_edit, "slide", EINA_FALSE);
1561 elm_genlist_item_select_mode_set(bookmark_view->m_current_genlist_item_to_edit, ELM_OBJECT_SELECT_MODE_DEFAULT);
1564 void Browser_Bookmark_View::__delete_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1567 BROWSER_LOGD("event_info = %d", (int)event_info);
1572 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1573 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1575 evas_object_del(bookmark_view->m_delete_confirm_popup);
1577 bookmark_view->_delete_bookmark_item_by_slide_button(item);
1580 void Browser_Bookmark_View::__cancel_confirm_response_by_slide_button_cb(void *data, Evas_Object *obj,
1583 BROWSER_LOGD("event_info = %d", (int)event_info);
1588 Evas_Object *popup = (Evas_Object *)data;
1590 evas_object_del(popup);
1593 void Browser_Bookmark_View::__delete_confirm_response_by_edit_mode_cb(void *data, Evas_Object *obj,
1596 BROWSER_LOGD("event_info = %d", (int)event_info);
1601 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1603 if (bookmark_view->m_delete_confirm_popup) {
1604 evas_object_del(bookmark_view->m_delete_confirm_popup);
1605 bookmark_view->m_delete_confirm_popup = NULL;
1608 bookmark_view->_delete_selected_bookmark();
1610 bookmark_view->_set_edit_mode(EINA_FALSE);
1613 Evas_Object *Browser_Bookmark_View::_show_delete_confirm_popup(void)
1615 BROWSER_LOGD("[%s]", __func__);
1617 m_delete_confirm_popup = elm_popup_add(m_navi_bar);
1618 if (!m_delete_confirm_popup) {
1619 BROWSER_LOGE("elm_popup_add failed");
1623 evas_object_size_hint_weight_set(m_delete_confirm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1624 elm_object_text_set(m_delete_confirm_popup, BR_STRING_DELETE_Q);
1626 Evas_Object *ok_button = elm_button_add(m_delete_confirm_popup);
1627 elm_object_text_set(ok_button, BR_STRING_YES);
1628 elm_object_part_content_set(m_delete_confirm_popup, "button1", ok_button);
1630 Evas_Object *cancel_button = elm_button_add(m_delete_confirm_popup);
1631 elm_object_text_set(cancel_button, BR_STRING_NO);
1632 elm_object_part_content_set(m_delete_confirm_popup, "button2", cancel_button);
1634 evas_object_smart_callback_add(cancel_button, "clicked", __cancel_confirm_response_by_slide_button_cb,
1635 m_delete_confirm_popup);
1637 evas_object_show(m_delete_confirm_popup);
1642 void Browser_Bookmark_View::_delete_bookmark_item_by_slide_button(Browser_Bookmark_DB::bookmark_item *item)
1644 BROWSER_LOGD("[%s]", __func__);
1645 Elm_Object_Item *it = (Elm_Object_Item *)(item->user_data_2);
1646 int ret = EINA_TRUE;
1648 if (item->is_folder) {
1650 ret = m_data_manager->get_bookmark_db()->get_folder_id(m_current_folder_id,
1651 item->title.c_str(), &folder_id);
1653 BROWSER_LOGE("bookmark_db->get_folder_id failed");
1656 ret = m_data_manager->get_bookmark_db()->delete_folder(folder_id);
1658 BROWSER_LOGE("bookmark_db->delete_folder failed");
1662 ret = m_data_manager->get_bookmark_db()->delete_bookmark(item->id);
1664 BROWSER_LOGE("bookmark_db->delete_bookmark failed");
1669 _delete_bookmark_item_from_folder_list(item);
1671 elm_object_item_del(it);
1673 if (_get_current_folder_item_list().size() == 0) {
1674 _show_empty_content_layout(EINA_TRUE);
1677 show_notify_popup(BR_STRING_DELETED, 3, EINA_TRUE);
1680 void Browser_Bookmark_View::__slide_share_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1682 BROWSER_LOGD("[%s]", __func__);
1686 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1687 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1688 if (!bookmark_view->_show_share_popup(item->url.c_str()))
1689 BROWSER_LOGE("_show_share_popup failed");
1692 void Browser_Bookmark_View::__slide_delete_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1694 BROWSER_LOGD("[%s]", __func__);
1698 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)data;
1699 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1701 Evas_Object *ok_button = bookmark_view->_show_delete_confirm_popup();
1703 evas_object_smart_callback_add(ok_button, "clicked",
1704 __delete_confirm_response_by_slide_button_cb, item);
1707 void Browser_Bookmark_View::__genlist_move_cb(void *data, Evas_Object *obj, void *event_info)
1709 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
1711 BROWSER_LOGD("moved it = %d", it);
1713 Browser_Bookmark_DB::bookmark_item *item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1714 Elm_Object_Item *next_it = elm_genlist_item_next_get(it);
1715 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1718 next_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(next_it);
1720 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)(item->user_data_1);
1722 Elm_Object_Item *index_it = NULL;
1723 Browser_Bookmark_DB::bookmark_item *test_item = NULL;
1724 it = elm_genlist_first_item_get(obj);
1726 test_item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(index_it);
1727 BROWSER_LOGD("title=%s, order index=%d", test_item->title.c_str(), test_item->order_index);
1728 index_it = elm_genlist_item_next_get(index_it);
1731 if (next_item && (item->order_index < next_item->order_index))
1733 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_TRUE);
1736 bookmark_view->_reorder_bookmark_item(item->order_index, EINA_FALSE);
1739 void Browser_Bookmark_View::_reorder_bookmark_item(int order_index, Eina_Bool is_move_down)
1741 BROWSER_LOGD("[%s]", __func__);
1742 Browser_Bookmark_DB *bookmark_db = m_data_manager->get_bookmark_db();
1744 Elm_Object_Item *it = NULL;
1745 Elm_Object_Item *next_it = NULL;
1746 Browser_Bookmark_DB::bookmark_item *item = NULL;
1747 Browser_Bookmark_DB::bookmark_item *next_item = NULL;
1748 Eina_Bool ret = EINA_TRUE;
1749 int index = order_index;
1752 it = elm_genlist_first_item_get(_get_current_folder_genlist());
1754 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1755 if (item->order_index > index) {
1756 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1758 BROWSER_LOGD("modify_bookmark_order_index failed");
1759 int temp = item->order_index;
1760 item->order_index = index;
1762 elm_object_item_data_set(it, item);
1763 } else if (item->order_index == order_index) {
1764 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1765 item->order_index = index;
1766 elm_object_item_data_set(it, item);
1768 BROWSER_LOGD("modify_bookmark_order_index failed");
1771 it = elm_genlist_item_next_get(it);
1774 index = order_index;
1775 it = elm_genlist_last_item_get(_get_current_folder_genlist());
1777 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1778 if (item->order_index < index) {
1779 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1781 BROWSER_LOGD("modify_bookmark_order_index failed");
1782 int temp = item->order_index;
1783 item->order_index = index;
1785 elm_object_item_data_set(it, item);
1786 } else if (item->order_index == order_index) {
1787 ret = bookmark_db->modify_bookmark_order_index(item->id, m_current_folder_id, index);
1788 item->order_index = index;
1789 elm_object_item_data_set(it, item);
1791 BROWSER_LOGD("modify_bookmark_order_index failed");
1794 it = elm_genlist_item_prev_get(it);
1799 void Browser_Bookmark_View::history_item_clicked(const char *url)
1801 BROWSER_LOGD("[%s]", __func__);
1803 if (m_data_manager->get_browser_view())
1804 m_data_manager->get_browser_view()->load_url(url);
1806 if (elm_naviframe_bottom_item_get(m_navi_bar) != elm_naviframe_top_item_get(m_navi_bar))
1807 elm_naviframe_item_pop(m_navi_bar);
1810 void Browser_Bookmark_View::__bookmark_item_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1812 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1816 Elm_Object_Item *seleted_item = elm_genlist_selected_item_get(obj);
1817 Browser_Bookmark_DB::bookmark_item *item = NULL;
1818 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(seleted_item);
1820 if (!elm_genlist_decorate_mode_get(obj)) {
1821 if (!item->is_folder) {
1822 std::string url = std::string(item->url.c_str());
1824 if (m_data_manager->get_browser_view())
1825 m_data_manager->get_browser_view()->load_url(url.c_str());
1827 if (elm_naviframe_bottom_item_get(bookmark_view->m_navi_bar)
1828 != elm_naviframe_top_item_get(bookmark_view->m_navi_bar))
1829 elm_naviframe_item_pop(bookmark_view->m_navi_bar);
1831 bookmark_view->_go_to_sub_foler(item->title.c_str());
1833 Elm_Object_Item *it = elm_genlist_selected_item_get(obj);
1834 Browser_Bookmark_DB::bookmark_item *item = NULL;
1835 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1836 if (item && item->is_editable) {
1837 item->is_delete = !(item->is_delete);
1838 elm_genlist_item_update(it);
1841 int delete_item_count = 0;
1842 int editable_item_count = 0;
1843 it = elm_genlist_first_item_get(bookmark_view->_get_current_folder_genlist());
1845 if (item->is_editable)
1846 editable_item_count++;
1847 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
1848 if (item->is_delete)
1849 delete_item_count++;
1850 it = elm_genlist_item_next_get(it);
1853 if (editable_item_count == delete_item_count)
1854 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_TRUE);
1856 elm_check_state_set(bookmark_view->m_edit_mode_select_all_check_button, EINA_FALSE);
1858 bookmark_view->_show_selection_info();
1861 elm_genlist_item_selected_set(seleted_item, EINA_FALSE);
1864 void Browser_Bookmark_View::__upper_folder_clicked_cb(void *data, Evas_Object *obj, void *eventInfo)
1866 BROWSER_LOGD("[%s]", __func__);
1870 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
1871 bookmark_view->_go_up_to_main_folder();
1873 bookmark_view->_set_navigationbar_title(BR_STRING_BOOKMARKS);
1876 Evas_Object *Browser_Bookmark_View::_get_current_folder_genlist(void)
1878 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1879 return m_main_folder_genlist;
1881 return m_sub_folder_genlist;
1884 /* This just returns the copy of item list instance.
1885 * Just refer to read. Do not modify(insert or delete) the contents of this return value.
1886 * It doesn't modify the actual m_main_folder_list, m_sub_folder_list contents. */
1887 vector<Browser_Bookmark_DB::bookmark_item *> Browser_Bookmark_View::_get_current_folder_item_list(void)
1889 if (m_current_folder_id == BROWSER_BOOKMARK_MAIN_FOLDER_ID)
1890 return m_main_folder_list;
1892 return m_sub_folder_list;
1895 void Browser_Bookmark_View::_show_empty_content_layout(Eina_Bool is_empty)
1897 BROWSER_LOGD("is_empty=%d", is_empty);
1898 if (m_view_mode == BOOKMARK_VIEW) {
1899 if (!_set_controlbar_type(BOOKMARK_VIEW_DEFAULT))
1900 BROWSER_LOGE("_set_controlbar_type(BOOKMARK_VIEW_DEFAULT) failed");
1904 if (m_edit_mode_select_all_check_button) {
1905 evas_object_del(m_edit_mode_select_all_check_button);
1906 m_edit_mode_select_all_check_button = NULL;
1908 if (m_edit_mode_select_all_layout) {
1909 elm_box_unpack(m_genlist_content_box, m_edit_mode_select_all_layout);
1910 evas_object_del(m_edit_mode_select_all_layout);
1911 m_edit_mode_select_all_layout = NULL;
1914 if (m_no_contents) {
1915 evas_object_del(m_no_contents);
1916 m_no_contents = NULL;
1919 m_no_contents = elm_layout_add(m_main_layout);
1920 if (!m_no_contents) {
1921 BROWSER_LOGE("elm_layout_add failed");
1923 elm_layout_theme_set(m_no_contents, "layout", "no_bookmark", "full");
1924 elm_object_part_text_set (m_no_contents, "elm.text", BR_STRING_NO_BOOKMARKS);
1925 evas_object_size_hint_weight_set(m_no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1926 evas_object_size_hint_align_set(m_no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
1927 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.no_content", m_no_contents);
1928 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,content_box,signal", "");
1929 evas_object_show(m_no_contents);
1931 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
1933 if (m_no_contents) {
1934 elm_object_part_content_unset(m_genlist_content_layout, "elm.swallow.no_content");
1935 evas_object_del(m_no_contents);
1936 m_no_contents = NULL;
1937 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout),
1938 "show,content_box,signal", "");
1941 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
1945 void Browser_Bookmark_View::_go_up_to_main_folder(void)
1947 BROWSER_LOGD("[%s]", __func__);
1949 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
1951 elm_box_unpack(m_genlist_content_box, m_sub_folder_conformant);
1952 elm_box_pack_end(m_genlist_content_box, m_conformant);
1953 evas_object_show(m_conformant);
1955 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "hide,upper_folder,signal", "");
1957 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
1958 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_OPEN);
1959 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_TRUE);
1961 for(int i = 0 ; i < m_sub_folder_list.size() ; i++) {
1962 if (m_sub_folder_list[i]) {
1963 delete m_sub_folder_list[i];
1964 m_sub_folder_list.erase(m_sub_folder_list.begin() + i);
1967 m_sub_folder_list.clear();
1969 if (m_upper_folder_icon) {
1970 evas_object_del(m_upper_folder_icon);
1971 m_upper_folder_icon = NULL;
1973 if (m_upper_folder_list) {
1974 evas_object_del(m_upper_folder_list);
1975 m_upper_folder_list = NULL;
1977 if (m_sub_folder_genlist) {
1978 evas_object_del(m_sub_folder_genlist);
1979 m_sub_folder_genlist = NULL;
1981 if (m_sub_folder_conformant) {
1982 evas_object_del(m_sub_folder_conformant);
1983 m_sub_folder_conformant = NULL;
1986 if (m_main_folder_list.size() == 0)
1987 _show_empty_content_layout(EINA_TRUE);
1989 _show_empty_content_layout(EINA_FALSE);
1991 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_FALSE);
1994 void Browser_Bookmark_View::_go_to_sub_foler(const char *folder_name)
1997 string navigationbar_title = folder_name;
1998 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_folder_id(BROWSER_BOOKMARK_MAIN_FOLDER_ID,
1999 folder_name, &folder_id);
2001 BROWSER_LOGE("get_folder_id is failed.");
2005 m_sub_folder_genlist = _create_sub_folder_genlist(folder_id);
2006 if (!m_sub_folder_genlist) {
2007 BROWSER_LOGD("_create_sub_folder_genlist failed");
2011 m_current_bookmark_navigationbar_title = navigationbar_title.c_str();
2012 _set_navigationbar_title(navigationbar_title.c_str());
2014 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2016 if (!m_sub_folder_list.size())
2017 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2020 void Browser_Bookmark_View::_set_navigationbar_title(const char *title)
2022 BROWSER_LOGD("title=[%s]", title);
2023 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2024 if (elm_object_item_content_get(top_it) == m_main_layout)
2025 elm_object_item_text_set(top_it, title);
2028 Evas_Object *Browser_Bookmark_View::_create_sub_folder_genlist(int folder_id)
2030 BROWSER_LOGD("[%s]", __func__);
2031 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2033 elm_box_unpack(m_genlist_content_box, m_conformant);
2034 evas_object_hide(m_conformant);
2036 m_sub_folder_conformant = elm_conformant_add(m_main_layout);
2037 if (!m_sub_folder_conformant) {
2038 BROWSER_LOGE("elm_conformant_add failed");
2041 elm_object_style_set(m_sub_folder_conformant, "internal_layout");
2042 evas_object_size_hint_weight_set(m_sub_folder_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2043 evas_object_size_hint_align_set(m_sub_folder_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2044 evas_object_show(m_sub_folder_conformant);
2045 elm_box_pack_end(m_genlist_content_box, m_sub_folder_conformant);
2047 m_current_folder_id = folder_id;
2049 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2050 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2051 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2052 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2054 #if defined(GENLIST_SWEEP)
2055 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2056 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2057 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2058 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2061 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2063 elm_object_content_set(m_sub_folder_conformant, genlist);
2064 evas_object_show(genlist);
2066 m_upper_folder_list = elm_list_add(m_main_layout);
2067 if (m_upper_folder_list) {
2068 elm_list_bounce_set(m_upper_folder_list, EINA_FALSE, EINA_FALSE);
2069 evas_object_size_hint_weight_set(m_upper_folder_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2070 evas_object_size_hint_align_set(m_upper_folder_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
2071 evas_object_show(m_upper_folder_list);
2072 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.upperlist", m_upper_folder_list);
2073 m_upper_folder_icon = elm_icon_add(m_upper_folder_list);
2074 if (!m_upper_folder_icon) {
2075 BROWSER_LOGE("elm_icon_add failed");
2078 if (!elm_icon_file_set(m_upper_folder_icon, BROWSER_IMAGE_DIR"/I01_icon_upper_folder.png", NULL))
2079 BROWSER_LOGE("elm_icon_file_set is failed. [%s]");
2081 evas_object_size_hint_min_set(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2082 evas_object_resize(m_upper_folder_icon, UPPER_FOLDER_ICON_SIZE, UPPER_FOLDER_ICON_SIZE);
2083 elm_list_item_append(m_upper_folder_list, BR_STRING_BOOKMARKS, m_upper_folder_icon,
2084 NULL, __upper_folder_clicked_cb, this);
2085 evas_object_show(m_upper_folder_icon);
2086 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,upper_folder,signal", "");
2088 Elm_Object_Item *top_it = elm_naviframe_top_item_get(m_navi_bar);
2089 elm_object_item_signal_emit(top_it, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_INSTANT_CLOSE);
2090 evas_object_data_set(m_navi_bar, "visible", (void *)EINA_FALSE);
2093 /* Fill bookmark list */
2094 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_sub_folder_list,
2095 m_current_folder_id);
2098 BROWSER_LOGE("get_bookmark_list failed");
2101 int size = m_sub_folder_list.size();
2102 BROWSER_LOGD("bookmark count=%d", size);
2103 for (int i = 0 ; i < size ; i++ ) {
2104 m_sub_folder_list[i]->user_data_1 = (void *)this;
2105 m_sub_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2106 &m_bookmark_genlist_item_class, m_sub_folder_list[i], NULL,
2107 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2111 _show_empty_content_layout(EINA_TRUE);
2113 _show_empty_content_layout(EINA_FALSE);
2119 Evas_Object *Browser_Bookmark_View::_create_main_folder_genlist(void)
2121 BROWSER_LOGD("[%s]", __func__);
2122 Evas_Object *genlist = elm_genlist_add(m_main_layout);
2124 m_current_folder_id = BROWSER_BOOKMARK_MAIN_FOLDER_ID;
2126 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2127 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2128 elm_genlist_block_count_set(genlist, BROWSER_BOOKMARK_GENLIST_BLOCK_COUNT);
2129 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
2131 #if defined(GENLIST_SWEEP)
2132 evas_object_smart_callback_add(genlist, "drag,start,up", __sweep_cancel_genlist_cb, genlist);
2133 evas_object_smart_callback_add(genlist, "drag,start,down", __sweep_cancel_genlist_cb, genlist);
2134 evas_object_smart_callback_add(genlist, "drag,start,right", __sweep_right_genlist_cb, this);
2135 evas_object_smart_callback_add(genlist, "drag,start,left", __sweep_left_genlist_cb, this);
2137 evas_object_smart_callback_add(genlist, "moved", __genlist_move_cb, this);
2139 m_bookmark_genlist_item_class.item_style = "1text.1icon.2";
2140 m_bookmark_genlist_item_class.decorate_item_style = "mode/slide3.text";
2141 m_bookmark_genlist_item_class.decorate_all_item_style = "edit_default";
2142 m_bookmark_genlist_item_class.func.text_get = __genlist_label_get_cb;
2143 m_bookmark_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2144 m_bookmark_genlist_item_class.func.state_get = NULL;
2145 m_bookmark_genlist_item_class.func.del = NULL;
2146 // m_bookmark_genlist_item_class.func.moved = __genlist_move_cb;
2148 m_folder_genlist_item_class.item_style = "1text.1icon.2";
2149 m_folder_genlist_item_class.decorate_item_style = "mode/slide2";
2150 m_folder_genlist_item_class.decorate_all_item_style = "edit_default";
2151 m_folder_genlist_item_class.func.text_get = __genlist_label_get_cb;
2152 m_folder_genlist_item_class.func.content_get = __genlist_icon_get_cb;
2153 m_folder_genlist_item_class.func.state_get = NULL;
2154 m_folder_genlist_item_class.func.del = NULL;
2155 evas_object_show(genlist);
2157 /* Fill bookmark list */
2158 Eina_Bool ret = m_data_manager->get_bookmark_db()->get_bookmark_list(m_main_folder_list,
2159 m_current_folder_id);
2162 BROWSER_LOGE("get_bookmark_list failed");
2165 int size = m_main_folder_list.size();
2166 BROWSER_LOGD("bookmark count=%d", size);
2167 for (int i = 0 ; i < size ; i++ ) {
2168 m_main_folder_list[i]->user_data_1 = (void *)this;
2169 if (m_main_folder_list[i]->is_folder) {
2170 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2171 &m_folder_genlist_item_class, m_main_folder_list[i], NULL,
2172 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2175 m_main_folder_list[i]->user_data_2 = (void *)elm_genlist_item_append(genlist,
2176 &m_bookmark_genlist_item_class, m_main_folder_list[i], NULL,
2177 ELM_GENLIST_ITEM_NONE, __bookmark_item_clicked_cb, this);
2185 void Browser_Bookmark_View::__create_folder_button(void *data, Evas_Object *obj, void *event_info)
2189 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2192 if (!m_data_manager->create_new_folder_view()) {
2193 BROWSER_LOGE("create_new_folder_view failed");
2197 if (!m_data_manager->get_new_folder_view()->init()) {
2198 BROWSER_LOGE("get_new_folder_view()->init() failed");
2199 m_data_manager->destroy_new_folder_view();
2204 void Browser_Bookmark_View::__add_to_bookmark_cb(void *data, Evas_Object *obj, void *event_info)
2208 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2209 if (!m_data_manager->create_add_to_bookmark_view(m_data_manager->get_browser_view()->get_title(),
2210 m_data_manager->get_browser_view()->get_url(), bookmark_view->m_current_folder_id)) {
2211 BROWSER_LOGE("m_data_manager->create_add_to_bookmark_view failed");
2215 if (!m_data_manager->get_add_to_bookmark_view()->init())
2216 m_data_manager->destroy_add_to_bookmark_view();
2219 Eina_Bool Browser_Bookmark_View::_set_controlbar_type(controlbar_type type)
2221 if (m_bottom_control_bar)
2222 evas_object_del(m_bottom_control_bar);
2224 m_bookmark_delete_controlbar_item = NULL;
2225 m_create_folder_controlbar_item = NULL;
2227 if (type == BOOKMARK_VIEW_DEFAULT) {
2228 elm_object_style_set(m_bg, "default");
2230 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2232 m_back_button = elm_button_add(m_main_layout);
2233 if (!m_back_button) {
2234 BROWSER_LOGE("elm_button_add failed");
2237 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2238 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2239 evas_object_show(m_back_button);
2240 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2242 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2243 if (!m_bottom_control_bar) {
2244 BROWSER_LOGE("elm_toolbar_add failed");
2247 elm_object_style_set(m_bottom_control_bar, "browser/default");
2248 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2250 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2251 BROWSER_IMAGE_DIR"/I01_controlbar_icon_create.png",
2252 NULL, __add_to_bookmark_cb, this);
2253 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2254 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2255 __edit_controlbar_item_clicked_cb, this);
2256 m_create_folder_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2257 BROWSER_IMAGE_DIR"/01_controlbar_icon_create_folder.png",
2258 NULL, __create_folder_button, this);
2259 evas_object_show(m_bottom_control_bar);
2261 if (m_current_folder_id != BROWSER_BOOKMARK_MAIN_FOLDER_ID)
2262 elm_object_item_disabled_set(m_create_folder_controlbar_item, EINA_TRUE);
2264 if (!_get_current_folder_item_list().size())
2265 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2267 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2268 } else if (type == BOOKMARK_VIEW_EDIT_MODE || type == HISTORY_VIEW_EDIT_MODE) {
2269 elm_object_style_set(m_bg, "edit_mode");
2271 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2272 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
2274 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2275 if (!m_bottom_control_bar) {
2276 BROWSER_LOGE("elm_toolbar_add failed");
2279 elm_object_style_set(m_bottom_control_bar, "browser/default");
2280 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2282 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2283 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2285 m_bookmark_delete_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2286 BROWSER_IMAGE_DIR"/01_controlbar_icon_delete.png",
2287 NULL, __delete_controlbar_item_clicked_cb, this);
2289 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2290 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2292 elm_toolbar_item_append(m_bottom_control_bar, BROWSER_IMAGE_DIR"/01_controllbar_icon_close.png", NULL,
2293 __edit_controlbar_item_clicked_cb, this);
2295 if (type == BOOKMARK_VIEW_EDIT_MODE) {
2296 int delete_item_count = 0;
2297 Elm_Object_Item *it = elm_genlist_first_item_get(_get_current_folder_genlist());
2299 Browser_Bookmark_DB::bookmark_item *item = NULL;
2300 item = (Browser_Bookmark_DB::bookmark_item *)elm_object_item_data_get(it);
2301 if (item->is_delete)
2302 delete_item_count++;
2303 it = elm_genlist_item_next_get(it);
2306 if (delete_item_count)
2307 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2309 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2311 int delete_item_count = 0;
2312 Elm_Object_Item *it = elm_genlist_first_item_get(m_data_manager->get_history_layout()->m_history_genlist);
2314 Browser_History_DB::history_item *item = NULL;
2315 item = (Browser_History_DB::history_item *)elm_object_item_data_get(it);
2317 /* Ignore the date label. */
2318 if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
2319 if (item->is_delete)
2320 delete_item_count++;
2322 it = elm_genlist_item_next_get(it);
2324 if (delete_item_count)
2325 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_FALSE);
2327 elm_object_item_disabled_set(m_bookmark_delete_controlbar_item, EINA_TRUE);
2330 evas_object_show(m_bottom_control_bar);
2331 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2332 } else if (type == HISTORY_VIEW_DEFAULT) {
2333 elm_object_style_set(m_bg, "default");
2335 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(m_navi_bar);
2337 m_back_button = elm_button_add(m_main_layout);
2338 if (!m_back_button) {
2339 BROWSER_LOGE("elm_button_add failed");
2342 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2343 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2344 evas_object_show(m_back_button);
2345 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_PREV_BTN, m_back_button);
2347 m_bottom_control_bar = elm_toolbar_add(m_main_layout);
2348 if (!m_bottom_control_bar) {
2349 BROWSER_LOGE("elm_toolbar_add failed");
2352 elm_object_style_set(m_bottom_control_bar, "browser/default");
2353 elm_toolbar_shrink_mode_set(m_bottom_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2355 Elm_Object_Item *empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2356 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2358 m_bookmark_edit_controlbar_item = elm_toolbar_item_append(m_bottom_control_bar,
2359 BROWSER_IMAGE_DIR"/01_controlbar_icon_compose.png", NULL,
2360 __edit_controlbar_item_clicked_cb, this);
2362 empty_item = elm_toolbar_item_append(m_bottom_control_bar, NULL, NULL, NULL, NULL);
2363 elm_object_item_disabled_set(empty_item, EINA_TRUE);
2365 Browser_History_Layout *history_layout = m_data_manager->get_history_layout();
2366 if (history_layout) {
2367 if (!history_layout->m_history_list.size())
2368 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_TRUE);
2370 elm_object_item_disabled_set(m_bookmark_edit_controlbar_item, EINA_FALSE);
2373 evas_object_show(m_bottom_control_bar);
2375 elm_object_item_part_content_set(navi_it, ELM_NAVIFRAME_ITEM_CONTROLBAR, m_bottom_control_bar);
2378 elm_object_focus_allow_set(m_bottom_control_bar, EINA_FALSE);
2383 void Browser_Bookmark_View::__naviframe_pop_finished_cb(void *data , Evas_Object *obj, void *event_info)
2385 BROWSER_LOGD("[%s]", __func__);
2389 Browser_Bookmark_View *bookmark_view = (Browser_Bookmark_View *)data;
2390 Elm_Object_Item *it = (Elm_Object_Item *)event_info;
2392 if (bookmark_view->m_navi_it != elm_naviframe_top_item_get(m_navi_bar))
2395 /* Bookmark view -> Edit one bookmark item, then cancel. */
2396 m_data_manager->destroy_edit_bookmark_view();
2398 /* History view -> slide one item -> add to bookmark, then done. */
2399 m_data_manager->destroy_add_to_bookmark_view();
2401 m_data_manager->destroy_new_folder_view();
2404 Eina_Bool Browser_Bookmark_View::_create_main_layout(void)
2406 BROWSER_LOGD("[%s]", __func__);
2407 m_main_layout = elm_layout_add(m_navi_bar);
2408 if (!m_main_layout) {
2409 BROWSER_LOGE("elm_layout_add failed");
2412 if (!elm_layout_file_set(m_main_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2413 "bookmark/main_layout")) {
2414 BROWSER_LOGE("elm_layout_file_set failed");
2418 elm_win_conformant_set(m_win, EINA_TRUE);
2419 m_conformant = elm_conformant_add(m_main_layout);
2420 if (!m_conformant) {
2421 BROWSER_LOGE("elm_conformant_add failed");
2424 elm_object_style_set(m_conformant, "internal_layout");
2425 evas_object_size_hint_weight_set(m_conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2426 evas_object_size_hint_align_set(m_conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
2427 evas_object_show(m_conformant);
2429 elm_object_style_set(m_bg, "default");
2430 m_sub_main_layout = elm_layout_add(m_main_layout);
2431 if (!m_sub_main_layout) {
2432 BROWSER_LOGE("elm_layout_add failed");
2435 elm_layout_file_set(m_sub_main_layout,
2436 BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2437 "browser/selectioninfo");
2438 evas_object_size_hint_weight_set(
2440 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2441 evas_object_size_hint_align_set(
2443 EVAS_HINT_FILL, EVAS_HINT_FILL);
2445 m_genlist_content_layout = elm_layout_add(m_sub_main_layout);
2446 if (!m_genlist_content_layout) {
2447 BROWSER_LOGE("elm_layout_add failed");
2450 if (!elm_layout_file_set(m_genlist_content_layout, BROWSER_EDJE_DIR"/browser-bookmark-view.edj",
2451 "bookmark/content_layout")) {
2452 BROWSER_LOGE("elm_layout_file_set failed");
2455 evas_object_size_hint_weight_set(m_genlist_content_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2456 evas_object_show(m_genlist_content_layout);
2457 edje_object_signal_emit(elm_layout_edje_get(m_genlist_content_layout), "show,content_box,signal", "");
2459 m_genlist_content_box = elm_box_add(m_genlist_content_layout);
2460 if (!m_genlist_content_box) {
2461 BROWSER_LOGE("elm_box_add failed");
2464 evas_object_size_hint_weight_set(m_genlist_content_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2465 evas_object_show(m_genlist_content_box);
2466 elm_object_part_content_set(m_genlist_content_layout, "elm.swallow.content_box", m_genlist_content_box);
2467 elm_box_pack_end(m_genlist_content_box, m_conformant);
2469 m_main_folder_genlist = _create_main_folder_genlist();
2470 if (!m_main_folder_genlist) {
2471 BROWSER_LOGE("_create_main_folder_genlist failed");
2475 elm_object_content_set(m_conformant, m_main_folder_genlist);
2477 m_back_button = elm_button_add(m_main_layout);
2478 if (!m_back_button) {
2479 BROWSER_LOGE("elm_button_add failed");
2482 elm_object_style_set(m_back_button, "browser/bookmark_controlbar_back");
2483 evas_object_smart_callback_add(m_back_button, "clicked", __back_button_clicked_cb, this);
2484 evas_object_show(m_back_button);
2486 elm_object_part_content_set(m_sub_main_layout, "genlist.swallow.contents", m_genlist_content_layout);
2487 elm_object_part_content_set(m_main_layout, "elm.swallow.content", m_sub_main_layout);
2489 m_top_control_bar = elm_toolbar_add(m_main_layout);
2490 if (!m_top_control_bar) {
2491 BROWSER_LOGE("elm_toolbar_add failed");
2494 elm_object_style_set(m_top_control_bar, "browser/tabbar");
2496 elm_toolbar_shrink_mode_set(m_top_control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
2498 elm_object_part_content_set(m_main_layout, "elm.swallow.tabbar", m_top_control_bar);
2500 Elm_Object_Item *bookmark_tab_item = elm_toolbar_item_append(m_top_control_bar, NULL,
2501 BR_STRING_BOOKMARKS, __controlbar_tab_changed_cb, this);
2502 elm_toolbar_item_append(m_top_control_bar, NULL, BR_STRING_HISTORY, __controlbar_tab_changed_cb, this);
2504 elm_toolbar_select_mode_set(m_top_control_bar, ELM_OBJECT_SELECT_MODE_ALWAYS);
2505 elm_toolbar_item_selected_set(bookmark_tab_item, EINA_TRUE);
2507 evas_object_show(m_top_control_bar);
2509 m_navi_it = elm_naviframe_item_push(m_navi_bar, NULL, m_back_button, NULL,
2510 m_main_layout, "browser/tabbar");
2512 evas_object_smart_callback_add(m_navi_bar, "transition,finished", __naviframe_pop_finished_cb, this);
2514 int size = m_main_folder_list.size();
2516 _show_empty_content_layout(EINA_TRUE);
2518 _show_empty_content_layout(EINA_FALSE);