Newer
Older
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
*
*/
#ifndef MAPWIDGET_H
#define MAPWIDGET_H
#include <QtGui/QWidget>
#include "QPointF"
#include <qmath.h>
pixhawk
committed
class Waypoint;
using namespace qmapcontrol;
/**
* @brief 2D Moving map
*
* This map displays street maps, aerial images and the MAV position,
* waypoints and trails on top.
*/
class MapWidget : public QWidget {
Q_OBJECT
public:
MapWidget(QWidget *parent = 0);
~MapWidget();
public slots:
lm
committed
void activeUASSet(UASInterface* uas);
void updateGlobalPosition(UASInterface* uas, double lat, double lon, double alt, quint64 usec);
void updatePosition(float time, double lat, double lon);
void updateCameraPosition(double distance, double bearing, QString dir);
QPointF getPointxBearing_Range(double lat1, double lon1, double bearing, double distance);
/** @brief Clear the waypoints overlay layer */
pixhawk
committed
void clearWaypoints(int uas=0);
/** @brief Clear the UAV tracks on the map */
pixhawk
committed
void clearPath(int uas=0);
/** @brief Update waypoint list */
void updateWaypointList(int uas);
/** @brief Clear all waypoints and re-add them from updated list */
void redoWaypoints(int uas=0);
/** @brief Update waypoint */
void updateWaypoint(int uas, Waypoint* wp);
lm
committed
/** @brief Bring up dialog to go to a specific location */
void goTo();
protected:
void changeEvent(QEvent* e);
void wheelEvent(QWheelEvent *event);
void keyPressEvent(QKeyEvent *event);
void resizeEvent(QResizeEvent* event);
/** @brief Start widget updating */
void showEvent(QShowEvent* event);
/** @brief Stop widget updating */
void hideEvent(QHideEvent* event);
QAction* osmAction;
QAction* yahooActionMap;
QAction* yahooActionSatellite;
QAction* yahooActionOverlay;
QAction* googleActionMap;
QAction* googleSatAction;
Mariano Lizarraga
committed
Mariano Lizarraga
committed
QPushButton* createPath;
QPushButton* clearTracking;
QMenu* mapMenu;
QPushButton* mapButton;
pixhawk
committed
qmapcontrol::MapControl* mc; ///< QMapControl widget
qmapcontrol::MapAdapter* mapadapter; ///< Adapter to load the map data
qmapcontrol::Layer* l; ///< Current map layer (background)
qmapcontrol::Layer* overlay; ///< Street overlay (foreground)
qmapcontrol::Layer* tracks; ///< Layer for UAV tracks
qmapcontrol::GeometryLayer* geomLayer; ///< Layer for waypoints
//only for experiment
qmapcontrol::GeometryLayer* camLayer; ///< Layer for camera indicator
int zoomLevel;
int detailZoom; ///< Steps zoomed in further than qMapControl allows
static const int scrollStep = 40; ///< Scroll n pixels per keypress
static const int maxZoom = 50; ///< Maximum zoom level
Mariano Lizarraga
committed
Mariano Lizarraga
committed
//Layer* gSatLayer;
lm
committed
QMap<int, qmapcontrol::Point*> uasIcons;
QMap<int, qmapcontrol::LineString*> uasTrails;
pixhawk
committed
QMap<int, QPen*> mavPens;
//QMap<int, QList<qmapcontrol::Point*> > mavWps;
//QMap<int, qmapcontrol::LineString*> waypointPaths;
Mariano Lizarraga
committed
protected slots:
void captureMapClick (const QMouseEvent* event, const QPointF coordinate);
void captureGeometryClick(Geometry*, QPoint);
void captureGeometryDrag(Geometry* geom, QPointF coordinate);
void captureGeometryEndDrag(Geometry* geom, QPointF coordinate);
void createPathButtonClicked(bool checked);
/** @brief Create the graphic representation of the waypoint */
void createWaypointGraphAtMap(int id, const QPointF coordinate);
void mapproviderSelected(QAction* action);
//void movePoint(QPointF newCoord);
pixhawk
committed
//void captureMapCoordinateClick(const QPointF coordinate); //ROCA
//void createGlobalWP(bool value, QPointF centerCoordinate);
void waypointCreated(Waypoint* wp);
tecnosapiens
committed
void sendGeometryEndDrag(const QPointF coordinate, const int index);
lm
committed
QList<qmapcontrol::Point*> wps;
qmapcontrol::LineString* waypointPath;
//QHash <QString, qmapcontrol::Point*> wpIndex;
Mariano Lizarraga
committed
QPen* pointPen;
int wpExists(const QPointF coordinate);
tecnosapiens
committed
bool waypointIsDrag;
qmapcontrol::LineString* camLine;
QList<qmapcontrol::Point*> camPoints;
QPointF lastCamBorderPos;
bool drawCamBorder;
int radioCamera;