forked from qt-creator/qt-creator
Disable "insert keyframe" context menu when applicable
Fixes: QDS-2727 Change-Id: I0072e77e56f6bbb893e382fbeb39861d2d5e6a61 Reviewed-by: Henning Gründl <henning.gruendl@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -173,6 +173,11 @@ bool CurveItem::hasSelectedKeyframe() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CurveItem::hasEditableSegment(double time) const
|
||||
{
|
||||
return curve().segment(time).interpolation() != Keyframe::Interpolation::Easing;
|
||||
}
|
||||
|
||||
unsigned int CurveItem::id() const
|
||||
{
|
||||
return m_id;
|
||||
|
||||
@@ -79,6 +79,8 @@ public:
|
||||
|
||||
bool hasSelectedKeyframe() const;
|
||||
|
||||
bool hasEditableSegment(double time) const;
|
||||
|
||||
unsigned int id() const;
|
||||
|
||||
ValueType valueType() const;
|
||||
|
||||
@@ -85,6 +85,15 @@ bool GraphicsScene::hasSelectedKeyframe() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GraphicsScene::hasEditableSegment(double time) const
|
||||
{
|
||||
for (auto *curve : m_curves) {
|
||||
if (curve->hasEditableSegment(time))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
double GraphicsScene::minimumTime() const
|
||||
{
|
||||
return limits().left();
|
||||
|
||||
@@ -57,6 +57,8 @@ public:
|
||||
|
||||
bool hasSelectedKeyframe() const;
|
||||
|
||||
bool hasEditableSegment(double time) const;
|
||||
|
||||
double minimumTime() const;
|
||||
|
||||
double maximumTime() const;
|
||||
|
||||
@@ -350,13 +350,16 @@ void GraphicsView::contextMenuEvent(QContextMenuEvent *event)
|
||||
connect(openEditorAction, &QAction::triggered, openStyleEditor);
|
||||
}
|
||||
|
||||
QPointF rasterPos = globalToRaster(event->globalPos());
|
||||
|
||||
menu.addSeparator();
|
||||
auto insertKeyframes = [this, event]() {
|
||||
m_scene->insertKeyframe(globalToRaster(event->globalPos()).x(), true);
|
||||
};
|
||||
auto insertKeyframes = [this, rasterPos]() { m_scene->insertKeyframe(rasterPos.x(), true); };
|
||||
QAction *insertKeyframeAction = menu.addAction(tr("Insert Keyframe"));
|
||||
connect(insertKeyframeAction, &QAction::triggered, insertKeyframes);
|
||||
|
||||
if (!m_scene->hasEditableSegment(rasterPos.x()))
|
||||
insertKeyframeAction->setEnabled(false);
|
||||
|
||||
auto deleteKeyframes = [this] { m_scene->deleteSelectedKeyframes(); };
|
||||
QAction *deleteKeyframeAction = menu.addAction(tr("Delete Selected Keyframes"));
|
||||
connect(deleteKeyframeAction, &QAction::triggered, deleteKeyframes);
|
||||
|
||||
Reference in New Issue
Block a user