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/search
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-11-21 22:12:41 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:47:05 +0300
commitdc21bffc6732ceeff9540882da7766cd8f367705 (patch)
tree58cd45030f3179421cb7f4c085b0eea48de816f8 /search
parentc408080c2712a08108368b8e981c81d006ab4fab (diff)
Add search settings.
Diffstat (limited to 'search')
-rw-r--r--search/params.cpp25
-rw-r--r--search/params.hpp32
-rw-r--r--search/search_engine.cpp33
3 files changed, 42 insertions, 48 deletions
diff --git a/search/params.cpp b/search/params.cpp
index 0fb49d3ff6..e28b7eab3b 100644
--- a/search/params.cpp
+++ b/search/params.cpp
@@ -8,27 +8,10 @@ namespace search
SearchParams::SearchParams()
: m_inputLanguageCode(StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE),
- m_validPos(false), m_mode(0)
+ m_searchMode(ALL), m_validPos(false)
{
}
-void SearchParams::SetResetMode(bool b)
-{
- if (b) m_mode |= ResetBit;
- else m_mode &= (~ResetBit);
-}
-
-bool SearchParams::IsResetMode() const
-{
- return ((m_mode & ResetBit) != 0);
-}
-
-void SearchParams::SetNearMeMode(bool b)
-{
- if (b) m_mode |= NearMeBit;
- else m_mode &= (~NearMeBit);
-}
-
void SearchParams::SetPosition(double lat, double lon)
{
m_lat = lat;
@@ -45,12 +28,6 @@ void SearchParams::SetInputLanguage(string const & language)
delimPos == string::npos ? language : language.substr(0, delimPos));
}
-bool SearchParams::IsNearMeMode() const
-{
- // this mode is valid only with correct My Position
- return (((m_mode & NearMeBit) != 0) && m_validPos);
-}
-
bool SearchParams::IsLanguageValid() const
{
return (m_inputLanguageCode != StringUtf8Multilang::UNSUPPORTED_LANGUAGE_CODE);
diff --git a/search/params.hpp b/search/params.hpp
index 1dd1f21c0d..2b8b338f6a 100644
--- a/search/params.hpp
+++ b/search/params.hpp
@@ -16,14 +16,31 @@ namespace search
public:
SearchParams();
- void SetResetMode(bool b);
- void SetNearMeMode(bool b);
+ /// @name Force run search without comparing with previous search params.
+ //@{
+ void SetForceSearch(bool b) { m_forceSearch = b; }
+ bool IsForceSearch() const { return m_forceSearch; }
+ //@}
+
+ /// @name Search modes.
+ //@{
+ enum SearchModeT
+ {
+ AROUND_POSITION = 1,
+ IN_VIEWPORT = 2,
+ SEARCH_WORLD = 4,
+ ALL = AROUND_POSITION | IN_VIEWPORT | SEARCH_WORLD
+ };
+
+ void SetSearchMode(int mode) { m_searchMode = mode; }
+ bool NeedSearch(SearchModeT mode) const { return ((m_searchMode & mode) != 0);}
+ //@}
+
void SetPosition(double lat, double lon);
+ bool IsValidPosition() const { return m_validPos; }
+
/// @param[in] language can be "fr", "en-US", "ru_RU" etc.
void SetInputLanguage(string const & language);
-
- bool IsResetMode() const;
- bool IsNearMeMode() const;
bool IsLanguageValid() const;
bool IsEqualCommon(SearchParams const & rhs) const;
@@ -37,11 +54,10 @@ namespace search
int8_t m_inputLanguageCode;
double m_lat, m_lon;
- bool m_validPos;
private:
- enum { ResetBit = 0x1, NearMeBit = 0x2 };
- int m_mode;
+ int m_searchMode;
+ bool m_forceSearch, m_validPos;
};
string DebugPrint(SearchParams const & params);
diff --git a/search/search_engine.cpp b/search/search_engine.cpp
index 8993f1a9ac..07a4358438 100644
--- a/search/search_engine.cpp
+++ b/search/search_engine.cpp
@@ -146,11 +146,11 @@ bool Engine::Search(SearchParams const & params, m2::RectD const & viewport)
// There is no need to put synch here for reading m_params,
// because this function is always called from main thread (one-by-one for queries).
- if (!params.IsResetMode() &&
+ if (!params.IsForceSearch() &&
m_params.IsEqualCommon(params) &&
m2::IsEqual(m_viewport, viewport, epsEqualRects, epsEqualRects))
{
- if (!m_params.m_validPos)
+ if (!m_params.IsValidPosition())
return false;
m2::PointD const p1 = GetViewportXY(m_params.m_lat, m_params.m_lon);
@@ -222,27 +222,28 @@ void Engine::SearchAsync()
// Initialize query.
m_pQuery->Init();
- bool worldSearch = true;
- if (params.m_validPos)
+ // Set search viewports according to search params.
+ if (params.IsValidPosition())
{
- m_pQuery->SetPosition(GetViewportXY(params.m_lat, params.m_lon));
-
- arrRects[NEARME_RECT] = GetViewportRect(params.m_lat, params.m_lon);
-
- // Do not search in viewport for "NearMe" mode.
- if (params.IsNearMeMode())
+ if (params.NeedSearch(SearchParams::AROUND_POSITION))
{
- worldSearch = false;
- arrRects[VIEWPORT_RECT].MakeEmpty();
+ m_pQuery->SetPosition(GetViewportXY(params.m_lat, params.m_lon));
+ arrRects[NEARME_RECT] = GetViewportRect(params.m_lat, params.m_lon);
}
- else
- AnalyzeRects(arrRects);
}
else
m_pQuery->NullPosition();
+ if (!params.NeedSearch(SearchParams::IN_VIEWPORT))
+ arrRects[VIEWPORT_RECT].MakeEmpty();
+
+ if (arrRects[NEARME_RECT].IsValid() && arrRects[VIEWPORT_RECT].IsValid())
+ AnalyzeRects(arrRects);
+
m_pQuery->SetViewport(arrRects, 2);
- m_pQuery->SetSearchInWorld(worldSearch);
+
+ m_pQuery->SetSearchInWorld(params.NeedSearch(SearchParams::SEARCH_WORLD));
+
if (params.IsLanguageValid())
m_pQuery->SetInputLanguage(params.m_inputLanguageCode);
@@ -261,7 +262,7 @@ void Engine::SearchAsync()
if (emptyQuery)
{
// Search for empty query only around viewport.
- if (params.m_validPos)
+ if (params.IsValidPosition())
{
double arrR[] = { 500, 1000, 2000 };
for (size_t i = 0; i < ARRAY_SIZE(arrR); ++i)