diff options
author | Alex Zolotarev <deathbaba@gmail.com> | 2011-05-13 19:22:08 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:17:17 +0300 |
commit | fd4578cea975d83ded8869adb127f353d1a541e5 (patch) | |
tree | a125d79c392d741fea0f13a80ea43b9c3986d88e /map | |
parent | 5ec42868508a0f2dc2f82fea19ae478fa274924b (diff) |
[qt] Simple search by viewport
Diffstat (limited to 'map')
-rw-r--r-- | map/framework.cpp | 26 | ||||
-rw-r--r-- | map/framework.hpp | 5 |
2 files changed, 31 insertions, 0 deletions
diff --git a/map/framework.cpp b/map/framework.cpp index c8143fb3ba..12ee82438c 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1056,4 +1056,30 @@ void FrameWork<TModel>::AddRedrawCommandSure() UpdateNow(); } + class SearchProcessor + { + string const & m_text; + SearchCallbackT & m_callback; + + public: + SearchProcessor(string const & textToSearch, SearchCallbackT & callback) + : m_text(textToSearch), m_callback(callback) {} + bool operator() (FeatureType const & f) const + { + // @TODO search for all languages + string name; + f.GetName(name); + if (!name.empty() && name.find(m_text) != string::npos) + m_callback(name, f.GetLimitRect(16)); //@TODO hardcoded scale + return true; + } + }; + + template<typename TModel> + void FrameWork<TModel>::Search(string const & text, SearchCallbackT callback) const + { + SearchProcessor doClass(text, callback); + m_model.ForEachFeature(m_navigator.Screen().GlobalRect(), doClass); + } + template class FrameWork<model::FeaturesFetcher>; diff --git a/map/framework.hpp b/map/framework.hpp index 9265d1783b..58f8cf3803 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -51,6 +51,8 @@ class redraw_operation_cancelled {}; struct BenchmarkRectProvider; +typedef boost::function<void (string const &, m2::RectD const &)> SearchCallbackT; + namespace fwork { class DrawProcessor @@ -218,6 +220,9 @@ public: public: + /// @note Stop search if text is empty + void Search(string const & text, SearchCallbackT callback) const; + void SetMaxWorldRect(); void UpdateNow(); void Invalidate(); |