forked from organicmaps/organicmaps
Fix first search results when “Search on map”.
This commit is contained in:
parent
43000502e3
commit
2ff0db6833
6 changed files with 21 additions and 11 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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; }
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue