forked from organicmaps/organicmaps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdraw_widget.hpp
131 lines (94 loc) · 3.25 KB
/
draw_widget.hpp
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
#pragma once
#include "qt/qt_common/map_widget.hpp"
#include "qt/routing_turns_visualizer.hpp"
#include "qt/ruler.hpp"
#include "qt/selection.hpp"
#include "map/routing_manager.hpp"
#include "search/result.hpp"
#include "indexer/map_style.hpp"
#include <QtWidgets/QRubberBand>
#include <memory>
#include <optional>
#include <string>
class Framework;
namespace qt
{
namespace common
{
class ScaleSlider;
}
class Screenshoter;
struct ScreenshotParams;
class DrawWidget : public qt::common::MapWidget
{
using TBase = MapWidget;
Q_OBJECT
public Q_SLOTS:
void ShowAll();
void ChoosePositionModeEnable();
void ChoosePositionModeDisable();
public:
DrawWidget(Framework & framework, std::unique_ptr<ScreenshotParams> && screenshotParams,
QWidget * parent);
~DrawWidget() override;
std::string GetDistance(search::Result const & res) const;
void CreateFeature();
void OnLocationUpdate(location::GpsInfo const & info);
void UpdateAfterSettingsChanged();
void PrepareShutdown();
Framework & GetFramework() { return m_framework; }
void SetMapStyle(MapStyle mapStyle);
void SetRuler(bool enabled);
RouteMarkType GetRoutePointAddMode() const { return m_routePointAddMode; }
void SetRoutePointAddMode(RouteMarkType mode) { m_routePointAddMode = mode; }
void FollowRoute();
void ClearRoute();
void OnRouteRecommendation(RoutingManager::Recommendation recommendation);
void RefreshDrawingRules();
void SetMapStyleToDefault();
void SetMapStyleToVehicle();
void SetMapStyleToOutdoors();
protected:
/// @name Overriden from MapWidget.
//@{
void initializeGL() override;
// Touch events
bool event(QEvent * event) override;
// Non-touch events
void mousePressEvent(QMouseEvent * e) override;
void mouseMoveEvent(QMouseEvent * e) override;
void mouseReleaseEvent(QMouseEvent * e) override;
//@}
void keyPressEvent(QKeyEvent * e) override;
void keyReleaseEvent(QKeyEvent * e) override;
private:
void SubmitFakeLocationPoint(m2::PointD const & pt);
void SubmitRulerPoint(m2::PointD const & pt);
void SubmitRoutingPoint(m2::PointD const & pt, bool pointIsMercator);
void SubmitBookmark(m2::PointD const & pt);
void ShowPlacePage();
void VisualizeMwmsBordersInRect(m2::RectD const & rect, bool withVertices,
bool fromPackedPolygon, bool boundingBox);
m2::PointD P2G(m2::PointD const & pt) const;
m2::PointD GetCoordsFromSettingsIfExists(bool start, m2::PointD const & pt, bool pointIsMercator) const;
QRubberBand * m_rubberBand;
QPoint m_rubberBandOrigin;
bool m_emulatingLocation;
public:
/// Pass empty \a mode to drop selection.
void SetSelectionMode(std::optional<SelectionMode> mode) { m_selectionMode = mode; }
void DropSelectionIfMWMBordersMode()
{
static_assert(SelectionMode::MWMBorders < SelectionMode::Cancelled, "");
if (m_selectionMode && *m_selectionMode > SelectionMode::MWMBorders && *m_selectionMode < SelectionMode::Cancelled)
m_selectionMode = {};
}
private:
void ProcessSelectionMode();
std::optional<SelectionMode> m_selectionMode;
RouteMarkType m_routePointAddMode = RouteMarkType::Finish;
std::unique_ptr<Screenshoter> m_screenshoter;
Ruler m_ruler;
RoutingTurnsVisualizer m_turnsVisualizer;
};
} // namespace qt