forked from UAVGCSTeam/GCS
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmapcontroller.cpp
More file actions
120 lines (102 loc) · 3.34 KB
/
mapcontroller.cpp
File metadata and controls
120 lines (102 loc) · 3.34 KB
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
#include "mapcontroller.h"
#include "droneclass.h"
/*
* Used to emit signals to our QML functions.
* Keeps logic in cpp.
* https://doc.qt.io/qt-6/signalsandslots.html
*/
// Define constructor for MapController class
MapController::MapController(QObject *parent)
// Defines all variables within our map
: QObject(parent), m_currentMapType(0), m_supportedMapTypesCount(3)
{
// Populate with dummy drone objects for testing icon markers using setLattitude and setLongitude
DroneClass* drone1 = new DroneClass(this);
drone1->setName("Drone 1");
drone1->setLatitude(34.059174611493965);
drone1->setLongitude(-117.82051240067321);
addDrone(drone1);
DroneClass* drone2 = new DroneClass(this);
drone2->setName("Drone 2");
drone2->setLatitude(34.0600);
drone2->setLongitude(-117.8210);
addDrone(drone2);
DroneClass* drone3 = new DroneClass(this);
drone3->setName("Drone 3");
drone3->setLatitude(34.0615);
drone3->setLongitude(-117.8225);
addDrone(drone3);
DroneClass* drone4 = new DroneClass(this);
drone4->setName("Drone 4");
drone4->setLatitude(37.7749);
drone4->setLongitude(-122.4194);
addDrone(drone4);
DroneClass* drone5 = new DroneClass(this);
drone5->setName("Drone 5");
drone5->setLatitude(34.0119);
drone5->setLongitude(-118.4916);
addDrone(drone5);
}
void MapController::addDrone(DroneClass* drone)
{
if (drone) {
m_drones.append(drone);
}
}
QVariantList MapController::getAllDrones() const
{
QVariantList droneList;
for (const DroneClass* drone : m_drones) {
QVariantMap droneData;
droneData["name"] = drone->getName();
droneData["latitude"] = drone->getLatitude();
droneData["longitude"] = drone->getLongitude();
droneList.append(droneData);
}
return droneList;
}
void MapController::createDrone(const QString &input_name){
DroneClass* temp = new DroneClass(this);
temp->setName(input_name);
temp->setLatitude(34.06152);
temp->setLongitude(-117.82254);
addDrone(temp);
}
void MapController::setCenterPosition(const QVariant &lat, const QVariant &lon)
{
QPair<double, double> newCenter(lat.toDouble(), lon.toDouble());
// updateCenter below
updateCenter(newCenter);
}
void MapController::setLocationMarking(const QVariant &lat, const QVariant &lon)
{
QPair<double, double> position(lat.toDouble(), lon.toDouble());
// addMarker below
addMarker(position);
}
// emit sends the data that our cpp logic did to our QML files
void MapController::changeMapType(int index)
{
if (index < m_supportedMapTypesCount) {
m_currentMapType = index;
emit mapTypeChanged(index);
qDebug() << "Changed to map type:" << index;
} else {
qDebug() << "Unsupported map type index:" << index;
}
}
void MapController::updateCenter(const QPair<double, double> ¢er)
{
// used to not emit the signal if the old center matches the new center
emit centerPositionChanged(QVariant(center.first), QVariant(center.second));
}
void MapController::addMarker(const QPair<double, double> &position)
{
// Stores markers on cpp side
m_markers.append(position);
emit locationMarked(QVariant(position.first), QVariant(position.second));
}
void MapController::setZoomLevel(double level)
{
emit zoomLevelChanged(level);
}