diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 941dc7bf95..d6b5350361 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -28,7 +28,7 @@ BookmarkManager::BookmarkManager(Framework & f) m_userMarkLayers.reserve(2); m_userMarkLayers.push_back(new SearchUserMarkContainer(graphics::activePinDepth, m_framework)); m_userMarkLayers.push_back(new ApiUserMarkContainer(graphics::activePinDepth, m_framework)); - UserMarkContainer::InitPoiSelectionMark(FindUserMarksContainer(UserMarkContainer::SEARCH_MARK)); + UserMarkContainer::InitStaticMarks(FindUserMarksContainer(UserMarkContainer::SEARCH_MARK)); } BookmarkManager::~BookmarkManager() diff --git a/map/framework.cpp b/map/framework.cpp index 1af54d4b51..8aaca1e889 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1487,9 +1487,9 @@ void Framework::SetViewPortASync(m2::RectD const & r) void Framework::UpdateSelectedMyPosition(m2::PointD const & pt) { - PoiMarkPoint * poiMark = UserMarkContainer::UserMarkForPoi(); - poiMark->SetPtOrg(pt); - ActivateUserMark(poiMark, false); + MyPositionMarkPoint * myPositionMark = UserMarkContainer::UserMarkForMyPostion(); + myPositionMark->SetPtOrg(pt); + ActivateUserMark(myPositionMark, false); } void Framework::DisconnectMyPositionUpdate() @@ -1603,7 +1603,7 @@ shared_ptr const & Framework::GetLocationState() const void Framework::ActivateUserMark(UserMark const * mark, bool needAnim) { - if (mark != UserMarkContainer::UserMarkForPoi()) + if (mark != UserMarkContainer::UserMarkForMyPostion()) DisconnectMyPositionUpdate(); m_bmManager.ActivateMark(mark, needAnim); } @@ -1627,11 +1627,11 @@ UserMark const * Framework::GetUserMark(m2::PointD const & pxPoint, bool isLongP { search::AddressInfo info; info.m_name = m_stringsBundle.GetString("my_position"); - PoiMarkPoint * poiMark = UserMarkContainer::UserMarkForPoi(); + MyPositionMarkPoint * myPostition = UserMarkContainer::UserMarkForMyPostion(); m_locationChangedSlotID = locationState->AddPositionChangedListener(bind(&Framework::UpdateSelectedMyPosition, this, _1)); - poiMark->SetPtOrg(glPivot); - poiMark->SetInfo(info); - return poiMark; + myPostition->SetPtOrg(glPivot); + myPostition->SetInfo(info); + return myPostition; } } diff --git a/map/user_mark.hpp b/map/user_mark.hpp index 9e59cf244a..fb0b55cb51 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -26,7 +26,8 @@ public: API, SEARCH, POI, - BOOKMARK + BOOKMARK, + MY_POSITION }; UserMark(m2::PointD const & ptOrg, UserMarkContainer * container); @@ -147,6 +148,16 @@ public: void SetName(string const & name) { m_info.m_name = name; } }; +class MyPositionMarkPoint : public PoiMarkPoint +{ + typedef PoiMarkPoint base_t; +public: + MyPositionMarkPoint(UserMarkContainer * container) + : base_t(container) {} + + UserMark::Type GetMarkType() const { return MY_POSITION; } +}; + class ICustomDrawable : public UserMark { public: diff --git a/map/user_mark_container.cpp b/map/user_mark_container.cpp index 05e6f52d24..916939af89 100644 --- a/map/user_mark_container.cpp +++ b/map/user_mark_container.cpp @@ -159,12 +159,16 @@ void UserMarkContainer::Clear() namespace { static scoped_ptr s_selectionUserMark; + static scoped_ptr s_myPosition; } -void UserMarkContainer::InitPoiSelectionMark(UserMarkContainer * container) +void UserMarkContainer::InitStaticMarks(UserMarkContainer * container) { if (s_selectionUserMark == NULL) s_selectionUserMark.reset(new PoiMarkPoint(container)); + + if (s_myPosition == NULL) + s_myPosition.reset(new MyPositionMarkPoint(container)); } PoiMarkPoint * UserMarkContainer::UserMarkForPoi() @@ -173,6 +177,12 @@ PoiMarkPoint * UserMarkContainer::UserMarkForPoi() return s_selectionUserMark.get(); } +MyPositionMarkPoint * UserMarkContainer::UserMarkForMyPostion() +{ + ASSERT(s_myPosition != NULL, ()); + return s_myPosition.get(); +} + UserMark * UserMarkContainer::CreateUserMark(m2::PointD const & ptOrg) { m_userMarks.push_back(AllocateUserMark(ptOrg)); diff --git a/map/user_mark_container.hpp b/map/user_mark_container.hpp index 22c3baf867..811988fe0d 100644 --- a/map/user_mark_container.hpp +++ b/map/user_mark_container.hpp @@ -74,8 +74,9 @@ public: double GetDepth() const { return m_layerDepth; } - static void InitPoiSelectionMark(UserMarkContainer * container); + static void InitStaticMarks(UserMarkContainer * container); static PoiMarkPoint * UserMarkForPoi(); + static MyPositionMarkPoint * UserMarkForMyPostion(); Controller const & GetController() const { return m_controller; } Controller & GetController() { return m_controller; }