Do not change viewport if we have search results in current one.

This commit is contained in:
vng 2014-06-19 13:18:07 +03:00 committed by Alex Zolotarev
parent ea46de76f5
commit baa3a9f24a
2 changed files with 16 additions and 6 deletions

View file

@ -830,7 +830,7 @@ void Framework::OnSearchResultsCallbackUI(search::Results const & results)
if (IsISActive())
{
m2::RectD dummy;
FillSearchResultsMarks(results, dummy);
(void) FillSearchResultsMarks(results, dummy);
Invalidate();
}
@ -1229,24 +1229,26 @@ size_t Framework::ShowAllSearchResults()
}
m2::RectD rect;
FillSearchResultsMarks(results, rect);
if (rect.IsValid())
if (!FillSearchResultsMarks(results, rect) && rect.IsValid())
{
ShowRectEx(rect);
StopLocationFollow();
}
else
Invalidate();
return count;
}
void Framework::FillSearchResultsMarks(search::Results const & results, m2::RectD & rect)
bool Framework::FillSearchResultsMarks(search::Results const & results, m2::RectD & rect)
{
UserMarkContainer::Type const type = UserMarkContainer::SEARCH_MARK;
m_bmManager.UserMarksSetVisible(type, true);
m_bmManager.UserMarksClear(type);
m_bmManager.UserMarksSetDrawable(type, true);
m2::RectD const viewport = GetCurrentViewport();
bool res = false;
size_t const count = results.GetCount();
for (size_t i = 0; i < count; ++i)
{
@ -1257,12 +1259,19 @@ void Framework::FillSearchResultsMarks(search::Results const & results, m2::Rect
{
AddressInfo info;
info.MakeFrom(r);
m2::PointD const pt = r.GetFeatureCenter();
SearchMarkPoint * mark = static_cast<SearchMarkPoint *>(m_bmManager.UserMarksAddMark(type, pt));
mark->SetInfo(info);
rect.Add(pt);
res = res || viewport.IsPointInside(pt);
}
}
return res;
}
void Framework::CancelInteractiveSearch()

View file

@ -250,7 +250,8 @@ private:
void OnSearchResultsCallback(search::Results const & results);
void OnSearchResultsCallbackUI(search::Results const & results);
void FillSearchResultsMarks(search::Results const & results, m2::RectD & rect);
/// @return true if any result is in viewport rect.
bool FillSearchResultsMarks(search::Results const & results, m2::RectD & rect);
public:
m2::RectD GetCurrentViewport() const;