blob: bf86425e3420852d54d4caac48265e7aa48f1902 (
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
|
#pragma once
#include "map/user_mark_container.hpp"
#include <string>
enum class RouteMarkType : uint8_t
{
Start = 0,
Intermediate = 1,
Finish = 2
};
struct RouteMarkData
{
std::string m_title;
std::string m_subTitle;
RouteMarkType m_pointType = RouteMarkType::Start;
int8_t m_intermediateIndex = 0;
bool m_isVisible = true;
bool m_isMyPosition = false;
bool m_isPassed = false;
m2::PointD m_position;
};
class RouteMarkPoint : public UserMark
{
public:
RouteMarkPoint(m2::PointD const & ptOrg, UserMarkContainer * container);
virtual ~RouteMarkPoint() {}
bool IsVisible() const override { return m_markData.m_isVisible; }
void SetIsVisible(bool isVisible) { m_markData.m_isVisible = isVisible; }
dp::Anchor GetAnchor() const override;
dp::GLState::DepthLayer GetDepthLayer() const override;
std::string GetSymbolName() const override;
UserMark::Type GetMarkType() const override { return Type::ROUTING; }
RouteMarkType GetRoutePointType() const { return m_markData.m_pointType; }
void SetRoutePointType(RouteMarkType type);
void SetIntermediateIndex(int8_t index);
int8_t GetIntermediateIndex() const { return m_markData.m_intermediateIndex; }
void SetIsMyPosition(bool isMyPosition);
bool IsMyPosition() const { return m_markData.m_isMyPosition; }
void SetPassed(bool isPassed);
bool IsPassed() const { return m_markData.m_isPassed; }
RouteMarkData const & GetMarkData() const { return m_markData; }
void SetMarkData(RouteMarkData && data);
drape_ptr<dp::TitleDecl> GetTitleDecl() const override;
bool SymbolHasPriority() const override { return false; }
bool TitleHasPriority() const override { return true; }
private:
RouteMarkData m_markData;
dp::TitleDecl m_titleDecl;
};
class RouteUserMarkContainer : public UserMarkContainer
{
public:
RouteUserMarkContainer(double layerDepth, Framework & fm);
protected:
UserMark * AllocateUserMark(m2::PointD const & ptOrg) override;
};
class RoutePointsLayout
{
public:
static int8_t const kMaxIntermediatePointsCount;
RoutePointsLayout(UserMarksController & routeMarks);
RouteMarkPoint * AddRoutePoint(RouteMarkData && data);
RouteMarkPoint * GetRoutePoint(RouteMarkType type, int8_t intermediateIndex = 0);
std::vector<RouteMarkPoint *> GetRoutePoints();
size_t GetRoutePointsCount() const;
bool RemoveRoutePoint(RouteMarkType type, int8_t intermediateIndex = 0);
void RemoveIntermediateRoutePoints();
bool MoveRoutePoint(RouteMarkType currentType, int8_t currentIntermediateIndex,
RouteMarkType destType, int8_t destIntermediateIndex);
void PassRoutePoint(RouteMarkType type, int8_t intermediateIndex = 0);
private:
using TRoutePointCallback = function<void (RouteMarkPoint * mark)>;
void ForEachIntermediatePoint(TRoutePointCallback const & fn);
UserMarksController & m_routeMarks;
};
|