From 46d7508d2c2adcf723c9a2c022fdde59e85c93f1 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Tue, 6 Feb 2018 02:04:42 +0300 Subject: [PATCH] Drop Listeners from the UserMarkContainer. --- map/bookmark.cpp | 5 ++--- map/bookmark.hpp | 2 +- map/bookmark_manager.cpp | 37 ++++++++++++++++--------------------- map/bookmark_manager.hpp | 9 ++++----- map/user_mark_container.cpp | 26 +------------------------- map/user_mark_container.hpp | 25 ++++--------------------- 6 files changed, 28 insertions(+), 76 deletions(-) diff --git a/map/bookmark.cpp b/map/bookmark.cpp index 400013836f..18fe3ad0ce 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -142,9 +142,8 @@ void Bookmark::Detach() } BookmarkCategory::BookmarkCategory(std::string const & name, - df::MarkGroupID groupID, - Listeners const & listeners) - : Base(UserMark::Type::BOOKMARK, listeners) + df::MarkGroupID groupID) + : Base(UserMark::Type::BOOKMARK) , m_groupID(groupID) , m_name(name) {} diff --git a/map/bookmark.hpp b/map/bookmark.hpp index 1c92973f9c..e122861af7 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -116,7 +116,7 @@ class BookmarkCategory : public UserMarkContainer using Base = UserMarkContainer; public: - BookmarkCategory(std::string const & name, df::MarkGroupID groupID, Listeners const & listeners); + BookmarkCategory(std::string const & name, df::MarkGroupID groupID); ~BookmarkCategory() override; size_t GetUserLineCount() const override; diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index ad850b6c4e..b20fefeac6 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -135,9 +135,6 @@ std::string const GenerateValidAndUniqueFilePathForKML(std::string const & fileN BookmarkManager::BookmarkManager(Callbacks && callbacks) : m_callbacks(std::move(callbacks)) - , m_bookmarksListeners(std::bind(&BookmarkManager::OnCreateUserMarks, this, _1, _2), - std::bind(&BookmarkManager::OnUpdateUserMarks, this, _1, _2), - std::bind(&BookmarkManager::OnDeleteUserMarks, this, _1, _2)) , m_needTeardown(false) , m_nextGroupID(UserMark::BOOKMARK) { @@ -282,7 +279,12 @@ void BookmarkManager::NotifyChanges(df::MarkGroupID groupId) if (!group->IsDirty()) return; - group->NotifyListeners(); + if (IsBookmark(groupId)) + { + OnCreateUserMarks(*group); + OnUpdateUserMarks(*group); + OnDeleteUserMarks(*group); + } df::DrapeEngineLockGuard lock(m_drapeEngine); if (!lock) @@ -656,46 +658,39 @@ BookmarkCategory * BookmarkManager::GetBmCategory(df::MarkGroupID categoryId) co return (it != m_categories.end() ? it->second.get() : 0); } -void BookmarkManager::OnCreateUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds) +void BookmarkManager::OnCreateUserMarks(UserMarkContainer const & container) { - if (container.GetType() != UserMark::Type::BOOKMARK) - return; - if (m_callbacks.m_createdBookmarksCallback == nullptr) return; std::vector> marksInfo; - GetBookmarksData(markIds, marksInfo); + GetBookmarksData(container.GetCreatedMarks(), marksInfo); m_callbacks.m_createdBookmarksCallback(marksInfo); } -void BookmarkManager::OnUpdateUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds) +void BookmarkManager::OnUpdateUserMarks(UserMarkContainer const & container) { - if (container.GetType() != UserMark::Type::BOOKMARK) - return; - if (m_callbacks.m_updatedBookmarksCallback == nullptr) return; std::vector> marksInfo; - GetBookmarksData(markIds, marksInfo); + GetBookmarksData(container.GetUpdatedMarks(), marksInfo); m_callbacks.m_updatedBookmarksCallback(marksInfo); } -void BookmarkManager::OnDeleteUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds) +void BookmarkManager::OnDeleteUserMarks(UserMarkContainer const & container) { - if (container.GetType() != UserMark::Type::BOOKMARK) - return; - if (m_callbacks.m_deletedBookmarksCallback == nullptr) return; - m_callbacks.m_deletedBookmarksCallback(markIds); + auto const & removedIds = container.GetRemovedMarks(); + df::IDCollection idCollection(removedIds.begin(), removedIds.end()); + m_callbacks.m_deletedBookmarksCallback(idCollection); } -void BookmarkManager::GetBookmarksData(df::IDCollection const & markIds, +void BookmarkManager::GetBookmarksData(MarkIDSet const & markIds, std::vector> & data) const { data.clear(); @@ -717,7 +712,7 @@ df::MarkGroupID BookmarkManager::CreateBmCategory(std::string const & name) { auto const groupId = m_nextGroupID++; auto & cat = m_categories[groupId]; - cat = my::make_unique(name, groupId, m_bookmarksListeners); + cat = my::make_unique(name, groupId); m_bmGroupsIdList.push_back(groupId); return groupId; } diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index 71e1c40278..20e4632d96 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -228,14 +228,13 @@ private: void NotifyAboutFile(bool success, std::string const & filePath, bool isTemporaryFile); void LoadBookmarkRoutine(std::string const & filePath, bool isTemporaryFile); - void OnCreateUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds); - void OnUpdateUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds); - void OnDeleteUserMarks(UserMarkContainer const & container, df::IDCollection const & markIds); - void GetBookmarksData(df::IDCollection const & markIds, + void OnCreateUserMarks(UserMarkContainer const & container); + void OnUpdateUserMarks(UserMarkContainer const & container); + void OnDeleteUserMarks(UserMarkContainer const & container); + void GetBookmarksData(MarkIDSet const & markIds, std::vector> & data) const; Callbacks m_callbacks; - UserMarkContainer::Listeners m_bookmarksListeners; df::DrapeEngineSafePtr m_drapeEngine; AsyncLoadingCallbacks m_asyncLoadingCallbacks; diff --git a/map/user_mark_container.cpp b/map/user_mark_container.cpp index ed91712c7b..7c04787a6b 100644 --- a/map/user_mark_container.cpp +++ b/map/user_mark_container.cpp @@ -11,10 +11,8 @@ #include #include -UserMarkContainer::UserMarkContainer(UserMark::Type type, - Listeners const & listeners) +UserMarkContainer::UserMarkContainer(UserMark::Type type) : m_type(type) - , m_listeners(listeners) { } @@ -23,28 +21,6 @@ UserMarkContainer::~UserMarkContainer() Clear(); } -void UserMarkContainer::NotifyListeners() -{ - if (!IsDirty()) - return; - - if (m_listeners.m_createListener != nullptr && !m_createdMarks.empty()) - { - df::IDCollection marks(m_createdMarks.begin(), m_createdMarks.end()); - m_listeners.m_createListener(*this, marks); - } - if (m_listeners.m_updateListener != nullptr && !m_updatedMarks.empty()) - { - df::IDCollection marks(m_updatedMarks.begin(), m_updatedMarks.end()); - m_listeners.m_updateListener(*this, marks); - } - if (m_listeners.m_deleteListener != nullptr && !m_removedMarks.empty()) - { - df::IDCollection marks(m_removedMarks.begin(), m_removedMarks.end()); - m_listeners.m_deleteListener(*this, marks); - } -} - size_t UserMarkContainer::GetUserPointCount() const { return m_userMarks.size(); diff --git a/map/user_mark_container.hpp b/map/user_mark_container.hpp index 585674e86a..fd8cd14b74 100644 --- a/map/user_mark_container.hpp +++ b/map/user_mark_container.hpp @@ -20,24 +20,7 @@ public: using MarkIDSet = std::set; using NotifyChangesFn = std::function; - struct Listeners - { - Listeners() = default; - Listeners(NotifyChangesFn const & createListener, - NotifyChangesFn const & updateListener, - NotifyChangesFn const & deleteListener) - : m_createListener(createListener) - , m_updateListener(updateListener) - , m_deleteListener(deleteListener) - {} - - NotifyChangesFn m_createListener; - NotifyChangesFn m_updateListener; - NotifyChangesFn m_deleteListener; - }; - - UserMarkContainer(UserMark::Type type, - Listeners const & listeners = Listeners()); + UserMarkContainer(UserMark::Type type); virtual ~UserMarkContainer(); size_t GetUserPointCount() const; @@ -48,13 +31,15 @@ public: virtual void AcceptChanges(df::MarkIDCollection & groupMarks, df::MarkIDCollection & createdMarks, df::MarkIDCollection & removedMarks); - void NotifyListeners(); bool IsVisible() const; size_t GetUserMarkCount() const; UserMark::Type GetType() const; MarkIDSet const & GetUserMarks() const { return m_userMarks; } + MarkIDSet const & GetCreatedMarks() const { return m_createdMarks; } + MarkIDSet const & GetUpdatedMarks() const { return m_updatedMarks; } + MarkIDSet const & GetRemovedMarks() const { return m_removedMarks; } void AttachUserMark(df::MarkID markId); void EditUserMark(df::MarkID markId); @@ -78,8 +63,6 @@ protected: bool m_isVisible = true; bool m_isDirty = false; - Listeners m_listeners; - DISALLOW_COPY_AND_MOVE(UserMarkContainer); };