From: Kamil Nowac Date: Fri, 26 Aug 2016 13:06:49 +0000 (+0200) Subject: Add history removal X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aa5f2c4f76f860216244e01a7e03dfda259e598f;p=profile%2Fcommon%2Fapps%2Fweb%2Fbrowser.git Add history removal [Issue] N/A [Problem] No history removal [Solution] Feature added [Verify] Open history-> History should load. Open remove mode with context menu Select elements and remove them -> After browser restart should be no removed elements. Change-Id: I42985c8d64b0014230a84030c179762516fbbae5 --- diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index 56af8c5f..43219d90 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -313,8 +313,8 @@ void BookmarkManagerUI::_cancel_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - BookmarkManagerUI* bookmarkManagerUI = static_cast(data); - bookmarkManagerUI->onBackPressed(); + auto self = static_cast(data); + self->onBackPressed(); } else BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); } @@ -336,7 +336,10 @@ void BookmarkManagerUI::_accept_clicked(void* data, Evas_Object*, void*) break; case BookmarkManagerState::SelectFolder: bookmarkManagerUI->folderSelected(bookmarkManagerUI->m_folder_path.back()); - break; + break; + case BookmarkManagerState::HistoryDeleteView: + bookmarkManagerUI->removeHistoryItems(); + break; default: break; } @@ -345,6 +348,27 @@ void BookmarkManagerUI::_accept_clicked(void* data, Evas_Object*, void*) BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); } +void BookmarkManagerUI::removeHistoryItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + + auto historyListSize = elm_genlist_items_count(m_historyGenlist); + + for (int i = historyListSize; i > 1; --i) { + auto it = elm_genlist_nth_item_get(m_historyGenlist, i); + auto check = elm_object_item_part_content_get(it, "elm.swallow.end"); + if (!check) + continue; + auto state = elm_check_state_get(check); + if (state == EINA_TRUE) { + elm_object_item_del(it); + } + } + elm_genlist_realized_items_update(m_historyGenlist); + removeSelectedItemsFromHistory(); + m_naviframe->setRightButtonEnabled(false); + +} void BookmarkManagerUI::_prev_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -465,9 +489,16 @@ void BookmarkManagerUI::addBookmarkItemCurrentFolder(services::SharedBookmarkIte void BookmarkManagerUI::addBookmarkItem(BookmarkData* item) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item* bookmarkView = elm_genlist_item_append(m_genlist, m_bookmark_item_class, - item, nullptr, ELM_GENLIST_ITEM_NONE, _bookmarkItemClicked, item); - m_map_bookmark.insert(std::pair(item->bookmarkItem->getId(), bookmarkView)); + Elm_Object_Item* bookmarkView = elm_genlist_item_append( + m_genlist, + m_bookmark_item_class, + item, + nullptr, + ELM_GENLIST_ITEM_NONE, + _bookmarkItemClicked, + item); + m_map_bookmark.insert( + std::pair(item->bookmarkItem->getId(), bookmarkView)); elm_genlist_item_selected_set(bookmarkView, EINA_FALSE); } @@ -483,6 +514,10 @@ void BookmarkManagerUI::onBackPressed() //TODO: We should go to the previous navigatorToolbar element if it exists. closeBookmarkManagerClicked(); break; + case BookmarkManagerState::HistoryDeleteView: + changeState(BookmarkManagerState::HistoryView); + prepareHistoryContent(); + break; case BookmarkManagerState::HistoryView: elm_toolbar_item_selected_set( elm_toolbar_first_item_get(m_modulesToolbar), @@ -520,13 +555,25 @@ void BookmarkManagerUI::showContextMenu() alignContextMenu(*window); } else if (m_state == BookmarkManagerState::HistoryView) { createContextMenu(*window); - elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REMOVE"), nullptr, nullptr, nullptr); + elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REMOVE"), nullptr, _cm_history_remove_clicked, this); alignContextMenu(*window); } } else BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__); } +void BookmarkManagerUI::_cm_history_remove_clicked(void* data, Evas_Object*, void*) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + auto bookmarkManagerUI = static_cast(data); + _cm_dismissed(nullptr, bookmarkManagerUI->m_ctxpopup, nullptr); + bookmarkManagerUI->changeState(BookmarkManagerState::HistoryDeleteView); + bookmarkManagerUI->prepareHistoryContent(); + } else + BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); +} + void BookmarkManagerUI::_cm_delete_clicked(void* data, Evas_Object*, void* ) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -614,7 +661,9 @@ void BookmarkManagerUI::prepareHistoryContent() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - auto historyGenlist = getHistoryGenlistContent(m_box); + bool removeMode = (m_state == BookmarkManagerState::HistoryDeleteView); + auto historyGenlist = getHistoryGenlistContent(m_box, m_naviframe, removeMode); + elm_box_unpack_all(m_box); if (historyGenlist && *historyGenlist) { @@ -746,10 +795,21 @@ void BookmarkManagerUI::changeState(BookmarkManagerState state) elm_object_part_content_unset(m_content, "navigator_toolbar"); elm_object_signal_emit(m_content, "hide_navigator_toolbar", "ui"); evas_object_show(m_modulesToolbar); - elm_genlist_reorder_mode_set(m_genlist, EINA_FALSE); elm_box_unpack(m_box, m_select_all); evas_object_hide(m_select_all); break; + case BookmarkManagerState::HistoryDeleteView: + updateNoBookmarkText(); + m_naviframe->setTitle(_("IDS_BR_MBODY_HISTORY")); + m_naviframe->setPrevButtonVisible(false); + m_naviframe->setLeftButtonVisible(true); + m_naviframe->setRightButtonVisible(true); + m_naviframe->setRightButtonText(_("IDS_BR_SK_DELETE")); + updateDeleteTopContent(); + elm_object_signal_emit(m_content, "hide_toolbars", "ui"); + evas_object_hide(m_modulesToolbar); + evas_object_hide(m_navigatorToolbar); + break; case BookmarkManagerState::Default: default: updateNoBookmarkText(); @@ -793,7 +853,8 @@ void BookmarkManagerUI::reoderBookmarkItems() void BookmarkManagerUI::updateNoBookmarkText() { - if (m_map_bookmark.size() || m_state == BookmarkManagerState::HistoryView) { + if (m_map_bookmark.size() || + (m_state == BookmarkManagerState::HistoryView || m_state == BookmarkManagerState::HistoryDeleteView)) { evas_object_hide(m_empty_layout); elm_object_signal_emit(m_content, "hide_overlay", "ui"); } else { @@ -806,8 +867,9 @@ void BookmarkManagerUI::updateDeleteClick(int id) { m_delete_count -= m_map_delete[id] ? 1 : -1; m_map_delete[id] = !m_map_delete[id]; - elm_check_state_set(elm_object_part_content_get(m_select_all, "elm.swallow.end"), m_delete_count - == elm_genlist_items_count(m_genlist)); + elm_check_state_set( + elm_object_part_content_get(m_select_all, "elm.swallow.end"), + m_delete_count == elm_genlist_items_count(m_genlist)); updateDeleteTopContent(); } diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h index 4f589b48..87aac3f4 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.h +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -84,7 +84,8 @@ public: boost::signals2::signal)> bookmarkItemOrderEdited; boost::signals2::signal)> bookmarkItemDeleted; boost::signals2::signal newFolderItemClicked; - boost::signals2::signal getHistoryGenlistContent; + boost::signals2::signal getHistoryGenlistContent; + boost::signals2::signal removeSelectedItemsFromHistory; private: using FolderData = struct @@ -115,6 +116,7 @@ private: void updateNoBookmarkText(); void updateDeleteClick(int id); void updateDeleteTopContent(); + void removeHistoryItems(); void prepareHistoryContent(); void prepareBookmarksContent(); @@ -131,6 +133,7 @@ private: static void _genlist_bookmark_realized(void *, Evas_Object *, void *event_info); static void _select_all_down(void *data, Evas *, Evas_Object *, void *); static void _select_all_state_changed(void *data, Evas_Object *obj, void *); + static void _cm_history_remove_clicked(void*, Evas_Object*, void*); static void _cm_delete_clicked(void*, Evas_Object*, void*); static void _cm_share_clicked(void*, Evas_Object*, void*); static void _cm_reorder_clicked(void*, Evas_Object*, void*); diff --git a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManager.h b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManager.h index c40c5d86..ecf2e913 100644 --- a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManager.h +++ b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManager.h @@ -32,13 +32,17 @@ class HistoryDaysListManager { public: virtual ~HistoryDaysListManager() {} - virtual Evas_Object* createDaysList(Evas_Object* parentLayout) = 0; + virtual Evas_Object* createDaysList(Evas_Object* parentLayout, bool isRemoveMode) = 0; virtual void addHistoryItems(const std::shared_ptr& items, HistoryPeriod period) = 0; // clear everything including efl objects (result: empty list) virtual void clear() = 0; virtual void setFocusChain(Evas_Object* obj) = 0; + virtual void removeSelectedItems() = 0; + virtual bool isSelectAllChecked() const = 0; boost::signals2::signal signalHistoryItemClicked; - boost::signals2::signal> itemIds)> signalDeleteHistoryItems; + boost::signals2::signal signalDeleteHistoryItems; + boost::signals2::signal setRightButtonEnabledForHistory; + boost::signals2::signal setSelectedItemsCount; }; } diff --git a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp index 54bb8583..ee541a4c 100644 --- a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp +++ b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.cpp @@ -26,7 +26,6 @@ #include "app_i18n.h" #include - #include #include @@ -42,6 +41,12 @@ HistoryDaysListManagerMob::HistoryDaysListManagerMob() , m_history_day_item_class(elm_genlist_item_class_new()) , m_history_item_item_class(elm_genlist_item_class_new()) , m_history_download_item_class(elm_genlist_item_class_new()) + , m_isRemoveMode(false) + , m_delete_count(0) + , m_history_count(0) + , m_isSelectAllChecked(EINA_FALSE) + , m_downloadManagerItem(nullptr) + , m_selectAllItem(nullptr) { createGenlistItemClasses(); connectSignals(); @@ -49,6 +54,9 @@ HistoryDaysListManagerMob::HistoryDaysListManagerMob() HistoryDaysListManagerMob::~HistoryDaysListManagerMob() { + for (auto& data : m_itemDataVector) + delete data; + for (auto& dayItem : m_dayItems) dayItem->setEflObjectsAsDeleted(); @@ -72,7 +80,7 @@ void HistoryDaysListManagerMob::createGenlistItemClasses() m_history_download_item_class->item_style = "type1"; m_history_download_item_class->func.text_get = _genlist_history_download_text_get; - m_history_download_item_class->func.content_get = nullptr; + m_history_download_item_class->func.content_get = _genlist_history_download_content_get; m_history_download_item_class->func.state_get = nullptr; m_history_download_item_class->func.del = nullptr; m_history_download_item_class->decorate_all_item_style = "edit_default"; @@ -88,18 +96,97 @@ void HistoryDaysListManagerMob::createGenlistItemClasses() char* HistoryDaysListManagerMob::_genlist_history_day_text_get(void* data, Evas_Object *, const char *part) { if (data && part) { - auto item = static_cast(data); + auto item(static_cast(data)); if (!strcmp(part, "elm.text")) return strdup(item->day.c_str()); } return nullptr; } +Evas_Object* HistoryDaysListManagerMob::_genlist_history_download_content_get(void* data, Evas_Object* obj, const char *part) +{ + if (data && part && !strcmp(part, "elm.swallow.end")) { + auto id(static_cast(data)); + if (id->self->m_isRemoveMode) { + auto check(elm_check_add(obj)); + evas_object_smart_callback_add(check, "changed", _check_state_changed, id); + return check; + } + } + return nullptr; +} + +void HistoryDaysListManagerMob::countItemsToDelete() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_delete_count = 0; + auto it(elm_genlist_first_item_get(m_genlist)); + while ((it = elm_genlist_item_next_get(it))) { + auto check(elm_object_item_part_content_get(it, "elm.swallow.end")); + if (!check) + continue; + auto state(elm_check_state_get(check)); + m_itemsToDelete[it] = state; + if (state == EINA_TRUE) + ++m_delete_count; + if (m_delete_count == m_history_count) { + auto first(elm_genlist_first_item_get(m_genlist)); + auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end")); + elm_check_state_set(firstCheck, EINA_TRUE); + } + if (it == elm_genlist_last_item_get(m_genlist) && + m_delete_count == 0) { + auto first(elm_genlist_first_item_get(m_genlist)); + auto firstCheck(elm_object_item_part_content_get(first, "elm.swallow.end")); + elm_check_state_set(firstCheck, EINA_FALSE); + } + } + setSelectedItemsCount(m_delete_count); + setRightButtonEnabledForHistory(m_delete_count); +} + +void HistoryDaysListManagerMob::selectAllCheckboxes() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + auto it(elm_genlist_first_item_get(m_genlist)); + auto firstCheck(elm_object_item_part_content_get(it, "elm.swallow.end")); + m_isSelectAllChecked = elm_check_state_get(firstCheck); + + while ((it = elm_genlist_item_next_get(it))) { + auto check(elm_object_item_part_content_get(it, "elm.swallow.end")); + if (!check) + continue; + elm_check_state_set(check, m_isSelectAllChecked); + } + if (m_isSelectAllChecked == EINA_TRUE && elm_genlist_items_count(m_genlist) > 1) + m_delete_count = m_history_count; + if (m_isSelectAllChecked == EINA_FALSE) + m_delete_count = 0; + setSelectedItemsCount(m_delete_count); + setRightButtonEnabledForHistory(m_delete_count); +} + +void HistoryDaysListManagerMob::_check_state_changed(void* data, Evas_Object* obj, void*) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + auto id(static_cast(data)); + auto first(elm_genlist_first_item_get(id->self->m_genlist)); + auto check(elm_object_item_part_content_get(first, "elm.swallow.end")); + + if (check == obj) + id->self->selectAllCheckboxes(); + else + id->self->countItemsToDelete(); + } else + BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); +} + char* HistoryDaysListManagerMob::_genlist_history_download_text_get(void* data, Evas_Object*, const char *part) { if (data && part && !strcmp(part, "elm.text")) { - auto str = static_cast(data); - return strdup(str); + auto id(static_cast(data)); + return strdup(id->str); } return nullptr; } @@ -107,7 +194,7 @@ char* HistoryDaysListManagerMob::_genlist_history_download_text_get(void* data, char* HistoryDaysListManagerMob::_genlist_history_item_text_get(void* data, Evas_Object *, const char *part) { if (data && part) { - auto item = static_cast(data); + auto item(static_cast(data)); if (!strcmp(part, "elm.text")) return strdup(item->websiteVisitItem->historyItem->getTitle().c_str()); if (!strcmp(part, "elm.text.sub")) @@ -118,17 +205,16 @@ char* HistoryDaysListManagerMob::_genlist_history_item_text_get(void* data, Evas Evas_Object* HistoryDaysListManagerMob::_genlist_history_day_content_get(void* data, Evas_Object* obj, const char *part) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data && part && !strcmp(part, "elm.swallow.end")) { - auto dayData = static_cast(data); + auto dayData(static_cast(data)); - auto arrow_layout = elm_layout_add(obj); - auto edjeDir = EDJE_DIR + std::string("HistoryUI/HistoryDaysList.edj"); + auto arrow_layout(elm_layout_add(obj)); + auto edjeDir(EDJE_DIR + std::string("HistoryUI/HistoryDaysList.edj")); elm_layout_file_set(arrow_layout, edjeDir.c_str(), "arrow-layout"); - auto edje = elm_layout_edje_get(arrow_layout); + auto edje(elm_layout_edje_get(arrow_layout)); edje_object_signal_emit(edje, "state,contracted,signal", ""); - if(dayData->expanded) + if (dayData->expanded) edje_object_signal_emit(edje, "state,expanded,signal", ""); return arrow_layout; @@ -139,8 +225,20 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_day_content_get(void* d Evas_Object* HistoryDaysListManagerMob::_genlist_history_item_content_get(void *data, Evas_Object* obj, const char *part) { if (data && !strcmp(part, "elm.swallow.icon")) { - auto item = static_cast(data); - auto icon = item->favIcon->getEvasImage(obj); + auto item(static_cast(data)); + auto favicon(item->websiteHistoryItemData->favIcon); + if (!favicon) { + auto no_icon(elm_icon_add(obj)); + elm_image_resizable_set(no_icon, EINA_TRUE, EINA_TRUE); + evas_object_size_hint_min_set(no_icon, + ELM_SCALE_SIZE(64), + ELM_SCALE_SIZE(64)); + evas_object_size_hint_max_set(no_icon, + ELM_SCALE_SIZE(64), + ELM_SCALE_SIZE(64)); + return no_icon; + } + auto icon(favicon->getEvasImage(obj)); elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE); evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(64), @@ -150,7 +248,7 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_item_content_get(void * ELM_SCALE_SIZE(64)); return icon; } else if (!data && !strcmp(part, "elm.swallow.icon")) { - auto icon = elm_icon_add(obj); + auto icon(elm_icon_add(obj)); elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE); evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(64), @@ -160,14 +258,40 @@ Evas_Object* HistoryDaysListManagerMob::_genlist_history_item_content_get(void * ELM_SCALE_SIZE(64)); return icon; } + if (data && !strcmp(part, "elm.swallow.end")) { + auto check(elm_check_add(obj)); + auto item(static_cast(data)); + if (item->self->m_isRemoveMode){ + elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE); + evas_object_smart_callback_add(check, "changed", _check_state_changed, data); + if (item->self->m_selectAllItem && + item->self->m_isSelectAllChecked == EINA_TRUE) { + auto firstCheck(elm_object_item_part_content_get(item->self->m_selectAllItem, "elm.swallow.end")); + elm_check_state_set(firstCheck, item->self->m_isSelectAllChecked); + } + elm_check_state_set(check, item->self->m_isSelectAllChecked); + return check; + } else { + evas_object_smart_callback_del(check, "changed", _check_state_changed); + elm_genlist_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS); + } + } return nullptr; } Evas_Object* HistoryDaysListManagerMob::createDaysList( - Evas_Object* parent) + Evas_Object* parent, bool isRemoveMode) { + // TODO Download history is planed for the 2nd phase BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_parent = parent; + + m_isRemoveMode = isRemoveMode; + if (m_genlist) { + elm_genlist_clear(m_genlist); + evas_object_del(m_genlist); + m_genlist = nullptr; + } m_genlist = elm_genlist_add(m_parent); tools::EflTools::setExpandHints(m_genlist); elm_scroller_policy_set(m_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); @@ -177,17 +301,29 @@ Evas_Object* HistoryDaysListManagerMob::createDaysList( evas_object_smart_callback_add(m_genlist, "expanded", _tree_item_expanded, this); evas_object_smart_callback_add(m_genlist, "contracted", _tree_item_contracted, this); evas_object_smart_callback_add(m_genlist, "pressed", _tree_item_pressed, this); - - // TODO Download history is planed for the 2nd phase - auto el = elm_genlist_item_append( - m_genlist, m_history_download_item_class, - _("IDS_BR_BODY_DOWNLOAD_HISTORY"), - nullptr, ELM_GENLIST_ITEM_NONE, - nullptr, nullptr); - elm_object_item_disabled_set(el, EINA_TRUE); - - evas_object_show(m_genlist); - + m_history_count = 0; + auto id(new ItemData); + id->self = this; + id->websiteVisitItem = nullptr; + id->websiteHistoryItemData = nullptr; + id->str = nullptr; + if (!m_isRemoveMode) { + id->str = _("IDS_BR_BODY_DOWNLOAD_HISTORY"); + m_downloadManagerItem = elm_genlist_item_append( + m_genlist, m_history_download_item_class, + id, + nullptr, ELM_GENLIST_ITEM_NONE, + nullptr, nullptr); + elm_object_item_disabled_set(m_downloadManagerItem, EINA_TRUE); + } else { + id->str = _("IDS_BR_OPT_SELECT_ALL"); + m_selectAllItem = elm_genlist_item_append( + m_genlist, m_history_download_item_class, + id, + nullptr, ELM_GENLIST_ITEM_NONE, + nullptr, nullptr); + } + m_itemDataVector.push_back(id); return m_genlist; } @@ -198,8 +334,8 @@ void HistoryDaysListManagerMob::addHistoryItems( BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); std::vector historyItems; for (auto& item : *items) { - auto pageViewItem = std::make_shared(item); - std::shared_ptr websiteFavicon = item->getFavIcon(); + auto pageViewItem(std::make_shared(item)); + auto websiteFavicon(item->getFavIcon()); if (!websiteFavicon || websiteFavicon->getSize() == 0) websiteFavicon = nullptr; historyItems.push_back( @@ -208,6 +344,7 @@ void HistoryDaysListManagerMob::addHistoryItems( item->getUrl(), websiteFavicon, pageViewItem)); + ++m_history_count; } auto dayItem(std::make_shared(toString(period), historyItems)); appendDayItem(dayItem); @@ -234,12 +371,6 @@ HistoryDayItemMobPtr HistoryDaysListManagerMob::getItem( void HistoryDaysListManagerMob::connectSignals() { - HistoryDayItemMob::signaButtonClicked.connect( - boost::bind(&HistoryDaysListManagerMob::onHistoryDayItemButtonClicked, - this, _1, _2)); - WebsiteHistoryItemTitleMob::signalButtonClicked.connect( - boost::bind(&HistoryDaysListManagerMob::onWebsiteHistoryItemClicked, - this, _1, _2)); WebsiteHistoryItemVisitItemsMob::signalButtonClicked.connect( boost::bind( &HistoryDaysListManagerMob::onWebsiteHistoryItemVisitItemClicked, @@ -253,25 +384,31 @@ void HistoryDaysListManagerMob::_tree_item_expanded(void* data, Evas_Object* gen BROWSER_LOGD("[%s:%d] data is null", __PRETTY_FUNCTION__, __LINE__); return; } - auto it = static_cast(event_info); - auto self = static_cast(data); - + auto it(static_cast(event_info)); + auto self(static_cast(data)); for (auto& el : self->m_itemData[it]->websiteHistoryItems) { - auto itData = new ItemData; - itData->historyDaysListManager = self; + auto itData(new ItemData); + itData->self = self; itData->websiteVisitItem = el->websiteVisitItem; - elm_genlist_item_append( - genlist, - self->m_history_item_item_class, - el.get(), - it, - ELM_GENLIST_ITEM_NONE, - _item_selected, - itData); + itData->websiteHistoryItemData = el; + itData->str = nullptr; + auto listItem( + elm_genlist_item_append( + genlist, + self->m_history_item_item_class, + itData, + it, + ELM_GENLIST_ITEM_NONE, + _item_selected, + itData)); + self->m_itemsToDelete[listItem] = EINA_FALSE; + self->m_visitItemData[listItem] = el->websiteVisitItem; + self->m_itemDataVector.push_back(itData); } self->m_itemData[it]->expanded = true; - auto arrow_layout = elm_object_item_part_content_get(it, "elm.swallow.end"); - auto edje = elm_layout_edje_get(arrow_layout); + auto arrow_layout( + elm_object_item_part_content_get(it, "elm.swallow.end")); + auto edje(elm_layout_edje_get(arrow_layout)); edje_object_signal_emit(edje, "state,expanded,signal", ""); elm_genlist_realized_items_update(genlist); } @@ -279,9 +416,8 @@ void HistoryDaysListManagerMob::_tree_item_expanded(void* data, Evas_Object* gen void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object *, void *) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - auto iD = static_cast(data); - BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, iD->websiteVisitItem->historyItem->getUrl().c_str()); - iD->historyDaysListManager->signalHistoryItemClicked( + auto iD(static_cast(data)); + iD->self->signalHistoryItemClicked( iD->websiteVisitItem->historyItem->getUrl().c_str(), iD->websiteVisitItem->historyItem->getTitle().c_str()); delete iD; @@ -290,15 +426,15 @@ void HistoryDaysListManagerMob::_item_selected(void* data, Evas_Object *, void * void HistoryDaysListManagerMob::_tree_item_pressed(void* data, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - auto it = static_cast(event_info); - auto self = static_cast(data); + auto it(static_cast(event_info)); + auto self(static_cast(data)); - if (self->m_itemState[it] == EINA_FALSE) { + if (self->m_expandedState[it] == EINA_FALSE) { elm_genlist_item_expanded_set(it, EINA_TRUE); - self->m_itemState[it] = EINA_TRUE; - } else if (self->m_itemState[it] == EINA_TRUE) { + self->m_expandedState[it] = EINA_TRUE; + } else if (self->m_expandedState[it] == EINA_TRUE) { elm_genlist_item_expanded_set(it, EINA_FALSE); - self->m_itemState[it] = EINA_FALSE; + self->m_expandedState[it] = EINA_FALSE; } return; } @@ -306,30 +442,30 @@ void HistoryDaysListManagerMob::_tree_item_pressed(void* data, Evas_Object*, voi void HistoryDaysListManagerMob::_tree_item_contracted(void* data, Evas_Object*, void* event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - auto it = static_cast(event_info); - auto self = static_cast(data); + auto it(static_cast(event_info)); + auto self(static_cast(data)); elm_genlist_item_subitems_clear(it); self->m_itemData[it]->expanded = false; - auto arrow_layout = elm_object_item_part_content_get(it, "elm.swallow.end"); - auto edje = elm_layout_edje_get(arrow_layout); + auto arrow_layout(elm_object_item_part_content_get(it, "elm.swallow.end")); + auto edje(elm_layout_edje_get(arrow_layout)); edje_object_signal_emit(edje, "state,contracted,signal", ""); } void HistoryDaysListManagerMob::appendDayItem(HistoryDayItemDataPtr dayItemData) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - auto item = std::make_shared(dayItemData); + auto item(std::make_shared(dayItemData)); m_dayItems.push_back(item); dayItemData->expanded = false; - auto el = elm_genlist_item_append( + auto el(elm_genlist_item_append( m_genlist, m_history_day_item_class, dayItemData.get(), nullptr, ELM_GENLIST_ITEM_TREE, - nullptr, nullptr); + nullptr, nullptr)); m_itemData[el] = dayItemData; - m_itemState[el] = EINA_FALSE; + m_expandedState[el] = EINA_FALSE; } void HistoryDaysListManagerMob::showNoHistoryMessage(bool show) @@ -341,37 +477,41 @@ void HistoryDaysListManagerMob::showNoHistoryMessage(bool show) elm_object_signal_emit(m_layoutScrollerDays, "hide_empty_message", "ui"); } -void HistoryDaysListManagerMob::onHistoryDayItemButtonClicked( - const HistoryDayItemDataPtrConst clickedItem, bool remove) -{ - if (remove) - removeItem(clickedItem); -} - -void HistoryDaysListManagerMob::onWebsiteHistoryItemClicked( - const WebsiteHistoryItemDataPtrConst clickedItem, bool remove) -{ - if (remove) - removeItem(clickedItem); - else - signalHistoryItemClicked( - tools::PROTOCOL_DEFAULT + clickedItem->websiteDomain, - clickedItem->websiteTitle); -} - void HistoryDaysListManagerMob::onWebsiteHistoryItemVisitItemClicked( const WebsiteVisitItemDataPtrConst clickedItem, bool remove) { if (remove) { removeItem(clickedItem); - signalDeleteHistoryItems( - std::make_shared>(std::initializer_list { - clickedItem->historyItem->getId() })); + signalDeleteHistoryItems(clickedItem->historyItem->getId()); } else - signalHistoryItemClicked(clickedItem->historyItem->getUrl(), + signalHistoryItemClicked( + clickedItem->historyItem->getUrl(), clickedItem->historyItem->getTitle()); } +void HistoryDaysListManagerMob::removeSelectedItems() +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (m_isSelectAllChecked == EINA_TRUE) { + m_visitItemData.clear(); + m_expandedState.clear(); + m_itemsToDelete.clear(); + m_history_count = 0; + return; + } + for (auto& x : m_itemsToDelete) { + if (x.second == EINA_TRUE) { + onWebsiteHistoryItemVisitItemClicked( + m_visitItemData[x.first], true); + x.second = EINA_FALSE; + m_visitItemData.erase(x.first); + m_expandedState.erase(x.first); + m_itemsToDelete.erase(x.first); + --m_history_count; + } + } +} + void HistoryDaysListManagerMob::removeItem( HistoryDayItemDataPtrConst historyDayItemData) { @@ -379,7 +519,7 @@ void HistoryDaysListManagerMob::removeItem( BROWSER_LOGE("%s remove error", __PRETTY_FUNCTION__); return; } - auto item = getItem(historyDayItemData); + auto item(getItem(historyDayItemData)); if (!item) return; // remove day item from vector, destructor will clear efl objects @@ -396,9 +536,9 @@ void HistoryDaysListManagerMob::removeItem( return; } for (auto& dayItem : m_dayItems) { - auto websiteHistoryItem = dayItem->getItem(websiteHistoryItemData); + auto websiteHistoryItem(dayItem->getItem(websiteHistoryItemData)); if (websiteHistoryItem) { - signalDeleteHistoryItems(websiteHistoryItem->getVisitItemsIds()); + signalDeleteHistoryItems(websiteHistoryItem->getVisitItemsId()); dayItem->removeItem(websiteHistoryItemData); return; } diff --git a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h index 732ea372..1a78262e 100644 --- a/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h +++ b/services/HistoryUI/HistoryDaysListManager/HistoryDaysListManagerMob.h @@ -21,6 +21,7 @@ #include #include #include +#include #include "HistoryDayItemDataTypedef.h" #include "HistoryDaysListManager.h" #include "HistoryDaysListManagerEdje.h" @@ -42,32 +43,35 @@ public: static char* _genlist_history_day_text_get(void *data, Evas_Object *, const char *part); static char* _genlist_history_download_text_get(void* data, Evas_Object*, const char *part); static char* _genlist_history_item_text_get(void *data, Evas_Object *, const char *part); + static void _check_state_changed(void*, Evas_Object*, void *); static void _tree_item_expanded(void*, Evas_Object*, void*); static void _tree_item_contracted(void*, Evas_Object*, void*); static void _tree_item_pressed(void*, Evas_Object*, void*); static void _item_selected(void *data, Evas_Object *obj, void *event_info); + static Evas_Object* _genlist_history_download_content_get(void*, Evas_Object* obj, const char *part); static Evas_Object* _genlist_history_item_content_get(void *data, Evas_Object *, const char *part); static Evas_Object* _genlist_history_day_content_get(void *data, Evas_Object* obj, const char *part); - Evas_Object* createDaysList(Evas_Object* parent) override; + Evas_Object* createDaysList(Evas_Object* parent, bool isRemoveMode = false) override; void addHistoryItems( const std::shared_ptr& items, HistoryPeriod period) override; void clear() override; void setFocusChain(Evas_Object* /*obj*/) override {} - void onHistoryDayItemButtonClicked( - const HistoryDayItemDataPtrConst clickedItem, bool remove); - void onWebsiteHistoryItemClicked( - const WebsiteHistoryItemDataPtrConst websiteHistoryItemData, - bool remove); void onWebsiteHistoryItemVisitItemClicked( const WebsiteVisitItemDataPtrConst websiteVisitItemData, bool remove); + void countItemsToDelete(); + void selectAllCheckboxes(); + void removeSelectedItems(); + bool isSelectAllChecked() const { return m_isSelectAllChecked == EINA_TRUE; } struct ItemData { - HistoryDaysListManagerMob* historyDaysListManager; + HistoryDaysListManagerMob* self; WebsiteVisitItemDataPtr websiteVisitItem; + WebsiteHistoryItemDataPtr websiteHistoryItemData; + const char* str; }; private: @@ -109,9 +113,17 @@ private: Elm_Genlist_Item_Class* m_history_item_item_class; Elm_Genlist_Item_Class* m_history_download_item_class; Evas_Object* m_genlist; - Evas_Object* m_box; std::map m_itemData; - std::map m_itemState; + std::map m_expandedState; + std::map m_itemsToDelete; + std::map m_visitItemData; + bool m_isRemoveMode; + std::vector m_itemDataVector; + size_t m_delete_count; + size_t m_history_count; + Eina_Bool m_isSelectAllChecked; + Elm_Object_Item* m_downloadManagerItem; + Elm_Object_Item* m_selectAllItem; }; } /* namespace base_ui */ diff --git a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.cpp b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.cpp index 5ebf0448..24a7cd3a 100644 --- a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.cpp +++ b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.cpp @@ -90,9 +90,9 @@ bool WebsiteHistoryItemMob::contains(WebsiteVisitItemDataPtrConst historyVisitIt return m_websiteHistoryItemVisitItems->contains(historyVisitItemData); } -std::shared_ptr> WebsiteHistoryItemMob::getVisitItemsIds() +int WebsiteHistoryItemMob::getVisitItemsId() { - return m_websiteHistoryItemVisitItems->getVisitItemsIds(); + return m_websiteHistoryItemVisitItems->getVisitItemsId(); } int WebsiteHistoryItemMob::sizeHistoryVisitItems() { diff --git a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.h b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.h index a159c8c4..f24e7f7a 100644 --- a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.h +++ b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemMob.h @@ -46,7 +46,7 @@ public: void removeItem(WebsiteVisitItemDataPtrConst historyVisitItemData); bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData); - std::shared_ptr> getVisitItemsIds(); + int getVisitItemsId(); /** * @brief invoked when main layout is already removed. diff --git a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.cpp b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.cpp index 452116dc..75d20c54 100755 --- a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.cpp +++ b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.cpp @@ -257,11 +257,9 @@ void WebsiteHistoryItemVisitItemsMob::removeItem( } } -std::shared_ptr> WebsiteHistoryItemVisitItemsMob::getVisitItemsIds() +int WebsiteHistoryItemVisitItemsMob::getVisitItemsId() { - auto vec = std::make_shared>(); - vec->push_back(m_websiteVisitItem.websiteVisitItemData->historyItem->getId()); - return vec; + return m_websiteVisitItem.websiteVisitItemData->historyItem->getId(); } } diff --git a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.h b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.h index e056a832..835535ec 100644 --- a/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.h +++ b/services/HistoryUI/HistoryDaysListManager/mob/WebsiteHistoryItem/WebsiteHistoryItemVisitItemsMob.h @@ -59,7 +59,7 @@ public: bool contains(WebsiteVisitItemDataPtrConst websiteVisitItemData); void removeItem(WebsiteVisitItemDataPtrConst websiteVisitItemData); - std::shared_ptr> getVisitItemsIds(); + int getVisitItemsId(); int size() {return eina_list_count(elm_box_children_get(m_boxMainVertical));} private: diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index 334a06a3..9ecda8bd 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -34,27 +35,18 @@ namespace tizen_browser{ namespace base_ui{ +// TODO History needs solid refactoring. A lot of features are not used in any place. + using namespace services; EXPORT_SERVICE(HistoryUI, "org.tizen.browser.historyui") -using HistoryItemData = struct _HistoryItemData -{ - std::shared_ptr item; - std::shared_ptr historyUI; -}; - -struct ItemData{ - tizen_browser::base_ui::HistoryUI* historyUI; - Elm_Object_Item * e_item; -}; - HistoryUI::HistoryUI() : m_parent(nullptr) , m_main_layout(nullptr) , m_buttonClose(nullptr) , m_buttonClear(nullptr) , m_daysList(nullptr) - , m_historyDeleteManager(std::make_shared()) + , m_historyDaysListManager(nullptr) , m_naviframe(nullptr) , m_modulesToolbar(nullptr) { @@ -62,10 +54,16 @@ HistoryUI::HistoryUI() m_edjFilePath = EDJE_DIR; m_edjFilePath.append("HistoryUI/History.edj"); - m_historyDaysListManager = std::make_shared(); + if (!m_historyDaysListManager) + m_historyDaysListManager = std::make_shared(); m_historyDaysListManager->signalHistoryItemClicked.connect(signalHistoryItemClicked); m_historyDaysListManager->signalDeleteHistoryItems.connect(signalDeleteHistoryItems); + m_historyDaysListManager->setRightButtonEnabledForHistory.connect( + boost::bind(&HistoryUI::setRightButtonEnabled, this, _1)); + m_historyDaysListManager->setSelectedItemsCount.connect([this](auto count){ + m_naviframe->setTitle((boost::format(_("IDS_BR_HEADER_PD_SELECTED_ABB")) % count).str()); + }); } HistoryUI::~HistoryUI() @@ -86,10 +84,15 @@ void HistoryUI::hideUI() M_ASSERT(m_main_layout); evas_object_hide(m_main_layout); clearItems(); - m_historyDeleteManager->setDeleteMode(false); m_naviframe->hide(); } +void HistoryUI::setRightButtonEnabled(bool enable) +{ + BROWSER_LOGD("[%s:%d] %d", __PRETTY_FUNCTION__, __LINE__, enable); + m_naviframe->setRightButtonEnabled(enable); +} + void HistoryUI::init(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -100,15 +103,15 @@ void HistoryUI::init(Evas_Object* parent) Evas_Object* HistoryUI::getContent() { M_ASSERT(m_parent); - if (!m_naviframe) - createHistoryUILayout(); + createHistoryUILayout(); return m_naviframe->getLayout(); } void HistoryUI::createHistoryUILayout() { elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_naviframe = std::make_shared(m_parent); + if (!m_naviframe) + m_naviframe = std::make_shared(m_parent); m_main_layout = elm_layout_add(m_naviframe->getLayout()); m_naviframe->setContent(m_main_layout); @@ -134,41 +137,11 @@ void HistoryUI::createTopContent() m_naviframe->setTitle(_("IDS_BR_TAB2_HISTORY")); } -void HistoryUI::createModulesToolbar() -{ - m_modulesToolbar = elm_toolbar_add(m_naviframe->getLayout()); - - elm_object_style_set(m_modulesToolbar, "tabbar/notitle"); - elm_toolbar_shrink_mode_set(m_modulesToolbar, ELM_TOOLBAR_SHRINK_EXPAND); - elm_toolbar_select_mode_set(m_modulesToolbar, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_toolbar_transverse_expanded_set(m_modulesToolbar, EINA_TRUE); - elm_object_part_content_set(m_naviframe->getLayout(), "action_bar_history", m_modulesToolbar); - evas_object_show(m_modulesToolbar); - - elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_BODY_BOOKMARKS"), nullptr, this); - elm_toolbar_item_append(m_modulesToolbar, nullptr, _("IDS_BR_MBODY_HISTORY"), nullptr, this); -} - -HistoryItemVectorMap -HistoryUI::groupItemsByDomain(const HistoryItemVector& historyItems) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - HistoryItemVectorMap groupedMap; - for(auto& item : historyItems) { - auto domain = tools::extractDomain(item->getUrl()); - if(groupedMap.find(domain) == groupedMap.end()) { - groupedMap.insert(std::pair(domain, {})); - } - groupedMap.find(domain)->second.push_back(item); - } - return groupedMap; -} - -Evas_Object* HistoryUI::createDaysList(Evas_Object* parent) +Evas_Object* HistoryUI::createDaysList(Evas_Object* parent, bool isRemoveMode) { M_ASSERT(history_layout); - auto list = m_historyDaysListManager->createDaysList(parent); + auto list = m_historyDaysListManager->createDaysList(parent, isRemoveMode); evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -176,18 +149,18 @@ Evas_Object* HistoryUI::createDaysList(Evas_Object* parent) return list; } -void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) +void HistoryUI::removeSelectedHistoryItems() { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (!data) { - BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); + if (!m_historyDaysListManager) { + BROWSER_LOGD("[%s:%d] No selected elements to delete"); return; } - auto self = static_cast(data); - self->closeHistoryUIClicked(); + if (m_historyDaysListManager->isSelectAllChecked()) + clearHistoryClicked(); + m_historyDaysListManager->removeSelectedItems(); } -void HistoryUI::_clearHistory_clicked(void* data, Evas_Object*, void*) +void HistoryUI::_close_clicked_cb(void * data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (!data) { @@ -195,8 +168,7 @@ void HistoryUI::_clearHistory_clicked(void* data, Evas_Object*, void*) return; } auto self = static_cast(data); - self->clearItems(); - self->clearHistoryClicked(); + self->closeHistoryUIClicked(); } void HistoryUI::addHistoryItems( @@ -209,40 +181,11 @@ void HistoryUI::addHistoryItems( m_historyDaysListManager->addHistoryItems(items, period); } -void HistoryUI::removeHistoryItem(const std::string& uri) -{ - BROWSER_LOGD("[%s] uri=%s", __func__, uri.c_str()); -} - void HistoryUI::clearItems() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_historyDaysListManager->clear(); } -void HistoryUI::showContextMenu() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - - auto window = getWindow(); - if (window) { - createContextMenu(*window); - elm_ctxpopup_item_append(m_ctxpopup, _("IDS_BR_OPT_REMOVE"), nullptr, _cm_delete_clicked, this); - alignContextMenu(*window); - } else - BROWSER_LOGE("[%s:%d] Signal not found", __PRETTY_FUNCTION__, __LINE__); -} - -void HistoryUI::_cm_delete_clicked(void* data, Evas_Object*, void* ) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (!data) { - BROWSER_LOGW("[%s] data = nullptr", __PRETTY_FUNCTION__); - return; - } - auto self = static_cast(data); - _cm_dismissed(nullptr, self->m_ctxpopup, nullptr); -} - } } diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 539a75af..4cf33c4b 100755 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -52,40 +52,29 @@ public: Evas_Object* getContent(); void showUI(); void hideUI(); - Evas_Object* createDaysList(Evas_Object* history_layout); + Evas_Object* createDaysList(Evas_Object* history_layout, bool isRemoveMode = false); + void removeSelectedHistoryItems(); virtual std::string getName(); void addHistoryItems(std::shared_ptr, HistoryPeriod period = HistoryPeriod::HISTORY_TODAY); - void removeHistoryItem(const std::string& uri); void addItems(); + void setNaviframe(SharedNaviframeWrapper naviframe) { m_naviframe = naviframe;} //AbstractContextMenu interface implementation - virtual void showContextMenu() override; + virtual void showContextMenu() override {}; boost::signals2::signal closeHistoryUIClicked; boost::signals2::signal clearHistoryClicked; - boost::signals2::signal> itemIds)> signalDeleteHistoryItems; + boost::signals2::signal signalDeleteHistoryItems; boost::signals2::signal signalHistoryItemClicked; private: void clearItems(); void createHistoryUILayout(); void createTopContent(); - void createModulesToolbar(); - - HistoryDeleteManagerPtr getHistoryDeleteManager() {return m_historyDeleteManager;} - - /** - * @brief Groups history items by domain - * - * @return key: domain, value: domain's history items - */ - services::HistoryItemVectorMap - groupItemsByDomain(const services::HistoryItemVector& historyItems); + void setRightButtonEnabled(bool); static Evas_Object* _listActionBarContentGet(void *data, Evas_Object *obj, const char *part); - static void _clearHistory_clicked(void *data, Evas_Object *obj, void *event_info); static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info); - static void _cm_delete_clicked(void*, Evas_Object*, void*); std::string m_edjFilePath; Evas_Object *m_parent; diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index ad4ed68a..32cb38fa 100755 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -376,7 +376,8 @@ void SimpleUI::connectUISignals() m_bookmarkManagerUI->bookmarkItemDeleted.connect(boost::bind(&SimpleUI::onBookmarkDeleted, this, _1)); m_bookmarkManagerUI->newFolderItemClicked.connect(boost::bind(&SimpleUI::onNewFolderClicked, this, _1)); m_bookmarkManagerUI->isLandscape.connect(boost::bind(&SimpleUI::isLandscape, this)); - m_bookmarkManagerUI->getHistoryGenlistContent.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1)); + m_bookmarkManagerUI->getHistoryGenlistContent.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1, _2, _3)); + m_bookmarkManagerUI->removeSelectedItemsFromHistory.connect(boost::bind(&HistoryUI::removeSelectedHistoryItems, m_historyUI.get())); #if PROFILE_MOBILE m_quickAccess->addQuickAccessClicked.connect(boost::bind(&SimpleUI::onNewQuickAccessClicked, this)); #else @@ -750,12 +751,10 @@ void SimpleUI::onClearHistoryAllClicked() m_historyService->clearAllHistory(); } -void SimpleUI::onDeleteHistoryItems( - std::shared_ptr> itemIds) +void SimpleUI::onDeleteHistoryItems(int id) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - for (const int& id : *itemIds) - m_historyService->deleteHistoryItem(id); + m_historyService->deleteHistoryItem(id); } void SimpleUI::onMostVisitedClicked() @@ -1441,10 +1440,11 @@ void SimpleUI::certPopupButtonClicked(PopupButtons button, std::shared_ptrcreateDaysList(parent); + m_historyUI->setNaviframe(naviframe); + auto ret = m_historyUI->createDaysList(parent, removeMode); m_historyUI->addHistoryItems( m_historyService->getHistoryToday(), HistoryPeriod::HISTORY_TODAY); m_historyUI->addHistoryItems( diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 1b87dc51..57770c52 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -169,7 +169,7 @@ private: void onOpenURL(const std::string& url); void onOpenURL(const std::string& url, const std::string& title, bool desktopMode); void onClearHistoryAllClicked(); - void onDeleteHistoryItems(std::shared_ptr> itemIds); + void onDeleteHistoryItems(int id); void onMostVisitedClicked(); void onQuickAccessClicked(); @@ -254,7 +254,7 @@ private: void closeTabUI(); void switchToMobileMode(); void switchToDesktopMode(); - Evas_Object* showHistoryUI(Evas_Object* parent); + Evas_Object* showHistoryUI(Evas_Object* parent, SharedNaviframeWrapper naviframe, bool removeMode = false); void closeHistoryUI(); void showSettings(unsigned); void closeSettingsUI();