Profile2: reset the zoom level when a new profile is drawn

If the user has zoomed in but then changes to a new dive,
we may want to reset the scale back to the original value (1.0)
based on the current zoomLevel, so that the profile is not stuck
in zoomed mode.

This patch adds a snippet that resets the QGraphicsView scale,
zoomLevel variable and also the toolTip position.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Lubomir I. Ivanov 2014-03-10 17:59:02 +02:00 committed by Dirk Hohndel
parent 324b8cbff1
commit 41cec17cff
2 changed files with 13 additions and 3 deletions

View file

@ -20,6 +20,7 @@
#include <QDebug>
#include <QSettings>
#include <QScrollBar>
#include <QtCore/qmath.h>
#ifndef QT_NO_DEBUG
#include <QTableView>
@ -59,6 +60,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent),
dataModel(new DivePlotDataModel(this)),
currentState(INVALID),
zoomLevel(0),
zoomFactor(1.15),
background(new DivePixmapItem()),
toolTipItem(new ToolTipItem()),
isPlotZoomed(prefs.zoomed_plot),
@ -320,6 +322,14 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
if (!d)
return;
// restore default zoom level and tooltip position
if (zoomLevel) {
const qreal defScale = 1.0 / qPow(zoomFactor, (qreal)zoomLevel);
scale(defScale, defScale);
zoomLevel = 0;
}
toolTipItem->setPos(0, 0);
// No need to do this again if we are already showing the same dive
// computer of the same dive, so we check the unique id of the dive
// and the selected dive computer number against the ones we are
@ -478,13 +488,12 @@ void ProfileWidget2::wheelEvent(QWheelEvent *event)
if (currentState == EMPTY)
return;
QPoint toolTipPos = mapFromScene(toolTipItem->pos());
double scaleFactor = 1.15;
if (event->delta() > 0 && zoomLevel < 20) {
scale(scaleFactor, scaleFactor);
scale(zoomFactor, zoomFactor);
zoomLevel++;
} else if (event->delta() < 0 && zoomLevel > 0) {
// Zooming out
scale(1.0 / scaleFactor, 1.0 / scaleFactor);
scale(1.0 / zoomFactor, 1.0 / zoomFactor);
zoomLevel--;
}
scrollViewTo(event->pos());

View file

@ -93,6 +93,7 @@ private:
DivePlotDataModel *dataModel;
State currentState;
int zoomLevel;
qreal zoomFactor;
DivePixmapItem *background;
QString backgroundFile;
ToolTipItem *toolTipItem;