From e21e2a25ba6ba9b529c4ebc4a1be460d238e9c10 Mon Sep 17 00:00:00 2001 From: tstellanova Date: Sun, 21 Jul 2013 14:16:03 -0700 Subject: [PATCH] Workaround google maps breakage Add map type selector menu; use Bing maps by default; zoom to a more human scale on Go Home --- src/ui/map/QGCMapToolBar.cc | 60 +++++++++++++++++++++++++++++++------ src/ui/map/QGCMapToolBar.h | 4 +++ src/ui/map/QGCMapWidget.cc | 7 +++++ 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/ui/map/QGCMapToolBar.cc b/src/ui/map/QGCMapToolBar.cc index eebc1f75e..067544bcd 100644 --- a/src/ui/map/QGCMapToolBar.cc +++ b/src/ui/map/QGCMapToolBar.cc @@ -7,8 +7,10 @@ QGCMapToolBar::QGCMapToolBar(QWidget *parent) : ui(new Ui::QGCMapToolBar), map(NULL), optionsMenu(this), + mapTypesMenu(this), trailPlotMenu(this), updateTimesMenu(this), + mapTypesGroup(new QActionGroup(this)), trailSettingsGroup(new QActionGroup(this)), updateTimesGroup(new QActionGroup(this)) { @@ -45,21 +47,43 @@ void QGCMapToolBar::setMap(QGCMapWidget* map) // Set exclusive items trailSettingsGroup->setExclusive(true); updateTimesGroup->setExclusive(true); - + mapTypesGroup->setExclusive(true); // Build up menu trailPlotMenu.setTitle(tr("&Add trail dot every..")); updateTimesMenu.setTitle(tr("&Limit map view update rate to..")); + mapTypesMenu.setTitle(tr("&Map type")); - // FIXME MARK CURRENT VALUES IN MENU - QAction* action = trailPlotMenu.addAction(tr("No trail"), this, SLOT(setUAVTrailTime())); - action->setData(-1); + + //setup the mapTypesMenu + QAction* action; + action = mapTypesMenu.addAction(tr("Bing Hybrid"),this,SLOT(setMapType())); + action->setData(MapType::BingHybrid); + action->setCheckable(true); + mapTypesGroup->addAction(action); + + action = mapTypesMenu.addAction(tr("Google Hybrid"),this,SLOT(setMapType())); + action->setData(MapType::GoogleHybrid); + action->setCheckable(true); + mapTypesGroup->addAction(action); + + action = mapTypesMenu.addAction(tr("OpenStreetMap"),this,SLOT(setMapType())); + action->setData(MapType::OpenStreetMap); action->setCheckable(true); - trailSettingsGroup->addAction(action); + mapTypesGroup->addAction(action); + //TODO check current item + optionsMenu.addMenu(&mapTypesMenu); + + + // FIXME MARK CURRENT VALUES IN MENU + QAction *defaultTrailAction = trailPlotMenu.addAction(tr("No trail"), this, SLOT(setUAVTrailTime())); + defaultTrailAction->setData(-1); + defaultTrailAction->setCheckable(true); + trailSettingsGroup->addAction(defaultTrailAction); for (int i = 0; i < uavTrailTimeCount; ++i) { - QAction* action = trailPlotMenu.addAction(tr("%1 second%2").arg(uavTrailTimeList[i]).arg((uavTrailTimeList[i] > 1) ? "s" : ""), this, SLOT(setUAVTrailTime())); + action = trailPlotMenu.addAction(tr("%1 second%2").arg(uavTrailTimeList[i]).arg((uavTrailTimeList[i] > 1) ? "s" : ""), this, SLOT(setUAVTrailTime())); action->setData(uavTrailTimeList[i]); action->setCheckable(true); trailSettingsGroup->addAction(action); @@ -71,7 +95,7 @@ void QGCMapToolBar::setMap(QGCMapWidget* map) } for (int i = 0; i < uavTrailDistanceCount; ++i) { - QAction* action = trailPlotMenu.addAction(tr("%1 meter%2").arg(uavTrailDistanceList[i]).arg((uavTrailDistanceList[i] > 1) ? "s" : ""), this, SLOT(setUAVTrailDistance())); + action = trailPlotMenu.addAction(tr("%1 meter%2").arg(uavTrailDistanceList[i]).arg((uavTrailDistanceList[i] > 1) ? "s" : ""), this, SLOT(setUAVTrailDistance())); action->setData(uavTrailDistanceList[i]); action->setCheckable(true); trailSettingsGroup->addAction(action); @@ -85,7 +109,7 @@ void QGCMapToolBar::setMap(QGCMapWidget* map) // Set no trail checked if no action is checked yet if (!trailSettingsGroup->checkedAction()) { - action->setChecked(true); + defaultTrailAction->setChecked(true); } optionsMenu.addMenu(&trailPlotMenu); @@ -119,7 +143,6 @@ void QGCMapToolBar::setMap(QGCMapWidget* map) } optionsMenu.addMenu(&updateTimesMenu); - ui->optionsButton->setMenu(&optionsMenu); } } @@ -175,6 +198,23 @@ void QGCMapToolBar::setUpdateInterval() } } +void QGCMapToolBar::setMapType() +{ + QObject* sender = QObject::sender(); + QAction* action = qobject_cast(sender); + + if (action) + { + bool ok; + int mapType = action->data().toInt(&ok); + if (ok) + { + map->SetMapType((MapType::Types)mapType); + ui->posLabel->setText(tr("Map type: %1").arg(mapType)); + } + } +} + void QGCMapToolBar::tileLoadStart() { ui->posLabel->setText(tr("Starting to load tiles..")); @@ -201,10 +241,12 @@ void QGCMapToolBar::tileLoadProgress(int progress) } } + QGCMapToolBar::~QGCMapToolBar() { delete ui; delete trailSettingsGroup; delete updateTimesGroup; + delete mapTypesGroup; // FIXME Delete all actions } diff --git a/src/ui/map/QGCMapToolBar.h b/src/ui/map/QGCMapToolBar.h index a7e75f220..b03d2b9fd 100644 --- a/src/ui/map/QGCMapToolBar.h +++ b/src/ui/map/QGCMapToolBar.h @@ -28,6 +28,7 @@ public slots: void setUAVTrailTime(); void setUAVTrailDistance(); void setUpdateInterval(); + void setMapType(); private: Ui::QGCMapToolBar *ui; @@ -37,8 +38,11 @@ protected: QMenu optionsMenu; QMenu trailPlotMenu; QMenu updateTimesMenu; + QMenu mapTypesMenu; + QActionGroup* trailSettingsGroup; QActionGroup* updateTimesGroup; + QActionGroup* mapTypesGroup; }; #endif // QGCMAPTOOLBAR_H diff --git a/src/ui/map/QGCMapWidget.cc b/src/ui/map/QGCMapWidget.cc index 67b3c711d..9146e347a 100644 --- a/src/ui/map/QGCMapWidget.cc +++ b/src/ui/map/QGCMapWidget.cc @@ -30,6 +30,12 @@ QGCMapWidget::QGCMapWidget(QWidget *parent) : defaultGuidedAlt = -1; loadSettings(false); + //handy for debugging: + //this->SetShowTileGridLines(true); + + //default appears to be Google Hybrid, and is broken currently + this->SetMapType(MapType::BingHybrid); + this->setContextMenuPolicy(Qt::ActionsContextMenu); QAction *guidedaction = new QAction(this); @@ -519,6 +525,7 @@ void QGCMapWidget::updateHomePosition(double latitude, double longitude, double void QGCMapWidget::goHome() { SetCurrentPosition(Home->Coord()); + SetZoom(18); //zoom to "large RC park" size } /** -- 2.22.0