diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp')
-rw-r--r-- | src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp | 47 |
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); |