bool RangeProfilePlotManager::wheelEvent(PlotView* pView, QWheelEvent* pEvent) { double scaleAdjust = pEvent->delta() / 1440.0; // yup, a magic number, started with one full rotation to double // then experimented until I got something that looked good scaleAdjust = (scaleAdjust < 0.0) ? (-1.0 - scaleAdjust) : (1.0 - scaleAdjust); std::list<PlotObject*> selected; pView->getSelectedObjects(selected, true); for (std::list<PlotObject*>::iterator obj = selected.begin(); obj != selected.end(); ++obj) { PointSet* pSet = dynamic_cast<PointSet*>(*obj); if (pSet != NULL) { double minX, minY, maxX, maxY; pSet->getExtents(minX, minY, maxX, maxY); double shift = minY; std::vector<Point*> points = pSet->getPoints(); for (std::vector<Point*>::iterator point = points.begin(); point != points.end(); ++point) { LocationType loc = (*point)->getLocation(); loc.mY -= shift; if (scaleAdjust < 0.0) { loc.mY *= fabs(scaleAdjust); } else { loc.mY /= scaleAdjust; } loc.mY += shift; (*point)->setLocation(loc); } } } pView->refresh(); return false; }