コード例 #1
0
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;
}