diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2018-08-15 16:20:37 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-08-17 15:26:10 +0300 |
commit | 515abeed2a658d13864d15c80463f53845738912 (patch) | |
tree | 8f1b718ba312ed47a60cbc64f34d9f4b2f31a8cc /drape_frontend | |
parent | 93d41ed31836c9302b4589e1f7c0521e748c87ef (diff) |
[Core] Added subscription
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/map_data_provider.cpp | 35 | ||||
-rw-r--r-- | drape_frontend/map_data_provider.hpp | 13 | ||||
-rw-r--r-- | drape_frontend/rule_drawer.cpp | 7 | ||||
-rw-r--r-- | drape_frontend/rule_drawer.hpp | 3 | ||||
-rw-r--r-- | drape_frontend/tile_info.cpp | 4 |
5 files changed, 46 insertions, 16 deletions
diff --git a/drape_frontend/map_data_provider.cpp b/drape_frontend/map_data_provider.cpp index e47d4fd112..b587392042 100644 --- a/drape_frontend/map_data_provider.cpp +++ b/drape_frontend/map_data_provider.cpp @@ -1,16 +1,28 @@ #include "drape_frontend/map_data_provider.hpp" +#include "base/assert.hpp" + +#include <utility> + namespace df { -MapDataProvider::MapDataProvider(TReadIDsFn const & idsReader, - TReadFeaturesFn const & featureReader, - TIsCountryLoadedByNameFn const & isCountryLoadedByNameFn, - TUpdateCurrentCountryFn const & updateCurrentCountryFn) - : m_isCountryLoadedByName(isCountryLoadedByNameFn) - , m_featureReader(featureReader) - , m_idsReader(idsReader) - , m_updateCurrentCountry(updateCurrentCountryFn) -{} +MapDataProvider::MapDataProvider(TReadIDsFn && idsReader, + TReadFeaturesFn && featureReader, + TFilterFeatureFn && filterFeatureFn, + TIsCountryLoadedByNameFn && isCountryLoadedByNameFn, + TUpdateCurrentCountryFn && updateCurrentCountryFn) + : m_isCountryLoadedByName(std::move(isCountryLoadedByNameFn)) + , m_featureReader(std::move(featureReader)) + , m_idsReader(std::move(idsReader)) + , m_filterFeature(std::move(filterFeatureFn)) + , m_updateCurrentCountry(std::move(updateCurrentCountryFn)) +{ + CHECK(m_isCountryLoadedByName != nullptr, ()); + CHECK(m_featureReader != nullptr, ()); + CHECK(m_idsReader != nullptr, ()); + CHECK(m_filterFeature != nullptr, ()); + CHECK(m_updateCurrentCountry != nullptr, ()); +} void MapDataProvider::ReadFeaturesID(TReadCallback<FeatureID const> const & fn, m2::RectD const & r, int scale) const @@ -24,6 +36,11 @@ void MapDataProvider::ReadFeatures(TReadCallback<FeatureType> const & fn, m_featureReader(fn, ids); } +MapDataProvider::TFilterFeatureFn const & MapDataProvider::GetFilter() const +{ + return m_filterFeature; +} + MapDataProvider::TUpdateCurrentCountryFn const & MapDataProvider::UpdateCurrentCountryFn() const { return m_updateCurrentCountry; diff --git a/drape_frontend/map_data_provider.hpp b/drape_frontend/map_data_provider.hpp index b3da94b7d2..7424d2c107 100644 --- a/drape_frontend/map_data_provider.hpp +++ b/drape_frontend/map_data_provider.hpp @@ -22,16 +22,20 @@ public: using TIsCountryLoadedFn = std::function<bool(m2::PointD const &)>; using TIsCountryLoadedByNameFn = std::function<bool(string const &)>; using TUpdateCurrentCountryFn = std::function<void(m2::PointD const &, int)>; + using TFilterFeatureFn = std::function<bool(FeatureType &)>; - MapDataProvider(TReadIDsFn const & idsReader, - TReadFeaturesFn const & featureReader, - TIsCountryLoadedByNameFn const & isCountryLoadedByNameFn, - TUpdateCurrentCountryFn const & updateCurrentCountryFn); + MapDataProvider(TReadIDsFn && idsReader, + TReadFeaturesFn && featureReader, + TFilterFeatureFn && filterFeatureFn, + TIsCountryLoadedByNameFn && isCountryLoadedByNameFn, + TUpdateCurrentCountryFn && updateCurrentCountryFn); void ReadFeaturesID(TReadCallback<FeatureID const> const & fn, m2::RectD const & r, int scale) const; void ReadFeatures(TReadCallback<FeatureType> const & fn, std::vector<FeatureID> const & ids) const; + TFilterFeatureFn const & GetFilter() const; + TUpdateCurrentCountryFn const & UpdateCurrentCountryFn() const; TIsCountryLoadedByNameFn m_isCountryLoadedByName; @@ -39,6 +43,7 @@ public: private: TReadFeaturesFn m_featureReader; TReadIDsFn m_idsReader; + TFilterFeatureFn m_filterFeature; TUpdateCurrentCountryFn m_updateCurrentCountry; }; } // namespace df diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp index d5ead86425..31d4243db8 100644 --- a/drape_frontend/rule_drawer.cpp +++ b/drape_frontend/rule_drawer.cpp @@ -173,20 +173,22 @@ bool UsePreciseFeatureCenter(FeatureType & f) namespace df { - RuleDrawer::RuleDrawer(TDrawerCallback const & drawerFn, TCheckCancelledCallback const & checkCancelled, TIsCountryLoadedByNameFn const & isLoadedFn, + TFilterFeatureFn const & filterFn, ref_ptr<EngineContext> engineContext) : m_callback(drawerFn) , m_checkCancelled(checkCancelled) , m_isLoadedFn(isLoadedFn) + , m_filter(filterFn) , m_context(engineContext) , m_customFeaturesContext(engineContext->GetCustomFeaturesContext().lock()) , m_wasCancelled(false) { ASSERT(m_callback != nullptr, ()); ASSERT(m_checkCancelled != nullptr, ()); + ASSERT(m_filter != nullptr, ()); m_globalRect = m_context->GetTileKey().GetGlobalRect(); @@ -466,6 +468,9 @@ void RuleDrawer::operator()(FeatureType & f) if (CheckCancelled()) return; + if (m_filter(f)) + return; + Stylist s; m_callback(f, s); diff --git a/drape_frontend/rule_drawer.hpp b/drape_frontend/rule_drawer.hpp index b09b990871..24222e3684 100644 --- a/drape_frontend/rule_drawer.hpp +++ b/drape_frontend/rule_drawer.hpp @@ -33,10 +33,12 @@ public: using TCheckCancelledCallback = std::function<bool()>; using TIsCountryLoadedByNameFn = std::function<bool(std::string const &)>; using TInsertShapeFn = function<void(drape_ptr<MapShape> && shape)>; + using TFilterFeatureFn = std::function<bool(FeatureType &)>; RuleDrawer(TDrawerCallback const & drawerFn, TCheckCancelledCallback const & checkCancelled, TIsCountryLoadedByNameFn const & isLoadedFn, + TFilterFeatureFn const & filterFn, ref_ptr<EngineContext> engineContext); ~RuleDrawer(); @@ -61,6 +63,7 @@ private: TDrawerCallback m_callback; TCheckCancelledCallback m_checkCancelled; TIsCountryLoadedByNameFn m_isLoadedFn; + TFilterFeatureFn m_filter; ref_ptr<EngineContext> m_context; CustomFeaturesContextPtr m_customFeaturesContext; diff --git a/drape_frontend/tile_info.cpp b/drape_frontend/tile_info.cpp index 2836609615..c151c9efa7 100644 --- a/drape_frontend/tile_info.cpp +++ b/drape_frontend/tile_info.cpp @@ -73,8 +73,8 @@ void TileInfo::ReadFeatures(MapDataProvider const & model) std::sort(m_featureInfo.begin(), m_featureInfo.end()); auto const deviceLang = StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm()); RuleDrawer drawer(std::bind(&TileInfo::InitStylist, this, deviceLang, _1, _2), - std::bind(&TileInfo::IsCancelled, this), - model.m_isCountryLoadedByName, make_ref(m_context)); + std::bind(&TileInfo::IsCancelled, this), model.m_isCountryLoadedByName, + model.GetFilter(), make_ref(m_context)); model.ReadFeatures(std::bind<void>(std::ref(drawer), _1), m_featureInfo); } #if defined(DRAPE_MEASURER) && defined(TILES_STATISTIC) |