aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp')
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp
index c6eb2f6327..f5b2ffae1b 100644
--- a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp
+++ b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp
@@ -48,15 +48,18 @@ CurveEditor::CurveEditor(CurveEditorModel *model, QWidget *parent)
splitter->setStretchFactor(1, 2);
auto *box = new QVBoxLayout;
- box->addWidget(createToolBar());
+ box->addWidget(createToolBar(model));
box->addWidget(splitter);
setLayout(box);
- connect(m_tree, &TreeView::treeItemLocked, m_view, &GraphicsView::setLocked);
- connect(m_tree->selectionModel(), &SelectionModel::curvesSelected, m_view, &GraphicsView::reset);
-
connect(m_tree, &TreeView::treeItemLocked, model, &CurveEditorModel::curveChanged);
connect(m_tree, &TreeView::treeItemPinned, model, &CurveEditorModel::curveChanged);
+
+ connect(m_tree, &TreeView::treeItemLocked, m_view, &GraphicsView::setLocked);
+ connect(m_tree->selectionModel(),
+ &SelectionModel::curvesSelected,
+ m_view,
+ &GraphicsView::updateSelection);
}
void CurveEditor::zoomX(double zoom)
@@ -74,7 +77,7 @@ void CurveEditor::clearCanvas()
m_view->reset({});
}
-QToolBar *CurveEditor::createToolBar()
+QToolBar *CurveEditor::createToolBar(CurveEditorModel *model)
{
auto *bar = new QToolBar;
bar->setFloatable(false);
@@ -111,8 +114,38 @@ QToolBar *CurveEditor::createToolBar()
bar->addWidget(valueWidget);
auto *durationBox = new QHBoxLayout;
- durationBox->addWidget(new QLabel(tr("Duration")));
- durationBox->addWidget(new QSpinBox);
+ auto *startSpin = new QSpinBox;
+ auto *endSpin = new QSpinBox;
+
+ startSpin->setRange(std::numeric_limits<int>::lowest(), std::numeric_limits<int>::max());
+ startSpin->setValue(model->minimumTime());
+
+ auto updateStartFrame = [this, model](int frame) {
+ model->setMinimumTime(frame, false);
+ m_view->viewport()->update();
+ };
+ connect(startSpin, QOverload<int>::of(&QSpinBox::valueChanged), updateStartFrame);
+
+ endSpin->setRange(std::numeric_limits<int>::lowest(), std::numeric_limits<int>::max());
+ endSpin->setValue(model->maximumTime());
+
+ auto updateEndFrame = [this, model](int frame) {
+ model->setMaximumTime(frame, false);
+ m_view->viewport()->update();
+ };
+ connect(endSpin, QOverload<int>::of(&QSpinBox::valueChanged), updateEndFrame);
+
+ auto setStartSlot = [startSpin](int frame) { startSpin->setValue(frame); };
+ connect(model, &CurveEditorModel::updateStartFrame, setStartSlot);
+
+ auto setEndSlot = [endSpin](int frame) { endSpin->setValue(frame); };
+ connect(model, &CurveEditorModel::updateEndFrame, setEndSlot);
+
+ durationBox->addWidget(new QLabel(tr("Start Frame")));
+ durationBox->addWidget(startSpin);
+ durationBox->addWidget(new QLabel(tr("End Frame")));
+ durationBox->addWidget(endSpin);
+
auto *durationWidget = new QWidget;
durationWidget->setLayout(durationBox);
bar->addWidget(durationWidget);