Fix first search results when “Search on map”.

This commit is contained in:
vng 2014-07-04 19:57:08 +02:00 committed by Alex Zolotarev
parent 43000502e3
commit 2ff0db6833
6 changed files with 21 additions and 11 deletions

View file

@ -404,9 +404,9 @@ UserMark * BookmarkManager::UserMarksAddMark(UserMarkContainer::Type type, const
return FindUserMarksContainer(type)->GetController().CreateUserMark(ptOrg);
}
void BookmarkManager::UserMarksClear(UserMarkContainer::Type type)
void BookmarkManager::UserMarksClear(UserMarkContainer::Type type, size_t skipCount/* = 0*/)
{
FindUserMarksContainer(type)->Clear();
FindUserMarksContainer(type)->Clear(skipCount);
}
UserMarkContainer::Controller & BookmarkManager::UserMarksGetController(UserMarkContainer::Type type)

View file

@ -77,7 +77,7 @@ public:
void UserMarksSetDrawable(UserMarkContainer::Type type, bool isDrawable);
void UserMarksIsDrawable(UserMarkContainer::Type type);
UserMark * UserMarksAddMark(UserMarkContainer::Type type, m2::PointD const & ptOrg);
void UserMarksClear(UserMarkContainer::Type type);
void UserMarksClear(UserMarkContainer::Type type, size_t skipCount = 0);
UserMarkContainer::Controller & UserMarksGetController(UserMarkContainer::Type type);
void SetScreen(graphics::Screen * screen);

View file

@ -195,7 +195,8 @@ Framework::Framework()
m_benchmarkEngine(0),
m_bmManager(*this),
m_balloonManager(*this),
m_locationChangedSlotID(-1)
m_locationChangedSlotID(-1),
m_fixedSearchResults(0)
{
// Checking whether we should enable benchmark.
bool isBenchmarkingEnabled = false;
@ -1171,6 +1172,7 @@ void Framework::ShowSearchResult(search::Result const & res)
m_bmManager.UserMarksSetDrawable(type, false);
m_lastSearch.Clear();
m_fixedSearchResults = 0;
search::AddressInfo info;
info.MakeFrom(res);
@ -1238,7 +1240,9 @@ size_t Framework::ShowAllSearchResults()
return count;
}
m_fixedSearchResults = 0;
FillSearchResultsMarks(results);
m_fixedSearchResults = count;
// Setup viewport according to results.
m2::AnyRectD viewport = m_navigator.Screen().GlobalRect();
@ -1274,8 +1278,8 @@ void Framework::FillSearchResultsMarks(search::Results const & results)
{
UserMarkContainer::Type const type = UserMarkContainer::SEARCH_MARK;
m_bmManager.UserMarksSetVisible(type, true);
m_bmManager.UserMarksClear(type);
m_bmManager.UserMarksSetDrawable(type, true);
m_bmManager.UserMarksClear(type, m_fixedSearchResults);
size_t const count = results.GetCount();
for (size_t i = 0; i < count; ++i)
@ -1288,8 +1292,8 @@ void Framework::FillSearchResultsMarks(search::Results const & results)
AddressInfo info;
info.MakeFrom(r);
SearchMarkPoint * mark = static_cast<SearchMarkPoint *>(
m_bmManager.UserMarksAddMark(type, r.GetFeatureCenter()));
m2::PointD const pt = r.GetFeatureCenter();
SearchMarkPoint * mark = static_cast<SearchMarkPoint *>(m_bmManager.UserMarksAddMark(type, pt));
mark->SetInfo(info);
}
}
@ -1300,6 +1304,8 @@ void Framework::CancelInteractiveSearch()
m_lastSearch.Clear();
m_bmManager.UserMarksClear(UserMarkContainer::SEARCH_MARK);
m_fixedSearchResults = 0;
Invalidate();
}

View file

@ -116,7 +116,6 @@ protected:
scoped_ptr<anim::Controller> m_animController;
InformationDisplay m_informationDisplay;
/// How many pixels around touch point are used to get bookmark or POI
static const int TOUCH_PIXEL_RADIUS = 20;
@ -247,6 +246,7 @@ public:
private:
search::Engine * GetSearchEngine() const;
search::SearchParams m_lastSearch;
uint8_t m_fixedSearchResults;
void OnSearchResultsCallback(search::Results const & results);
void OnSearchResultsCallbackUI(search::Results const & results);

View file

@ -152,9 +152,13 @@ void UserMarkContainer::Draw(PaintOverlayEvent const & e, UserMarkDLCache * cach
}
}
void UserMarkContainer::Clear()
void UserMarkContainer::Clear(size_t skipCount/* = 0*/)
{
DeleteRange(m_userMarks, DeleteFunctor());
for (size_t i = skipCount; i < m_userMarks.size(); ++i)
delete m_userMarks[i];
if (skipCount < m_userMarks.size())
m_userMarks.erase(m_userMarks.begin() + skipCount, m_userMarks.end());
}
namespace

View file

@ -70,7 +70,7 @@ public:
void ActivateMark(UserMark const * mark);
void DiactivateMark();
void Clear();
void Clear(size_t skipCount = 0);
double GetDepth() const { return m_layerDepth; }