QmlDesigner: Shorten life time of AnimationCurveDialog

The AnimationCurveDialog is now always deleted when closed.
This ensures that Qt Creator is shut down properly.

Task-number: QDS-1525
Change-Id: I8630648e1d558bb9ed9823756c99fbbf38f8e353
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2020-02-03 16:17:19 +01:00
committed by Tim Jenssen
parent c7d8b9b01c
commit c0637b8283
2 changed files with 26 additions and 10 deletions

View File

@@ -104,10 +104,8 @@ QAction *createAction(const Core::Id &id,
TimelineToolBar::TimelineToolBar(QWidget *parent) TimelineToolBar::TimelineToolBar(QWidget *parent)
: QToolBar(parent) : QToolBar(parent)
, m_grp() , m_grp()
, m_dialog(Core::ICore::dialogParent())
, m_curveModel(new AnimationCurveEditorModel(0., 500.)) , m_curveModel(new AnimationCurveEditorModel(0., 500.))
{ {
m_dialog.setModel(m_curveModel);
connect(m_curveModel, connect(m_curveModel,
&AnimationCurveEditorModel::currentFrameChanged, &AnimationCurveEditorModel::currentFrameChanged,
this, this,
@@ -128,7 +126,8 @@ void TimelineToolBar::reset()
if (recording()) if (recording())
m_recording->setChecked(false); m_recording->setChecked(false);
m_curveModel->reset({}); if (m_animatioCurveDialog)
m_curveModel->reset({});
} }
bool TimelineToolBar::recording() const bool TimelineToolBar::recording() const
@@ -173,7 +172,8 @@ void TimelineToolBar::setCurrentTimeline(const QmlTimeline &timeline)
setStartFrame(timeline.startKeyframe()); setStartFrame(timeline.startKeyframe());
setEndFrame(timeline.endKeyframe()); setEndFrame(timeline.endKeyframe());
m_timelineLabel->setText(timeline.modelNode().id()); m_timelineLabel->setText(timeline.modelNode().id());
m_curveModel->setTimeline(timeline); if (m_animatioCurveDialog)
m_curveModel->setTimeline(timeline);
} else { } else {
m_timelineLabel->setText(""); m_timelineLabel->setText("");
} }
@@ -181,7 +181,8 @@ void TimelineToolBar::setCurrentTimeline(const QmlTimeline &timeline)
void TimelineToolBar::setStartFrame(qreal frame) void TimelineToolBar::setStartFrame(qreal frame)
{ {
m_curveModel->setMinimumTime(frame); if (m_animatioCurveDialog)
m_curveModel->setMinimumTime(frame);
auto text = QString::number(frame, 'f', 0); auto text = QString::number(frame, 'f', 0);
m_firstFrame->setText(text); m_firstFrame->setText(text);
@@ -190,7 +191,8 @@ void TimelineToolBar::setStartFrame(qreal frame)
void TimelineToolBar::setCurrentFrame(qreal frame) void TimelineToolBar::setCurrentFrame(qreal frame)
{ {
m_curveModel->setCurrentFrame(std::round(frame)); if (m_animatioCurveDialog)
m_curveModel->setCurrentFrame(std::round(frame));
auto text = QString::number(frame, 'f', 0); auto text = QString::number(frame, 'f', 0);
m_currentFrame->setText(text); m_currentFrame->setText(text);
@@ -198,7 +200,8 @@ void TimelineToolBar::setCurrentFrame(qreal frame)
void TimelineToolBar::setEndFrame(qreal frame) void TimelineToolBar::setEndFrame(qreal frame)
{ {
m_curveModel->setMaximumTime(frame); if (m_animatioCurveDialog)
m_curveModel->setMaximumTime(frame);
auto text = QString::number(frame, 'f', 0); auto text = QString::number(frame, 'f', 0);
m_lastFrame->setText(text); m_lastFrame->setText(text);
@@ -232,9 +235,10 @@ void TimelineToolBar::openAnimationCurveEditor()
timeline = tlv->timelineForState(tlv->currentState()); timeline = tlv->timelineForState(tlv->currentState());
} }
m_dialog.refresh(); ensureAnimationCurveDialog();
m_animatioCurveDialog->refresh();
m_curveModel->setTimeline(timeline); m_curveModel->setTimeline(timeline);
m_dialog.show(); m_animatioCurveDialog->show();
} }
void TimelineToolBar::updateCurve(DesignTools::PropertyTreeItem *item) void TimelineToolBar::updateCurve(DesignTools::PropertyTreeItem *item)
@@ -501,6 +505,15 @@ void TimelineToolBar::setupCurrentFrameValidator()
m_lastFrame->text().toInt()); m_lastFrame->text().toInt());
} }
void TimelineToolBar::ensureAnimationCurveDialog()
{
if (!m_animatioCurveDialog) {
m_animatioCurveDialog = new AnimationCurveDialog(Core::ICore::dialogParent());
m_animatioCurveDialog->setAttribute(Qt::WA_DeleteOnClose);
m_animatioCurveDialog->setModel(m_curveModel);
}
}
void TimelineToolBar::resizeEvent(QResizeEvent *event) void TimelineToolBar::resizeEvent(QResizeEvent *event)
{ {
Q_UNUSED(event) Q_UNUSED(event)

View File

@@ -30,6 +30,8 @@
#include <QToolBar> #include <QToolBar>
#include <QPointer>
QT_FORWARD_DECLARE_CLASS(QLabel) QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QLineEdit) QT_FORWARD_DECLARE_CLASS(QLineEdit)
QT_FORWARD_DECLARE_CLASS(QObject) QT_FORWARD_DECLARE_CLASS(QObject)
@@ -102,10 +104,11 @@ private:
void createRightControls(); void createRightControls();
void addSpacing(int width); void addSpacing(int width);
void setupCurrentFrameValidator(); void setupCurrentFrameValidator();
void ensureAnimationCurveDialog();
QList<QObject *> m_grp; QList<QObject *> m_grp;
AnimationCurveDialog m_dialog; QPointer<AnimationCurveDialog> m_animatioCurveDialog;
AnimationCurveEditorModel *m_curveModel = nullptr; AnimationCurveEditorModel *m_curveModel = nullptr;