Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/map
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-03-29 19:06:22 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2018-04-06 15:59:42 +0300
commitb5e7441abae11e929cffccbd3cea750296197754 (patch)
tree1b0894321748f410517a8ae27e433af795756116 /map
parent71298a534e5fe5f00785d1897c8715afc23cb68f (diff)
Suppport KMB on iOS.
Diffstat (limited to 'map')
-rw-r--r--map/bookmark.cpp44
-rw-r--r--map/bookmark.hpp65
-rw-r--r--map/bookmark_manager.cpp78
-rw-r--r--map/bookmark_manager.hpp10
-rw-r--r--map/framework.hpp2
-rw-r--r--map/map_tests/bookmarks_test.cpp14
-rw-r--r--map/map_tests/kmz_unarchive_test.cpp4
-rw-r--r--map/user_mark.hpp2
8 files changed, 101 insertions, 118 deletions
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<df::UserPointMark::SymbolNameZoomInfo> 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<kml::FileData> 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<SymbolNameZoomInfo> 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<SymbolNameZoomInfo> 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> && 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<uint32_t>(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<uint32_t>(kml::PredefinedColor::None) &&
+ color < static_cast<uint32_t>(kml::PredefinedColor::Count))
+ {
+ m_lastColor = static_cast<kml::PredefinedColor>(color);
+ }
+ else
+ {
+ m_lastColor = BookmarkCategory::GetDefaultColor();
+ }
}
void BookmarkManager::ClearCategories()
@@ -856,7 +866,7 @@ std::shared_ptr<BookmarkManager::KMLDataCollection> BookmarkManager::LoadBookmar
std::shared_ptr<BookmarkManager::KMLDataCollection> BookmarkManager::LoadBookmarksKMB(std::vector<std::string> & 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::KMLDataCollection> BookmarkManager::LoadBookmar
for (auto const & file : files)
{
- auto const filePath = dir + file;
+ auto const filePath = my::JoinPath(dir, file);
auto kmlData = std::make_unique<kml::FileData>();
try
{
@@ -1064,7 +1074,7 @@ boost::optional<std::string> 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<m2::AnyRectD(UserMark::Type)>;
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<br>", ());
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;