From d0138d16b6b99e1b3e2ede07a8909228b983ac54 Mon Sep 17 00:00:00 2001 From: pip Date: Fri, 11 Jun 2010 11:38:43 +0000 Subject: [PATCH] git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@741 ebee16cc-31ac-478f-84a7-5cbb03baadba --- ground/src/plugins/map/mapgadgetwidget.cpp | 219 +++++++++++++++++++-- ground/src/plugins/map/mapgadgetwidget.h | 7 + 2 files changed, 214 insertions(+), 12 deletions(-) diff --git a/ground/src/plugins/map/mapgadgetwidget.cpp b/ground/src/plugins/map/mapgadgetwidget.cpp index 34fc3e089..99d4642c6 100644 --- a/ground/src/plugins/map/mapgadgetwidget.cpp +++ b/ground/src/plugins/map/mapgadgetwidget.cpp @@ -27,34 +27,99 @@ #include "mapgadgetwidget.h" #include #include +#include #include #include "extensionsystem/pluginmanager.h" MapGadgetWidget::MapGadgetWidget(QWidget *parent) : QWidget(parent) { + follow_uav = false; // cmoss + int size = 256; + m_mc = new MapControl(QSize(size, size)); + setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + m_mc->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); m_mc->setMinimumSize(64, 64); m_mc->showScale(true); + m_osmAdapter = new OSMMapAdapter(); m_googleSatAdapter = new GoogleSatMapAdapter(); m_googleAdapter = new GoogleMapAdapter(); m_yahooAdapter = new YahooMapAdapter(); + m_osmLayer = new MapLayer("OpenStreetMap", m_osmAdapter); m_googleLayer = new MapLayer("Google", m_googleAdapter); m_googleSatLayer = new MapLayer("Google Sat", m_googleSatAdapter); m_yahooLayer = new MapLayer("Yahoo", m_yahooAdapter); + m_osmLayer->setVisible(true); m_googleLayer->setVisible(false); m_googleSatLayer->setVisible(false); m_yahooLayer->setVisible(false); + m_mc->addLayer(m_osmLayer); m_mc->addLayer(m_googleLayer); m_mc->addLayer(m_googleSatLayer); m_mc->addLayer(m_yahooLayer); + + + + + + + + + // ********************************* + // add a geometry layer .. cmoss + +// m_customLayer = new MapLayer("Custom Layer", m_osmAdapter); // create layer + + // create a LineString + QList way_points; + + // Image points +// way_points.append(new ImagePoint(-2.463293, 52.647245, "images/plane.png", "QuadCopter 1", Point::BottomLeft)); + + // Circle points + QPen *pointpen = new QPen(QColor(255, 128, 64)); pointpen->setWidth(2); + way_points.append(new CirclePoint(-2.463293, 52.647245, 15, "WP1", Point::Middle, pointpen)); + way_points.append(new CirclePoint(-2.465000, 52.647240, 15, "WP2", Point::Middle, pointpen)); + way_points.append(new CirclePoint(-2.468000, 52.649240, 15, "WP3", Point::Middle, pointpen)); + way_points.append(new CirclePoint(-2.470000, 52.649300, 15, "WP4", Point::Middle, pointpen)); + + // A QPen also can use transparency +// QPen *linepen = new QPen(QColor(255, 255, 255, 128)); linepen->setWidth(3); + QPen *linepen = new QPen(QColor(255, 255, 255)); linepen->setWidth(1); + // Add the Points and the QPen to a LineString + LineString *ls = new LineString(way_points, "GSC", linepen); + +// m_customLayer->setVisible(true); // make it visible +// m_customLayer->addGeometry(ls); // Add the LineString to the layer +// connect(m_customLayer, SIGNAL(geometryClicked(Geometry*, QPoint)), this, SLOT(geometryClicked(Geometry*, QPoint))); // Connect click events of the layer to this object +// m_mc->addLayer(m_customLayer); // add the custom layer into the system + + m_googleSatLayer->addGeometry(ls); // Add the LineString to the layer + +// m_googleSatLayer->clearGeometries(); + + // ********************************* + + + + + + + + + + + + + addZoomButtons(); m_mc->setView(QPointF(5.718888888888, 58.963333333333)); m_mc->setZoom(10); @@ -65,6 +130,8 @@ MapGadgetWidget::MapGadgetWidget(QWidget *parent) : QWidget(parent) layout->addWidget(m_mc); setLayout(layout); +// connect(m_mc, SIGNAL(mouseEventCoordinate(const QMouseEvent*, const QPointF)), this, SLOT(coordinateClicked(const QMouseEvent*, const QPointF))); // cmoss + // Get required UAVObjects ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager* objManager = pm->getObject(); @@ -95,13 +162,32 @@ void MapGadgetWidget::setPosition(QPointF pos) void MapGadgetWidget::updatePosition() { PositionActual::DataFields data = m_positionActual->getData(); - setPosition(QPointF(data.Longitude, data.Latitude)); + + if (follow_uav) + { +// setPosition(QPointF(data.Longitude, data.Latitude)); // cmoss + } + } void MapGadgetWidget::setMapProvider(QString provider) { - foreach(QString layerName, m_mc->layers()) - m_mc->layer(layerName)->setVisible(layerName == provider); +// for (int i = 0; i < m_mc->layers().size(); i++) +// { +// Layer *layer = m_mc->layers().at(i); +// QString layerName = layer->layername(); +// +// if (layerName == "Custom Layer") continue; // cmoss .. leave the custom layer visible +// layer->setVisible(layerName == provider); +// } + + foreach (QString layerName, m_mc->layers()) + { + m_mc->layer(layerName)->setVisible(layerName == provider); + +// QMessageBox::information(this, provider, layerName); +// m_mc->layer(layerName)->setVisible(layerName == provider || layerName == QString("Custom Layer")); // cmoss + } } @@ -115,20 +201,129 @@ void MapGadgetWidget::resizeEvent(QResizeEvent *event) void MapGadgetWidget::addZoomButtons() { // create buttons as controls for zoom - QPushButton* zoomin = new QPushButton("+"); - QPushButton* zoomout = new QPushButton("-"); - zoomin->setMaximumWidth(50); - zoomout->setMaximumWidth(50); + QPushButton *zoomin = new QPushButton("+"); + QPushButton *zoomout = new QPushButton("-"); + QPushButton *gcs = new QPushButton("GCS"); // cmoss + QPushButton *uav = new QPushButton("UAV"); // cmoss - connect(zoomin, SIGNAL(clicked(bool)), - m_mc, SLOT(zoomIn())); - connect(zoomout, SIGNAL(clicked(bool)), - m_mc, SLOT(zoomOut())); + // cmoss + gcs->setMaximumWidth(50); + gcs->setToolTip("Go to the ground station"); + + uav->setMaximumWidth(50); + uav->setCheckable(true); + uav->setToolTip("Follow the UAV"); + + zoomin->setMinimumSize(50, 50); + zoomin->setMaximumSize(50, 50); +// zoomin->setMaximumWidth(50); + + zoomout->setMinimumSize(50, 50); + zoomout->setMaximumSize(50, 50); +// zoomout->setMaximumWidth(50); + + connect(zoomin, SIGNAL(clicked(bool)), m_mc, SLOT(zoomIn())); + connect(zoomout, SIGNAL(clicked(bool)), m_mc, SLOT(zoomOut())); // add zoom buttons to the layout of the MapControl QVBoxLayout* innerlayout = new QVBoxLayout; +// QHBoxLayout *innerlayout = new QHBoxLayout; + + innerlayout->setSpacing(3); + innerlayout->setMargin(2); + + innerlayout->addSpacing(10); + innerlayout->addWidget(gcs); + innerlayout->addWidget(uav); + innerlayout->addSpacing(10); innerlayout->addWidget(zoomin); innerlayout->addWidget(zoomout); - m_mc->setLayout(innerlayout); + + innerlayout->addStretch(0); + + m_mc->setLayout(innerlayout); } +void MapGadgetWidget::coordinateClicked(const QMouseEvent * evnt, const QPointF coordinate) // cmoss +{ + if (evnt->type() == QEvent::MouseButtonPress && evnt->buttons() == Qt::LeftButton) + { + QString coord_str = "lat " + QString::number(coordinate.y(), 'f', 6) + ", lon " + QString::number(coordinate.x(), 'f', 6); + + qDebug() << coordinate << ": " << evnt->x() << " / " << evnt->y() << " / " << coord_str; + + QMessageBox::information(this, "Coordinate Clicked", coord_str); + } +} + +void MapGadgetWidget::geometryClicked(Geometry* geom, QPoint) // cmoss +{ + qDebug() << "parent: " << geom->parentGeometry(); + qDebug() << "Element clicked: " << geom->name(); + if (geom->hasClickedPoints()) + { + QList pp = geom->clickedPoints(); + qDebug() << "number of child elements: " << pp.size(); + for (int i=0; iname(), pp.at(i)->name()); + } + } + else + if (geom->GeometryType == "Point") + { + QMessageBox::information(this, geom->name(), "just a point"); + } +} + +void MapGadgetWidget::keyPressEvent(QKeyEvent* evnt) // cmoss +{ + if (evnt->key() == 49 || evnt->key() == 17825792) // tastatur '1' + { + m_mc->zoomIn(); + } + else + if (evnt->key() == 50) + { + m_mc->moveTo(QPointF(8.25, 60)); + } + else + if (evnt->key() == 51 || evnt->key() == 16777313) // tastatur '3' + { + m_mc->zoomOut(); + } + else + if (evnt->key() == 54) // 6 + { + m_mc->setView(QPointF(8,50)); + } + else + if (evnt->key() == 16777234) // left + { + m_mc->scrollLeft(); + } + else + if (evnt->key() == 16777236) // right + { + m_mc->scrollRight(); + } + else + if (evnt->key() == 16777235 ) // up + { + m_mc->scrollUp(); + } + else + if (evnt->key() == 16777237) // down + { + m_mc->scrollDown(); + } + else + if (evnt->key() == Qt::Key_Escape) // ESC + { + emit(close()); + } + else + { + qDebug() << evnt->key() << endl; + } +} diff --git a/ground/src/plugins/map/mapgadgetwidget.h b/ground/src/plugins/map/mapgadgetwidget.h index a52e1f3c7..afc966c87 100644 --- a/ground/src/plugins/map/mapgadgetwidget.h +++ b/ground/src/plugins/map/mapgadgetwidget.h @@ -46,9 +46,13 @@ public: void setPosition(QPointF pos); void setMapProvider(QString provider); +public slots: + void coordinateClicked(const QMouseEvent* evnt, const QPointF coordinate); // cmoss + void geometryClicked(Geometry* geom, QPoint coord_px); // cmoss protected: void resizeEvent(QResizeEvent *event); + void keyPressEvent(QKeyEvent* evnt); // cmoss private slots: void updatePosition(); @@ -65,8 +69,11 @@ private: Layer *m_googleLayer; Layer *m_googleSatLayer; Layer *m_yahooLayer; + Layer *m_customLayer; QTimer *m_updateTimer; PositionActual *m_positionActual; + + bool follow_uav; // cmoss }; #endif /* MAPGADGETWIDGET_H_ */