summaryrefslogtreecommitdiff
path: root/tests/systemtests/map3d/tileview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/systemtests/map3d/tileview.cpp')
-rw-r--r--tests/systemtests/map3d/tileview.cpp252
1 files changed, 252 insertions, 0 deletions
diff --git a/tests/systemtests/map3d/tileview.cpp b/tests/systemtests/map3d/tileview.cpp
new file mode 100644
index 00000000..6b67cb33
--- /dev/null
+++ b/tests/systemtests/map3d/tileview.cpp
@@ -0,0 +1,252 @@
+#include "tileview.h"
+
+#include "tilecache.h"
+#include "tile.h"
+#include "cameradata.h"
+#include "mapitem.h"
+
+#include "qgeocoordinate.h"
+
+#include "qgeoserviceprovider.h"
+#include "qgeomappingmanager.h"
+
+#include <qglscenenode.h>
+#include <qglbuilder.h>
+#include <qgeometrydata.h>
+
+#include <QApplication>
+#include <QKeyEvent>
+#include <QTimer>
+
+#include <QColor>
+
+#include <QPropertyAnimation>
+
+#include <cmath>
+
+#include <QDebug>
+
+TileView::TileView(TileCache *tileCache, QWidget *parent) :
+ QGLView(parent),
+ tileCache_(tileCache)
+{
+ serviceProvider_ = new QGeoServiceProvider("nokia");
+ map_ = new Map(tileCache, this);
+ map_->setMappingManager(serviceProvider_->mappingManager());
+ map_->setAutoUpdate(false);
+
+ connect(map_,
+ SIGNAL(updateRequired()),
+ this,
+ SLOT(update()));
+
+ setCamera(map_->glCamera());
+
+
+ MapItem *item1 = new MapItem;
+ item1->setCoordinate(QGeoCoordinate(-27, 153));
+ item1->setSize(QSizeF(128, 128));
+ item1->setZoom(5);
+ map_->addMapItem(item1);
+
+ MapItem *item2 = new MapItem;
+ item2->setCoordinate(QGeoCoordinate(-27, 153));
+ item2->setSize(QSizeF(128, 128));
+ item2->setAnchor(QPointF(128, 128));
+ item2->setZoom(5);
+ map_->addMapItem(item2);
+
+ MapItem *item3 = new MapItem;
+ item3->setCoordinate(QGeoCoordinate(-27, 153));
+ item3->setSize(QSizeF(256.0, 256.0));
+ item3->setAnchor(QPointF(-256.0, -256.0));
+ item3->setZoom(6);
+ map_->addMapItem(item3);
+}
+
+TileView::~TileView()
+{
+ delete serviceProvider_;
+}
+
+Map* TileView::map()
+{
+ return map_;
+}
+
+void TileView::closeEvent(QCloseEvent *)
+{
+ qApp->quit();
+}
+
+void TileView::paintGL(QGLPainter *painter)
+{
+ map_->paintGL(painter);
+// QGLSceneNode *node = map_->sceneNodeForRendering();
+// if (node) {
+// node->draw(painter);
+// map_->sceneNodeRenderingDone();
+// }
+}
+
+void TileView::showEvent(QShowEvent *)
+{
+ updateAspectRatio();
+}
+
+void TileView::resizeEvent(QResizeEvent *event)
+{
+ QGLView::resizeEvent(event);
+ updateAspectRatio();
+}
+
+void TileView::updateAspectRatio()
+{
+ map_->resize(width(), height());
+}
+
+void TileView::enterEvent(QEvent *)
+{
+ setFocus();
+ grabKeyboard();
+}
+
+void TileView::leaveEvent(QEvent *)
+{
+ releaseKeyboard();
+}
+
+void TileView::keyPressEvent(QKeyEvent *e)
+{
+ CameraData cameraData = map_->cameraData();
+ if (e->key() == Qt::Key_Left) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Right) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLongitude(coord.longitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setBearing(cameraData.bearing() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Up) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() + 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() - 5.0);
+ }
+ } else if (e->key() == Qt::Key_Down) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ QGeoCoordinate coord = cameraData.center();
+ coord.setLatitude(coord.latitude() - 1);
+ cameraData.setCenter(coord);
+ } else {
+ cameraData.setTilt(cameraData.tilt() + 5.0);
+ }
+ } else if (e->key() == Qt::Key_Plus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ cameraData.setDistance(cameraData.distance() / 2.0);
+ cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() / 1.1);
+ }
+ } else if (e->key() == Qt::Key_Minus) {
+ if (e->modifiers() & Qt::ShiftModifier) {
+ if (cameraData.zoomLevel() != 1)
+ cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+ cameraData.setDistance(cameraData.distance() * 2.0);
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ } else {
+ cameraData.setDistance(cameraData.distance() * 1.1);
+ }
+ } else if (e->key() == Qt::Key_U) {
+ map_->setCameraData(cameraData);
+ if (!map_->autoUpdate())
+ map_->update();
+ }
+ map_->setCameraData(cameraData);
+ update();
+}
+
+//void TileView::wheelEvent(QWheelEvent *e)
+//{
+// CameraData cameraData = map_->cameraData();
+// if (e->delta() > 0) {
+// if (e->modifiers() & Qt::ShiftModifier) {
+// cameraData.setDistance(cameraData.distance() / 2.0);
+// cameraData.setZoomLevel(cameraData.zoomLevel() + 1);
+// map_->setCameraData(cameraData);
+// if (!map_->autoUpdate())
+// map_->update();
+// } else {
+// cameraData.setDistance(cameraData.distance() / 1.1);
+// }
+// } else {
+// if (e->modifiers() & Qt::ShiftModifier) {
+// if (cameraData.zoomLevel() != 1)
+// cameraData.setZoomLevel(cameraData.zoomLevel() - 1);
+// cameraData.setDistance(cameraData.distance() * 2.0);
+// map_->setCameraData(cameraData);
+// if (!map_->autoUpdate())
+// map_->update();
+// } else {
+// cameraData.setDistance(cameraData.distance() * 1.1);
+// }
+// }
+// map_->setCameraData(cameraData);
+// update();
+
+// e->accept();
+//}
+//
+//void TileView::mousePressEvent(QMouseEvent *e)
+//{
+// switch (e->button()) {
+// case Qt::LeftButton:
+// mousePos_ = e->pos();
+//// QGeoCoordinate coord = map_->screenPositionToCoordinate(mousePos_);
+//// qDebug() << __FUNCTION__
+//// << "mousePos " << mousePos_
+//// << " -> coord " << coord
+//// << " -> screen " << map_->coordinateToScreenPosition(coord);
+// break;
+// }
+// e->accept();
+//}
+
+//void TileView::mouseReleaseEvent(QMouseEvent *e)
+//{
+//}
+
+//void TileView::mouseMoveEvent(QMouseEvent *e)
+//{
+// CameraData cameraData = map_->cameraData();
+
+// if ((e->buttons() & Qt::LeftButton) == Qt::LeftButton)
+// {
+// // Pixel pan support?!
+// QPoint delta = (mousePos_ - e->pos()) / 50;
+
+// QGeoCoordinate coord = cameraData.center();
+// coord.setLatitude(coord.latitude() + delta.y());
+// coord.setLongitude(coord.longitude() - delta.x());
+// cameraData.setCenter(coord);
+
+// map_->setCameraData(cameraData);
+// update();
+// }
+// e->accept();
+//}