diff --git a/ground/gcs/src/plugins/opmap/opmap_widget.ui b/ground/gcs/src/plugins/opmap/opmap_widget.ui index 228c3cf5d..5943cecb4 100644 --- a/ground/gcs/src/plugins/opmap/opmap_widget.ui +++ b/ground/gcs/src/plugins/opmap/opmap_widget.ui @@ -6,8 +6,8 @@ 0 0 - 514 - 412 + 671 + 488 @@ -29,7 +29,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -242,7 +251,16 @@ border-radius: 2px; 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -531,7 +549,7 @@ border-radius: 2px; - :/opmap/images/uav.png:/opmap/images/button_uav.png + :/opmap/images/button_uav.png:/opmap/images/button_uav.png @@ -569,7 +587,7 @@ border-radius: 2px; - :/opmap/images/uav_heading.png:/opmap/images/button_uav_heading.png + :/opmap/images/button_uav_heading.png:/opmap/images/button_uav_heading.png @@ -775,7 +793,16 @@ border-radius: 3px; 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -876,7 +903,16 @@ border-radius: 3px; 5 - + + 1 + + + 1 + + + 1 + + 1 @@ -1020,6 +1056,152 @@ border-radius: 3px; + + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Set HomeLocation to be used by the +autopilot or just pick the first GPS fix. + + + Home Set + + + + :/opmap/images/button_home_not_set.png + :/opmap/images/button_home_set.png:/opmap/images/button_home_not_set.png + + + + 28 + 28 + + + + true + + + false + + + Qt::ToolButtonIconOnly + + + false + + + + + + + + 0 + 0 + + + + Clear UAV trail + + + Clear UAV trail + + + + :/opmap/images/button_clear_uavtrail.png:/opmap/images/button_clear_uavtrail.png + + + + 28 + 28 + + + + false + + + false + + + Qt::ToolButtonIconOnly + + + false + + + + + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Edit PathPlan + + + Edit plan + + + + :/opmap/images/button_edit_plan.png:/opmap/images/button_edit_plan.png + + + + 28 + 28 + + + + false + + + false + + + Qt::ToolButtonIconOnly + + + false + + + + + + + QFrame::Plain + + + Qt::Horizontal + + + @@ -1036,6 +1218,54 @@ border-radius: 3px; + + + + QFrame::Plain + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Save current map settings + + + Save settings + + + + :/opmap/images/button_save.png:/opmap/images/button_save.png + + + + 28 + 28 + + + + false + + + false + + + Qt::ToolButtonIconOnly + + + false + + + diff --git a/ground/gcs/src/plugins/opmap/opmapgadget.cpp b/ground/gcs/src/plugins/opmap/opmapgadget.cpp index 3667bff08..b677d1d6f 100644 --- a/ground/gcs/src/plugins/opmap/opmapgadget.cpp +++ b/ground/gcs/src/plugins/opmap/opmapgadget.cpp @@ -32,6 +32,7 @@ OPMapGadget::OPMapGadget(QString classId, OPMapGadgetWidget *widget, QWidget *pa m_widget(widget), m_config(NULL) { connect(m_widget, SIGNAL(defaultLocationAndZoomChanged(double, double, double)), this, SLOT(saveDefaultLocation(double, double, double))); + connect(m_widget, SIGNAL(defaultSafeAreaChanged(int, bool)), this, SLOT(saveDefaultSafeArea(int, bool))); connect(m_widget, SIGNAL(overlayOpacityChanged(qreal)), this, SLOT(saveOpacity(qreal))); } @@ -48,6 +49,14 @@ void OPMapGadget::saveDefaultLocation(double lng, double lat, double zoom) m_config->save(); } } +void OPMapGadget::saveDefaultSafeArea(int safe_area_radius, bool showSafeArea) +{ + if (m_config) { + m_config->setSafeAreaRadius(safe_area_radius); + m_config->setShowSafeArea(showSafeArea); + m_config->save(); + } +} void OPMapGadget::saveOpacity(qreal value) { diff --git a/ground/gcs/src/plugins/opmap/opmapgadget.h b/ground/gcs/src/plugins/opmap/opmapgadget.h index bbc4f4ae9..a2be4937b 100644 --- a/ground/gcs/src/plugins/opmap/opmapgadget.h +++ b/ground/gcs/src/plugins/opmap/opmapgadget.h @@ -56,6 +56,7 @@ private: private slots: void saveOpacity(qreal value); void saveDefaultLocation(double lng, double lat, double zoom); + void saveDefaultSafeArea(int safe_area_radius, bool showSafeArea); }; diff --git a/ground/gcs/src/plugins/opmap/opmapgadgetwidget.cpp b/ground/gcs/src/plugins/opmap/opmapgadgetwidget.cpp index 1d71e012e..e9e7a95f4 100644 --- a/ground/gcs/src/plugins/opmap/opmapgadgetwidget.cpp +++ b/ground/gcs/src/plugins/opmap/opmapgadgetwidget.cpp @@ -216,6 +216,7 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) connect(m_map, SIGNAL(OnWayPointDoubleClicked(WayPointItem *)), this, SLOT(wpDoubleClickEvent(WayPointItem *))); m_map->SetCurrentPosition(m_home_position.coord); // set the map position m_map->Home->SetCoord(m_home_position.coord); // set the HOME position + m_map->Home->RefreshPos(); m_map->Nav->SetCoord(m_home_position.coord); // set the NAV position m_map->UAV->SetUAVPos(m_home_position.coord, 0.0); // set the UAV position m_map->UAV->update(); @@ -885,6 +886,65 @@ void OPMapGadgetWidget::on_horizontalSliderZoom_sliderMoved(int position) setZoom(position); } +void OPMapGadgetWidget::on_toolButtonHomeSet_clicked() +{ + if (!m_widget || !m_map) { + return; + } + + double LLA[3]; + + bool checked = m_widget->toolButtonHomeSet->isChecked(); + + if (!m_telemetry_connected) { + m_widget->toolButtonHomeSet->setChecked(false); + checked = false; + // Default map center from default settings + LLA[0] = m_home_position.coord.Lat(); + LLA[1] = m_home_position.coord.Lng(); + LLA[2] = m_home_position.altitude; + } else { + bool set; + if (obum->getHomeLocation(set, LLA) < 0) { + return; // error + } + } + + obum->setHomeLocation(LLA, checked); +} + +void OPMapGadgetWidget::on_toolButtonClearUAVTrail_clicked() +{ + if (!m_widget || !m_map) { + return; + } + + m_map->UAV->DeleteTrail(); + if (m_map->GPS) { + m_map->GPS->DeleteTrail(); + } +} + +void OPMapGadgetWidget::on_toolButtonPlanEditor_clicked() +{ + if (!m_widget || !m_map) { + return; + } + // open dialog + table->show(); + // bring dialog to the front in case it was already open and hidden away + table->raise(); +} + +void OPMapGadgetWidget::on_toolButtonSaveSettings_clicked() +{ + if (!m_widget || !m_map) { + return; + } + + emit defaultLocationAndZoomChanged(m_map->CurrentPosition().Lng(), m_map->CurrentPosition().Lat(), m_map->ZoomTotal()); + emit defaultSafeAreaChanged(m_map->Home->SafeArea(), m_map->Home->ShowSafeArea()); +} void OPMapGadgetWidget::on_toolButtonNormalMapMode_clicked() { @@ -944,6 +1004,7 @@ void OPMapGadgetWidget::homePositionUpdated(UAVObject *hp) } else { HomePic = "home2_not_set.svg"; } + m_widget->toolButtonHomeSet->setChecked(set); SetHomePic(HomePic); setHome(internals::PointLatLng(LLA[0], LLA[1]), LLA[2]); @@ -1021,6 +1082,7 @@ void OPMapGadgetWidget::setHome(internals::PointLatLng pos_lat_lon, double altit m_map->Home->SetCoord(m_home_position.coord); m_map->Home->SetAltitude(altitude); + m_map->Home->SetToggleRefresh(true); m_map->Home->RefreshPos(); // move the magic waypoint to keep it within the safe area boundry diff --git a/ground/gcs/src/plugins/opmap/opmapgadgetwidget.h b/ground/gcs/src/plugins/opmap/opmapgadgetwidget.h index 23e354758..959a14892 100644 --- a/ground/gcs/src/plugins/opmap/opmapgadgetwidget.h +++ b/ground/gcs/src/plugins/opmap/opmapgadgetwidget.h @@ -123,6 +123,7 @@ public: bool applyHomeLocationOnMap(); signals: void defaultLocationAndZoomChanged(double lng, double lat, double zoom); + void defaultSafeAreaChanged(int safe_area_radius, bool showSafeArea); void overlayOpacityChanged(qreal); public slots: @@ -159,6 +160,10 @@ private slots: void on_toolButtonNormalMapMode_clicked(); void on_toolButtonHomeWaypoint_clicked(); void on_toolButtonMoveToWP_clicked(); + void on_toolButtonHomeSet_clicked(); + void on_toolButtonClearUAVTrail_clicked(); + void on_toolButtonPlanEditor_clicked(); + void on_toolButtonSaveSettings_clicked(); /** * @brief signals received from the map object