From b5e7441abae11e929cffccbd3cea750296197754 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Thu, 29 Mar 2018 19:06:22 +0300 Subject: Suppport KMB on iOS. --- map/bookmark.cpp | 44 ++++++++------------ map/bookmark.hpp | 65 +++++------------------------- map/bookmark_manager.cpp | 78 ++++++++++++++++++++++++++---------- map/bookmark_manager.hpp | 10 +++-- map/framework.hpp | 2 +- map/map_tests/bookmarks_test.cpp | 14 +++---- map/map_tests/kmz_unarchive_test.cpp | 4 +- map/user_mark.hpp | 2 +- 8 files changed, 101 insertions(+), 118 deletions(-) (limited to 'map') diff --git a/map/bookmark.cpp b/map/bookmark.cpp index b0f735c6ed..ac7181ba69 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -69,7 +69,7 @@ drape_ptr Bookmark::GetSymbolNames() cons return symbol; } -df::ColorConstant Bookmark::GetColor() const +df::ColorConstant Bookmark::GetColorConstant() const { switch (m_data.m_color.m_predefinedColor) { @@ -95,35 +95,20 @@ df::ColorConstant Bookmark::GetColor() const } } -std::string Bookmark::GetIcon() const +bool Bookmark::HasCreationAnimation() const { - switch (m_data.m_color.m_predefinedColor) - { - case kml::PredefinedColor::Red: - return "placemark-red"; - case kml::PredefinedColor::Blue: - return "placemark-blue"; - case kml::PredefinedColor::Purple: - return "placemark-purple"; - case kml::PredefinedColor::Yellow: - return "placemark-yellow"; - case kml::PredefinedColor::Pink: - return "placemark-pink"; - case kml::PredefinedColor::Brown: - return "placemark-brown"; - case kml::PredefinedColor::Green: - return "placemark-green"; - case kml::PredefinedColor::Orange: - return "placemark-orange"; - case kml::PredefinedColor::None: - case kml::PredefinedColor::Count: - return "placemark-red"; - } + return true; } -bool Bookmark::HasCreationAnimation() const +kml::PredefinedColor Bookmark::GetColor() const { - return true; + return m_data.m_color.m_predefinedColor; +} + +void Bookmark::SetColor(kml::PredefinedColor color) +{ + SetDirty(); + m_data.m_color.m_predefinedColor = color; } std::string Bookmark::GetName() const @@ -160,6 +145,7 @@ kml::Timestamp Bookmark::GetTimeStamp() const void Bookmark::SetTimeStamp(kml::Timestamp timeStamp) { + SetDirty(); m_data.m_timestamp = timeStamp; } @@ -170,6 +156,7 @@ uint8_t Bookmark::GetScale() const void Bookmark::SetScale(uint8_t scale) { + SetDirty(); m_data.m_viewportScale = scale; } @@ -227,9 +214,10 @@ std::string BookmarkCategory::GetName() const return kml::GetDefaultStr(m_data.m_name); } -std::string BookmarkCategory::GetDefaultType() +// static +kml::PredefinedColor BookmarkCategory::GetDefaultColor() { - return style::GetDefaultStyle(); + return kml::PredefinedColor::Red; } std::unique_ptr LoadKMLFile(std::string const & file, bool useBinary) diff --git a/map/bookmark.hpp b/map/bookmark.hpp index ade2be8606..fc765b54d2 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -27,53 +27,6 @@ namespace anim class BookmarkManager; -/* -class BookmarkData -{ -public: - BookmarkData() - : m_scale(-1.0) - , m_timeStamp(my::INVALID_TIME_STAMP) - { - } - - BookmarkData(std::string const & name, - std::string const & type, - std::string const & description = "", - double scale = -1.0, - time_t timeStamp = my::INVALID_TIME_STAMP) - : m_name(name) - , m_description(description) - , m_type(type) - , m_scale(scale) - , m_timeStamp(timeStamp) - { - } - - std::string const & GetName() const { return m_name; } - void SetName(const std::string & name) { m_name = name; } - - std::string const & GetDescription() const { return m_description; } - void SetDescription(const std::string & description) { m_description = description; } - - std::string const & GetType() const { return m_type; } - void SetType(const std::string & type) { m_type = type; } - - double const & GetScale() const { return m_scale; } - void SetScale(double scale) { m_scale = scale; } - - time_t const & GetTimeStamp() const { return m_timeStamp; } - void SetTimeStamp(const time_t & timeStamp) { m_timeStamp = timeStamp; } - -private: - std::string m_name; - std::string m_description; - std::string m_type; ///< Now it stores bookmark color (category style). - double m_scale; ///< Viewport scale. -1.0 - is a default value (no scale set). - time_t m_timeStamp; -}; -*/ - class Bookmark : public UserMark { using Base = UserMark; @@ -85,28 +38,32 @@ public: void SetData(kml::BookmarkData const & data); kml::BookmarkData const & GetData() const; - dp::Anchor GetAnchor() const override; - drape_ptr GetSymbolNames() const override; - df::ColorConstant GetColor() const override; - // TODO(darina): Remove this method after UI refactoring. - std::string GetIcon() const; bool HasCreationAnimation() const override; std::string GetName() const; void SetName(std::string const & name); + + kml::PredefinedColor GetColor() const; + void SetColor(kml::PredefinedColor color); + m2::RectD GetViewport() const; std::string GetDescription() const; void SetDescription(std::string const & description); - /// @return my::INVALID_TIME_STAMP if bookmark has no timestamp kml::Timestamp GetTimeStamp() const; void SetTimeStamp(kml::Timestamp timeStamp); uint8_t GetScale() const; void SetScale(uint8_t scale); + dp::Anchor GetAnchor() const override; + drape_ptr GetSymbolNames() const override; + + df::ColorConstant GetColorConstant() const override; + df::MarkGroupID GetGroupId() const override; + void Attach(df::MarkGroupID groupId); void Detach(); @@ -124,7 +81,7 @@ public: BookmarkCategory(kml::CategoryData const & data, df::MarkGroupID groupId, bool autoSave); ~BookmarkCategory() override; - static std::string GetDefaultType(); + static kml::PredefinedColor GetDefaultColor(); df::MarkGroupID GetID() const { return m_groupId; } diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 53d0be541b..534eb51c53 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -43,10 +43,11 @@ using namespace std::placeholders; namespace { -char const * BOOKMARK_CATEGORY = "LastBookmarkCategory"; -char const * BOOKMARK_TYPE = "LastBookmarkType"; -char const * KMZ_EXTENSION = ".kmz"; -char const * kBookmarksExt = ".kmb"; +std::string const kLastBookmarkCategory = "LastBookmarkCategory"; +std::string const kLastBookmarkType = "LastBookmarkType"; +std::string const kLastBookmarkColor = "LastBookmarkColor"; +std::string const kKmzExtension = ".kmz"; +std::string const kBookmarksExt = ".kmb"; // Returns extension with a dot in a lower case. std::string GetFileExt(std::string const & filePath) @@ -125,8 +126,8 @@ BookmarkManager::SharingResult GetFileForSharing(df::MarkGroupID categoryId, std std::string fileName = filePath; my::GetNameFromFullPath(fileName); my::GetNameWithoutExt(fileName); - auto const tmpFilePath = my::JoinFoldersToPath(GetPlatform().TmpDir(), fileName + KMZ_EXTENSION); - if (ext == KMZ_EXTENSION) + auto const tmpFilePath = my::JoinFoldersToPath(GetPlatform().TmpDir(), fileName + kKmzExtension); + if (ext == kKmzExtension) { if (my::CopyFileX(filePath, tmpFilePath)) return BookmarkManager::SharingResult(categoryId, tmpFilePath); @@ -234,7 +235,7 @@ bool BackupBookmarks(std::string const & backupDir, std::string fileName = f; my::GetNameFromFullPath(fileName); my::GetNameWithoutExt(fileName); - auto const kmzPath = my::JoinPath(backupDir, fileName + KMZ_EXTENSION); + auto const kmzPath = my::JoinPath(backupDir, fileName + kKmzExtension); if (GetPlatform().IsFileExistsByFullPath(kmzPath)) continue; @@ -488,9 +489,8 @@ Bookmark * BookmarkManager::CreateBookmark(kml::BookmarkData & bm, df::MarkGroup group->AttachUserMark(bookmark->GetId()); group->SetIsVisible(true); - m_lastCategoryUrl = group->GetFileName(); - m_lastType = bookmark->GetIcon(); - SaveState(); + SetLastEditedBmCategory(groupId); + SetLastEditedBmColor(bookmark->GetData().m_color.m_predefinedColor); return bookmark; } @@ -786,14 +786,24 @@ Track * BookmarkManager::AddTrack(std::unique_ptr && track) void BookmarkManager::SaveState() const { - settings::Set(BOOKMARK_CATEGORY, m_lastCategoryUrl); - settings::Set(BOOKMARK_TYPE, m_lastType); + settings::Set(kLastBookmarkCategory, m_lastCategoryUrl); + settings::Set(kLastBookmarkColor, static_cast(m_lastColor)); } void BookmarkManager::LoadState() { - UNUSED_VALUE(settings::Get(BOOKMARK_CATEGORY, m_lastCategoryUrl)); - UNUSED_VALUE(settings::Get(BOOKMARK_TYPE, m_lastType)); + UNUSED_VALUE(settings::Get(kLastBookmarkCategory, m_lastCategoryUrl)); + uint32_t color; + if (settings::Get(kLastBookmarkColor, color) && + color > static_cast(kml::PredefinedColor::None) && + color < static_cast(kml::PredefinedColor::Count)) + { + m_lastColor = static_cast(color); + } + else + { + m_lastColor = BookmarkCategory::GetDefaultColor(); + } } void BookmarkManager::ClearCategories() @@ -856,7 +866,7 @@ std::shared_ptr BookmarkManager::LoadBookmar std::shared_ptr BookmarkManager::LoadBookmarksKMB(std::vector & filePaths) { - std::string const dir = GetPlatform().SettingsDir(); + std::string const dir = GetBookmarksDirectory(); Platform::FilesList files; Platform::GetFilesByExt(dir, kBookmarksExt, files); @@ -866,7 +876,7 @@ std::shared_ptr BookmarkManager::LoadBookmar for (auto const & file : files) { - auto const filePath = dir + file; + auto const filePath = my::JoinPath(dir, file); auto kmlData = std::make_unique(); try { @@ -1064,7 +1074,7 @@ boost::optional BookmarkManager::GetKMLPath(std::string const & fil if (!my::CopyFileX(filePath, fileSavePath)) return {}; } - else if (fileExt == KMZ_EXTENSION) + else if (fileExt == kKmzExtension) { try { @@ -1106,35 +1116,59 @@ void BookmarkManager::MoveBookmark(df::MarkID bmID, df::MarkGroupID curGroupID, ASSERT_THREAD_CHECKER(m_threadChecker, ()); DetachBookmark(bmID, curGroupID); AttachBookmark(bmID, newGroupID); + + SetLastEditedBmCategory(newGroupID); } void BookmarkManager::UpdateBookmark(df::MarkID bmID, kml::BookmarkData const & bm) { ASSERT_THREAD_CHECKER(m_threadChecker, ()); auto * bookmark = GetBookmarkForEdit(bmID); + + auto const prevColor = bookmark->GetColor(); bookmark->SetData(bm); ASSERT(bookmark->GetGroupId() != df::kInvalidMarkGroupId, ()); - m_lastType = bookmark->GetIcon(); - SaveState(); + if (prevColor != bookmark->GetColor()) + SetLastEditedBmColor(bookmark->GetColor()); } df::MarkGroupID BookmarkManager::LastEditedBMCategory() { ASSERT_THREAD_CHECKER(m_threadChecker, ()); + + if (HasBmCategory(m_lastGroupId)) + return m_lastGroupId; + for (auto & cat : m_categories) { if (cat.second->GetFileName() == m_lastCategoryUrl) - return cat.first; + { + m_lastGroupId = cat.first; + return m_lastGroupId; + } } CheckAndCreateDefaultCategory(); return m_bmGroupsIdList.front(); } -std::string BookmarkManager::LastEditedBMType() const +kml::PredefinedColor BookmarkManager::LastEditedBMColor() const { ASSERT_THREAD_CHECKER(m_threadChecker, ()); - return (m_lastType.empty() ? BookmarkCategory::GetDefaultType() : m_lastType); + return (m_lastColor != kml::PredefinedColor::None ? m_lastColor : BookmarkCategory::GetDefaultColor()); +} + +void BookmarkManager::SetLastEditedBmCategory(df::MarkGroupID groupId) +{ + m_lastGroupId = groupId; + m_lastCategoryUrl = GetBmCategory(groupId)->GetFileName(); + SaveState(); +} + +void BookmarkManager::SetLastEditedBmColor(kml::PredefinedColor color) +{ + m_lastColor = color; + SaveState(); } BookmarkCategory const * BookmarkManager::GetBmCategory(df::MarkGroupID categoryId) const diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp index 00cd184c89..47cc12d36a 100644 --- a/map/bookmark_manager.hpp +++ b/map/bookmark_manager.hpp @@ -161,7 +161,7 @@ public: bool IsVisible(df::MarkGroupID groupId) const; - df::MarkGroupID CreateBookmarkCategory(kml::CategoryData const & data, bool autoSae = true); + df::MarkGroupID CreateBookmarkCategory(kml::CategoryData const & data, bool autoSave = true); df::MarkGroupID CreateBookmarkCategory(std::string const & name, bool autoSave = true); std::string GetCategoryName(df::MarkGroupID categoryId) const; @@ -170,7 +170,10 @@ public: df::GroupIDCollection const & GetBmGroupsIdList() const { return m_bmGroupsIdList; } bool HasBmCategory(df::MarkGroupID groupId) const; df::MarkGroupID LastEditedBMCategory(); - std::string LastEditedBMType() const; + kml::PredefinedColor LastEditedBMColor() const; + + void SetLastEditedBmCategory(df::MarkGroupID groupId); + void SetLastEditedBmColor(kml::PredefinedColor color); using TTouchRectHolder = function; UserMark const * FindNearestUserMark(TTouchRectHolder const & holder) const; @@ -440,7 +443,8 @@ private: df::GroupIDCollection m_bmGroupsIdList; std::string m_lastCategoryUrl; - std::string m_lastType; + df::MarkGroupID m_lastGroupId = df::kInvalidMarkGroupId; + kml::PredefinedColor m_lastColor = kml::PredefinedColor::Red; UserMarkLayers m_userMarkLayers; MarksCollection m_userMarks; diff --git a/map/framework.hpp b/map/framework.hpp index b29a069a2a..0eb562d1ca 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -319,7 +319,7 @@ public: df::MarkGroupID AddCategory(string const & categoryName); df::MarkGroupID LastEditedBMCategory() { return GetBookmarkManager().LastEditedBMCategory(); } - string LastEditedBMType() const { return GetBookmarkManager().LastEditedBMType(); } + kml::PredefinedColor LastEditedBMColor() const { return GetBookmarkManager().LastEditedBMColor(); } void ShowBookmark(df::MarkID id); void ShowBookmark(Bookmark const * bookmark); diff --git a/map/map_tests/bookmarks_test.cpp b/map/map_tests/bookmarks_test.cpp index 990eb91b38..6826cead60 100644 --- a/map/map_tests/bookmarks_test.cpp +++ b/map/map_tests/bookmarks_test.cpp @@ -145,13 +145,13 @@ void CheckBookmarks(BookmarkManager const & bmManager, df::MarkGroupID groupId) auto it = markIds.rbegin(); Bookmark const * bm = bmManager.GetBookmark(*it++); TEST_EQUAL(bm->GetName(), "Nebraska", ()); - TEST_EQUAL(bm->GetIcon(), "placemark-red", ()); + TEST_EQUAL(bm->GetColor(), kml::PredefinedColor::Red, ()); TEST_EQUAL(bm->GetDescription(), "", ()); TEST_EQUAL(kml::ToSecondsSinceEpoch(bm->GetTimeStamp()), 0, ()); bm = bmManager.GetBookmark(*it++); TEST_EQUAL(bm->GetName(), "Monongahela National Forest", ()); - TEST_EQUAL(bm->GetIcon(), "placemark-pink", ()); + TEST_EQUAL(bm->GetColor(), kml::PredefinedColor::Pink, ()); TEST_EQUAL(bm->GetDescription(), "Huttonsville, WV 26273
", ()); TEST_EQUAL(kml::ToSecondsSinceEpoch(bm->GetTimeStamp()), 524214643, ()); @@ -160,7 +160,7 @@ void CheckBookmarks(BookmarkManager const & bmManager, df::MarkGroupID groupId) TEST_ALMOST_EQUAL_ULPS(MercatorBounds::XToLon(org.x), 27.566765, ()); TEST_ALMOST_EQUAL_ULPS(MercatorBounds::YToLat(org.y), 53.900047, ()); TEST_EQUAL(bm->GetName(), "From: Минск, Минская область, Беларусь", ()); - TEST_EQUAL(bm->GetIcon(), "placemark-blue", ()); + TEST_EQUAL(bm->GetColor(), kml::PredefinedColor::Blue, ()); TEST_EQUAL(bm->GetDescription(), "", ()); TEST_EQUAL(kml::ToSecondsSinceEpoch(bm->GetTimeStamp()), 888888888, ()); @@ -406,7 +406,7 @@ UNIT_TEST(Bookmarks_Getting) // Should find last added valid result, there two results with the // same coordinates 3 and 4, but 4 was added later. TEST_EQUAL(mark->GetName(), "4", ()); - TEST_EQUAL(mark->GetIcon(), "placemark-blue", ()); + TEST_EQUAL(mark->GetColor(), kml::PredefinedColor::Blue, ()); TEST_EQUAL(bmManager.GetUserMarkIds(mark->GetGroupId()).size(), 2, ()); bmManager.GetEditSession().DeleteBookmark(mark->GetId()); @@ -532,7 +532,7 @@ UNIT_TEST(Bookmarks_AddingMoving) mark = GetBookmarkPxPoint(fm, pixelPoint); TEST_EQUAL(bmManager.GetCategoryName(mark->GetGroupId()), "cat1", ()); TEST_EQUAL(mark->GetName(), "name2", ()); - TEST_EQUAL(mark->GetIcon(), "placemark-blue", ()); + TEST_EQUAL(mark->GetColor(), kml::PredefinedColor::Blue, ()); // Edit name, type and category of bookmark kml::SetDefaultStr(bm.m_name, "name3"); @@ -545,7 +545,7 @@ UNIT_TEST(Bookmarks_AddingMoving) TEST_EQUAL(bmManager.GetUserMarkIds(cat1).size(), 2, ("Bookmark wasn't moved from one category to another")); TEST_EQUAL(mark->GetName(), "name2", ()); - TEST_EQUAL(mark->GetIcon(), "placemark-blue", ()); + TEST_EQUAL(mark->GetColor(), kml::PredefinedColor::Blue, ()); DeleteCategoryFiles(arrCat); } @@ -634,7 +634,7 @@ char const * kmlString3 = return false; if (b1.GetDescription() != b2.GetDescription()) return false; - if (b1.GetIcon() != b2.GetIcon()) + if (b1.GetColor() != b2.GetColor()) return false; if (b1.GetScale() != b2.GetScale()) return false; diff --git a/map/map_tests/kmz_unarchive_test.cpp b/map/map_tests/kmz_unarchive_test.cpp index 1655b5f5d0..0513b9405c 100644 --- a/map/map_tests/kmz_unarchive_test.cpp +++ b/map/map_tests/kmz_unarchive_test.cpp @@ -45,7 +45,7 @@ UNIT_TEST(KMZ_UnzipTest) { Bookmark const bm(kmlData->m_bookmarksData[0]); TEST_EQUAL(bm.GetName(), ("Lahaina Breakwall"), ("KML wrong name!")); - TEST_EQUAL(bm.GetIcon(), "placemark-red", ("KML wrong type!")); + TEST_EQUAL(bm.GetColor(), kml::PredefinedColor::Red, ("KML wrong type!")); TEST_ALMOST_EQUAL_ULPS(bm.GetPivot().x, -156.6777046791284, ("KML wrong org x!")); TEST_ALMOST_EQUAL_ULPS(bm.GetPivot().y, 21.34256685860084, ("KML wrong org y!")); TEST_EQUAL(bm.GetScale(), 0, ("KML wrong scale!")); @@ -53,7 +53,7 @@ UNIT_TEST(KMZ_UnzipTest) { Bookmark const bm(kmlData->m_bookmarksData[1]); TEST_EQUAL(bm.GetName(), ("Seven Sacred Pools, Kipahulu"), ("KML wrong name!")); - TEST_EQUAL(bm.GetIcon(), "placemark-red", ("KML wrong type!")); + TEST_EQUAL(bm.GetColor(), kml::PredefinedColor::Red, ("KML wrong type!")); TEST_ALMOST_EQUAL_ULPS(bm.GetPivot().x, -156.0405130750025, ("KML wrong org x!")); TEST_ALMOST_EQUAL_ULPS(bm.GetPivot().y, 21.12480639056074, ("KML wrong org y!")); TEST_EQUAL(bm.GetScale(), 0, ("KML wrong scale!")); diff --git a/map/user_mark.hpp b/map/user_mark.hpp index 03ae257e31..29ca9b3cd7 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -70,7 +70,7 @@ public: int GetMinTitleZoom() const override { return GetMinZoom(); } FeatureID GetFeatureID() const override { return FeatureID(); } bool HasCreationAnimation() const override { return false; } - df::ColorConstant GetColor() const override { return {}; } + df::ColorConstant GetColorConstant() const override { return {}; } ms::LatLon GetLatLon() const; -- cgit v1.2.3