Skip to content
Snippets Groups Projects
MapWidget.h 5.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • pixhawk's avatar
    pixhawk committed
    /*=====================================================================
    
    
    QGroundControl Open Source Ground Control Station
    
    pixhawk's avatar
    pixhawk committed
    
    
    (c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
    
    pixhawk's avatar
    pixhawk committed
    
    
    This file is part of the QGROUNDCONTROL project
    
    pixhawk's avatar
    pixhawk committed
    
    
        QGROUNDCONTROL is free software: you can redistribute it and/or modify
    
    pixhawk's avatar
    pixhawk committed
        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,
    
    pixhawk's avatar
    pixhawk committed
        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/>.
    
    pixhawk's avatar
    pixhawk committed
    
    ======================================================================*/
    
    /**
     * @file
    
    pixhawk's avatar
    pixhawk committed
     *   @brief Definition of MapWidget
    
    pixhawk's avatar
    pixhawk committed
     *
     *   @author Lorenz Meier <mavteam@student.ethz.ch>
    
    lm's avatar
    lm committed
     *   @author Mariano Lizarraga
    
    pixhawk's avatar
    pixhawk committed
     *
     */
    
    #ifndef MAPWIDGET_H
    #define MAPWIDGET_H
    
    #include <QtGui/QWidget>
    
    pixhawk's avatar
    pixhawk committed
    #include <QMap>
    
    pixhawk's avatar
    pixhawk committed
    #include "qmapcontrol.h"
    
    lm's avatar
    lm committed
    #include "UASInterface.h"
    
    #include "QPointF"
    
    #include <qmath.h>
    
    
    
    pixhawk's avatar
    pixhawk committed
    
    
    lm's avatar
    lm committed
    class QMenu;
    
    pixhawk's avatar
    pixhawk committed
    namespace Ui {
        class MapWidget;
    }
    
    
        using namespace qmapcontrol;
    
    
    lm's avatar
    lm committed
    /**
     * @brief 2D Moving map
     *
     * This map displays street maps, aerial images and the MAV position,
     * waypoints and trails on top.
     */
    
    pixhawk's avatar
    pixhawk committed
    class MapWidget : public QWidget {
        Q_OBJECT
    public:
        MapWidget(QWidget *parent = 0);
        ~MapWidget();
    
    public slots:
    
    lm's avatar
    lm committed
        void addUAS(UASInterface* uas);
    
        void activeUASSet(UASInterface* uas);
    
    lm's avatar
    lm committed
        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);
    
    pixhawk's avatar
    pixhawk committed
    
    
        /** @brief Clear the waypoints overlay layer */
    
        /** @brief Clear the UAV tracks on the map */
    
        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);
    
    
        void drawBorderCamAtMap(bool status);
    
        /** @brief Bring up dialog to go to a specific location */
        void goTo();
    
    pixhawk's avatar
    pixhawk committed
    protected:
        void changeEvent(QEvent* e);
        void wheelEvent(QWheelEvent *event);
        void keyPressEvent(QKeyEvent *event);
        void resizeEvent(QResizeEvent* event);
    
    pixhawk's avatar
    pixhawk committed
        /** @brief Start widget updating */
        void showEvent(QShowEvent* event);
        /** @brief Stop widget updating */
        void hideEvent(QHideEvent* event);
    
    pixhawk's avatar
    pixhawk committed
    
    
    lm's avatar
    lm committed
        QAction* osmAction;
        QAction* yahooActionMap;
        QAction* yahooActionSatellite;
        QAction* yahooActionOverlay;
        QAction* googleActionMap;
        QAction* googleSatAction;
    
    
    pixhawk's avatar
    pixhawk committed
        QPushButton* followgps;
    
        QPushButton* clearTracking;
    
    pixhawk's avatar
    pixhawk committed
        QLabel* gpsposition;
    
    lm's avatar
    lm committed
        QMenu* mapMenu;
        QPushButton* mapButton;
    
    
        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
    
    
    pixhawk's avatar
    pixhawk committed
        int zoomLevel;
        int detailZoom; ///< Steps zoomed in further than qMapControl allows
        static const int scrollStep = 40; ///< Scroll n pixels per keypress
    
    lm's avatar
    lm committed
        static const int maxZoom = 50;    ///< Maximum zoom level
    
    pixhawk's avatar
    pixhawk committed
    
    
        QMap<int, qmapcontrol::Point*> uasIcons;
        QMap<int, qmapcontrol::LineString*> uasTrails;
    
        QMap<int, QPen*> mavPens;
        //QMap<int, QList<qmapcontrol::Point*> > mavWps;
        //QMap<int, qmapcontrol::LineString*> waypointPaths;
    
    lm's avatar
    lm committed
        UASInterface* mav;
    
    pixhawk's avatar
    pixhawk committed
        quint64 lastUpdate;
    
      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);
    
    
        void createWaypointGraphAtMap(const QPointF coordinate);
    
        void mapproviderSelected(QAction* action);
    
    
        //void movePoint(QPointF newCoord);
    
        //void captureMapCoordinateClick(const QPointF coordinate); //ROCA
        //void createGlobalWP(bool value, QPointF centerCoordinate);
        void waypointCreated(Waypoint* wp);
    
        void sendGeometryEndDrag(const QPointF coordinate, const int index);
    
    pixhawk's avatar
    pixhawk committed
    private:
        Ui::MapWidget *m_ui;
    
        qmapcontrol::LineString* waypointPath;
    
        QHash <QString, qmapcontrol::Point*> wpIndex;
    
        int wpExists(const QPointF coordinate);
    
    
    
        qmapcontrol::LineString* camLine;
        QList<qmapcontrol::Point*> camPoints;
        QPointF lastCamBorderPos;
        bool drawCamBorder;
        int radioCamera;
    
    
    pixhawk's avatar
    pixhawk committed
    };
    
    #endif // MAPWIDGET_H