performance enhancements

memory enhancements
prevent starting sensors more than once
fix for wifi lag issues
map scaling for huge buildings
This commit is contained in:
2016-10-01 10:21:15 +02:00
parent 833327bafd
commit 44f9b6ac80
16 changed files with 197 additions and 26 deletions

View File

@@ -4,8 +4,10 @@
#include <QResizeEvent>
#include <QSlider>
#include <QGridLayout>
#include <QGestureEvent>
#include <Indoor/floorplan/v2/Floorplan.h>
#include <Indoor/floorplan/v2/FloorplanHelper.h>
#include "Floor2D.h"
#include "ColorPoints2D.h"
@@ -67,7 +69,12 @@ MapView2D::MapView2D(QWidget *parent) : QWidget(parent) {
lay->addWidget(btnLayerPlus, row, 2, 1, 1);
// start with invisible particles. speeds things up a bit
colorPoints->setVisible(false);
// we want to receive pinch gestures
//setAttribute(Qt::WA_AcceptTouchEvents, true);
grabGesture(Qt::PinchGesture);
}
@@ -96,7 +103,11 @@ void MapView2D::setMap(WiFiCalibrationDataModel* mdl, Floorplan::IndoorMap* map)
wifiCalib = new WiFiCalibTool(mdl, map);
elementsB.push_back(wifiCalib);
scaler.setCenterM(Point2(70, 35));
const BBox3 bbox3 = FloorplanHelper::getBBox(map);
const BBox2 bbox2 = BBox2(bbox3.getMin().xy(), bbox3.getMax().xy());
scaler.setMapBBox(bbox2);
scaler.setCenterM(Point2(bbox2.getCenter().x, bbox2.getCenter().y));
}
@@ -169,6 +180,16 @@ void MapView2D::mouseReleaseEvent(QMouseEvent* evt) {
}
void MapView2D::wheelEvent(QWheelEvent* event) {
if (event->delta() < 0) {
scaler.mulScale(0.5);
emit update();
} else {
scaler.mulScale(2.0);
emit update();
}
}
void MapView2D::paintEvent(QPaintEvent*) {
QPainter qp(this);
@@ -183,3 +204,42 @@ void MapView2D::paintEvent(QPaintEvent*) {
qp.end();
}
bool MapView2D::event(QEvent *event) {
switch (event->type()) {
case QEvent::Gesture:
return gestureEvent(static_cast<QGestureEvent*>(event));
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
// prevent [additional] mouse events for undetected gestures [more than 1 finger]
// TODO: not yet stable... improvements?
if (static_cast<QTouchEvent*>(event)->touchPoints().count() == 2) {return true;}
break;
default:
break;
}
// event not consumed. bubble it to following stages.
// this will e.g. generate mouseMoveEvent etc.
return QWidget::event(event);
}
bool MapView2D::gestureEvent(QGestureEvent *event) {
if (QGesture* pinch = event->gesture(Qt::PinchGesture)) {
const QPinchGesture* pg = static_cast<QPinchGesture *>(pinch);
scaler.mulScale(pg->scaleFactor());
emit update();
return true; // event consumed
}
// event not consumed
return false;
}