aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
index 51e4b35c88..b51d916fb0 100644
--- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
@@ -231,6 +231,16 @@ void GraphicsView::scrollContent(double x, double y)
void GraphicsView::reset(const std::vector<CurveItem *> &items)
{
+ m_scene.clear();
+ for (auto *item : items)
+ m_scene.addCurveItem(item);
+
+ applyZoom(m_zoomX, m_zoomY);
+ viewport()->update();
+}
+
+void GraphicsView::updateSelection(const std::vector<CurveItem *> &items)
+{
const std::vector<CurveItem *> pinnedItems = m_scene.takePinnedItems();
auto notPinned = [pinnedItems](CurveItem *item) {
for (auto *pinned : pinnedItems) {
@@ -541,6 +551,38 @@ void GraphicsView::drawExtremaY(QPainter *painter, const QRectF &rect)
}
#endif
+void GraphicsView::drawRangeBar(QPainter *painter, const QRectF &rect)
+{
+ QFontMetrics fm(painter->font());
+ QRectF labelRect = fm.boundingRect(QString("0"));
+ labelRect.moveCenter(rect.center());
+
+ qreal bTick = rect.bottom() - 2;
+ qreal tTick = labelRect.bottom() + 2;
+ QRectF activeRect = QRectF(QPointF(mapTimeToX(m_model->minimumTime()), tTick),
+ QPointF(mapTimeToX(m_model->maximumTime()), bTick));
+
+ QColor color = Qt::white;
+ color.setAlpha(30);
+
+ painter->fillRect(activeRect, color);
+
+ QColor handleColor(Qt::green);
+ painter->setBrush(handleColor);
+ painter->setPen(handleColor);
+
+ const qreal radius = 5.;
+ QRectF minHandle = rangeMinHandle(rect);
+ painter->drawRoundedRect(minHandle, radius, radius);
+ minHandle.setLeft(minHandle.center().x());
+ painter->fillRect(minHandle, Qt::green);
+
+ QRectF maxHandle = rangeMaxHandle(rect);
+ painter->drawRoundedRect(maxHandle, radius, radius);
+ maxHandle.setRight(maxHandle.center().x());
+ painter->fillRect(maxHandle, Qt::green);
+}
+
void GraphicsView::drawTimeScale(QPainter *painter, const QRectF &rect)
{
painter->save();
@@ -565,6 +607,8 @@ void GraphicsView::drawTimeScale(QPainter *painter, const QRectF &rect)
for (double i = minimumTime(); i <= maximumTime(); i += timeIncrement)
paintLabeledTick(i);
+ drawRangeBar(painter, rect);
+
painter->restore();
}
@@ -619,4 +663,28 @@ double GraphicsView::timeLabelInterval(QPainter *painter, double maxTime)
return deltaTime;
}
+QRectF GraphicsView::rangeMinHandle(const QRectF &rect)
+{
+ QRectF labelRect = fontMetrics().boundingRect(QString("0"));
+ labelRect.moveCenter(rect.center());
+
+ qreal top = rect.bottom() - 2;
+ qreal bottom = labelRect.bottom() + 2;
+ QSize size(10, top - bottom);
+
+ int leftHandleLeft = mapTimeToX(m_model->minimumTime()) - size.width();
+ return QRectF(QPointF(leftHandleLeft, bottom), size);
+}
+
+QRectF GraphicsView::rangeMaxHandle(const QRectF &rect)
+{
+ QRectF labelRect = fontMetrics().boundingRect(QString("0"));
+ labelRect.moveCenter(rect.center());
+
+ qreal bottom = rect.bottom() - 2;
+ qreal top = labelRect.bottom() + 2;
+
+ return QRectF(QPointF(mapTimeToX(m_model->maximumTime()), bottom), QSize(10, top - bottom));
+}
+
} // End namespace DesignTools.