From 5245e38081ef65c544b0361e8023763f4e249aaa Mon Sep 17 00:00:00 2001 From: vng Date: Tue, 11 Mar 2014 18:00:24 +0300 Subject: [PATCH] Show pin in API, URL, Bookmarks. --- map/balloon_manager.cpp | 110 +++++++++++++++++++++++----------------- map/balloon_manager.hpp | 5 ++ map/framework.cpp | 6 ++- map/framework.hpp | 2 +- map/mwm_url.hpp | 2 +- 5 files changed, 75 insertions(+), 50 deletions(-) diff --git a/map/balloon_manager.cpp b/map/balloon_manager.cpp index 96e4a12d1f..b34e05d7e4 100644 --- a/map/balloon_manager.cpp +++ b/map/balloon_manager.cpp @@ -206,72 +206,88 @@ void PinClickManager::Hide() void PinClickManager::OnClick(m2::PointD const & pxPoint, bool isLongTouch) { + // By default we assume that we have pin + bool dispatched = false; + // API url_scheme::ResultPoint apiPoint; if (m_f.GetMapApiPoint(pxPoint, apiPoint)) { - // @todo draw pin here OnActivateAPI(apiPoint); - return; + m_pinGlobalLocation = apiPoint.GetOrg(); + dispatched = true; } - - // Everything else - search::AddressInfo addrInfo; - m2::PointD pxPivot; - BookmarkAndCategory bmAndCat; - - // By default we assume that we have pin - m_hasPin = true; - bool dispatched = false; - - switch (m_f.GetBookmarkOrPoi(pxPoint, pxPivot, addrInfo, bmAndCat)) + else { - case Framework::BOOKMARK: - { - OnActivateBookmark(bmAndCat); - m_pinGlobalLocation = m_f.GetBmCategory(bmAndCat.first)->GetBookmark(bmAndCat.second)->GetOrg(); - dispatched = true; - break; - } + // Everything else + search::AddressInfo addrInfo; + m2::PointD pxPivot; + BookmarkAndCategory bmAndCat; - case Framework::ADDTIONAL_LAYER: + switch (m_f.GetBookmarkOrPoi(pxPoint, pxPivot, addrInfo, bmAndCat)) { - OnAdditonalLayer(bmAndCat.second); - m_pinGlobalLocation = m_f.GetBookmarkManager().AdditionalPoiLayerGetBookmark(bmAndCat.second)->GetOrg(); - dispatched = true; - break; - } - - case Framework::POI: - { - m2::PointD globalPoint = m_f.PtoG(pxPivot); - OnActivatePOI(globalPoint, addrInfo); - m_pinGlobalLocation = globalPoint; - dispatched = true; - break; - } - - default: - { - if (isLongTouch) + case Framework::BOOKMARK: { - m2::PointD const glbPoint = m_f.PtoG(pxPoint); - m_f.GetAddressInfoForGlobalPoint(glbPoint, addrInfo); - OnActivatePOI(glbPoint, addrInfo); - m_pinGlobalLocation = glbPoint; + OnActivateBookmark(bmAndCat); + m_pinGlobalLocation = m_f.GetBmCategory(bmAndCat.first)->GetBookmark(bmAndCat.second)->GetOrg(); dispatched = true; + break; + } + + case Framework::ADDTIONAL_LAYER: + { + OnAdditonalLayer(bmAndCat.second); + m_pinGlobalLocation = m_f.GetBookmarkManager().AdditionalPoiLayerGetBookmark(bmAndCat.second)->GetOrg(); + dispatched = true; + break; + } + + case Framework::POI: + { + m2::PointD globalPoint = m_f.PtoG(pxPivot); + OnActivatePOI(globalPoint, addrInfo); + m_pinGlobalLocation = globalPoint; + dispatched = true; + break; + } + + default: + { + if (isLongTouch) + { + m2::PointD const glbPoint = m_f.PtoG(pxPoint); + m_f.GetAddressInfoForGlobalPoint(glbPoint, addrInfo); + OnActivatePOI(glbPoint, addrInfo); + m_pinGlobalLocation = glbPoint; + dispatched = true; + } + break; } } } - if (!dispatched) + SetBalloonVisible(dispatched); +} + +void PinClickManager::OnBookmarkClick(BookmarkAndCategory const & bnc) +{ + OnActivateBookmark(bnc); + m_pinGlobalLocation = m_f.GetBmCategory(bnc.first)->GetBookmark(bnc.second)->GetOrg(); + + SetBalloonVisible(true); +} + +void PinClickManager::SetBalloonVisible(bool isVisible) +{ + m_hasPin = isVisible; + + if (isVisible) + StartAnimation(); + else { OnDismiss(); - m_hasPin = false; ResetAnimation(); } - else - StartAnimation(); m_f.Invalidate(); } diff --git a/map/balloon_manager.hpp b/map/balloon_manager.hpp index e48102cae9..fab644addd 100644 --- a/map/balloon_manager.hpp +++ b/map/balloon_manager.hpp @@ -43,6 +43,8 @@ class PinClickManager void OnAdditonalLayer(size_t index); void OnDismiss(); + void SetBalloonVisible(bool isVisible); + public: PinClickManager(Framework & f); ~PinClickManager(); @@ -51,7 +53,10 @@ public: void RenderPolicyCreated(graphics::EDensity density); void LocationChanged(location::GpsInfo const & info); + void OnClick(m2::PointD const & pxPoint, bool isLongTouch); + void OnBookmarkClick(BookmarkAndCategory const & bnc); + void Hide(); void DrawPin(shared_ptr const & e); diff --git a/map/framework.cpp b/map/framework.cpp index a36c3bc509..46304e987b 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -453,7 +453,7 @@ BookmarkAndCategory Framework::GetBookmark(m2::PointD const & pxPoint, double vi return make_pair(retBookmarkCategory, retBookmark); } -void Framework::ShowBookmark(BookmarkAndCategory bnc) +void Framework::ShowBookmark(BookmarkAndCategory const & bnc) { StopLocationFollow(); @@ -465,6 +465,8 @@ void Framework::ShowBookmark(BookmarkAndCategory bnc) scale = scales::GetUpperComfortScale(); ShowRectExVisibleScale(m_scales.GetRectForDrawScale(scale, bmk->GetOrg())); + + m_balloonManager.OnBookmarkClick(bnc); } void Framework::ShowTrack(Track const & track) @@ -1512,6 +1514,8 @@ bool Framework::ShowMapForURL(string const & url) StopLocationFollow(); SetViewPortASync(rect); + if (result != NO_BALLOON) + m_balloonManager.OnClick(GtoP(point.GetOrg()), true); return true; } else diff --git a/map/framework.hpp b/map/framework.hpp index 43cc2eb9ba..b7c2367f89 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -205,7 +205,7 @@ public: BookmarkAndCategory GetBookmark(m2::PointD const & pxPoint, double visualScale) const; //@} - void ShowBookmark(BookmarkAndCategory bnc); + void ShowBookmark(BookmarkAndCategory const & bnc); void ShowTrack(Track const & track); void ClearBookmarks(); diff --git a/map/mwm_url.hpp b/map/mwm_url.hpp index e5a2eefcfd..2a2d0b511f 100644 --- a/map/mwm_url.hpp +++ b/map/mwm_url.hpp @@ -39,7 +39,7 @@ public: /// Need to fix default name using "dropped_pin" in Framework. string & GetName() { return m_point.m_name; } - m2::PointD GetOrg() const { return m_org; } + m2::PointD const & GetOrg() const { return m_org; } string const & GetName() const { return m_point.m_name; } ApiPoint const & GetPoint() const { return m_point; } };