diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp index 2f07898d0..494482283 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp @@ -113,6 +113,31 @@ namespace mapcontrol wwww->RefreshPos(); } } + void MapGraphicItem::setOverlayOpacity(qreal value) + { + foreach(QGraphicsItem* i,this->childItems()) + { + WayPointItem* w=qgraphicsitem_cast(i); + if(w) + w->setOpacity(value); + UAVItem* ww=qgraphicsitem_cast(i); + if(ww) + ww->setOpacity(value); + HomeItem* www=qgraphicsitem_cast(i); + if(www) + www->setOpacity(value); + GPSItem* wwww=qgraphicsitem_cast(i); + if(wwww) + wwww->setOpacity(value); + WayPointLine* wwwww=qgraphicsitem_cast(i); + if(wwwww) + wwwww->setOpacity(value); + WayPointCircle* wwwwww=qgraphicsitem_cast(i); + if(wwwwww) + wwwwww->setOpacity(value); + + } + } void MapGraphicItem::ConstructLastImage(int const& zoomdiff) { QImage temp; diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h index 3f96ffe8b..1d3ce17f3 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h @@ -94,7 +94,6 @@ namespace mapcontrol bool IsDragging()const{return core->IsDragging();} QImage lastimage; -// QPainter* imagePainter; core::Point lastimagepoint; void paintImage(QPainter* painter); void ConstructLastImage(int const& zoomdiff); @@ -102,7 +101,7 @@ namespace mapcontrol double Zoom(); double ZoomDigi(); double ZoomTotal(); - + void setOverlayOpacity(qreal value); protected: void mouseMoveEvent ( QGraphicsSceneMouseEvent * event ); void mousePressEvent ( QGraphicsSceneMouseEvent * event ); diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp index 9c0198a3d..2d5426578 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp @@ -59,6 +59,7 @@ namespace mapcontrol SetShowDiagnostics(showDiag); this->setMouseTracking(followmouse); SetShowCompass(true); + overlayOpacity=1; } void OPMapWidget::SetShowDiagnostics(bool const& value) @@ -92,6 +93,7 @@ namespace mapcontrol { GPS=new GPSItem(map,this); GPS->setParentItem(map); + setOverlayOpacity(overlayOpacity); } } @@ -108,26 +110,34 @@ namespace mapcontrol { if(!from|!to) return NULL; - return new WayPointLine(from,to,map,color); + WayPointLine* ret= new WayPointLine(from,to,map,color); + setOverlayOpacity(overlayOpacity); + return ret; } WayPointLine * OPMapWidget::WPLineCreate(HomeItem *from, WayPointItem *to,QColor color) { if(!from|!to) return NULL; - return new WayPointLine(from,to,map,color); + WayPointLine* ret= new WayPointLine(from,to,map,color); + setOverlayOpacity(overlayOpacity); + return ret; } WayPointCircle * OPMapWidget::WPCircleCreate(WayPointItem *center, WayPointItem *radius, bool clockwise,QColor color) { if(!center|!radius) return NULL; - return new WayPointCircle(center,radius,clockwise,map,color); + WayPointCircle* ret= new WayPointCircle(center,radius,clockwise,map,color); + setOverlayOpacity(overlayOpacity); + return ret; } WayPointCircle *OPMapWidget::WPCircleCreate(HomeItem *center, WayPointItem *radius, bool clockwise,QColor color) { if(!center|!radius) return NULL; - return new WayPointCircle(center,radius,clockwise,map,color); + WayPointCircle* ret= new WayPointCircle(center,radius,clockwise,map,color); + setOverlayOpacity(overlayOpacity); + return ret; } void OPMapWidget::SetShowUAV(const bool &value) { @@ -137,6 +147,7 @@ namespace mapcontrol UAV->setParentItem(map); connect(this,SIGNAL(UAVLeftSafetyBouble(internals::PointLatLng)),UAV,SIGNAL(UAVLeftSafetyBouble(internals::PointLatLng))); connect(this,SIGNAL(UAVReachedWayPoint(int,WayPointItem*)),UAV,SIGNAL(UAVReachedWayPoint(int,WayPointItem*))); + setOverlayOpacity(overlayOpacity); } else if(!value) { @@ -234,6 +245,7 @@ namespace mapcontrol item->setParentItem(map); int position=item->Number(); emit WPCreated(position,item); + setOverlayOpacity(overlayOpacity); } WayPointItem* OPMapWidget::WPCreate(internals::PointLatLng const& coord,int const& altitude) { @@ -242,6 +254,7 @@ namespace mapcontrol item->setParentItem(map); int position=item->Number(); emit WPCreated(position,item); + setOverlayOpacity(overlayOpacity); return item; } WayPointItem* OPMapWidget::WPCreate(internals::PointLatLng const& coord,int const& altitude, QString const& description) @@ -251,6 +264,7 @@ namespace mapcontrol item->setParentItem(map); int position=item->Number(); emit WPCreated(position,item); + setOverlayOpacity(overlayOpacity); return item; } WayPointItem* OPMapWidget::WPCreate(const distBearingAltitude &relativeCoord, const QString &description) @@ -260,6 +274,7 @@ namespace mapcontrol item->setParentItem(map); int position=item->Number(); emit WPCreated(position,item); + setOverlayOpacity(overlayOpacity); return item; } WayPointItem* OPMapWidget::WPInsert(const int &position) @@ -269,6 +284,7 @@ namespace mapcontrol ConnectWP(item); item->setParentItem(map); emit WPInserted(position,item); + setOverlayOpacity(overlayOpacity); return item; } void OPMapWidget::WPInsert(WayPointItem* item,const int &position) @@ -277,7 +293,7 @@ namespace mapcontrol ConnectWP(item); item->setParentItem(map); emit WPInserted(position,item); - + setOverlayOpacity(overlayOpacity); } WayPointItem* OPMapWidget::WPInsert(internals::PointLatLng const& coord,int const& altitude,const int &position) { @@ -286,6 +302,7 @@ namespace mapcontrol ConnectWP(item); item->setParentItem(map); emit WPInserted(position,item); + setOverlayOpacity(overlayOpacity); return item; } WayPointItem* OPMapWidget::WPInsert(internals::PointLatLng const& coord,int const& altitude, QString const& description,const int &position) @@ -306,6 +323,7 @@ namespace mapcontrol emit WPInserted(position,item); if(reloc) emit WPValuesChanged(item); + setOverlayOpacity(overlayOpacity); return item; } WayPointItem* OPMapWidget::WPInsert(distBearingAltitude const& relative, QString const& description,const int &position) @@ -315,6 +333,7 @@ namespace mapcontrol ConnectWP(item); item->setParentItem(map); emit WPInserted(position,item); + setOverlayOpacity(overlayOpacity); return item; } void OPMapWidget::WPDelete(WayPointItem *item) @@ -481,6 +500,12 @@ namespace mapcontrol compass=0; } } + + void OPMapWidget::setOverlayOpacity(qreal value) + { + map->setOverlayOpacity(value); + overlayOpacity=value; + } void OPMapWidget::SetRotate(qreal const& value) { map->mapRotate(value); diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h index 98255e6fd..16e1eb766 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h @@ -353,6 +353,8 @@ namespace mapcontrol void SetShowCompass(bool const& value); + void setOverlayOpacity(qreal value); + UAVItem* UAV; GPSItem* GPS; HomeItem* Home; @@ -390,6 +392,7 @@ namespace mapcontrol QTimer * diagTimer; QGraphicsTextItem * diagGraphItem; bool showDiag; + qreal overlayOpacity; private slots: void diagRefresh(); // WayPointItem* item;//apagar diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadget.cpp b/ground/openpilotgcs/src/plugins/opmap/opmapgadget.cpp index 192575a55..5ad7cb1db 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadget.cpp +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadget.cpp @@ -31,14 +31,15 @@ OPMapGadget::OPMapGadget(QString classId, OPMapGadgetWidget *widget, QWidget *pa IUAVGadget(classId, parent), m_widget(widget),m_config(NULL) { - connect(m_widget,SIGNAL(defaultLocationAndZoomChanged(double,double,double)),this,SLOT(saveConfiguration(double,double,double))); + connect(m_widget,SIGNAL(defaultLocationAndZoomChanged(double,double,double)),this,SLOT(saveDefaultLocation(double,double,double))); + connect(m_widget,SIGNAL(overlayOpacityChanged(qreal)),this,SLOT(saveOpacity(qreal))); } OPMapGadget::~OPMapGadget() { delete m_widget; } -void OPMapGadget::saveConfiguration(double lng,double lat,double zoom) +void OPMapGadget::saveDefaultLocation(double lng,double lat,double zoom) { if(m_config) { @@ -49,6 +50,13 @@ void OPMapGadget::saveConfiguration(double lng,double lat,double zoom) } } +void OPMapGadget::saveOpacity(qreal value) +{ + if(m_config) + { + m_config->setOpacity(value); + } +} void OPMapGadget::loadConfiguration(IUAVGadgetConfiguration *config) { m_config = qobject_cast(config); @@ -62,6 +70,6 @@ void OPMapGadget::loadConfiguration(IUAVGadgetConfiguration *config) m_widget->setZoom(m_config->zoom()); m_widget->setPosition(QPointF(m_config->longitude(), m_config->latitude())); m_widget->setHomePosition(QPointF(m_config->longitude(), m_config->latitude())); - + m_widget->setOverlayOpacity(m_config->opacity()); } diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadget.h b/ground/openpilotgcs/src/plugins/opmap/opmapgadget.h index eb69255fa..d83b01782 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadget.h +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadget.h @@ -52,7 +52,8 @@ private: OPMapGadgetWidget *m_widget; OPMapGadgetConfiguration *m_config; private slots: - void saveConfiguration(double lng, double lat, double zoom); + void saveOpacity(qreal value); + void saveDefaultLocation(double lng, double lat, double zoom); }; diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.cpp b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.cpp index 7e77b0031..2e1465365 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.cpp +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.cpp @@ -42,7 +42,8 @@ OPMapGadgetConfiguration::OPMapGadgetConfiguration(QString classId, QSettings* m_cacheLocation(Utils::PathUtils().GetStoragePath() + "mapscache" + QDir::separator()), m_uavSymbol(QString::fromUtf8(":/uavs/images/mapquad.png")), m_maxUpdateRate(2000), // ms - m_settings(qSettings) + m_settings(qSettings), + m_opacity(1) { //if a saved configuration exists load it @@ -60,6 +61,8 @@ OPMapGadgetConfiguration::OPMapGadgetConfiguration(QString classId, QSettings* QString uavSymbol=qSettings->value("uavSymbol").toString(); int max_update_rate = qSettings->value("maxUpdateRate").toInt(); + m_opacity=qSettings->value("overlayOpacity",1).toReal(); + if (!mapProvider.isEmpty()) m_mapProvider = mapProvider; m_defaultZoom = zoom; m_defaultLatitude = latitude; @@ -95,6 +98,7 @@ IUAVGadgetConfiguration * OPMapGadgetConfiguration::clone() m->m_cacheLocation = m_cacheLocation; m->m_uavSymbol = m_uavSymbol; m->m_maxUpdateRate = m_maxUpdateRate; + m->m_opacity=m_opacity; return m; } @@ -112,6 +116,7 @@ void OPMapGadgetConfiguration::saveConfig() const { m_settings->setValue("uavSymbol", m_uavSymbol); m_settings->setValue("cacheLocation", Utils::PathUtils().RemoveStoragePath(m_cacheLocation)); m_settings->setValue("maxUpdateRate", m_maxUpdateRate); + m_settings->setValue("overlayOpacity",m_opacity); } void OPMapGadgetConfiguration::saveConfig(QSettings* qSettings) const { qSettings->setValue("mapProvider", m_mapProvider); @@ -125,6 +130,7 @@ void OPMapGadgetConfiguration::saveConfig(QSettings* qSettings) const { qSettings->setValue("uavSymbol", m_uavSymbol); qSettings->setValue("cacheLocation", Utils::PathUtils().RemoveStoragePath(m_cacheLocation)); qSettings->setValue("maxUpdateRate", m_maxUpdateRate); + qSettings->setValue("overlayOpacity",m_opacity); } void OPMapGadgetConfiguration::setCacheLocation(QString cacheLocation){ m_cacheLocation = cacheLocation; diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.h b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.h index ffd0c5a08..0efb87050 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.h +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetconfiguration.h @@ -48,6 +48,7 @@ Q_PROPERTY(bool useMemoryCache READ useMemoryCache WRITE setUseMemoryCache) Q_PROPERTY(QString cacheLocation READ cacheLocation WRITE setCacheLocation) Q_PROPERTY(QString uavSymbol READ uavSymbol WRITE setUavSymbol) Q_PROPERTY(int maxUpdateRate READ maxUpdateRate WRITE setMaxUpdateRate) +Q_PROPERTY(qreal overlayOpacity READ opacity WRITE setOpacity) public: explicit OPMapGadgetConfiguration(QString classId, QSettings* qSettings = 0, QObject *parent = 0); @@ -66,11 +67,13 @@ public: QString cacheLocation() const { return m_cacheLocation; } QString uavSymbol() const { return m_uavSymbol; } int maxUpdateRate() const { return m_maxUpdateRate; } + qreal opacity() const { return m_opacity; } void saveConfig() const; public slots: void setMapProvider(QString provider) { m_mapProvider = provider; } void setZoom(int zoom) { m_defaultZoom = zoom; } void setLatitude(double latitude) { m_defaultLatitude = latitude; } + void setOpacity(qreal value) { m_opacity = value; } void setLongitude(double longitude) { m_defaultLongitude = longitude; } void setUseOpenGL(bool useOpenGL) { m_useOpenGL = useOpenGL; } void setShowTileGridLines(bool showTileGridLines) { m_showTileGridLines = showTileGridLines; } @@ -93,6 +96,7 @@ private: QString m_uavSymbol; int m_maxUpdateRate; QSettings * m_settings; + qreal m_opacity; }; #endif // OPMAP_GADGETCONFIGURATION_H diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.cpp index e9048b7f8..8fa6ac84c 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.cpp @@ -220,6 +220,8 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent) magicWayPoint=m_map->magicWPCreate(); magicWayPoint->setVisible(false); + m_map->setOverlayOpacity(0.5); + // ************** // create various context menu (mouse right click menu) actions @@ -504,6 +506,10 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event) // ********* + QMenu overlaySubMenu(tr("&Overlay Opacity "),this); + for (int i = 0; i < overlayOpacityAct.count(); i++) + overlaySubMenu.addAction(overlayOpacityAct.at(i)); + contextMenu.addMenu(&overlaySubMenu); contextMenu.addSeparator(); contextMenu.addAction(closeAct2); @@ -676,7 +682,7 @@ void OPMapGadgetWidget::zoomChanged(double zoomt, double zoom, double zoomd) int index0_zoom = i_zoom - m_min_zoom; // zoom level starting at index level '0' if (index0_zoom < zoomAct.count()) - zoomAct.at(index0_zoom)->setChecked(true); // set the right-click context menu zoom level + zoomAct.at(index0_zoom)->setChecked(true); // set the right-click context menu zoom level } void OPMapGadgetWidget::OnCurrentPositionChanged(internals::PointLatLng point) @@ -987,6 +993,14 @@ void OPMapGadgetWidget::setZoom(int zoom) m_map->SetMouseWheelZoomType(zoom_type); } +void OPMapGadgetWidget::setOverlayOpacity(qreal value) +{ + if (!m_widget || !m_map) + return; + m_map->setOverlayOpacity(value); + overlayOpacityAct.at(value*10)->setChecked(true); +} + void OPMapGadgetWidget::setHomePosition(QPointF pos) { if (!m_widget || !m_map) @@ -1302,6 +1316,16 @@ void OPMapGadgetWidget::createActions() clearWayPointsAct->setStatusTip(tr("Clear waypoints")); connect(clearWayPointsAct, SIGNAL(triggered()), this, SLOT(onClearWayPointsAct_triggered())); + overlayOpacityActGroup = new QActionGroup(this); + connect(overlayOpacityActGroup, SIGNAL(triggered(QAction *)), this, SLOT(onOverlayOpacityActGroup_triggered(QAction *))); + overlayOpacityAct.clear(); + for (int i = 0; i <= 10; i++) + { + QAction *overlayAct = new QAction(QString::number(i*10), overlayOpacityActGroup); + overlayAct->setCheckable(true); + overlayAct->setData(i*10); + overlayOpacityAct.append(overlayAct); + } homeMagicWaypointAct = new QAction(tr("Home magic waypoint"), this); homeMagicWaypointAct->setStatusTip(tr("Move the magic waypoint to the home position")); @@ -2089,3 +2113,12 @@ void OPMapGadgetWidget::onHomeDoubleClick(HomeItem *) { new homeEditor(m_map->Home,this); } + +void OPMapGadgetWidget::onOverlayOpacityActGroup_triggered(QAction *action) +{ + if (!m_widget || !m_map || !action) + return; + + m_map->setOverlayOpacity(action->data().toReal()/100); + emit overlayOpacityChanged(action->data().toReal()/100); +} diff --git a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.h b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.h index b7ab82909..5d844fb57 100644 --- a/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.h +++ b/ground/openpilotgcs/src/plugins/opmap/opmapgadgetwidget.h @@ -115,8 +115,10 @@ public: void SetUavPic(QString UAVPic); void setMaxUpdateRate(int update_rate); void setHomePosition(QPointF pos); + void setOverlayOpacity(qreal value); signals: void defaultLocationAndZoomChanged(double lng,double lat,double zoom); + void overlayOpacityChanged(qreal); public slots: void homePositionUpdated(UAVObject *); @@ -207,6 +209,7 @@ private slots: void onChangeDefaultLocalAndZoom(); void on_tbFind_clicked(); void onHomeDoubleClick(HomeItem*); + void onOverlayOpacityActGroup_triggered(QAction *action); private: int m_min_zoom; int m_max_zoom; @@ -281,7 +284,9 @@ private: QList mapModeAct; QActionGroup *zoomActGroup; + QActionGroup *overlayOpacityActGroup; QList zoomAct; + QList overlayOpacityAct; QActionGroup *maxUpdateRateActGroup; QList maxUpdateRateAct;