#pragma once #include "bookmark.hpp" #include "../graphics/defines.hpp" #include "../geometry/point2d.hpp" #include "../std/shared_ptr.hpp" #include "../std/function.hpp" class Framework; class PaintEvent; namespace anim { class Task; } namespace graphics { class DisplayList; } namespace location { class GpsInfo; } namespace gui { class Element; } namespace search { struct AddressInfo; } namespace url_scheme { struct ApiPoint; class ResultPoint; } class PinClickManager { shared_ptr m_animTask; void StartAnimation(); void ResetAnimation(); double GetCurrentPinScale(); graphics::DisplayList * m_searchPinDL; graphics::DisplayList * GetSearchPinDL(); Framework & m_f; bool m_updateForLocation; void OnPositionClicked(m2::PointD const & pt); void OnActivateMyPosition(); void OnActivatePOI(const m2::PointD & globalPoint, search::AddressInfo const & info); void OnActivateAPI(url_scheme::ResultPoint const & apiPoint); void OnActivateBookmark(BookmarkAndCategory const & bmAndCat); void OnAdditonalLayer(size_t index); void OnDismiss(); void SetBalloonVisible(bool isVisible); public: PinClickManager(Framework & f); ~PinClickManager(); void Shutdown(); 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); void RemovePin(); void Dismiss(); private: bool m_hasPin; m2::PointD m_pinGlobalLocation; private: /// @name Platform dependent listeners to show special activities. //@{ function m_poiListener; function m_bookmarkListener; function m_apiListener; function m_positionListener; function m_additionalLayerListener; function m_dismissListener; public: template void ConnectPoiListener(T const & t) { m_poiListener = t; } template void ConnectBookmarkListener(T const & t) { m_bookmarkListener = t; } template void ConnectApiListener(T const & t) { m_apiListener = t; } template void ConnectPositionListener(T const & t) { m_positionListener = t; } template void ConnectAdditionalListener(T const & t) { m_additionalLayerListener = t; } template void ConnectDismissListener(T const & t) { m_dismissListener = t; } void ClearListeners(); //@} };