From kde-commits Mon May 27 18:05:54 2013 From: Barth Netterfield Date: Mon, 27 May 2013 18:05:54 +0000 To: kde-commits Subject: branches/work/kst/portto4/kst/src/libkstapp Message-Id: <20130527180554.3BD5DAC85D () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=136967771916219 SVN commit 1356325 by netterfield: In tied zoom mode, X only and Y only cursor extention lines appear in all tied windows. M +122 -9 plotrenderitem.cpp M +5 -0 plotrenderitem.h --- branches/work/kst/portto4/kst/src/libkstapp/plotrenderitem.cpp #1356324:1356325 @@ -486,8 +486,15 @@ view()->setCursor(Qt::SizeHorCursor); } else { view()->setCursor(Qt::CrossCursor); + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->resetSelectionRect(); + } + } else { resetSelectionRect(); } + } ViewItem::keyReleaseEvent(event); } @@ -553,13 +560,38 @@ } const QPointF p = event->pos(); + + double y = (p.y() - rect().bottom())/(rect().top()-rect().bottom())*(plotItem()->yMax()-plotItem()->yMin())+plotItem()->yMin(); + y = qMin(y, plotItem()->yMax()); + y = qMax(y, plotItem()->yMin()); + + double x = (p.x() - rect().left())/(rect().right()-rect().left())*(plotItem()->xMax()-plotItem()->xMin())+plotItem()->xMin(); + x = qMin(x, plotItem()->xMax()); + x = qMax(x, plotItem()->xMin()); + + const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); if (modifiers & Qt::SHIFT || zoomOnlyMode() == View::ZoomOnlyY) { view()->setCursor(Qt::SizeVerCursor); - _selectionRect.setTo(QPointF(rect().right(), p.y())); + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->dragYZoomMouseCursor(y); + } + } else { + dragYZoomMouseCursor(y); + } } else if (modifiers & Qt::CTRL || zoomOnlyMode() == View::ZoomOnlyX) { - _selectionRect.setTo(QPointF(p.x(), rect().bottom())); + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->dragXZoomMouseCursor(x); + } } else { + dragXZoomMouseCursor(x); + } + + } else { _selectionRect.setTo(p); } @@ -627,8 +659,15 @@ updateCursor(event->pos()); const QRectF projection = plotItem()->mapToProjection(_selectionRect.rect()); + + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->_selectionRect.reset(); + } + } else { _selectionRect.reset(); - + } const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); if (modifiers & Qt::SHIFT || zoomOnlyMode() == View::ZoomOnlyY) { plotItem()->zoomYRange(projection); @@ -639,6 +678,58 @@ } } +void PlotRenderItem::hoverYZoomMouseCursor(double y) { + double py; + + py = (y-plotItem()->yMin())/(plotItem()->yMax() - plotItem()->yMin())*(rect().top()-rect().bottom()) + rect().bottom(); + py = qMin(py, rect().bottom()); + py = qMax(py, rect().top()); + + _selectionRect.setFrom(QPointF(rect().left(), py)); + _selectionRect.setTo(QPointF(rect().right(), py)); + + //qDebug() << "tied: " << plotItem()->isTiedZoom() << PlotItemManager::self()->tiedZoomPlotsForView(view()).size(); + update(); //FIXME should optimize instead of redrawing entire curve! + +} + +void PlotRenderItem::hoverXZoomMouseCursor(double x) { + double px; + + px = (x-plotItem()->xMin())/(plotItem()->xMax() - plotItem()->xMin())*(rect().right()-rect().left()) + rect().left(); + px = qMax(px, rect().left()); + px = qMin(px, rect().right()); + + + _selectionRect.setFrom(QPointF(px, rect().top())); + _selectionRect.setTo(QPointF(px, rect().bottom())); + + update(); //FIXME should optimize instead of redrawing entire curve! +} + +void PlotRenderItem::dragYZoomMouseCursor(double y) { + double py; + + py = (y-plotItem()->yMin())/(plotItem()->yMax() - plotItem()->yMin())*(rect().top()-rect().bottom()) + rect().bottom(); + py = qMin(py, rect().bottom()); + py = qMax(py, rect().top()); + + _selectionRect.setTo(QPointF(rect().right(), py)); + update(); //FIXME should optimize instead of redrawing entire curve! + +} + +void PlotRenderItem::dragXZoomMouseCursor(double x) { + double px; + + px = (x-plotItem()->xMin())/(plotItem()->xMax() - plotItem()->xMin())*(rect().right()-rect().left()) + rect().left(); + px = qMax(px, rect().left()); + px = qMin(px, rect().right()); + + _selectionRect.setTo(QPointF(px, rect().bottom())); + update(); //FIXME should optimize instead of redrawing entire curve! +} + //FIXME: store event or pos, and re-call this when window is redrawn void PlotRenderItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { @@ -650,22 +741,44 @@ } QPointF p = event->pos(); + + double y = (p.y() - rect().bottom())/(rect().top()-rect().bottom())*(plotItem()->yMax()-plotItem()->yMin())+plotItem()->yMin(); + double x = (p.x() - rect().left())/(rect().right()-rect().left())*(plotItem()->xMax()-plotItem()->xMin())+plotItem()->xMin(); + _hoverPos = p; const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers(); if (modifiers & Qt::SHIFT || zoomOnlyMode() == View::ZoomOnlyY) { _lastPos = p; view()->setCursor(Qt::SizeVerCursor); - _selectionRect.setFrom(QPointF(rect().left(), p.y())); - _selectionRect.setTo(QPointF(rect().right(), p.y())); - update(); //FIXME should optimize instead of redrawing entire curve! + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->hoverYZoomMouseCursor(y); + } + } else { + hoverYZoomMouseCursor(y); + } } else if (modifiers & Qt::CTRL || zoomOnlyMode() == View::ZoomOnlyX) { _lastPos = p; view()->setCursor(Qt::SizeHorCursor); - _selectionRect.setFrom(QPointF(p.x(), rect().top())); - _selectionRect.setTo(QPointF(p.x(), rect().bottom())); - update(); //FIXME should optimize instead of redrawing entire curve! + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->hoverXZoomMouseCursor(x); + } } else { + hoverXZoomMouseCursor(x); + } + } else { + if (plotItem()->isTiedZoom()) { + QList plots = PlotItemManager::self()->tiedZoomPlotsForView(view()); + foreach (PlotItem *plot, plots) { + plot->renderItem()->resetSelectionRect(); + } + } else { resetSelectionRect(); + } + updateCursor(p); } --- branches/work/kst/portto4/kst/src/libkstapp/plotrenderitem.h #1356324:1356325 @@ -71,6 +71,11 @@ virtual bool tryShortcut(const QString &keySequence); + void hoverYZoomMouseCursor(double y); + void hoverXZoomMouseCursor(double x); + + void dragYZoomMouseCursor(double y); + void dragXZoomMouseCursor(double x); public Q_SLOTS: virtual void edit(); virtual void raise();