From b918e138b4a53bd2015273a51566132444d0c0a1 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Mon, 2 Apr 2018 22:37:47 +0300 Subject: [PATCH] Bookmark category id assignment changed. --- map/bookmark_manager.cpp | 24 ++++++++++++------------ map/bookmark_manager.hpp | 8 ++++++-- map/user_mark.cpp | 3 ++- map/user_mark.hpp | 3 ++- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 24b61eb55d..ba26de5365 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -55,8 +55,8 @@ uint64_t LoadLastBmCategoryId() uint64_t lastId; std::string val; if (GetPlatform().GetSecureStorage().Load(kLastBookmarkCategoryId, val) && strings::to_uint64(val, lastId)) - return lastId; - return static_cast(UserMark::BOOKMARK); + return max(static_cast(UserMark::COUNT), lastId); + return static_cast(UserMark::COUNT); } void SaveLastBmCategoryId(uint64_t lastId) @@ -66,7 +66,7 @@ void SaveLastBmCategoryId(uint64_t lastId) uint64_t ResetLastBmCategoryId() { - auto const lastId = static_cast(UserMark::BOOKMARK); + auto const lastId = static_cast(UserMark::COUNT); SaveLastBmCategoryId(lastId); return lastId; } @@ -431,9 +431,9 @@ BookmarkManager::BookmarkManager(Callbacks && callbacks) std::bind(&ConvertAfterDownloading, _1, _2))) { ASSERT(m_callbacks.m_getStringsBundle != nullptr, ()); - ASSERT_GREATER_OR_EQUAL(m_lastGroupID, UserMark::BOOKMARK, ()); - m_userMarkLayers.reserve(UserMark::BOOKMARK); - for (uint32_t i = 0; i < UserMark::BOOKMARK; ++i) + ASSERT_GREATER_OR_EQUAL(m_lastGroupID, UserMark::COUNT, ()); + m_userMarkLayers.reserve(UserMark::COUNT - 1); + for (uint32_t i = 1; i < UserMark::COUNT; ++i) m_userMarkLayers.emplace_back(std::make_unique(static_cast(i))); m_selectionMark = CreateUserMark(m2::PointD{}); @@ -1340,7 +1340,7 @@ public: void operator()(df::MarkGroupID groupId) { - m2::AnyRectD const & rect = m_rectHolder(min((UserMark::Type)groupId, UserMark::BOOKMARK)); + m2::AnyRectD const & rect = m_rectHolder(BookmarkManager::GetGroupType(groupId)); if (UserMark const * p = m_manager->FindMarkInRect(groupId, rect, m_d)) { static double const kEps = 1e-5; @@ -1381,8 +1381,8 @@ UserMark const * BookmarkManager::FindNearestUserMark(TTouchRectHolder const & h UserMarkLayer const * BookmarkManager::GetGroup(df::MarkGroupID groupId) const { ASSERT_THREAD_CHECKER(m_threadChecker, ()); - if (groupId < UserMark::Type::BOOKMARK) - return m_userMarkLayers[groupId].get(); + if (groupId < UserMark::Type::COUNT) + return m_userMarkLayers[groupId - 1].get(); ASSERT(m_categories.find(groupId) != m_categories.end(), ()); return m_categories.at(groupId).get(); @@ -1391,8 +1391,8 @@ UserMarkLayer const * BookmarkManager::GetGroup(df::MarkGroupID groupId) const UserMarkLayer * BookmarkManager::GetGroup(df::MarkGroupID groupId) { ASSERT_THREAD_CHECKER(m_threadChecker, ()); - if (groupId < UserMark::Type::BOOKMARK) - return m_userMarkLayers[groupId].get(); + if (groupId < UserMark::Type::COUNT) + return m_userMarkLayers[groupId - 1].get(); auto const it = m_categories.find(groupId); return it != m_categories.end() ? it->second.get() : nullptr; @@ -1855,7 +1855,7 @@ df::GroupIDSet BookmarkManager::MarksChangesTracker::GetAllGroupIds() const { auto const & groupIds = m_bmManager.GetBmGroupsIdList(); df::GroupIDSet resultingSet(groupIds.begin(), groupIds.end()); - for (uint32_t i = 0; i < UserMark::BOOKMARK; ++i) + for (uint32_t i = 1; i < UserMark::COUNT; ++i) resultingSet.insert(static_cast(i)); return resultingSet; } diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index aa633051c9..81fa836fe6 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -141,7 +141,11 @@ public: void UpdateViewport(ScreenBase const & screen); void Teardown(); - static bool IsBookmarkCategory(df::MarkGroupID groupId) { return groupId >= UserMark::BOOKMARK; } + static UserMark::Type GetGroupType(df::MarkGroupID groupId) + { + return groupId >= UserMark::COUNT ? UserMark::BOOKMARK : static_cast(groupId); + } + static bool IsBookmarkCategory(df::MarkGroupID groupId) { return groupId >= UserMark::COUNT; } static bool IsBookmark(df::MarkID markId) { return UserMark::GetMarkType(markId) == UserMark::BOOKMARK; } template @@ -332,7 +336,7 @@ private: ASSERT_LESS(groupId, m_userMarkLayers.size(), ()); m_userMarks.emplace(markId, std::move(mark)); m_changesTracker.OnAddMark(markId); - m_userMarkLayers[groupId]->AttachUserMark(markId); + m_userMarkLayers[groupId - 1]->AttachUserMark(markId); return m; } diff --git a/map/user_mark.cpp b/map/user_mark.cpp index 444cb90c39..ab0fde2ed7 100644 --- a/map/user_mark.cpp +++ b/map/user_mark.cpp @@ -45,7 +45,7 @@ df::MarkID GetNextUserMarkId(UserMark::Type type, bool reset = false) return df::kInvalidMarkId; } - static_assert(UserMark::Type::BOOKMARK < (1 << kMarkIdTypeBitsCount), "Not enough bits for user mark type."); + static_assert(UserMark::Type::COUNT <= (1 << kMarkIdTypeBitsCount), "Not enough bits for user mark type."); auto const typeBits = static_cast(type) << (sizeof(df::MarkID) * 8 - kMarkIdTypeBitsCount); if (type == UserMark::Type::BOOKMARK) @@ -147,5 +147,6 @@ string DebugPrint(UserMark::Type type) case UserMark::Type::ROUTING: return "ROUTING"; case UserMark::Type::LOCAL_ADS: return "LOCAL_ADS"; case UserMark::Type::TRANSIT: return "TRANSIT"; + case UserMark::Type::COUNT: return "COUNT"; } } diff --git a/map/user_mark.hpp b/map/user_mark.hpp index 8a5fe8f439..9459e61454 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -32,6 +32,7 @@ public: enum Type: uint32_t { + BOOKMARK, // Should always be the first one API, SEARCH, STATIC, @@ -39,7 +40,7 @@ public: TRANSIT, LOCAL_ADS, DEBUG_MARK, - BOOKMARK, // Should always be the last one + COUNT, }; UserMark(df::MarkID id, m2::PointD const & ptOrg, UserMark::Type type);