From 9691cc75eff1e2119cce586d06c21f562386e0d8 Mon Sep 17 00:00:00 2001 From: Daria Volvenkova Date: Wed, 4 Dec 2019 14:28:13 +0300 Subject: [PATCH] [bookmarks] Extended bookmarks icons. --- kml/kml_tests/tests_data.hpp | 2 +- kml/pykmlib/bindings.cpp | 20 +++++++++ kml/serdes.cpp | 4 +- kml/serdes_binary.hpp | 12 ++++-- kml/types.hpp | 15 +++++++ map/bookmark.cpp | 6 +++ map/bookmark_helpers.cpp | 80 ++++++++++++++++++++++++++---------- 7 files changed, 110 insertions(+), 29 deletions(-) diff --git a/kml/kml_tests/tests_data.hpp b/kml/kml_tests/tests_data.hpp index b81b5f8a8e..b182f9da11 100644 --- a/kml/kml_tests/tests_data.hpp +++ b/kml/kml_tests/tests_data.hpp @@ -1364,7 +1364,7 @@ std::vector const kBinKmlV4 = { }; std::vector const kBinKml = { - 0x05, 0x00, 0x00, 0x1E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x1E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, diff --git a/kml/pykmlib/bindings.cpp b/kml/pykmlib/bindings.cpp index b3eb35068b..14e28c9748 100644 --- a/kml/pykmlib/bindings.cpp +++ b/kml/pykmlib/bindings.cpp @@ -300,6 +300,14 @@ std::string PredefinedColorToString(PredefinedColor c) case PredefinedColor::Brown: return "BROWN"; case PredefinedColor::Green: return "GREEN"; case PredefinedColor::Orange: return "ORANGE"; + case PredefinedColor::DeepPurple: return "DEEPPURPLE"; + case PredefinedColor::LightBlue: return "LIGHTBLUE"; + case PredefinedColor::Cyan: return "CYAN"; + case PredefinedColor::Teal: return "TEAL"; + case PredefinedColor::Lime: return "LIME"; + case PredefinedColor::DeepOrange: return "DEEPORANGE"; + case PredefinedColor::Gray: return "GRAY"; + case PredefinedColor::BlueGray: return "BLUEGRAY"; case PredefinedColor::Count: CHECK(false, ("Unknown predefined color")); return {}; } } @@ -343,6 +351,12 @@ std::string BookmarkIconToString(BookmarkIcon icon) case BookmarkIcon::Sights: return "SIGHTS"; case BookmarkIcon::Swim: return "SWIM"; case BookmarkIcon::Water: return "WATER"; + case BookmarkIcon::Bar: return "BAR"; + case BookmarkIcon::Transport: return "TRANSPORT"; + case BookmarkIcon::Viewpoint: return "VIEWPOINT"; + case BookmarkIcon::Sport: return "SPORT"; + case BookmarkIcon::Start: return "START"; + case BookmarkIcon::Finish: return "FINISH"; case BookmarkIcon::Count: CHECK(false, ("Unknown bookmark icon")); return {}; } } @@ -698,6 +712,12 @@ BOOST_PYTHON_MODULE(pykmlib) .value(BookmarkIconToString(BookmarkIcon::Sights).c_str(), BookmarkIcon::Sights) .value(BookmarkIconToString(BookmarkIcon::Swim).c_str(), BookmarkIcon::Swim) .value(BookmarkIconToString(BookmarkIcon::Water).c_str(), BookmarkIcon::Water) + .value(BookmarkIconToString(BookmarkIcon::Bar).c_str(), BookmarkIcon::Bar) + .value(BookmarkIconToString(BookmarkIcon::Transport).c_str(), BookmarkIcon::Transport) + .value(BookmarkIconToString(BookmarkIcon::Viewpoint).c_str(), BookmarkIcon::Viewpoint) + .value(BookmarkIconToString(BookmarkIcon::Sport).c_str(), BookmarkIcon::Sport) + .value(BookmarkIconToString(BookmarkIcon::Start).c_str(), BookmarkIcon::Start) + .value(BookmarkIconToString(BookmarkIcon::Finish).c_str(), BookmarkIcon::Finish) .export_values(); class_("ColorData") diff --git a/kml/serdes.cpp b/kml/serdes.cpp index 747d0e3813..4550b06b45 100644 --- a/kml/serdes.cpp +++ b/kml/serdes.cpp @@ -154,7 +154,7 @@ BookmarkIcon GetIcon(std::string const & iconName) for (size_t i = 0; i < static_cast(BookmarkIcon::Count); ++i) { auto const icon = static_cast(i); - if (iconName == DebugPrint(icon)) + if (iconName == ToString(icon)) return icon; } return BookmarkIcon::None; @@ -375,7 +375,7 @@ void SaveBookmarkExtendedData(KmlWriter::WriterWrapper & writer, BookmarkData co } if (bookmarkData.m_icon != BookmarkIcon::None) - writer << kIndent6 << "" << DebugPrint(bookmarkData.m_icon) << "\n"; + writer << kIndent6 << "" << ToString(bookmarkData.m_icon) << "\n"; if (!bookmarkData.m_boundTracks.empty()) { diff --git a/kml/serdes_binary.hpp b/kml/serdes_binary.hpp index a9e45e1984..7ee94ad48c 100644 --- a/kml/serdes_binary.hpp +++ b/kml/serdes_binary.hpp @@ -26,7 +26,8 @@ enum class Version : uint8_t V3 = 3, // 7th May 2018 (persistent feature types). V4 = 4, // 26th August 2019 (key-value properties and nearestToponym for bookmarks and tracks, cities -> toponyms). V5 = 5, // 21st November 2019 (extended color palette). - Latest = V5 + V6 = 6, // 3rd December 2019 (extended bookmark icons). + Latest = V6 }; class SerializerKml @@ -138,8 +139,11 @@ public: NonOwningReaderSource source(reader); auto const v = ReadPrimitiveFromSource(source); - if (v != Version::Latest && v != Version::V2 && v != Version::V3 && v != Version::V4) + if (v != Version::Latest && v != Version::V2 && v != Version::V3 && v != Version::V4 && + v != Version::V5) + { MYTHROW(DeserializeException, ("Incorrect file version.")); + } ReadDeviceId(source); ReadServerId(source); @@ -148,9 +152,9 @@ public: auto subReader = reader.CreateSubReader(source.Pos(), source.Size()); InitializeIfNeeded(*subReader); - if (v == Version::V5 || v == Version::V4) + if (v == Version::V6 || v == Version::V5 || v == Version::V4) { - // NOTE: v.4 and v.5 are binary compatible. + // NOTE: v.4, v.5 and v.6 are binary compatible. DeserializeCategory(subReader, m_data); DeserializeBookmarks(subReader, m_data); DeserializeTracks(subReader, m_data); diff --git a/kml/types.hpp b/kml/types.hpp index d4e94eb5e1..e06ad84e07 100644 --- a/kml/types.hpp +++ b/kml/types.hpp @@ -117,6 +117,15 @@ enum class BookmarkIcon : uint16_t Sights, Swim, Water, + + // Extended icons. + Bar, + Transport, + Viewpoint, + Sport, + Start, + Finish, + Count }; @@ -145,6 +154,12 @@ inline std::string ToString(BookmarkIcon icon) case BookmarkIcon::Sights: return "Sights"; case BookmarkIcon::Swim: return "Swim"; case BookmarkIcon::Water: return "Water"; + case BookmarkIcon::Bar: return "Bar"; + case BookmarkIcon::Transport: return "Transport"; + case BookmarkIcon::Viewpoint: return "Viewpoint"; + case BookmarkIcon::Sport: return "Sport"; + case BookmarkIcon::Start: return "Start"; + case BookmarkIcon::Finish: return "Finish"; case BookmarkIcon::Count: return {}; } UNREACHABLE(); diff --git a/map/bookmark.cpp b/map/bookmark.cpp index ca0c02463d..c4103f7de2 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -38,6 +38,12 @@ std::string GetBookmarkIconType(kml::BookmarkIcon const & icon) case kml::BookmarkIcon::Sights: return "sights"; case kml::BookmarkIcon::Swim: return "swim"; case kml::BookmarkIcon::Water: return "water"; + case kml::BookmarkIcon::Bar: return "bar"; + case kml::BookmarkIcon::Transport: return "transport"; + case kml::BookmarkIcon::Viewpoint: return "viewpoint"; + case kml::BookmarkIcon::Sport: return "sport"; + case kml::BookmarkIcon::Start: return "start"; + case kml::BookmarkIcon::Finish: return "finish"; case kml::BookmarkIcon::Count: ASSERT(false, ("Invalid bookmark icon type")); return {}; diff --git a/map/bookmark_helpers.cpp b/map/bookmark_helpers.cpp index 503e6cb910..5ae23aaf7a 100644 --- a/map/bookmark_helpers.cpp +++ b/map/bookmark_helpers.cpp @@ -35,9 +35,10 @@ std::map const kFeatureTypeToBookmarkIcon = { {"amenity-restaurant", kml::BookmarkIcon::Food}, {"amenity-fast_food", kml::BookmarkIcon::Food}, {"amenity-food_court", kml::BookmarkIcon::Food}, - {"amenity-bar", kml::BookmarkIcon::Food}, - {"amenity-pub", kml::BookmarkIcon::Food}, - {"amenity-biergarten", kml::BookmarkIcon::Food}, + + {"amenity-bar", kml::BookmarkIcon::Bar}, + {"amenity-pub", kml::BookmarkIcon::Bar}, + {"amenity-biergarten", kml::BookmarkIcon::Bar}, {"waterway-waterfall", kml::BookmarkIcon::Sights}, {"historic-tomb", kml::BookmarkIcon::Sights}, @@ -49,7 +50,6 @@ std::map const kFeatureTypeToBookmarkIcon = { {"amenity-place_of_worship", kml::BookmarkIcon::Sights}, {"tourism-attraction", kml::BookmarkIcon::Sights}, {"tourism-theme_park", kml::BookmarkIcon::Sights}, - {"tourism-viewpoint", kml::BookmarkIcon::Sights}, {"historic-fort", kml::BookmarkIcon::Sights}, {"historic-castle", kml::BookmarkIcon::Sights}, {"tourism-artwork", kml::BookmarkIcon::Sights}, @@ -57,34 +57,47 @@ std::map const kFeatureTypeToBookmarkIcon = { {"historic-wayside_shrine", kml::BookmarkIcon::Sights}, {"historic-wayside_cross", kml::BookmarkIcon::Sights}, + {"tourism-viewpoint", kml::BookmarkIcon::Viewpoint}, + {"tourism-gallery", kml::BookmarkIcon::Museum}, {"tourism-museum", kml::BookmarkIcon::Museum}, {"amenity-arts_centre", kml::BookmarkIcon::Museum}, - {"sport", kml::BookmarkIcon::Entertainment}, - {"sport-multi", kml::BookmarkIcon::Entertainment}, {"leisure-playground", kml::BookmarkIcon::Entertainment}, {"leisure-water_park", kml::BookmarkIcon::Entertainment}, {"amenity-casino", kml::BookmarkIcon::Entertainment}, - {"sport-archery", kml::BookmarkIcon::Entertainment}, - {"sport-shooting", kml::BookmarkIcon::Entertainment}, - {"sport-australian_football", kml::BookmarkIcon::Entertainment}, - {"sport-bowls", kml::BookmarkIcon::Entertainment}, - {"sport-curling", kml::BookmarkIcon::Entertainment}, - {"sport-cricket", kml::BookmarkIcon::Entertainment}, - {"sport-baseball", kml::BookmarkIcon::Entertainment}, - {"sport-basketball", kml::BookmarkIcon::Entertainment}, - {"sport-american_football", kml::BookmarkIcon::Entertainment}, - {"sport-athletics", kml::BookmarkIcon::Entertainment}, - {"sport-golf", kml::BookmarkIcon::Entertainment}, - {"sport-gymnastics", kml::BookmarkIcon::Entertainment}, - {"sport-tennis", kml::BookmarkIcon::Entertainment}, - {"sport-skiing", kml::BookmarkIcon::Entertainment}, - {"sport-soccer", kml::BookmarkIcon::Entertainment}, {"amenity-nightclub", kml::BookmarkIcon::Entertainment}, {"amenity-cinema", kml::BookmarkIcon::Entertainment}, {"amenity-theatre", kml::BookmarkIcon::Entertainment}, - {"leisure-stadium", kml::BookmarkIcon::Entertainment}, + + {"sport", kml::BookmarkIcon::Sport}, + {"sport-multi", kml::BookmarkIcon::Sport}, + {"sport-archery", kml::BookmarkIcon::Sport}, + {"sport-shooting", kml::BookmarkIcon::Sport}, + {"sport-australian_football", kml::BookmarkIcon::Sport}, + {"sport-bowls", kml::BookmarkIcon::Sport}, + {"sport-curling", kml::BookmarkIcon::Sport}, + {"sport-cricket", kml::BookmarkIcon::Sport}, + {"sport-baseball", kml::BookmarkIcon::Sport}, + {"sport-basketball", kml::BookmarkIcon::Sport}, + {"sport-american_football", kml::BookmarkIcon::Sport}, + {"sport-athletics", kml::BookmarkIcon::Sport}, + {"sport-golf", kml::BookmarkIcon::Sport}, + {"sport-gymnastics", kml::BookmarkIcon::Sport}, + {"sport-tennis", kml::BookmarkIcon::Sport}, + {"sport-skiing", kml::BookmarkIcon::Sport}, + {"sport-soccer", kml::BookmarkIcon::Sport}, + {"leisure-stadium", kml::BookmarkIcon::Sport}, + {"leisure-skiing", kml::BookmarkIcon::Sport}, + {"leisure-fitness_centre", kml::BookmarkIcon::Sport}, + {"olympics-stadium_main", kml::BookmarkIcon::Sport}, + {"olympics-stadium", kml::BookmarkIcon::Sport}, + {"olympics-water_sport", kml::BookmarkIcon::Sport}, + {"olympics-bike_sport", kml::BookmarkIcon::Sport}, + {"leisure-sports_centre-climbing", kml::BookmarkIcon::Sport}, + {"leisure-sports_centre-shooting", kml::BookmarkIcon::Sport}, + {"leisure-sports_centre-swimming", kml::BookmarkIcon::Sport}, + {"leisure-sports_centre-yoga", kml::BookmarkIcon::Sport}, {"boundary-national_park", kml::BookmarkIcon::Park}, {"leisure-nature_reserve", kml::BookmarkIcon::Park}, @@ -219,6 +232,20 @@ std::map const kFeatureTypeToBookmarkIcon = { {"tourism-camp_site", kml::BookmarkIcon::Parking}, {"amenity-motorcycle_parking", kml::BookmarkIcon::Parking}, + {"amenity-bus_station", kml::BookmarkIcon::Transport}, + {"amenity-car_sharing", kml::BookmarkIcon::Transport}, + {"amenity-ferry_terminal", kml::BookmarkIcon::Transport}, + {"public_transport-platform", kml::BookmarkIcon::Transport}, + {"highway-platform", kml::BookmarkIcon::Transport}, + {"aeroway-aerodrome", kml::BookmarkIcon::Transport}, + {"aeroway-aerodrome-international", kml::BookmarkIcon::Transport}, + {"railway-station-light_rail", kml::BookmarkIcon::Transport}, + {"railway-station-subway", kml::BookmarkIcon::Transport}, + {"railway-station-monorail", kml::BookmarkIcon::Transport}, + {"railway-tram_stop", kml::BookmarkIcon::Transport}, + {"highway-bus_stop", kml::BookmarkIcon::Transport}, + {"building-train_station", kml::BookmarkIcon::Transport}, + {"amenity-fuel", kml::BookmarkIcon::Gas}, {"amenity-charging_station", kml::BookmarkIcon::Gas}, @@ -294,6 +321,15 @@ std::map const kFeatureTypeToBookmarkType = { {"amenity-cinema", BookmarkBaseType::Entertainment}, {"amenity-theatre", BookmarkBaseType::Entertainment}, {"leisure-stadium", BookmarkBaseType::Entertainment}, + {"leisure-fitness_centre", BookmarkBaseType::Entertainment}, + {"olympics-stadium_main", BookmarkBaseType::Entertainment}, + {"olympics-stadium", BookmarkBaseType::Entertainment}, + {"olympics-water_sport", BookmarkBaseType::Entertainment}, + {"olympics-bike_sport", BookmarkBaseType::Entertainment}, + {"leisure-sports_centre-climbing", BookmarkBaseType::Entertainment}, + {"leisure-sports_centre-shooting", BookmarkBaseType::Entertainment}, + {"leisure-sports_centre-swimming", BookmarkBaseType::Entertainment}, + {"leisure-sports_centre-yoga", BookmarkBaseType::Entertainment}, {"boundary-national_park", BookmarkBaseType::Park}, {"leisure-nature_reserve", BookmarkBaseType::Park},