Welcome to mirror list, hosted at ThFree Co, Russian Federation.

user_mark.hpp « map - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d9948a070373e3fda54b0c6f9ee6116b4d5d4e00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#pragma once

#include "search/result.hpp"

#include "drape_frontend/user_marks_provider.hpp"

#include "indexer/feature.hpp"

#include "geometry/point2d.hpp"

#include "base/macros.hpp"

#include "std/string.hpp"
#include "std/unique_ptr.hpp"
#include "std/utility.hpp"


class UserMarkContainer;
class UserMarkCopy;

class UserMark : public df::UserPointMark
{
  DISALLOW_COPY_AND_MOVE(UserMark);
public:
  enum class Type
  {
    API,
    SEARCH,
    POI,
    BOOKMARK,
    MY_POSITION,
    DEBUG_MARK
  };

  UserMark(m2::PointD const & ptOrg, UserMarkContainer * container);

  virtual ~UserMark() {}

  ///////////////////////////////////////////////////////
  /// df::UserPointMark
  m2::PointD const & GetPivot() const override;
  m2::PointD const & GetPixelOffset() const override;
  dp::Anchor GetAnchor() const override;
  float GetDepth() const override;
  bool RunCreationAnim() const override;
  ///////////////////////////////////////////////////////

  UserMarkContainer const * GetContainer() const;
  void GetLatLon(double & lat, double & lon) const;
  virtual Type GetMarkType() const = 0;
  virtual unique_ptr<UserMarkCopy> Copy() const = 0;
  // Need it to calculate POI rank from all taps to features via statistics.
  using TEventContainer = map<string, string>;
  virtual void FillLogEvent(TEventContainer & details) const;

protected:
  m2::PointD m_ptOrg;
  mutable UserMarkContainer * m_container;
};

class UserMarkCopy
{
public:
  UserMarkCopy(UserMark const * srcMark, bool needDestroy = true);
  ~UserMarkCopy();

  UserMark const * GetUserMark() const;

private:
  UserMark const * m_srcMark;
  bool m_needDestroy;
};

class SearchMarkPoint : public UserMark
{
public:
  SearchMarkPoint(search::AddressInfo const & info,
           m2::PointD const & ptOrg,
           UserMarkContainer * container);

  SearchMarkPoint(m2::PointD const & ptOrg, UserMarkContainer * container);

  string GetSymbolName() const override;
  UserMark::Type GetMarkType() const override;

  search::AddressInfo const & GetInfo() const;
  void SetInfo(search::AddressInfo const & info);

  feature::Metadata const & GetMetadata() const;
  void SetMetadata(feature::Metadata && metadata);

  unique_ptr<UserMarkCopy> Copy() const override;

  virtual void FillLogEvent(TEventContainer & details) const override;

protected:
  search::AddressInfo m_info;
  feature::Metadata m_metadata;
};

class PoiMarkPoint : public SearchMarkPoint
{
public:
  PoiMarkPoint(UserMarkContainer * container);
  UserMark::Type GetMarkType() const override;
  unique_ptr<UserMarkCopy> Copy() const override;

  void SetPtOrg(m2::PointD const & ptOrg);
  void SetName(string const & name);
};

class MyPositionMarkPoint : public PoiMarkPoint
{
public:
  MyPositionMarkPoint(UserMarkContainer * container);

  UserMark::Type GetMarkType() const override;

  void SetUserPosition(m2::PointD const & pt)
  {
    SetPtOrg(pt);
    m_hasPosition = true;
  }
  bool HasPosition() const { return m_hasPosition; }

private:
  bool m_hasPosition = false;
};

class DebugMarkPoint : public UserMark
{
public:
  DebugMarkPoint(m2::PointD const & ptOrg, UserMarkContainer * container);

  string GetSymbolName() const override;

  Type GetMarkType() const override { return UserMark::Type::DEBUG_MARK; }
  unique_ptr<UserMarkCopy> Copy() const override;
};